From d217514055610e7bfdffd37f8dacf365b43ccb72 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 17 Nov 2023 15:07:38 +0100 Subject: [PATCH 001/242] Start adding the Release action Jenkins stuff to GHA --- .github/workflows/openms_ci_matrix_full.yml | 32 ++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 8fc9d9104db..c16d57f3b70 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -67,7 +67,7 @@ jobs: shell: bash run: echo "RUN_NAME=${{ github.event.pull_request && github.event.number || github.ref_name }}" >> $GITHUB_OUTPUT id: extract_branch - + - id: set-vars name: Set extra variables run: | @@ -271,6 +271,36 @@ jobs: fi done + # Create the changelog for the release from our overall changelog + - if: matrix.compiler != 'clang++' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') + shell: bash + name: Create changelog for release on Ubuntu + GCC + id: create_changelog + run: | + if [[ $branch_name =~ ^release([0-9]+\.[0-9]+\.[0-9]+)$ ]]; then + VERSION_NUMBER=${BASH_REMATCH[1]} + echo "Version number: $version_number" + grep -ne "----[[:space:]]*OpenMS" ${{ github.workspace }}/OpenMS/CHANGELOG > index_changelog.txt + START=$(cat index_changelog.txt | grep -A 1 -e " $VERSION " | cut -f1 -d: | head -1) + END=$(cat index_changelog.txt | grep -A 1 -e " $VERSION " | cut -f1 -d: | tail -1) + echo "Extracting between lines:" + echo $START + echo $END + awk "NR > $START && NR < $END" OpenMS/CHANGELOG > ${{ github.workspace }}/changelog_$VERSION.txt + else + echo "Branch name does not match the expected pattern." + exit 1 + fi + + # Upload the changelog to the same artifact that we will add the installers to. + - if: steps.set-vars.outputs.pkg_type != 'none' && matrix.compiler != 'clang++' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') + name: Upload changelog as artifact + uses: actions/upload-artifact@v3 + with: + name: installer-${{ steps.set-vars.outputs.tp_folder }} + path: | + ${{ github.workspace }}/OpenMS/changelog_*.txt + - name: Build shell: bash run: | From 19dbd1aa0f7fcb2f341b8611adf6bc3184339d63 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 17 Nov 2023 15:14:31 +0100 Subject: [PATCH 002/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index c16d57f3b70..e2b74b4c357 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -277,7 +277,7 @@ jobs: name: Create changelog for release on Ubuntu + GCC id: create_changelog run: | - if [[ $branch_name =~ ^release([0-9]+\.[0-9]+\.[0-9]+)$ ]]; then + if [[ $branch_name =~ ^release([0-9]+\.[0-9]+\.[0-9]+) ]]; then #TODO readd trailing $ for regex to ONLY match actual releases. VERSION_NUMBER=${BASH_REMATCH[1]} echo "Version number: $version_number" grep -ne "----[[:space:]]*OpenMS" ${{ github.workspace }}/OpenMS/CHANGELOG > index_changelog.txt From 949f4310d0eeafd6d2cb2e22f0f4f8d1781cb70c Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 17 Nov 2023 15:21:12 +0100 Subject: [PATCH 003/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index e2b74b4c357..58ffd59c13e 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -272,12 +272,12 @@ jobs: done # Create the changelog for the release from our overall changelog - - if: matrix.compiler != 'clang++' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') + - if: matrix.compiler != 'clang++' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') && startsWith(matrix.os, 'ubuntu') shell: bash name: Create changelog for release on Ubuntu + GCC id: create_changelog run: | - if [[ $branch_name =~ ^release([0-9]+\.[0-9]+\.[0-9]+) ]]; then #TODO readd trailing $ for regex to ONLY match actual releases. + if [[ ${{ steps.extract_branch.outputs.RUN_NAME }} =~ ^release([0-9]+\.[0-9]+\.[0-9]+) ]]; then #TODO readd trailing $ for regex to ONLY match actual releases. VERSION_NUMBER=${BASH_REMATCH[1]} echo "Version number: $version_number" grep -ne "----[[:space:]]*OpenMS" ${{ github.workspace }}/OpenMS/CHANGELOG > index_changelog.txt @@ -293,7 +293,7 @@ jobs: fi # Upload the changelog to the same artifact that we will add the installers to. - - if: steps.set-vars.outputs.pkg_type != 'none' && matrix.compiler != 'clang++' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') + - if: steps.set-vars.outputs.pkg_type != 'none' && matrix.compiler != 'clang++' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') && startsWith(matrix.os, 'ubuntu') name: Upload changelog as artifact uses: actions/upload-artifact@v3 with: From c64687447b642a26fcb475c9e22b5a02ceb312dc Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 17 Nov 2023 15:29:49 +0100 Subject: [PATCH 004/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 58ffd59c13e..a16cb79bf89 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -277,7 +277,7 @@ jobs: name: Create changelog for release on Ubuntu + GCC id: create_changelog run: | - if [[ ${{ steps.extract_branch.outputs.RUN_NAME }} =~ ^release([0-9]+\.[0-9]+\.[0-9]+) ]]; then #TODO readd trailing $ for regex to ONLY match actual releases. + if [[ ${{ steps.extract_branch.outputs.RUN_NAME }} == ^release([0-9]+\.[0-9]+\.[0-9]+) ]]; then #TODO readd trailing $ for regex to ONLY match actual releases. VERSION_NUMBER=${BASH_REMATCH[1]} echo "Version number: $version_number" grep -ne "----[[:space:]]*OpenMS" ${{ github.workspace }}/OpenMS/CHANGELOG > index_changelog.txt From f70f76405e4cc6c1cf59bb621c794a548b19c81e Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 17 Nov 2023 15:36:40 +0100 Subject: [PATCH 005/242] Update openms_ci_matrix_full.yml Regex bs --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index a16cb79bf89..921dcc31236 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -277,7 +277,7 @@ jobs: name: Create changelog for release on Ubuntu + GCC id: create_changelog run: | - if [[ ${{ steps.extract_branch.outputs.RUN_NAME }} == ^release([0-9]+\.[0-9]+\.[0-9]+) ]]; then #TODO readd trailing $ for regex to ONLY match actual releases. + if [[ ${{ steps.extract_branch.outputs.RUN_NAME }} =~ ^release\/([0-9]+\.[0-9]+\.[0-9]+) ]]; then #TODO readd trailing $ for regex to ONLY match actual releases. VERSION_NUMBER=${BASH_REMATCH[1]} echo "Version number: $version_number" grep -ne "----[[:space:]]*OpenMS" ${{ github.workspace }}/OpenMS/CHANGELOG > index_changelog.txt From b669c61f849aa1e0f5b8aa70a46813154820c3c7 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 17 Nov 2023 15:43:41 +0100 Subject: [PATCH 006/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 921dcc31236..200b3f78128 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -279,10 +279,10 @@ jobs: run: | if [[ ${{ steps.extract_branch.outputs.RUN_NAME }} =~ ^release\/([0-9]+\.[0-9]+\.[0-9]+) ]]; then #TODO readd trailing $ for regex to ONLY match actual releases. VERSION_NUMBER=${BASH_REMATCH[1]} - echo "Version number: $version_number" + echo "Version number: $VERSION_NUMBER" grep -ne "----[[:space:]]*OpenMS" ${{ github.workspace }}/OpenMS/CHANGELOG > index_changelog.txt - START=$(cat index_changelog.txt | grep -A 1 -e " $VERSION " | cut -f1 -d: | head -1) - END=$(cat index_changelog.txt | grep -A 1 -e " $VERSION " | cut -f1 -d: | tail -1) + START=$(cat index_changelog.txt | grep -A 1 -e " $VERSION_NUMBER " | cut -f1 -d: | head -1) + END=$(cat index_changelog.txt | grep -A 1 -e " $VERSION_NUMBER " | cut -f1 -d: | tail -1) echo "Extracting between lines:" echo $START echo $END From ea566da04272777d98975300b8e83b917007a063 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 17 Nov 2023 15:48:20 +0100 Subject: [PATCH 007/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 200b3f78128..c5844746c36 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -280,6 +280,7 @@ jobs: if [[ ${{ steps.extract_branch.outputs.RUN_NAME }} =~ ^release\/([0-9]+\.[0-9]+\.[0-9]+) ]]; then #TODO readd trailing $ for regex to ONLY match actual releases. VERSION_NUMBER=${BASH_REMATCH[1]} echo "Version number: $VERSION_NUMBER" + VERSION_NUMBER="3.0.0" #FIXME remove this override, we apparently didn't actually put anything in the changelog for 2.9.1... grep -ne "----[[:space:]]*OpenMS" ${{ github.workspace }}/OpenMS/CHANGELOG > index_changelog.txt START=$(cat index_changelog.txt | grep -A 1 -e " $VERSION_NUMBER " | cut -f1 -d: | head -1) END=$(cat index_changelog.txt | grep -A 1 -e " $VERSION_NUMBER " | cut -f1 -d: | tail -1) From ea2520ade9ca4e3ef49521dfe51e534b4c6df0e1 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 17 Nov 2023 15:56:04 +0100 Subject: [PATCH 008/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index c5844746c36..29aaaa503de 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -16,6 +16,18 @@ on: type: boolean description: Build and upload KNIME plugins and update site? default: false + do_release: + type: boolean + description: Make tags and create a github release? + default: false + mark_as_latest: + type: boolean + description: Update latest to point to this release + default: false + announce_release: + type: boolean + description: Update website and create announcement material for release + default: false push: branches: - nightly @@ -281,6 +293,10 @@ jobs: VERSION_NUMBER=${BASH_REMATCH[1]} echo "Version number: $VERSION_NUMBER" VERSION_NUMBER="3.0.0" #FIXME remove this override, we apparently didn't actually put anything in the changelog for 2.9.1... + if [ "${VERSION##*.}" -eq "0" ] # Handle trailing 0 in major releases (eg 3.0.0) + then + VERSION=${VERSION%.*} + fi grep -ne "----[[:space:]]*OpenMS" ${{ github.workspace }}/OpenMS/CHANGELOG > index_changelog.txt START=$(cat index_changelog.txt | grep -A 1 -e " $VERSION_NUMBER " | cut -f1 -d: | head -1) END=$(cat index_changelog.txt | grep -A 1 -e " $VERSION_NUMBER " | cut -f1 -d: | tail -1) From c561bc7aa5b923ffeae0fe74023cf2b076410d91 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 17 Nov 2023 16:02:51 +0100 Subject: [PATCH 009/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 29aaaa503de..0335c41959f 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -293,9 +293,9 @@ jobs: VERSION_NUMBER=${BASH_REMATCH[1]} echo "Version number: $VERSION_NUMBER" VERSION_NUMBER="3.0.0" #FIXME remove this override, we apparently didn't actually put anything in the changelog for 2.9.1... - if [ "${VERSION##*.}" -eq "0" ] # Handle trailing 0 in major releases (eg 3.0.0) + if [ "${VERSION_NUMBER##*.}" -eq "0" ] # Handle trailing 0 in major releases (eg 3.0.0) then - VERSION=${VERSION%.*} + VERSION_NUMBER=${VERSION_NUMBER%.*} fi grep -ne "----[[:space:]]*OpenMS" ${{ github.workspace }}/OpenMS/CHANGELOG > index_changelog.txt START=$(cat index_changelog.txt | grep -A 1 -e " $VERSION_NUMBER " | cut -f1 -d: | head -1) From 76271f3f44a0c3ec53196d7305f6572ed1e5a53c Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 17 Nov 2023 16:21:42 +0100 Subject: [PATCH 010/242] Update openms_ci_matrix_full.yml Add breadcrumbs to end of file for planned work --- .github/workflows/openms_ci_matrix_full.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 0335c41959f..cd5ebcec61a 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -718,3 +718,16 @@ jobs: echo "$PASS" > ~/.ssh/private.key sudo chmod 600 ~/.ssh/private.key rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" + +#TODO +#if do release: +#create tags from SHAs +#create RELEASE_TEXT +#run GHA release action. +# +#If mark as latest: +#update links to latest (documentation, installers) +#merge branch back into develop +# +#If do_announce: +#create text for website and update it. From 2cbd3257d234c49dcec8e96f6ed411adabbfdf59 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Tue, 21 Nov 2023 18:07:58 +0100 Subject: [PATCH 011/242] Added logic to update SHAs --- .github/workflows/openms_ci_matrix_full.yml | 139 ++++++++++++++++++-- 1 file changed, 127 insertions(+), 12 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index cfd9652eca3..c2a39961c1e 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -312,6 +312,7 @@ jobs: echo "Branch name does not match the expected pattern." exit 1 fi + echo "version_number=$VERSION_NUMBER" >> $GITHUB_OUTPUT # Upload the changelog to the same artifact that we will add the installers to. - if: steps.set-vars.outputs.pkg_type != 'none' && matrix.compiler != 'clang++' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') && startsWith(matrix.os, 'ubuntu') @@ -722,16 +723,130 @@ jobs: echo "$PASS" > ~/.ssh/private.key sudo chmod 600 ~/.ssh/private.key rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" + + + do-release: + if: inputs.do_release + runs-on: ubuntu-latest + needs: [build-deploy-knime-updatesite,deploy-installer] + steps: + # NB we create the tag for the OpenMS repo next in a separate action. + # TODO handle updating if the ref already exists. + - name: create tags from SHAs + uses: actions/github-script@v7 + id: create_SHA + with: + script: | + latest_ref = octokit.rest.git.getRef({ + owner: context.repo.owner, + repot: 'OpenMS-docs', + ref: 'heads/develop', + }); + octokit.rest.git.createRef({ + owner: context.repo.owner, + repo: 'OpenMS-docs', + ref: steps.create_changelog.outputs.version_number, + sha: latest_ref, + }); + + latest_ref = octokit.rest.git.getRef({ + owner: context.repo.owner, + repot: 'Tutorials', + ref: 'heads/master', + }); + octokit.rest.git.createRef({ + owner: context.repo.owner, + repo: 'Tutorials', + ref: steps.create_changelog.outputs.version_number, + sha: latest_ref, + }); + + latest_ref = octokit.rest.git.getRef({ + owner: context.repo.owner, + repot: 'pyopenms-docs', + ref: 'github.sha', + }); + octokit.rest.git.createRef({ + owner: context.repo.owner, + repo: 'pyopenms-docs', + ref: steps.create_changelog.outputs.version_number, + sha: latest_ref, + }); + + latest_ref = octokit.rest.git.getRef({ + owner: context.repo.owner, + repot: 'THIRDPARTY', + ref: 'github.sha', + }); + octokit.rest.git.createRef({ + owner: context.repo.owner, + repo: 'THIRDPARTY', + ref: steps.create_changelog.outputs.version_number, + sha: latest_ref, + }); + + latest_ref = octokit.rest.git.getRef({ + owner: 'genericworkflownodes', + repo: 'GenericKnimeNodes', + ref: 'heads/develop', + }); + octokit.rest.git.createRef({ + owner: 'genericworkflownodes', + repo: 'GenericKnimeNodes', + ref: steps.create_changelog.outputs.version_number, + sha: latest_ref, + }); + + latest_ref = octokit.rest.git.getRef({ + owner: 'genericworkflownodes', + repo: 'de.openms.knime.dynamicJSViewers', + ref: 'heads/master', + }); + octokit.rest.git.createRef({ + owner: 'genericworkflownodes', + repo: 'de.openms.knime.dynamicJSViewers', + ref: steps.create_changelog.outputs.version_number, + sha: latest_ref, + }); + + latest_ref = octokit.rest.git.getRef({ + owner: 'genericworkflownodes', + repo: 'buildresources', + ref: 'heads/master', + }); + octokit.rest.git.createRef({ + owner: 'genericworkflownodes', + repo: 'buildresources', + ref: steps.create_changelog.outputs.version_number, + sha: latest_ref, + }); + + latest_ref = octokit.rest.git.getRef({ + owner: context.repo.owner, + repot: 'de.openms.knime', + ref: 'heads/develop', + }); + octokit.rest.git.createRef({ + owner: context.repo.owner, + repo: 'de.openms.knime', + ref: steps.create_changelog.outputs.version_number, + sha: latest_ref, + }); + - name: create RELEASE_TEXT + run: #FIXME + + - name: run GHA release action. + run: #FIXME + + - if: inputs.mark_as_latest + name: update links to latest (documentation, installers) + run: #FIXME + + - if: inputs.mark_as_latest + name: merge branch back into develop + run: #FIXME + + - if: inputs.do_announce + name: create text for website and update it. + run: #FIXME -#TODO -#if do release: -#create tags from SHAs -#create RELEASE_TEXT -#run GHA release action. -# -#If mark as latest: -#update links to latest (documentation, installers) -#merge branch back into develop -# -#If do_announce: -#create text for website and update it. From 4288921f4e8cc7a65b881da68a4e800197ad5971 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 22 Nov 2023 11:54:17 +0100 Subject: [PATCH 012/242] Further work on release --- .github/workflows/openms_ci_matrix_full.yml | 183 +++++++++++++------- 1 file changed, 117 insertions(+), 66 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index c2a39961c1e..a62413bcf07 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -75,10 +75,10 @@ jobs: with: path: OpenMS - - name: Extract branch/PR infos + - id: extract_branch + name: Extract branch/PR infos shell: bash run: echo "RUN_NAME=${{ github.event.pull_request && github.event.number || github.ref_name }}" >> $GITHUB_OUTPUT - id: extract_branch - id: set-vars name: Set extra variables @@ -143,15 +143,15 @@ jobs: fi shell: bash - - if: startsWith(matrix.os, 'windows') - name: Emulate a Visual Studio shell (Windows) + - name: Emulate a Visual Studio shell (Windows) + if: startsWith(matrix.os, 'windows') uses: egor-tensin/vs-shell@v2 with: # NOTE: x64 is hardcoded. No support for 32bit arch: x64 - - if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'windows') - name: Install Qt (Windows and macOS) + - name: Install Qt (Windows and macOS) + if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'windows') uses: jurplel/install-qt-action@v3 with: version: '5.15.2' # 5.12.7 is broken https://bugreports.qt.io/browse/QTBUG-81715, > 5.15.2 is not available on official archives (https://github.com/miurahr/aqtinstall/issues/636) @@ -159,8 +159,8 @@ jobs: aqtversion: '==3.1.*' archives: 'qtsvg qtimageformats qtbase' - - name: Setup build tools (and system contrib on Linux) - id: tools-prefix + - id: tools-prefix + name: Setup build tools (and system contrib on Linux) shell: bash run: | if [[ "${{ matrix.os }}" == ubuntu-* ]]; then @@ -208,18 +208,16 @@ jobs: fi fi - - - - if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'windows') + - id: cache-contrib + if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'windows') name: Cache contrib (Windows and macOS) - id: cache-contrib uses: actions/cache@v3 with: path: ${{ github.workspace }}/OpenMS/contrib key: ${{ runner.os }}-contrib3 - - if: (startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'windows')) && steps.cache-contrib.outputs.cache-hit != 'true' - name: Download contrib build from archive (Windows and macOS) + - name: Download contrib build from archive (Windows and macOS) + if: (startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'windows')) && steps.cache-contrib.outputs.cache-hit != 'true' shell: bash run: | cd OpenMS/contrib @@ -228,8 +226,8 @@ jobs: rm contribbld.tar.gz ls -la - - if: startsWith(matrix.os, 'macos') - name: Fix contrib install names (macOS) + - name: Fix contrib install names (macOS) + if: startsWith(matrix.os, 'macos') shell: bash run: | shopt -s nullglob # ensure that for loop is only executed if there is at least one .dylib file @@ -288,12 +286,12 @@ jobs: done # Create the changelog for the release from our overall changelog - - if: matrix.compiler != 'clang++' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') && startsWith(matrix.os, 'ubuntu') + - id: create_changelog + if: matrix.compiler != 'clang++' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') && startsWith(matrix.os, 'ubuntu') shell: bash name: Create changelog for release on Ubuntu + GCC - id: create_changelog run: | - if [[ ${{ steps.extract_branch.outputs.RUN_NAME }} =~ ^release\/([0-9]+\.[0-9]+\.[0-9]+) ]]; then #TODO readd trailing $ for regex to ONLY match actual releases. + if [[ ${{ steps.extract_branch.outputs.RUN_NAME }} =~ ^release\/([0-9]+\.[0-9]+\.[0-9]+) ]]; then #FIXME readd trailing $ for regex to ONLY match actual releases. VERSION_NUMBER=${BASH_REMATCH[1]} echo "Version number: $VERSION_NUMBER" VERSION_NUMBER="3.0.0" #FIXME remove this override, we apparently didn't actually put anything in the changelog for 2.9.1... @@ -307,21 +305,20 @@ jobs: echo "Extracting between lines:" echo $START echo $END - awk "NR > $START && NR < $END" OpenMS/CHANGELOG > ${{ github.workspace }}/changelog_$VERSION.txt + awk "NR > $START && NR < $END" OpenMS/CHANGELOG > ${{ github.workspace }}/changelog.txt else echo "Branch name does not match the expected pattern." exit 1 fi - echo "version_number=$VERSION_NUMBER" >> $GITHUB_OUTPUT # Upload the changelog to the same artifact that we will add the installers to. - - if: steps.set-vars.outputs.pkg_type != 'none' && matrix.compiler != 'clang++' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') && startsWith(matrix.os, 'ubuntu') - name: Upload changelog as artifact + - name: Upload changelog as artifact + if: steps.set-vars.outputs.pkg_type != 'none' && matrix.compiler != 'clang++' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') && startsWith(matrix.os, 'ubuntu') uses: actions/upload-artifact@v3 with: name: installer-${{ steps.set-vars.outputs.tp_folder }} path: | - ${{ github.workspace }}/OpenMS/changelog_*.txt + ${{ github.workspace }}/OpenMS/changelog.txt - name: Build shell: bash @@ -383,9 +380,8 @@ jobs: BUILD_NAME: "${{ steps.extract_branch.outputs.RUN_NAME }}-${{ steps.set-vars.outputs.tp_folder }}-${{ matrix.compiler }}-class-topp-${{ github.run_number }}" # The rest of the vars should be saved in the CMakeCache - - - if: steps.set-vars.outputs.pkg_type != 'none' - name: Package + - name: Package + if: steps.set-vars.outputs.pkg_type != 'none' shell: bash run: | # do not fail immediately @@ -410,8 +406,8 @@ jobs: BUILD_NAME: "${{ steps.extract_branch.outputs.RUN_NAME }}-${{ steps.set-vars.outputs.tp_folder }}-${{ matrix.compiler }}-class-topp-${{ github.run_number }}" # WARNING: Here you have to make sure that only one matrix configuration per OS produces packages. See set-vars steps. - - if: steps.set-vars.outputs.pkg_type != 'none' - name: Upload packages as artifacts + - name: Upload packages as artifacts + if: steps.set-vars.outputs.pkg_type != 'none' uses: actions/upload-artifact@v3 with: name: installer-${{ steps.set-vars.outputs.tp_folder }} @@ -421,8 +417,8 @@ jobs: ${{ github.workspace }}/OpenMS/bld/*.pkg #Zip the documentation first, since there are :: which make the upload action choke. - - if: steps.set-vars.outputs.pkg_type != 'none' && startsWith(matrix.os, 'ubuntu') - name: Zip Documentation + - name: Zip Documentation + if: steps.set-vars.outputs.pkg_type != 'none' && startsWith(matrix.os, 'ubuntu') uses: thedoctor0/zip-release@0.7.6 with: type: 'zip' @@ -430,18 +426,17 @@ jobs: exclusions: '/CMakeFiles/* /doxygen/* /code_examples/*' filename: 'documentation.zip' - - if: steps.set-vars.outputs.pkg_type != 'none' && startsWith(matrix.os, 'ubuntu') # Only upload docs when we are building the package, use the ubuntu build simply 'cause its fast - name: Upload Documentation as artifacts + - name: Upload Documentation as artifacts + if: steps.set-vars.outputs.pkg_type != 'none' && startsWith(matrix.os, 'ubuntu') uses: actions/upload-artifact@v3 with: name: documentation path: | ${{ github.workspace }}/OpenMS/bld/doc/documentation.zip - - - - if: steps.set-vars.outputs.pkg_type != 'none' || inputs.knime - name: Generate KNIME descriptors and payloads + + - name: Generate KNIME descriptors and payloads + if: steps.set-vars.outputs.pkg_type != 'none' || inputs.knime shell: bash run: | cd $GITHUB_WORKSPACE/OpenMS/bld/ @@ -449,13 +444,14 @@ jobs: cmake -DSEARCH_ENGINES_DIRECTORY="$GITHUB_WORKSPACE/_thirdparty" -DENABLE_PREPARE_KNIME_PACKAGE=ON . cmake --build . --target prepare_knime_package - - if: steps.set-vars.outputs.pkg_type != 'none' || inputs.knime - name: Upload KNIME payload and descriptors as artifacts + - name: Upload KNIME payload and descriptors as artifacts + if: steps.set-vars.outputs.pkg_type != 'none' || inputs.knime uses: actions/upload-artifact@v3 with: name: knime-${{ steps.set-vars.outputs.tp_folder }} path: ${{ github.workspace }}/OpenMS/bld/knime/**/* + deploy-installer: if: github.ref == 'refs/heads/nightly' || contains(github.ref, 'release/') || inputs.package runs-on: ubuntu-latest @@ -472,14 +468,23 @@ jobs: uses: actions/download-artifact@v3 with: name: installer-MacOS + - name: Download win installer artifacts uses: actions/download-artifact@v3 with: name: installer-Windows + - name: Download lnx installer artifacts uses: actions/download-artifact@v3 with: name: installer-Linux + + - name: Download changelog as artifact + uses: actions/download-artifact@v3 + with: + name: changelog.txt + + - name: Upload installer shell: bash @@ -504,6 +509,53 @@ jobs: sudo chmod 600 ~/.ssh/private.key rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/* "$USER@$HOST:/OpenMSInstaller/${folder}" + - name: create RELEASE_TEXT + if: inputs.do_release + shell: bash + run: | + #TODO Handle changelog_params + ## Header + cat > releaseTextHeader.txt << EOF + Dear OpenMS-Users, + + we are proud to announce the release of OpenMS $version. Grab it + here + + In the following you find all important changes to the previous version: + + EOF + + ## Header + cat > releaseTextParamHeader.txt << EOF + + Additionally, the following changes were made to parameters of our TOPP tools: + + EOF + + ##Footer + cat > releaseTextFooter.txt << EOF + + Best regards, + The OpenMS-Developers + + EOF + RELEASE_TEXT=$(cat releaseTextHeader.txt $GITHUB_WORKSPACE/OpenMS/changelog_* releaseTextFooter.txt) + RELEASE_TEXT_ESCAPED_QUOTES="${RELEASE_TEXT//\"/\\\"}" + cat releaseTextHeader.txt $GITHUB_WORKSPACE/OpenMS/changelog_* releaseTextFooter.txt > RELEASE_TEXT_GH.md + # cat RELEASE_TEXT_GH.md | jq -R -s '.' > RELEASE_TEXT_GH.json + + - name: run GHA release action. + if: inputs.do_release + uses: softprops/action-gh-release@v1 + with: + body_path: RELEASE_TEXT_GH.md + name: ${{ steps.extract_branch.outputs.RUN_NAME }} + files: + ${{ github.workspace }}/*.exe + ${{ github.workspace }}/*.deb + ${{ github.workspace }}/*.pkg + # TODO add src + - name: Download Documentation uses: actions/download-artifact@v3 with: @@ -536,10 +588,12 @@ jobs: # Upload documentation FIXME rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/docs/ "$USER@$HOST:/Documentation/${folder}" + + # TODO create softlinks to latest nightly # TODO create and upload file hashes, at least for release candidate - + build-deploy-knime-updatesite: env: KNIME: 5.1 @@ -561,11 +615,13 @@ jobs: with: name: knime-MacOS path: ${{ env.PLUGIN_SOURCE }} + - name: Download win installer artifacts uses: actions/download-artifact@v3 with: name: knime-Windows path: ${{ env.PLUGIN_SOURCE }} + - name: Download lnx installer artifacts uses: actions/download-artifact@v3 with: @@ -732,56 +788,56 @@ jobs: steps: # NB we create the tag for the OpenMS repo next in a separate action. # TODO handle updating if the ref already exists. - - name: create tags from SHAs + - id: create_SHA + name: create tags from SHAs uses: actions/github-script@v7 - id: create_SHA with: script: | latest_ref = octokit.rest.git.getRef({ owner: context.repo.owner, - repot: 'OpenMS-docs', + repo: 'OpenMS-docs', ref: 'heads/develop', }); octokit.rest.git.createRef({ owner: context.repo.owner, repo: 'OpenMS-docs', - ref: steps.create_changelog.outputs.version_number, + ref: ${{ steps.extract_branch.outputs.RUN_NAME }}, sha: latest_ref, }); latest_ref = octokit.rest.git.getRef({ owner: context.repo.owner, - repot: 'Tutorials', + repo: 'Tutorials', ref: 'heads/master', }); octokit.rest.git.createRef({ owner: context.repo.owner, repo: 'Tutorials', - ref: steps.create_changelog.outputs.version_number, + ref: ${{ steps.extract_branch.outputs.RUN_NAME }}, sha: latest_ref, }); latest_ref = octokit.rest.git.getRef({ owner: context.repo.owner, - repot: 'pyopenms-docs', + repo: 'pyopenms-docs', ref: 'github.sha', }); octokit.rest.git.createRef({ owner: context.repo.owner, repo: 'pyopenms-docs', - ref: steps.create_changelog.outputs.version_number, + ref: ${{ steps.extract_branch.outputs.RUN_NAME }}, sha: latest_ref, }); latest_ref = octokit.rest.git.getRef({ owner: context.repo.owner, - repot: 'THIRDPARTY', + repo: 'THIRDPARTY', ref: 'github.sha', }); octokit.rest.git.createRef({ owner: context.repo.owner, repo: 'THIRDPARTY', - ref: steps.create_changelog.outputs.version_number, + ref: ${{ steps.extract_branch.outputs.RUN_NAME }}, sha: latest_ref, }); @@ -793,7 +849,7 @@ jobs: octokit.rest.git.createRef({ owner: 'genericworkflownodes', repo: 'GenericKnimeNodes', - ref: steps.create_changelog.outputs.version_number, + ref: ${{ steps.extract_branch.outputs.RUN_NAME }}, sha: latest_ref, }); @@ -805,7 +861,7 @@ jobs: octokit.rest.git.createRef({ owner: 'genericworkflownodes', repo: 'de.openms.knime.dynamicJSViewers', - ref: steps.create_changelog.outputs.version_number, + ref: ${{ steps.extract_branch.outputs.RUN_NAME }}, sha: latest_ref, }); @@ -817,36 +873,31 @@ jobs: octokit.rest.git.createRef({ owner: 'genericworkflownodes', repo: 'buildresources', - ref: steps.create_changelog.outputs.version_number, + ref: ${{ steps.extract_branch.outputs.RUN_NAME }}, sha: latest_ref, }); latest_ref = octokit.rest.git.getRef({ owner: context.repo.owner, - repot: 'de.openms.knime', + repo: 'de.openms.knime', ref: 'heads/develop', }); octokit.rest.git.createRef({ owner: context.repo.owner, repo: 'de.openms.knime', - ref: steps.create_changelog.outputs.version_number, + ref: ${{ steps.extract_branch.outputs.RUN_NAME }}, sha: latest_ref, }); - - name: create RELEASE_TEXT - run: #FIXME - - - name: run GHA release action. - run: #FIXME - - if: inputs.mark_as_latest - name: update links to latest (documentation, installers) + - name: update links to latest (documentation, installers) + if: inputs.mark_as_latest run: #FIXME - - if: inputs.mark_as_latest - name: merge branch back into develop + - name: merge branch back into develop + if: inputs.mark_as_latest run: #FIXME - - if: inputs.do_announce - name: create text for website and update it. + - name: create text for website and update it. + if: inputs.announce_release run: #FIXME From 21216eb6fbd551fe306a2cca47ffe4b9f5aaf70d Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 22 Nov 2023 11:56:51 +0100 Subject: [PATCH 013/242] comment out inprogress code --- .github/workflows/openms_ci_matrix_full.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index a62413bcf07..74611bf693b 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -889,15 +889,15 @@ jobs: sha: latest_ref, }); - - name: update links to latest (documentation, installers) - if: inputs.mark_as_latest - run: #FIXME + #- name: update links to latest (documentation, installers) + # if: inputs.mark_as_latest + # run: #FIXME - - name: merge branch back into develop - if: inputs.mark_as_latest - run: #FIXME + #- name: merge branch back into develop + # if: inputs.mark_as_latest + # run: #FIXME - - name: create text for website and update it. - if: inputs.announce_release - run: #FIXME + #- name: create text for website and update it. + # if: inputs.announce_release + # run: #FIXME From ca4ef9cd288fce8d659df73984458026add2bb81 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 22 Nov 2023 12:18:00 +0100 Subject: [PATCH 014/242] regex --- .github/workflows/openms_ci_matrix_full.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 74611bf693b..f3b4dacbd08 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -83,7 +83,7 @@ jobs: - id: set-vars name: Set extra variables run: | - DO_PACKAGE=$( [[ ( "${{ inputs.package }}" || "${{ steps.extract_branch.outputs.RUN_NAME }}" == "nightly" || "${{ steps.extract_branch.outputs.RUN_NAME }}" == "release*" ) && "${{ matrix.compiler }}" != "clang++" ]] && echo true || echo false) + DO_PACKAGE=$( [[ ( "${{ inputs.package }}" || "${{ steps.extract_branch.outputs.RUN_NAME }}" == "nightly" || "${{ steps.extract_branch.outputs.RUN_NAME }}" == "release/*" ) && "${{ matrix.compiler }}" != "clang++" ]] && echo true || echo false) echo $DO_PACKAGE if [[ "${{ matrix.os }}" == ubuntu-* ]]; then echo "tp_folder=Linux" >> $GITHUB_OUTPUT @@ -313,7 +313,7 @@ jobs: # Upload the changelog to the same artifact that we will add the installers to. - name: Upload changelog as artifact - if: steps.set-vars.outputs.pkg_type != 'none' && matrix.compiler != 'clang++' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') && startsWith(matrix.os, 'ubuntu') + if: steps.set-vars.outputs.pkg_type != 'none' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') && startsWith(matrix.os, 'ubuntu') uses: actions/upload-artifact@v3 with: name: installer-${{ steps.set-vars.outputs.tp_folder }} From d9a0aec36126532ec6b6c8b8981c9de687536af7 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 22 Nov 2023 12:25:50 +0100 Subject: [PATCH 015/242] more regex --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index f3b4dacbd08..1939437f6fe 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -83,7 +83,7 @@ jobs: - id: set-vars name: Set extra variables run: | - DO_PACKAGE=$( [[ ( "${{ inputs.package }}" || "${{ steps.extract_branch.outputs.RUN_NAME }}" == "nightly" || "${{ steps.extract_branch.outputs.RUN_NAME }}" == "release/*" ) && "${{ matrix.compiler }}" != "clang++" ]] && echo true || echo false) + DO_PACKAGE=$( [[ ( "${{ inputs.package }}" || "${{ steps.extract_branch.outputs.RUN_NAME }}" == "nightly" || "${{ steps.extract_branch.outputs.RUN_NAME }}" =~ release/* ) && "${{ matrix.compiler }}" != "clang++" ]] && echo true || echo false) echo $DO_PACKAGE if [[ "${{ matrix.os }}" == ubuntu-* ]]; then echo "tp_folder=Linux" >> $GITHUB_OUTPUT From f1ba8a11ac72dfc04c0bf411fb230ca2e4aaa61e Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 22 Nov 2023 12:37:45 +0100 Subject: [PATCH 016/242] fix path for changelog --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 1939437f6fe..6e92e9aeda2 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -318,7 +318,7 @@ jobs: with: name: installer-${{ steps.set-vars.outputs.tp_folder }} path: | - ${{ github.workspace }}/OpenMS/changelog.txt + ${{ github.workspace }}/changelog.txt - name: Build shell: bash From b65215b06d9fd5adb178af2512623e1dfd80b628 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 22 Nov 2023 13:16:42 +0100 Subject: [PATCH 017/242] fix name of changelog artifact --- .github/workflows/openms_ci_matrix_full.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 6e92e9aeda2..5121c2dcb91 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -316,7 +316,7 @@ jobs: if: steps.set-vars.outputs.pkg_type != 'none' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') && startsWith(matrix.os, 'ubuntu') uses: actions/upload-artifact@v3 with: - name: installer-${{ steps.set-vars.outputs.tp_folder }} + name: changelog.txt path: | ${{ github.workspace }}/changelog.txt @@ -483,9 +483,7 @@ jobs: uses: actions/download-artifact@v3 with: name: changelog.txt - - - + - name: Upload installer shell: bash env: From 0ddacf9a2cd2522af1ba0bdf29ded70a48c07645 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 22 Nov 2023 14:44:18 +0100 Subject: [PATCH 018/242] comment out windows and mac builds to speed debugging --- .github/workflows/openms_ci_matrix_full.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 5121c2dcb91..4e158152b92 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -43,20 +43,20 @@ jobs: fail-fast: false matrix: include: - - os: windows-2022 + # - os: windows-2022 # cl.exe is currently the only supported. Needs a VS shell to be set up (especially if used without VS CMake Generator) # clang.exe is also installed but untested (might crash with our VS specific compiler definitions) # clang-cl.exe might be used instead. - compiler: cl.exe - compiler_ver: default + # compiler: cl.exe + # compiler_ver: default - - os: macos-13 + # - os: macos-13 # Since the appleclang version is dependent on the XCode versions that are installed # on the GH runners, use this as the choice for a specific version # TODO currently unused but XCode/appleclang is the default - compiler: xcode + # compiler: xcode # TODO implement support for other versions - compiler_ver: 14.2 + # compiler_ver: 14.2 # Make sure the compilers are available in that version on the GH runners # We are not installing anything. From bbdfbf89d18305d2689c1b62f930858cc8c88c64 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 22 Nov 2023 14:45:11 +0100 Subject: [PATCH 019/242] fix changelog name in releasetext --- .github/workflows/openms_ci_matrix_full.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 4e158152b92..39e784fa87b 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -537,9 +537,9 @@ jobs: The OpenMS-Developers EOF - RELEASE_TEXT=$(cat releaseTextHeader.txt $GITHUB_WORKSPACE/OpenMS/changelog_* releaseTextFooter.txt) + RELEASE_TEXT=$(cat releaseTextHeader.txt $GITHUB_WORKSPACE/OpenMS/changelog.txt releaseTextFooter.txt) RELEASE_TEXT_ESCAPED_QUOTES="${RELEASE_TEXT//\"/\\\"}" - cat releaseTextHeader.txt $GITHUB_WORKSPACE/OpenMS/changelog_* releaseTextFooter.txt > RELEASE_TEXT_GH.md + cat releaseTextHeader.txt $GITHUB_WORKSPACE/OpenMS/changelog.txt releaseTextFooter.txt > RELEASE_TEXT_GH.md # cat RELEASE_TEXT_GH.md | jq -R -s '.' > RELEASE_TEXT_GH.json - name: run GHA release action. From 55a4ae9939fcf591d7ad7adba3f781ab717a65a2 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 22 Nov 2023 14:54:17 +0100 Subject: [PATCH 020/242] re-enable slow OS' --- .github/workflows/openms_ci_matrix_full.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 39e784fa87b..5b73b5e88cd 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -43,20 +43,20 @@ jobs: fail-fast: false matrix: include: - # - os: windows-2022 + - os: windows-2022 # cl.exe is currently the only supported. Needs a VS shell to be set up (especially if used without VS CMake Generator) # clang.exe is also installed but untested (might crash with our VS specific compiler definitions) # clang-cl.exe might be used instead. - # compiler: cl.exe - # compiler_ver: default + compiler: cl.exe + compiler_ver: default - # - os: macos-13 + - os: macos-13 # Since the appleclang version is dependent on the XCode versions that are installed # on the GH runners, use this as the choice for a specific version # TODO currently unused but XCode/appleclang is the default - # compiler: xcode + compiler: xcode # TODO implement support for other versions - # compiler_ver: 14.2 + compiler_ver: 14.2 # Make sure the compilers are available in that version on the GH runners # We are not installing anything. From 2b0a64e019d7b686a1942d314d7daa220f6271db Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 22 Nov 2023 15:55:12 +0100 Subject: [PATCH 021/242] fix path --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 5b73b5e88cd..b6f67bf5cda 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -537,7 +537,7 @@ jobs: The OpenMS-Developers EOF - RELEASE_TEXT=$(cat releaseTextHeader.txt $GITHUB_WORKSPACE/OpenMS/changelog.txt releaseTextFooter.txt) + RELEASE_TEXT=$(cat releaseTextHeader.txt $GITHUB_WORKSPACE/changelog.txt releaseTextFooter.txt) RELEASE_TEXT_ESCAPED_QUOTES="${RELEASE_TEXT//\"/\\\"}" cat releaseTextHeader.txt $GITHUB_WORKSPACE/OpenMS/changelog.txt releaseTextFooter.txt > RELEASE_TEXT_GH.md # cat RELEASE_TEXT_GH.md | jq -R -s '.' > RELEASE_TEXT_GH.json From 13639945c71e2b19971d1c1fce4e52429d0cebf5 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 22 Nov 2023 17:11:25 +0100 Subject: [PATCH 022/242] handle rrsync competition for lock. --- .github/workflows/openms_ci_matrix_full.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index b6f67bf5cda..31e52e0e9d0 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -776,7 +776,12 @@ jobs: mkdir -p ~/.ssh/ echo "$PASS" > ~/.ssh/private.key sudo chmod 600 ~/.ssh/private.key - rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" + { + rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" && + } || { # If we try to access rsync at the same time as the other job, wait. + sleep 90 + rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" + } do-release: From e4a00ef90cde0623ee4ee9caf12f231c91645c89 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 22 Nov 2023 17:55:20 +0100 Subject: [PATCH 023/242] fix other path --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 31e52e0e9d0..dbf00d21644 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -539,7 +539,7 @@ jobs: EOF RELEASE_TEXT=$(cat releaseTextHeader.txt $GITHUB_WORKSPACE/changelog.txt releaseTextFooter.txt) RELEASE_TEXT_ESCAPED_QUOTES="${RELEASE_TEXT//\"/\\\"}" - cat releaseTextHeader.txt $GITHUB_WORKSPACE/OpenMS/changelog.txt releaseTextFooter.txt > RELEASE_TEXT_GH.md + cat releaseTextHeader.txt $GITHUB_WORKSPACE/changelog.txt releaseTextFooter.txt > RELEASE_TEXT_GH.md # cat RELEASE_TEXT_GH.md | jq -R -s '.' > RELEASE_TEXT_GH.json - name: run GHA release action. From cf0d91e10fb2c307400d4c6de526f2516cccbbc5 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 22 Nov 2023 17:58:50 +0100 Subject: [PATCH 024/242] bash indent bs --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index dbf00d21644..548743cffb3 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -778,7 +778,7 @@ jobs: sudo chmod 600 ~/.ssh/private.key { rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" && - } || { # If we try to access rsync at the same time as the other job, wait. + } || { # If we try to access rsync at the same time as the other job, wait. sleep 90 rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" } From 693e84a82d9a741677829931e60e6bb8c9c90e1e Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 22 Nov 2023 18:52:55 +0100 Subject: [PATCH 025/242] fix release syntax, fix bash stuff. --- .github/workflows/openms_ci_matrix_full.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 548743cffb3..3498a3d0bd8 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -547,7 +547,7 @@ jobs: uses: softprops/action-gh-release@v1 with: body_path: RELEASE_TEXT_GH.md - name: ${{ steps.extract_branch.outputs.RUN_NAME }} + tag_name: ${{ steps.extract_branch.outputs.RUN_NAME }} files: ${{ github.workspace }}/*.exe ${{ github.workspace }}/*.deb @@ -777,7 +777,7 @@ jobs: echo "$PASS" > ~/.ssh/private.key sudo chmod 600 ~/.ssh/private.key { - rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" && + rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" } || { # If we try to access rsync at the same time as the other job, wait. sleep 90 rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" From 154d4abfea87e1ced7a0d45864ed5b797b2f353c Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 22 Nov 2023 19:50:36 +0100 Subject: [PATCH 026/242] create a tag first, because the release action doesn't do so. --- .github/workflows/openms_ci_matrix_full.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 3498a3d0bd8..fe9db5335ad 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -542,6 +542,13 @@ jobs: cat releaseTextHeader.txt $GITHUB_WORKSPACE/changelog.txt releaseTextFooter.txt > RELEASE_TEXT_GH.md # cat RELEASE_TEXT_GH.md | jq -R -s '.' > RELEASE_TEXT_GH.json + - name: Create tag for release + if: inputs.do_release + uses: laputansoft/github-tag-action@v4.6 + with: + github_token: ${{ env.github.token }} + tag: ${{ steps.extract_branch.outputs.RUN_NAME }} + - name: run GHA release action. if: inputs.do_release uses: softprops/action-gh-release@v1 From a84ed245579d70fd9f1f84c0d8f53299633b6deb Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 22 Nov 2023 21:18:42 +0100 Subject: [PATCH 027/242] replace release action --- .github/workflows/openms_ci_matrix_full.yml | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index fe9db5335ad..e55d4cd88ce 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -541,21 +541,14 @@ jobs: RELEASE_TEXT_ESCAPED_QUOTES="${RELEASE_TEXT//\"/\\\"}" cat releaseTextHeader.txt $GITHUB_WORKSPACE/changelog.txt releaseTextFooter.txt > RELEASE_TEXT_GH.md # cat RELEASE_TEXT_GH.md | jq -R -s '.' > RELEASE_TEXT_GH.json - - - name: Create tag for release - if: inputs.do_release - uses: laputansoft/github-tag-action@v4.6 - with: - github_token: ${{ env.github.token }} - tag: ${{ steps.extract_branch.outputs.RUN_NAME }} - name: run GHA release action. if: inputs.do_release - uses: softprops/action-gh-release@v1 + uses: ncipollo/release-action@v1 with: - body_path: RELEASE_TEXT_GH.md - tag_name: ${{ steps.extract_branch.outputs.RUN_NAME }} - files: + bodyFile: RELEASE_TEXT_GH.md + tag: ${{ steps.extract_branch.outputs.RUN_NAME }} + artifacts: ${{ github.workspace }}/*.exe ${{ github.workspace }}/*.deb ${{ github.workspace }}/*.pkg From 0e194eb735c967b658015f5d02d42c82e01bf6c0 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 22 Nov 2023 22:07:08 +0100 Subject: [PATCH 028/242] try with a static tag --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index e55d4cd88ce..a3e6d5a70f4 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -547,7 +547,7 @@ jobs: uses: ncipollo/release-action@v1 with: bodyFile: RELEASE_TEXT_GH.md - tag: ${{ steps.extract_branch.outputs.RUN_NAME }} + tag: 2.9,1-test #${{ steps.extract_branch.outputs.RUN_NAME }} artifacts: ${{ github.workspace }}/*.exe ${{ github.workspace }}/*.deb From acc5acf5b5e45df67975c4f1bf07cdc4ab9f70ae Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Thu, 23 Nov 2023 11:17:18 +0100 Subject: [PATCH 029/242] fix regex for uploadpath, mark release as Draft --- .github/workflows/openms_ci_matrix_full.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index a3e6d5a70f4..a2da7af7bb0 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -494,7 +494,7 @@ jobs: echo "Upload" if [[ "${{ env.RUN_NAME }}" == "nightly" ]]; then folder=nightlyGHA # TODO: Change back when we deactivate Jenkins - elif [[ "${{ env.RUN_NAME }}" == "release/*" ]]; then + elif [[ "${{ env.RUN_NAME }}" =~ release/* ]]; then tmpfolder=${{ env.RUN_NAME }} folder=${tmpfolder/release/RC_GHA} # TODO: change back to RC after proper release else @@ -547,7 +547,8 @@ jobs: uses: ncipollo/release-action@v1 with: bodyFile: RELEASE_TEXT_GH.md - tag: 2.9,1-test #${{ steps.extract_branch.outputs.RUN_NAME }} + tag: 2.9.1-test #${{ steps.extract_branch.outputs.RUN_NAME }} + draft: true artifacts: ${{ github.workspace }}/*.exe ${{ github.workspace }}/*.deb From 569ab4dbaebf5c08b87ae2e8b05dd7b4fc1262db Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Thu, 23 Nov 2023 11:29:36 +0100 Subject: [PATCH 030/242] fixed locking problem using changes to authorized_keys on archive host. Revert attempts to do so in here --- .github/workflows/openms_ci_matrix_full.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index a2da7af7bb0..115359e478f 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -777,13 +777,7 @@ jobs: mkdir -p ~/.ssh/ echo "$PASS" > ~/.ssh/private.key sudo chmod 600 ~/.ssh/private.key - { - rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" - } || { # If we try to access rsync at the same time as the other job, wait. - sleep 90 - rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" - } - + rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" do-release: if: inputs.do_release From 7afea62443c22088692a674e5a20208418bac446 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Thu, 23 Nov 2023 11:30:41 +0100 Subject: [PATCH 031/242] fix regex for upload path in KNIME addons --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 115359e478f..6db5aefc3a6 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -760,7 +760,7 @@ jobs: echo "Upload" if [[ "${{ env.RUN_NAME }}" == "nightly" ]]; then folder=nightlyGHA - elif [[ "${{ env.RUN_NAME }}" == "release/*" ]]; then + elif [[ "${{ env.RUN_NAME }}" =~ release/* ]]; then tmpfolder=${{ env.RUN_NAME }} folder=${tmpfolder/release/RC}GHA else From 9dcf3aef4662a01aff3a3ed680c5f7b79eb7b6ab Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Thu, 23 Nov 2023 11:34:15 +0100 Subject: [PATCH 032/242] comma delimit release paths. --- .github/workflows/openms_ci_matrix_full.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 6db5aefc3a6..f3682ee0ec1 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -549,10 +549,9 @@ jobs: bodyFile: RELEASE_TEXT_GH.md tag: 2.9.1-test #${{ steps.extract_branch.outputs.RUN_NAME }} draft: true + artifactErrorsFailBuild: true artifacts: - ${{ github.workspace }}/*.exe - ${{ github.workspace }}/*.deb - ${{ github.workspace }}/*.pkg + ${{ github.workspace }}/*.exe, ${{ github.workspace }}/*.deb, ${{ github.workspace }}/*.pkg # TODO add src - name: Download Documentation @@ -778,7 +777,8 @@ jobs: echo "$PASS" > ~/.ssh/private.key sudo chmod 600 ~/.ssh/private.key rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" - + + do-release: if: inputs.do_release runs-on: ubuntu-latest From fddb15ed0b268e2b30f8afff6a5dc316690dd63e Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Thu, 23 Nov 2023 11:42:12 +0100 Subject: [PATCH 033/242] fix (hopefully) getting the RUN_NAME for release. --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index f3682ee0ec1..35847748979 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -547,7 +547,7 @@ jobs: uses: ncipollo/release-action@v1 with: bodyFile: RELEASE_TEXT_GH.md - tag: 2.9.1-test #${{ steps.extract_branch.outputs.RUN_NAME }} + tag: ${{ env.RUN_NAME }} draft: true artifactErrorsFailBuild: true artifacts: From a817702289a2e501fbb25f648c78995acd04f894 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Thu, 23 Nov 2023 11:43:33 +0100 Subject: [PATCH 034/242] fix envs in create_SHA --- .github/workflows/openms_ci_matrix_full.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 35847748979..710ce9f3a92 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -799,7 +799,7 @@ jobs: octokit.rest.git.createRef({ owner: context.repo.owner, repo: 'OpenMS-docs', - ref: ${{ steps.extract_branch.outputs.RUN_NAME }}, + ref: ${{ env.RUN_NAME }}, sha: latest_ref, }); @@ -811,7 +811,7 @@ jobs: octokit.rest.git.createRef({ owner: context.repo.owner, repo: 'Tutorials', - ref: ${{ steps.extract_branch.outputs.RUN_NAME }}, + ref: ${{ env.RUN_NAME }}, sha: latest_ref, }); @@ -823,7 +823,7 @@ jobs: octokit.rest.git.createRef({ owner: context.repo.owner, repo: 'pyopenms-docs', - ref: ${{ steps.extract_branch.outputs.RUN_NAME }}, + ref: ${{ env.RUN_NAME }}, sha: latest_ref, }); @@ -835,7 +835,7 @@ jobs: octokit.rest.git.createRef({ owner: context.repo.owner, repo: 'THIRDPARTY', - ref: ${{ steps.extract_branch.outputs.RUN_NAME }}, + ref: ${{ env.RUN_NAME }}, sha: latest_ref, }); @@ -847,7 +847,7 @@ jobs: octokit.rest.git.createRef({ owner: 'genericworkflownodes', repo: 'GenericKnimeNodes', - ref: ${{ steps.extract_branch.outputs.RUN_NAME }}, + ref: ${{ env.RUN_NAME }}, sha: latest_ref, }); @@ -859,7 +859,7 @@ jobs: octokit.rest.git.createRef({ owner: 'genericworkflownodes', repo: 'de.openms.knime.dynamicJSViewers', - ref: ${{ steps.extract_branch.outputs.RUN_NAME }}, + ref: ${{ env.RUN_NAME }}, sha: latest_ref, }); @@ -871,7 +871,7 @@ jobs: octokit.rest.git.createRef({ owner: 'genericworkflownodes', repo: 'buildresources', - ref: ${{ steps.extract_branch.outputs.RUN_NAME }}, + ref: ${{ env.RUN_NAME }}, sha: latest_ref, }); @@ -883,7 +883,7 @@ jobs: octokit.rest.git.createRef({ owner: context.repo.owner, repo: 'de.openms.knime', - ref: ${{ steps.extract_branch.outputs.RUN_NAME }}, + ref: ${{ env.RUN_NAME }}, sha: latest_ref, }); From 46a52422e4d3be09e0c6bba8a6d1bfd087673f01 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Thu, 23 Nov 2023 12:46:11 +0100 Subject: [PATCH 035/242] update links to latest, merge-to-develop --- .github/workflows/openms_ci_matrix_full.yml | 78 ++++++++++++++++----- 1 file changed, 61 insertions(+), 17 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 710ce9f3a92..728d882d890 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -494,9 +494,9 @@ jobs: echo "Upload" if [[ "${{ env.RUN_NAME }}" == "nightly" ]]; then folder=nightlyGHA # TODO: Change back when we deactivate Jenkins - elif [[ "${{ env.RUN_NAME }}" =~ release/* ]]; then - tmpfolder=${{ env.RUN_NAME }} - folder=${tmpfolder/release/RC_GHA} # TODO: change back to RC after proper release + elif [[ "${{ env.RUN_NAME }}" =~ release/([0-9]+\.[0-9]+\.[0-9]+) ]]; then + tmpfolder=${BASH_REMATCH[1]} + folder=release/RC_GHA/$tmpfolder # TODO: change back to RC after proper release else folder=experimental/${{ env.RUN_NAME }} fi @@ -507,6 +507,11 @@ jobs: sudo chmod 600 ~/.ssh/private.key rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/* "$USER@$HOST:/OpenMSInstaller/${folder}" + if [[${{ inputs.mark_as_latest }}]]; then + ln -s ./$tmpfolder latest #create link to the release folder + rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/OpenMSInstaller/release/RC_GHA" # FIXME REVERT + fi + - name: create RELEASE_TEXT if: inputs.do_release shell: bash @@ -548,12 +553,22 @@ jobs: with: bodyFile: RELEASE_TEXT_GH.md tag: ${{ env.RUN_NAME }} - draft: true + draft: true #FIXME revert artifactErrorsFailBuild: true + makeLatest: ${{ inputs.mark_as_latest }} artifacts: ${{ github.workspace }}/*.exe, ${{ github.workspace }}/*.deb, ${{ github.workspace }}/*.pkg # TODO add src + deploy-docs: + if: github.ref == 'refs/heads/nightly' || contains(github.ref, 'release/') || inputs.package + runs-on: ubuntu-latest + needs: build-and-test + steps: + - name: Extract branch/PR infos + shell: bash + run: echo "RUN_NAME=${{ github.event.pull_request && github.event.number || github.ref_name }}" >> $GITHUB_ENV + - name: Download Documentation uses: actions/download-artifact@v3 with: @@ -572,9 +587,9 @@ jobs: echo "Upload" if [[ "${{ env.RUN_NAME }}" == "nightly" ]]; then folder=nightlyGHA # TODO: Change back when we deactivate Jenkins - elif [[ "${{ env.RUN_NAME }}" == "release/*" ]]; then - tmpfolder=${{ env.RUN_NAME }} - folder=${tmpfolder/release/RC_GHA} # TODO: change back to RC after proper release + elif [[ "${{ env.RUN_NAME }}" =~ release/([0-9]+\.[0-9]+\.[0-9]+) ]]; then + tmpfolder=${BASH_REMATCH[1]} + folder=release/RC_GHA/$tmpfolder # TODO: change back to RC after proper release else folder=experimental/${{ env.RUN_NAME }} fi @@ -586,8 +601,12 @@ jobs: # Upload documentation FIXME rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/docs/ "$USER@$HOST:/Documentation/${folder}" - + if [[${{ inputs.mark_as_latest }}]]; then + ln -s ./$tmpfolder latest #we can use the same link from above. + rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/Documentation/release/RC_GHA" # FIXME REVERT + fi + # TODO create softlinks to latest nightly # TODO create and upload file hashes, at least for release candidate @@ -759,9 +778,9 @@ jobs: echo "Upload" if [[ "${{ env.RUN_NAME }}" == "nightly" ]]; then folder=nightlyGHA - elif [[ "${{ env.RUN_NAME }}" =~ release/* ]]; then - tmpfolder=${{ env.RUN_NAME }} - folder=${tmpfolder/release/RC}GHA + elif [[ "${{ env.RUN_NAME }}" =~ release/([0-9]+\.[0-9]+\.[0-9]+) ]]; then + tmpfolder=${BASH_REMATCH[1]} + folder=release/RC_GHA/$tmpfolder # TODO: change back to RC after proper release else folder=experimental/${{ env.RUN_NAME }} fi @@ -778,12 +797,20 @@ jobs: sudo chmod 600 ~/.ssh/private.key rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" + if [[${{ inputs.mark_as_latest }}]]; then + ln -s ./$tmpfolder latest #create link to the release folder + rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/knime-plugin/updateSite/release/RC_GHA" # FIXME REVERT + fi do-release: if: inputs.do_release runs-on: ubuntu-latest needs: [build-deploy-knime-updatesite,deploy-installer] steps: + - name: Extract branch/PR infos + shell: bash + run: echo "RUN_NAME=${{ github.event.pull_request && github.event.number || github.ref_name }}" >> $GITHUB_ENV + # NB we create the tag for the OpenMS repo next in a separate action. # TODO handle updating if the ref already exists. - id: create_SHA @@ -887,13 +914,30 @@ jobs: sha: latest_ref, }); - #- name: update links to latest (documentation, installers) - # if: inputs.mark_as_latest - # run: #FIXME - #- name: merge branch back into develop - # if: inputs.mark_as_latest - # run: #FIXME + - name: Merge to Develop + if: inputs.mark_as_latest + uses: actions/github-script@v7 + with: + script: | + const { repo, owner } = context.repo; + const result = await github.rest.pulls.create({ + title: 'Merge latest release into develop', + owner, + repo, + head: '${{ github.ref_name }}', + base: 'develop', + body: [ + 'DO NOT MERGE ME!!!!! This PR is auto-generated by', + '[actions/github-script](https://github.com/actions/github-script).' + ].join('\n') + }); + github.rest.issues.addLabels({ + owner, + repo, + issue_number: result.data.number, + labels: ['feature', 'automated pr'] + }); #- name: create text for website and update it. # if: inputs.announce_release From 3241201fe00cd041f456a639e5cfc5ab8ef89819 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Thu, 23 Nov 2023 14:04:47 +0100 Subject: [PATCH 036/242] fix latest linking --- .github/workflows/openms_ci_matrix_full.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 728d882d890..f9b73dbfe44 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -507,7 +507,7 @@ jobs: sudo chmod 600 ~/.ssh/private.key rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/* "$USER@$HOST:/OpenMSInstaller/${folder}" - if [[${{ inputs.mark_as_latest }}]]; then + if [[ 'true' == ${{ inputs.mark_as_latest }}]]; then ln -s ./$tmpfolder latest #create link to the release folder rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/OpenMSInstaller/release/RC_GHA" # FIXME REVERT fi @@ -602,7 +602,7 @@ jobs: # Upload documentation FIXME rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/docs/ "$USER@$HOST:/Documentation/${folder}" - if [[${{ inputs.mark_as_latest }}]]; then + if [[ 'true' == ${{ inputs.mark_as_latest }}]]; then ln -s ./$tmpfolder latest #we can use the same link from above. rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/Documentation/release/RC_GHA" # FIXME REVERT fi @@ -797,7 +797,7 @@ jobs: sudo chmod 600 ~/.ssh/private.key rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" - if [[${{ inputs.mark_as_latest }}]]; then + if [[ 'true' == ${{ inputs.mark_as_latest }} ]]; then ln -s ./$tmpfolder latest #create link to the release folder rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/knime-plugin/updateSite/release/RC_GHA" # FIXME REVERT fi From bd9b43da84c9609eb06dda8a9b481e7a4de2842b Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 24 Nov 2023 11:42:55 +0100 Subject: [PATCH 037/242] make tags using gh instead of javascript --- .github/workflows/openms_ci_matrix_full.yml | 162 ++++++++------------ 1 file changed, 61 insertions(+), 101 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index f9b73dbfe44..63bb34c84b8 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -521,8 +521,7 @@ jobs: cat > releaseTextHeader.txt << EOF Dear OpenMS-Users, - we are proud to announce the release of OpenMS $version. Grab it - here + we are proud to announce the release of OpenMS $version. Grab it here In the following you find all important changes to the previous version: @@ -812,107 +811,68 @@ jobs: run: echo "RUN_NAME=${{ github.event.pull_request && github.event.number || github.ref_name }}" >> $GITHUB_ENV # NB we create the tag for the OpenMS repo next in a separate action. - # TODO handle updating if the ref already exists. - - id: create_SHA - name: create tags from SHAs - uses: actions/github-script@v7 - with: - script: | - latest_ref = octokit.rest.git.getRef({ - owner: context.repo.owner, - repo: 'OpenMS-docs', - ref: 'heads/develop', - }); - octokit.rest.git.createRef({ - owner: context.repo.owner, - repo: 'OpenMS-docs', - ref: ${{ env.RUN_NAME }}, - sha: latest_ref, - }); - - latest_ref = octokit.rest.git.getRef({ - owner: context.repo.owner, - repo: 'Tutorials', - ref: 'heads/master', - }); - octokit.rest.git.createRef({ - owner: context.repo.owner, - repo: 'Tutorials', - ref: ${{ env.RUN_NAME }}, - sha: latest_ref, - }); - - latest_ref = octokit.rest.git.getRef({ - owner: context.repo.owner, - repo: 'pyopenms-docs', - ref: 'github.sha', - }); - octokit.rest.git.createRef({ - owner: context.repo.owner, - repo: 'pyopenms-docs', - ref: ${{ env.RUN_NAME }}, - sha: latest_ref, - }); - - latest_ref = octokit.rest.git.getRef({ - owner: context.repo.owner, - repo: 'THIRDPARTY', - ref: 'github.sha', - }); - octokit.rest.git.createRef({ - owner: context.repo.owner, - repo: 'THIRDPARTY', - ref: ${{ env.RUN_NAME }}, - sha: latest_ref, - }); - - latest_ref = octokit.rest.git.getRef({ - owner: 'genericworkflownodes', - repo: 'GenericKnimeNodes', - ref: 'heads/develop', - }); - octokit.rest.git.createRef({ - owner: 'genericworkflownodes', - repo: 'GenericKnimeNodes', - ref: ${{ env.RUN_NAME }}, - sha: latest_ref, - }); - - latest_ref = octokit.rest.git.getRef({ - owner: 'genericworkflownodes', - repo: 'de.openms.knime.dynamicJSViewers', - ref: 'heads/master', - }); - octokit.rest.git.createRef({ - owner: 'genericworkflownodes', - repo: 'de.openms.knime.dynamicJSViewers', - ref: ${{ env.RUN_NAME }}, - sha: latest_ref, - }); + - id: bash_create_tags + name: create tags for other repos + shell: bash + run: | + function createGitTag() { + OWNER=$1 + REPO=$2 + REF=$3 + SHA= gh api \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + /repos/$OWNER/$REPO/git/ref/$REF | jq '.object.sha' + + gh api \ + --method POST \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + /repos/${REPO}/git/refs \ + -f ref="refs/tags/${{ env.RUN_NAME }} \ + -f sha=${SHA} + } + + function updateGitTag() { + OWNER=$1 + REPO=$2 + REF=$3 + SHA= gh api \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + /repos/$OWNER/$REPO/git/ref/$REF | jq '.object.sha' + + gh api \ + --method PATCH \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + /repos/${REPO}/git/refs/tags/${{ env.RUN_NAME }} \ + -f sha=${SHA} \ + -F force=true + } + + OPENMS_SHA = $GITHUB_SHA + + DEOPENMS_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/de.openms.knime/git/ref/heads/develop |jq '.object.sha') + GKN_SHA=$(curl -s -X GET https://api.github.com/repos/genericworkflownodes/GenericKnimeNodes/git/ref/heads/develop |jq '.object.sha') + JSViewer_SHA=$(curl -s -X GET https://api.github.com/repos/genericworkflownodes/de.openms.knime.dynamicJSViewers/git/ref/heads/develop |jq '.object.sha') + CONTRIB_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/contrib\?ref\=$OPENMS_SHA | jq -r ".sha") + THIRDPARTY_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/THIRDPARTY\?ref\=$OPENMS_SHA | jq -r ".sha") + PYDOCS_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/src/pyOpenMS/pyopenms-docs\?ref\=$OPENMS_SHA | jq -r ".sha") + TUTORIAL_SHA=$(curl https://api.github.com/repos/OpenMS/Tutorials/git/refs/heads/master | jq -r ".object.sha") + DOCS_SHA=$(curl https://api.github.com/repos/OpenMS/OpenMS-docs/git/refs/heads/develop | jq -r ".object.sha") - latest_ref = octokit.rest.git.getRef({ - owner: 'genericworkflownodes', - repo: 'buildresources', - ref: 'heads/master', - }); - octokit.rest.git.createRef({ - owner: 'genericworkflownodes', - repo: 'buildresources', - ref: ${{ env.RUN_NAME }}, - sha: latest_ref, - }); + + createGitTag OpenMS/contrib $CONTRIB_SHA || updateGitTag OpenMS/contrib $CONTRIB_SHA + createGitTag OpenMS/pyopenms-docs $PYDOCS_SHA || updateGitTag OpenMS/pyopenms-docs $PYDOCS_SHA + createGitTag OpenMS/THIRDPARTY $THIRDPARTY_SHA || updateGitTag OpenMS/THIRDPARTY $THIRDPARTY_SHA + createGitTag OpenMS/Tutorials $TUTORIAL_SHA || updateGitTag OpenMS/Tutorials $TUTORIAL_SHA + createGitTag OpenMS/OpenMS-docs $DOCS_SHA || updateGitTag OpenMS/OpenMS-docs $DOCS_SHA + createGitTag OpenMS/de.openms.knime $DEOPENMS_SHA || updateGitTag OpenMS/de.openms.knime $DEOPENMS_SHA + + createGitTag genericworkflownodes/GenericKnimeNodes $JSViewer_SHA openms/Release${version} || updateGitTag genericworkflownodes/GenericKnimeNodes $GKN_SHA openms/Release${version} + createGitTag genericworkflownodes/GenericKnimeNodes $GKN_SHA openms/Release${version} || updateGitTag genericworkflownodes/GenericKnimeNodes $GKN_SHA openms/Release${version} - latest_ref = octokit.rest.git.getRef({ - owner: context.repo.owner, - repo: 'de.openms.knime', - ref: 'heads/develop', - }); - octokit.rest.git.createRef({ - owner: context.repo.owner, - repo: 'de.openms.knime', - ref: ${{ env.RUN_NAME }}, - sha: latest_ref, - }); #- name: merge branch back into develop - name: Merge to Develop From f72d2676b7f204215e7bd2569dd0268edd79439a Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 24 Nov 2023 12:29:19 +0100 Subject: [PATCH 038/242] fix bash bs --- .github/workflows/openms_ci_matrix_full.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 63bb34c84b8..186657e7c35 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -507,7 +507,7 @@ jobs: sudo chmod 600 ~/.ssh/private.key rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/* "$USER@$HOST:/OpenMSInstaller/${folder}" - if [[ 'true' == ${{ inputs.mark_as_latest }}]]; then + if [[ 'true' == ${{ inputs.mark_as_latest }} ]]; then ln -s ./$tmpfolder latest #create link to the release folder rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/OpenMSInstaller/release/RC_GHA" # FIXME REVERT fi @@ -601,7 +601,7 @@ jobs: # Upload documentation FIXME rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/docs/ "$USER@$HOST:/Documentation/${folder}" - if [[ 'true' == ${{ inputs.mark_as_latest }}]]; then + if [[ 'true' == ${{ inputs.mark_as_latest }} ]]; then ln -s ./$tmpfolder latest #we can use the same link from above. rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/Documentation/release/RC_GHA" # FIXME REVERT fi From 956e3dad84a3a926a6b40a5d89328da337e52309 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 24 Nov 2023 13:49:23 +0100 Subject: [PATCH 039/242] fix supernumerary " --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 186657e7c35..0127d93068b 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -829,7 +829,7 @@ jobs: -H "Accept: application/vnd.github+json" \ -H "X-GitHub-Api-Version: 2022-11-28" \ /repos/${REPO}/git/refs \ - -f ref="refs/tags/${{ env.RUN_NAME }} \ + -f ref="refs/tags/${{ env.RUN_NAME }}" \ -f sha=${SHA} } From c7ce6fedae902da8b08620d32140ae3522cefbcc Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 24 Nov 2023 15:51:54 +0100 Subject: [PATCH 040/242] get rid of unnecessary ref --- .github/workflows/openms_ci_matrix_full.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 0127d93068b..a88026bc2bc 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -851,14 +851,12 @@ jobs: -F force=true } - OPENMS_SHA = $GITHUB_SHA - DEOPENMS_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/de.openms.knime/git/ref/heads/develop |jq '.object.sha') GKN_SHA=$(curl -s -X GET https://api.github.com/repos/genericworkflownodes/GenericKnimeNodes/git/ref/heads/develop |jq '.object.sha') JSViewer_SHA=$(curl -s -X GET https://api.github.com/repos/genericworkflownodes/de.openms.knime.dynamicJSViewers/git/ref/heads/develop |jq '.object.sha') - CONTRIB_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/contrib\?ref\=$OPENMS_SHA | jq -r ".sha") - THIRDPARTY_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/THIRDPARTY\?ref\=$OPENMS_SHA | jq -r ".sha") - PYDOCS_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/src/pyOpenMS/pyopenms-docs\?ref\=$OPENMS_SHA | jq -r ".sha") + CONTRIB_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/contrib\?ref\=$GITHUB_SHA | jq -r ".sha") + THIRDPARTY_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/THIRDPARTY\?ref\=$GITHUB_SHA | jq -r ".sha") + PYDOCS_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/src/pyOpenMS/pyopenms-docs\?ref\=$GITHUB_SHA | jq -r ".sha") TUTORIAL_SHA=$(curl https://api.github.com/repos/OpenMS/Tutorials/git/refs/heads/master | jq -r ".object.sha") DOCS_SHA=$(curl https://api.github.com/repos/OpenMS/OpenMS-docs/git/refs/heads/develop | jq -r ".object.sha") From 7ba7cf248266400532a8118156d91fbe55039fca Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 24 Nov 2023 16:46:09 +0100 Subject: [PATCH 041/242] explicitly specify API token --- .github/workflows/openms_ci_matrix_full.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index a88026bc2bc..1ae79f87cdc 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -814,6 +814,7 @@ jobs: - id: bash_create_tags name: create tags for other repos shell: bash + env: GH_TOKEN: ${{ github.token }} run: | function createGitTag() { OWNER=$1 From 76cbaca6d72ab7e0859a99185f195cc6cee5eb82 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 24 Nov 2023 16:51:08 +0100 Subject: [PATCH 042/242] fix o --- .github/workflows/openms_ci_matrix_full.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 1ae79f87cdc..0050d89b71e 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -814,7 +814,8 @@ jobs: - id: bash_create_tags name: create tags for other repos shell: bash - env: GH_TOKEN: ${{ github.token }} + env: + GH_TOKEN: ${{ github.token }} run: | function createGitTag() { OWNER=$1 From 13d533d1505a789c4793fc8dd79394109e9c73d8 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 24 Nov 2023 18:00:04 +0100 Subject: [PATCH 043/242] fix typo notes for monday --- .github/workflows/openms_ci_matrix_full.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 0050d89b71e..bca6fb10410 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -852,10 +852,10 @@ jobs: -f sha=${SHA} \ -F force=true } - + #FIX THIS ON MONDAY TRAILING SLASHES? BAD NEWS! ALSO SOME OF THESE DON't HAVE 2.9.1 tags? DEOPENMS_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/de.openms.knime/git/ref/heads/develop |jq '.object.sha') GKN_SHA=$(curl -s -X GET https://api.github.com/repos/genericworkflownodes/GenericKnimeNodes/git/ref/heads/develop |jq '.object.sha') - JSViewer_SHA=$(curl -s -X GET https://api.github.com/repos/genericworkflownodes/de.openms.knime.dynamicJSViewers/git/ref/heads/develop |jq '.object.sha') + JSViewer_SHA=$(curl -s -X GET https://api.github.com/repos/genericworkflownodes/de.openms.knime.dynamicJSViewers/git/ref/heads/master |jq '.object.sha') CONTRIB_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/contrib\?ref\=$GITHUB_SHA | jq -r ".sha") THIRDPARTY_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/THIRDPARTY\?ref\=$GITHUB_SHA | jq -r ".sha") PYDOCS_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/src/pyOpenMS/pyopenms-docs\?ref\=$GITHUB_SHA | jq -r ".sha") From 04ce8680bbdbdbe48740509a1fa75f0ba89aa064 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Thu, 30 Nov 2023 12:28:27 +0100 Subject: [PATCH 044/242] move changelog creation up and add checks for nonsensical inputs. Fail if trying to mark_latest on a version that already exists --- .github/workflows/openms_ci_matrix_full.yml | 73 +++++++++++++-------- 1 file changed, 47 insertions(+), 26 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index bca6fb10410..b72f0bc53db 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -143,6 +143,53 @@ jobs: fi shell: bash + # Create the changelog for the release from our overall changelog + - id: create_changelog + if: matrix.compiler != 'clang++' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') && startsWith(matrix.os, 'ubuntu') + shell: bash + name: Create changelog for release on Ubuntu + GCC + run: | + if [[ ${{ steps.extract_branch.outputs.RUN_NAME }} =~ ^release\/([0-9]+\.[0-9]+\.[0-9]+) ]]; then #FIXME readd trailing $ for regex to ONLY match actual releases. + VERSION_NUMBER=${BASH_REMATCH[1]} + echo "Version number: $VERSION_NUMBER" + VERSION_NUMBER="3.0.0" #FIXME remove this override, we apparently didn't actually put anything in the changelog for 2.9.1... + if [ "${VERSION_NUMBER##*.}" -eq "0" ] # Handle trailing 0 in major releases (eg 3.0.0) + then + VERSION_NUMBER=${VERSION_NUMBER%.*} + fi + grep -ne "----[[:space:]]*OpenMS" ${{ github.workspace }}/OpenMS/CHANGELOG > index_changelog.txt + START=$(cat index_changelog.txt | grep -A 1 -e " $VERSION_NUMBER " | cut -f1 -d: | head -1) + END=$(cat index_changelog.txt | grep -A 1 -e " $VERSION_NUMBER " | cut -f1 -d: | tail -1) + echo "Extracting between lines:" + echo $START + echo $END + awk "NR > $START && NR < $END" OpenMS/CHANGELOG > ${{ github.workspace }}/changelog.txt + + # check if we want to be marked as latest, and if we actually should. + if [[ 'true' == ${{ inputs.do_release }} ]]; then + if [['false' == ${{ inputs.knime }} || 'false' == ${{inputs.package}} ]]; then + echo "Can't do a release without building the OpenMS package and the KNIME package" + exit 1 + else + if [['true' == ${{ inputs.mark_as_latest }} && "$(git tag -l $VERSION_NUMBER)" ]]; then + echo "Can't mark as latest, a tag with the same version already exists" + exit 1 + fi + fi + else + if [['true' == ${{ inputs.mark_as_latest }} || 'true' == ${{inputs.announce_release}} ]]; then + echo "Can't mark as lates or announce release unless we do a release" + exit 1 + fi + fi + + else + echo "Branch name does not match the expected pattern." + exit 1 + fi + + + - name: Emulate a Visual Studio shell (Windows) if: startsWith(matrix.os, 'windows') uses: egor-tensin/vs-shell@v2 @@ -285,32 +332,6 @@ jobs: fi done - # Create the changelog for the release from our overall changelog - - id: create_changelog - if: matrix.compiler != 'clang++' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') && startsWith(matrix.os, 'ubuntu') - shell: bash - name: Create changelog for release on Ubuntu + GCC - run: | - if [[ ${{ steps.extract_branch.outputs.RUN_NAME }} =~ ^release\/([0-9]+\.[0-9]+\.[0-9]+) ]]; then #FIXME readd trailing $ for regex to ONLY match actual releases. - VERSION_NUMBER=${BASH_REMATCH[1]} - echo "Version number: $VERSION_NUMBER" - VERSION_NUMBER="3.0.0" #FIXME remove this override, we apparently didn't actually put anything in the changelog for 2.9.1... - if [ "${VERSION_NUMBER##*.}" -eq "0" ] # Handle trailing 0 in major releases (eg 3.0.0) - then - VERSION_NUMBER=${VERSION_NUMBER%.*} - fi - grep -ne "----[[:space:]]*OpenMS" ${{ github.workspace }}/OpenMS/CHANGELOG > index_changelog.txt - START=$(cat index_changelog.txt | grep -A 1 -e " $VERSION_NUMBER " | cut -f1 -d: | head -1) - END=$(cat index_changelog.txt | grep -A 1 -e " $VERSION_NUMBER " | cut -f1 -d: | tail -1) - echo "Extracting between lines:" - echo $START - echo $END - awk "NR > $START && NR < $END" OpenMS/CHANGELOG > ${{ github.workspace }}/changelog.txt - else - echo "Branch name does not match the expected pattern." - exit 1 - fi - # Upload the changelog to the same artifact that we will add the installers to. - name: Upload changelog as artifact if: steps.set-vars.outputs.pkg_type != 'none' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') && startsWith(matrix.os, 'ubuntu') From 7668be62b09555aa8056346dfdb11b5345c875f2 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Thu, 30 Nov 2023 12:33:28 +0100 Subject: [PATCH 045/242] fix spacing --- .github/workflows/openms_ci_matrix_full.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index b72f0bc53db..206a74d2a1e 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -167,17 +167,17 @@ jobs: # check if we want to be marked as latest, and if we actually should. if [[ 'true' == ${{ inputs.do_release }} ]]; then - if [['false' == ${{ inputs.knime }} || 'false' == ${{inputs.package}} ]]; then + if [[ 'false' == ${{ inputs.knime }} || 'false' == ${{inputs.package}} ]]; then echo "Can't do a release without building the OpenMS package and the KNIME package" exit 1 else - if [['true' == ${{ inputs.mark_as_latest }} && "$(git tag -l $VERSION_NUMBER)" ]]; then + if [[ 'true' == ${{ inputs.mark_as_latest }} && "$(git tag -l $VERSION_NUMBER)" ]]; then echo "Can't mark as latest, a tag with the same version already exists" exit 1 fi fi else - if [['true' == ${{ inputs.mark_as_latest }} || 'true' == ${{inputs.announce_release}} ]]; then + if [[ 'true' == ${{ inputs.mark_as_latest }} || 'true' == ${{inputs.announce_release}} ]]; then echo "Can't mark as lates or announce release unless we do a release" exit 1 fi From 7be700288f3d1d1f47648c1a2c3e63a26717a20b Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Thu, 30 Nov 2023 13:31:15 +0100 Subject: [PATCH 046/242] fix ref to removed tool --- src/openms/source/APPLICATIONS/ToolHandler.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/openms/source/APPLICATIONS/ToolHandler.cpp b/src/openms/source/APPLICATIONS/ToolHandler.cpp index 6b57841a349..04f1042b53e 100644 --- a/src/openms/source/APPLICATIONS/ToolHandler.cpp +++ b/src/openms/source/APPLICATIONS/ToolHandler.cpp @@ -169,7 +169,6 @@ namespace OpenMS tools_map["Resampler"] = Internal::ToolDescription("Resampler", cat_signal_proc_misc); tools_map["RNADigestor"] = Internal::ToolDescription("RNADigestor", cat_rna); tools_map["RNAMassCalculator"] = Internal::ToolDescription("RNAMassCalculator", cat_rna); - tools_map["RNPxlSearch"] = Internal::ToolDescription("RNPxlSearch", cat_crosslinking); tools_map["RNPxlXICFilter"] = Internal::ToolDescription("RNPxlXICFilter", cat_crosslinking); tools_map["SageAdapter"] = Internal::ToolDescription("SageAdapter", cat_ID_search); tools_map["SeedListGenerator"] = Internal::ToolDescription("SeedListGenerator", cat_quant); From dc7f1c59a10951a9c79dd536fd346bd55f6ea872 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Thu, 30 Nov 2023 16:05:24 +0100 Subject: [PATCH 047/242] correct how we get the shas --- .github/workflows/openms_ci_matrix_full.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 206a74d2a1e..66910180dd8 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -877,9 +877,9 @@ jobs: DEOPENMS_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/de.openms.knime/git/ref/heads/develop |jq '.object.sha') GKN_SHA=$(curl -s -X GET https://api.github.com/repos/genericworkflownodes/GenericKnimeNodes/git/ref/heads/develop |jq '.object.sha') JSViewer_SHA=$(curl -s -X GET https://api.github.com/repos/genericworkflownodes/de.openms.knime.dynamicJSViewers/git/ref/heads/master |jq '.object.sha') - CONTRIB_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/contrib\?ref\=$GITHUB_SHA | jq -r ".sha") - THIRDPARTY_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/THIRDPARTY\?ref\=$GITHUB_SHA | jq -r ".sha") - PYDOCS_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/src/pyOpenMS/pyopenms-docs\?ref\=$GITHUB_SHA | jq -r ".sha") + CONTRIB_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/contrib\?ref\=${{ github.sha }} | jq -r ".sha") + THIRDPARTY_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/THIRDPARTY\?ref\=${{ github.sha }} | jq -r ".sha") + PYDOCS_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/src/pyOpenMS/pyopenms-docs\?ref\=${{ github.sha }} | jq -r ".sha") TUTORIAL_SHA=$(curl https://api.github.com/repos/OpenMS/Tutorials/git/refs/heads/master | jq -r ".object.sha") DOCS_SHA=$(curl https://api.github.com/repos/OpenMS/OpenMS-docs/git/refs/heads/develop | jq -r ".object.sha") From 5cbb23dbe089983f5abf10436508e8666a9e475d Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Thu, 30 Nov 2023 17:39:15 +0100 Subject: [PATCH 048/242] fixed (hopefully) tag syntax --- .github/workflows/openms_ci_matrix_full.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 66910180dd8..209086e6013 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -884,15 +884,15 @@ jobs: DOCS_SHA=$(curl https://api.github.com/repos/OpenMS/OpenMS-docs/git/refs/heads/develop | jq -r ".object.sha") - createGitTag OpenMS/contrib $CONTRIB_SHA || updateGitTag OpenMS/contrib $CONTRIB_SHA - createGitTag OpenMS/pyopenms-docs $PYDOCS_SHA || updateGitTag OpenMS/pyopenms-docs $PYDOCS_SHA - createGitTag OpenMS/THIRDPARTY $THIRDPARTY_SHA || updateGitTag OpenMS/THIRDPARTY $THIRDPARTY_SHA - createGitTag OpenMS/Tutorials $TUTORIAL_SHA || updateGitTag OpenMS/Tutorials $TUTORIAL_SHA - createGitTag OpenMS/OpenMS-docs $DOCS_SHA || updateGitTag OpenMS/OpenMS-docs $DOCS_SHA - createGitTag OpenMS/de.openms.knime $DEOPENMS_SHA || updateGitTag OpenMS/de.openms.knime $DEOPENMS_SHA + createGitTag OpenMS contrib $CONTRIB_SHA || updateGitTag OpenMS contrib $CONTRIB_SHA + createGitTag OpenMS pyopenms-docs $PYDOCS_SHA || updateGitTag OpenMS pyopenms-docs $PYDOCS_SHA + createGitTag OpenMS THIRDPARTY $THIRDPARTY_SHA || updateGitTag OpenMS THIRDPARTY $THIRDPARTY_SHA + createGitTag OpenMS Tutorials $TUTORIAL_SHA || updateGitTag OpenMS Tutorials $TUTORIAL_SHA + createGitTag OpenMS OpenMS-docs $DOCS_SHA || updateGitTag OpenMS OpenMS-docs $DOCS_SHA + createGitTag OpenMS de.openms.knime $DEOPENMS_SHA || updateGitTag OpenMS de.openms.knime $DEOPENMS_SHA - createGitTag genericworkflownodes/GenericKnimeNodes $JSViewer_SHA openms/Release${version} || updateGitTag genericworkflownodes/GenericKnimeNodes $GKN_SHA openms/Release${version} - createGitTag genericworkflownodes/GenericKnimeNodes $GKN_SHA openms/Release${version} || updateGitTag genericworkflownodes/GenericKnimeNodes $GKN_SHA openms/Release${version} + createGitTag genericworkflownodes GenericKnimeNodes $JSViewer_SHA || updateGitTag genericworkflownodes GenericKnimeNodes $GKN_SHA + createGitTag genericworkflownodes GenericKnimeNodes $GKN_SHA || updateGitTag genericworkflownodes GenericKnimeNodes $GKN_SHA #- name: merge branch back into develop From 5b44fdc308182d355362a3d3184074a8e68dac79 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 1 Dec 2023 12:19:34 +0100 Subject: [PATCH 049/242] Fix syntax for gh --- .github/workflows/openms_ci_matrix_full.yml | 41 +++++++-------------- 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 209086e6013..673c9c5dc91 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -839,41 +839,29 @@ jobs: GH_TOKEN: ${{ github.token }} run: | function createGitTag() { - OWNER=$1 - REPO=$2 - REF=$3 - SHA= gh api \ - -H "Accept: application/vnd.github+json" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - /repos/$OWNER/$REPO/git/ref/$REF | jq '.object.sha' - + REPO=$1 + SHA=$2 gh api \ --method POST \ -H "Accept: application/vnd.github+json" \ -H "X-GitHub-Api-Version: 2022-11-28" \ /repos/${REPO}/git/refs \ -f ref="refs/tags/${{ env.RUN_NAME }}" \ - -f sha=${SHA} + -f sha="${SHA}" } function updateGitTag() { - OWNER=$1 - REPO=$2 - REF=$3 - SHA= gh api \ - -H "Accept: application/vnd.github+json" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - /repos/$OWNER/$REPO/git/ref/$REF | jq '.object.sha' + REPO=$1 + SHA=$2 gh api \ --method PATCH \ -H "Accept: application/vnd.github+json" \ -H "X-GitHub-Api-Version: 2022-11-28" \ /repos/${REPO}/git/refs/tags/${{ env.RUN_NAME }} \ - -f sha=${SHA} \ + -f sha="${SHA}" \ -F force=true } - #FIX THIS ON MONDAY TRAILING SLASHES? BAD NEWS! ALSO SOME OF THESE DON't HAVE 2.9.1 tags? DEOPENMS_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/de.openms.knime/git/ref/heads/develop |jq '.object.sha') GKN_SHA=$(curl -s -X GET https://api.github.com/repos/genericworkflownodes/GenericKnimeNodes/git/ref/heads/develop |jq '.object.sha') JSViewer_SHA=$(curl -s -X GET https://api.github.com/repos/genericworkflownodes/de.openms.knime.dynamicJSViewers/git/ref/heads/master |jq '.object.sha') @@ -883,16 +871,15 @@ jobs: TUTORIAL_SHA=$(curl https://api.github.com/repos/OpenMS/Tutorials/git/refs/heads/master | jq -r ".object.sha") DOCS_SHA=$(curl https://api.github.com/repos/OpenMS/OpenMS-docs/git/refs/heads/develop | jq -r ".object.sha") + createGitTag OpenMS/contrib $CONTRIB_SHA || updateGitTag OpenMS/contrib $CONTRIB_SHA + createGitTag OpenMS/pyopenms-docs $PYDOCS_SHA || updateGitTag OpenMS/pyopenms-docs $PYDOCS_SHA + createGitTag OpenMS/THIRDPARTY $THIRDPARTY_SHA || updateGitTag OpenMS/THIRDPARTY $THIRDPARTY_SHA + createGitTag OpenMS/Tutorials $TUTORIAL_SHA || updateGitTag OpenMS/Tutorials $TUTORIAL_SHA + createGitTag OpenMS/OpenMS-docs $DOCS_SHA || updateGitTag OpenMS/OpenMS-docs $DOCS_SHA + createGitTag OpenMS/de.openms.knime $DEOPENMS_SHA || updateGitTag OpenMS/de.openms.knime $DEOPENMS_SHA - createGitTag OpenMS contrib $CONTRIB_SHA || updateGitTag OpenMS contrib $CONTRIB_SHA - createGitTag OpenMS pyopenms-docs $PYDOCS_SHA || updateGitTag OpenMS pyopenms-docs $PYDOCS_SHA - createGitTag OpenMS THIRDPARTY $THIRDPARTY_SHA || updateGitTag OpenMS THIRDPARTY $THIRDPARTY_SHA - createGitTag OpenMS Tutorials $TUTORIAL_SHA || updateGitTag OpenMS Tutorials $TUTORIAL_SHA - createGitTag OpenMS OpenMS-docs $DOCS_SHA || updateGitTag OpenMS OpenMS-docs $DOCS_SHA - createGitTag OpenMS de.openms.knime $DEOPENMS_SHA || updateGitTag OpenMS de.openms.knime $DEOPENMS_SHA - - createGitTag genericworkflownodes GenericKnimeNodes $JSViewer_SHA || updateGitTag genericworkflownodes GenericKnimeNodes $GKN_SHA - createGitTag genericworkflownodes GenericKnimeNodes $GKN_SHA || updateGitTag genericworkflownodes GenericKnimeNodes $GKN_SHA + createGitTag genericworkflownodes/de.openms.knime.dynamicJSViewers $JSViewer_SHA || updateGitTag genericworkflownodes/de.openms.knime.dynamicJSViewers $GKN_SHA + createGitTag genericworkflownodes/GenericKnimeNodes $GKN_SHA || updateGitTag genericworkflownodes/GenericKnimeNodes $GKN_SHA #- name: merge branch back into develop From 194a0a07f1ba3eb49e40279ca2b0cd01adef0f16 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 1 Dec 2023 14:18:31 +0100 Subject: [PATCH 050/242] Update openms_ci_matrix_full.yml explicitly add write permissions to github.token --- .github/workflows/openms_ci_matrix_full.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 673c9c5dc91..9caf937ffb1 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -826,6 +826,7 @@ jobs: if: inputs.do_release runs-on: ubuntu-latest needs: [build-deploy-knime-updatesite,deploy-installer] + permissions: write-all steps: - name: Extract branch/PR infos shell: bash From 1f3302cfc17c31c7ed685670399372d911a336d9 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 20 Dec 2023 08:32:27 +0100 Subject: [PATCH 051/242] Update openms_ci_matrix_full.yml Add explicit token --- .github/workflows/openms_ci_matrix_full.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 3c0ef8d8898..71e15920708 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -828,6 +828,16 @@ jobs: needs: [build-deploy-knime-updatesite,deploy-installer] permissions: write-all steps: + +# get token + - name: get a token so that we can update the tags + uses: actions/create-github-app-token@v1 + id: app-token + with: + app-id: ${{ vars.OPENMS_GITHUB_APP_ID }} + private-key: ${{ secrets.OPENMS_GITHUB_APP_PRIVATE_KEY }} + owner: ${{ github.repository_owner }} + - name: Extract branch/PR infos shell: bash run: echo "RUN_NAME=${{ github.event.pull_request && github.event.number || github.ref_name }}" >> $GITHUB_ENV @@ -837,7 +847,7 @@ jobs: name: create tags for other repos shell: bash env: - GH_TOKEN: ${{ github.token }} + GH_TOKEN: ${{ github.event.issue.number }} run: | function createGitTag() { REPO=$1 From 1e8f93e056e8779af2c9877595a6ab88d9f2016b Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 20 Dec 2023 09:06:54 +0100 Subject: [PATCH 052/242] Update openms_ci_matrix_full.yml Fix bash issue when running as a push --- .github/workflows/openms_ci_matrix_full.yml | 28 ++++++++++++--------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 71e15920708..fa8bbf8f8dd 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -165,22 +165,26 @@ jobs: echo $END awk "NR > $START && NR < $END" OpenMS/CHANGELOG > ${{ github.workspace }}/changelog.txt - # check if we want to be marked as latest, and if we actually should. - if [[ 'true' == ${{ inputs.do_release }} ]]; then - if [[ 'false' == ${{ inputs.knime }} || 'false' == ${{inputs.package}} ]]; then - echo "Can't do a release without building the OpenMS package and the KNIME package" - exit 1 + # if we are running as the result of a push rather than a PR the ${{ inputs.* }} flat out don't exist, which makes this code choke. + # so skip it when we are doing a push + if [[ 'true' == {{github.event_name == 'push'}} ]]; then + # check if we want to be marked as latest, and if we actually should. + if [[ 'true' == ${{ inputs.do_release }} ]]; then + if [[ 'false' == ${{ inputs.knime }} || 'false' == ${{ inputs.package }} ]]; then + echo "Can't do a release without building the OpenMS package and the KNIME package" + exit 1 + else + if [[ 'true' == ${{ inputs.mark_as_latest }} && "$(git tag -l $VERSION_NUMBER)" ]]; then + echo "Can't mark as latest, a tag with the same version already exists" + exit 1 + fi + fi else - if [[ 'true' == ${{ inputs.mark_as_latest }} && "$(git tag -l $VERSION_NUMBER)" ]]; then - echo "Can't mark as latest, a tag with the same version already exists" + if [[ 'true' == ${{ inputs.mark_as_latest }} || 'true' == ${{inputs.announce_release}} ]]; then + echo "Can't mark as lates or announce release unless we do a release" exit 1 fi fi - else - if [[ 'true' == ${{ inputs.mark_as_latest }} || 'true' == ${{inputs.announce_release}} ]]; then - echo "Can't mark as lates or announce release unless we do a release" - exit 1 - fi fi else From 47e53e867917fe9ea3017e29cf004d130909fc89 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 20 Dec 2023 09:12:36 +0100 Subject: [PATCH 053/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index fa8bbf8f8dd..f67730ced65 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -167,7 +167,7 @@ jobs: # if we are running as the result of a push rather than a PR the ${{ inputs.* }} flat out don't exist, which makes this code choke. # so skip it when we are doing a push - if [[ 'true' == {{github.event_name == 'push'}} ]]; then + if [[ 'true' == {{ github.event_name == 'push' }} ]]; then # check if we want to be marked as latest, and if we actually should. if [[ 'true' == ${{ inputs.do_release }} ]]; then if [[ 'false' == ${{ inputs.knime }} || 'false' == ${{ inputs.package }} ]]; then From 030591fb06ba574b676860dd7431aef2d616f24e Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 20 Dec 2023 09:17:03 +0100 Subject: [PATCH 054/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index f67730ced65..f6962d50dd5 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -167,7 +167,7 @@ jobs: # if we are running as the result of a push rather than a PR the ${{ inputs.* }} flat out don't exist, which makes this code choke. # so skip it when we are doing a push - if [[ 'true' == {{ github.event_name == 'push' }} ]]; then + if [[ 'true' == ${{ github.event_name == 'push' }} ]]; then # check if we want to be marked as latest, and if we actually should. if [[ 'true' == ${{ inputs.do_release }} ]]; then if [[ 'false' == ${{ inputs.knime }} || 'false' == ${{ inputs.package }} ]]; then From e1a2339c315ff076c2aa10fab18ab132639e95ed Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 20 Dec 2023 09:18:30 +0100 Subject: [PATCH 055/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index f6962d50dd5..39c6203957f 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -167,7 +167,7 @@ jobs: # if we are running as the result of a push rather than a PR the ${{ inputs.* }} flat out don't exist, which makes this code choke. # so skip it when we are doing a push - if [[ 'true' == ${{ github.event_name == 'push' }} ]]; then + if [[ 'false' == ${{ github.event_name == 'push' }} ]]; then # check if we want to be marked as latest, and if we actually should. if [[ 'true' == ${{ inputs.do_release }} ]]; then if [[ 'false' == ${{ inputs.knime }} || 'false' == ${{ inputs.package }} ]]; then From 6631511285d428c9673bbc8415e582f3ea23c026 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 20 Dec 2023 09:29:20 +0100 Subject: [PATCH 056/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 41 +++++++++++++-------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 39c6203957f..cda5121a56c 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -165,28 +165,39 @@ jobs: echo $END awk "NR > $START && NR < $END" OpenMS/CHANGELOG > ${{ github.workspace }}/changelog.txt - # if we are running as the result of a push rather than a PR the ${{ inputs.* }} flat out don't exist, which makes this code choke. - # so skip it when we are doing a push + # if we are running as the result of a push rather than a PR the ${{ inputs.* }} flat out don't exist, which makes the ops checking code choke. + # unfortunately it looks like bash evaluates the syntax even if we never reach the code, so we need to make sure the variables exist + DO_RELEASE = ${{ inputs.do_release }} + KNIME = ${{ inputs.knime }} + PACKAGE = ${{ inputs.package }} + MARK_AS_LATEST = ${{ inputs.mark_as_latest }} + ANNOUNCE_RELEASE = ${{ inputs.announce_release }} if [[ 'false' == ${{ github.event_name == 'push' }} ]]; then - # check if we want to be marked as latest, and if we actually should. - if [[ 'true' == ${{ inputs.do_release }} ]]; then - if [[ 'false' == ${{ inputs.knime }} || 'false' == ${{ inputs.package }} ]]; then - echo "Can't do a release without building the OpenMS package and the KNIME package" - exit 1 - else - if [[ 'true' == ${{ inputs.mark_as_latest }} && "$(git tag -l $VERSION_NUMBER)" ]]; then - echo "Can't mark as latest, a tag with the same version already exists" - exit 1 - fi - fi + DO_RELEASE = 'false' + KNIME = 'false' + PACKAGE = 'false' + MARK_AS_LATEST = 'false' + ANNOUNCE_RELEASE = 'false' + fi + # check if we want to be marked as latest, and if we actually should. + if [[ 'true' == $DO_RELEASE ]]; then + if [[ 'false' == $KNIME || 'false' == $PACKAGE ]]; then + echo "Can't do a release without building the OpenMS package and the KNIME package" + exit 1 else - if [[ 'true' == ${{ inputs.mark_as_latest }} || 'true' == ${{inputs.announce_release}} ]]; then - echo "Can't mark as lates or announce release unless we do a release" + if [[ 'true' == $MARK_AS_LATEST && "$(git tag -l $VERSION_NUMBER)" ]]; then + echo "Can't mark as latest, a tag with the same version already exists" exit 1 fi fi + else + if [[ 'true' == $MARK_AS_LATEST || 'true' == $ANNOUNCE_RELEASE ]]; then + echo "Can't mark as lates or announce release unless we do a release" + exit 1 + fi fi + else echo "Branch name does not match the expected pattern." exit 1 From c55b30bda7999b8587d102a93774d7adf5034a2b Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 20 Dec 2023 09:32:28 +0100 Subject: [PATCH 057/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index cda5121a56c..4908b432d18 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -167,17 +167,19 @@ jobs: # if we are running as the result of a push rather than a PR the ${{ inputs.* }} flat out don't exist, which makes the ops checking code choke. # unfortunately it looks like bash evaluates the syntax even if we never reach the code, so we need to make sure the variables exist - DO_RELEASE = ${{ inputs.do_release }} - KNIME = ${{ inputs.knime }} - PACKAGE = ${{ inputs.package }} - MARK_AS_LATEST = ${{ inputs.mark_as_latest }} - ANNOUNCE_RELEASE = ${{ inputs.announce_release }} + if [[ 'false' == ${{ github.event_name == 'push' }} ]]; then DO_RELEASE = 'false' KNIME = 'false' PACKAGE = 'false' MARK_AS_LATEST = 'false' ANNOUNCE_RELEASE = 'false' + else + DO_RELEASE = ${{ inputs.do_release }} + KNIME = ${{ inputs.knime }} + PACKAGE = ${{ inputs.package }} + MARK_AS_LATEST = ${{ inputs.mark_as_latest }} + ANNOUNCE_RELEASE = ${{ inputs.announce_release }} fi # check if we want to be marked as latest, and if we actually should. if [[ 'true' == $DO_RELEASE ]]; then From 997b612ed337c41dca204b35da0dbed32d440824 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 20 Dec 2023 09:35:23 +0100 Subject: [PATCH 058/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 4908b432d18..c4b3fdfc29b 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -89,7 +89,7 @@ jobs: echo "tp_folder=Linux" >> $GITHUB_OUTPUT echo "xvfb=xvfb-run -a" >> $GITHUB_OUTPUT echo "static_boost=OFF" >> $GITHUB_OUTPUT - if [ "$DO_PACKAGE" = true ]; then + if [ "$DO_PACKAGE" == true ]; then echo "enable_docs=ON" >> $GITHUB_OUTPUT echo "pkg_type=deb" >> $GITHUB_OUTPUT else @@ -168,7 +168,7 @@ jobs: # if we are running as the result of a push rather than a PR the ${{ inputs.* }} flat out don't exist, which makes the ops checking code choke. # unfortunately it looks like bash evaluates the syntax even if we never reach the code, so we need to make sure the variables exist - if [[ 'false' == ${{ github.event_name == 'push' }} ]]; then + if [[ 'true' == ${{ github.event_name == 'push' }} ]]; then DO_RELEASE = 'false' KNIME = 'false' PACKAGE = 'false' From 39d49fecde40a02fc5e63c11b6ceb9889a905ef6 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 20 Dec 2023 09:54:08 +0100 Subject: [PATCH 059/242] Update openms_ci_matrix_full.yml refactor where we check inputs to avoid bash issues. Fix assignment instead of equality test in do_package. Export version number from changelog step --- .github/workflows/openms_ci_matrix_full.yml | 42 +++++++-------------- 1 file changed, 14 insertions(+), 28 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index c4b3fdfc29b..58ce99738fc 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -157,6 +157,7 @@ jobs: then VERSION_NUMBER=${VERSION_NUMBER%.*} fi + echo "version_number=$VERSION_NUMBER" >> $GITHUB_OUTPUT grep -ne "----[[:space:]]*OpenMS" ${{ github.workspace }}/OpenMS/CHANGELOG > index_changelog.txt START=$(cat index_changelog.txt | grep -A 1 -e " $VERSION_NUMBER " | cut -f1 -d: | head -1) END=$(cat index_changelog.txt | grep -A 1 -e " $VERSION_NUMBER " | cut -f1 -d: | tail -1) @@ -164,48 +165,33 @@ jobs: echo $START echo $END awk "NR > $START && NR < $END" OpenMS/CHANGELOG > ${{ github.workspace }}/changelog.txt + else + echo "Branch name does not match the expected pattern." + exit 1 + fi - # if we are running as the result of a push rather than a PR the ${{ inputs.* }} flat out don't exist, which makes the ops checking code choke. - # unfortunately it looks like bash evaluates the syntax even if we never reach the code, so we need to make sure the variables exist - - if [[ 'true' == ${{ github.event_name == 'push' }} ]]; then - DO_RELEASE = 'false' - KNIME = 'false' - PACKAGE = 'false' - MARK_AS_LATEST = 'false' - ANNOUNCE_RELEASE = 'false' - else - DO_RELEASE = ${{ inputs.do_release }} - KNIME = ${{ inputs.knime }} - PACKAGE = ${{ inputs.package }} - MARK_AS_LATEST = ${{ inputs.mark_as_latest }} - ANNOUNCE_RELEASE = ${{ inputs.announce_release }} - fi + - name: check input options + if: github.event_name == workflow_dispatch + shell: bash + run: | # check if we want to be marked as latest, and if we actually should. - if [[ 'true' == $DO_RELEASE ]]; then - if [[ 'false' == $KNIME || 'false' == $PACKAGE ]]; then + if [[ 'true' == ${{ inputs.do_release }} ]]; then + if [[ 'false' == ${{ inputs.knime }} || 'false' == ${{ inputs.package }} ]]; then echo "Can't do a release without building the OpenMS package and the KNIME package" exit 1 else - if [[ 'true' == $MARK_AS_LATEST && "$(git tag -l $VERSION_NUMBER)" ]]; then + if [[ 'true' == ${{ inputs.mark_as_latest }} && "$(git tag -l ${{ steps.create_changelog.outputs.version_number }})" ]]; then echo "Can't mark as latest, a tag with the same version already exists" exit 1 fi fi else - if [[ 'true' == $MARK_AS_LATEST || 'true' == $ANNOUNCE_RELEASE ]]; then + if [[ 'true' == ${{ inputs.mark_as_latest }} || 'true' == ${{inputs.announce_release}} ]]; then echo "Can't mark as lates or announce release unless we do a release" exit 1 fi fi - - else - echo "Branch name does not match the expected pattern." - exit 1 - fi - - - name: Emulate a Visual Studio shell (Windows) if: startsWith(matrix.os, 'windows') @@ -559,7 +545,7 @@ jobs: cat > releaseTextHeader.txt << EOF Dear OpenMS-Users, - we are proud to announce the release of OpenMS $version. Grab it here + we are proud to announce the release of OpenMS ${{ jobs.build_and_test.outputs.version_number }}. Grab it here In the following you find all important changes to the previous version: From f416da1ef559555ad615cc8bdd4c5302fce4042a Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 20 Dec 2023 10:01:18 +0100 Subject: [PATCH 060/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 58ce99738fc..76aaa2e9622 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -67,6 +67,8 @@ jobs: - os: ubuntu-22.04 compiler: clang++ compiler_ver: 15 + outputs: + version_number: ${{ steps.create_changelog.outputs.version_number }} runs-on: ${{ matrix.os }} @@ -545,7 +547,7 @@ jobs: cat > releaseTextHeader.txt << EOF Dear OpenMS-Users, - we are proud to announce the release of OpenMS ${{ jobs.build_and_test.outputs.version_number }}. Grab it here + we are proud to announce the release of OpenMS ${{ needs.build_and_test.outputs.version_number }}. Grab it here In the following you find all important changes to the previous version: From b6683178538ccc938908278dcb9b1d96c24b9b83 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 20 Dec 2023 10:04:13 +0100 Subject: [PATCH 061/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 76aaa2e9622..934c8315fb2 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -547,7 +547,7 @@ jobs: cat > releaseTextHeader.txt << EOF Dear OpenMS-Users, - we are proud to announce the release of OpenMS ${{ needs.build_and_test.outputs.version_number }}. Grab it here + we are proud to announce the release of OpenMS ${{ needs.build_and_test.outputs.version_number }}. Grab it here In the following you find all important changes to the previous version: From 2430fc9fdfc42e539eb11e125346c3104878c5fe Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 20 Dec 2023 10:08:56 +0100 Subject: [PATCH 062/242] Update openms_ci_matrix_full.yml why the heck is it workflow_run when the value is workflow_dispatch? --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 934c8315fb2..456ab28e4bc 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -173,7 +173,7 @@ jobs: fi - name: check input options - if: github.event_name == workflow_dispatch + if: github.event_name == workflow_run shell: bash run: | # check if we want to be marked as latest, and if we actually should. From ec6aa46f858d741f4ff79ff0bc8a5c20796b3684 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 20 Dec 2023 10:13:08 +0100 Subject: [PATCH 063/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 456ab28e4bc..da36123fd70 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -173,7 +173,7 @@ jobs: fi - name: check input options - if: github.event_name == workflow_run + if: github.event_name == 'workflow_dispatch' shell: bash run: | # check if we want to be marked as latest, and if we actually should. From bf6906785dc5358e5e5f2b99abbe7a14401f333d Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Fri, 2 Feb 2024 10:16:32 +0100 Subject: [PATCH 064/242] Update update_nightly.yml --- .github/workflows/update_nightly.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index f449280d8f3..421ceeee79a 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -20,4 +20,4 @@ jobs: allow_ff: true ff_only: true env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.OPENMS_GITHUB_APP_PRIVATE_KEY }} From 45cb7b7a8746eed8ecf019752762579ac5ca0d1f Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Fri, 2 Feb 2024 11:09:57 +0100 Subject: [PATCH 065/242] [DOC] rename doxygen files for better structure; move OpenMS developer tutorial to common place; removed 'known dev bugs' since its very outdated. --- .../images/ExperimentalSettings.graphml | 866 +++++++++--------- .../images/ExperimentalSettings.png | Bin .../images/Kernel.graphml | 328 +++---- .../images/Kernel.png | Bin .../images/Kernel_DataPoints.png | Bin .../images/MetaInfo.graphml | 216 ++--- .../images/MetaInfo.png | Bin .../images/OpenMS_overview.png | Bin .../images/RawPeakFeatureMap.png | Bin .../images/SpectrumSettings.graphml | 700 +++++++------- .../images/SpectrumSettings.png | Bin .../images/Terms_Map.png | Bin .../images/Terms_Spectrum.png | Bin doc/doxygen/install/install-linux.doxygen | 2 +- doc/doxygen/install/install-macs.doxygen | 4 +- doc/doxygen/install/install-win.doxygen | 6 +- doc/doxygen/public/KnownDevBugs.doxygen | 54 -- doc/doxygen/public/Main.doxygen | 19 +- .../public/OpenMS_Tutorial_html.doxygen | 60 -- ...n => developer_coding_conventions.doxygen} | 4 +- ...de.doxygen => developer_cpp_guide.doxygen} | 2 +- ...oper-faq.doxygen => developer_faq.doxygen} | 37 +- ...n => developer_how_to_write_tests.doxygen} | 2 +- .../public/developer_tutorial.doxygen} | 13 +- .../public/{FAQ.doxygen => user_FAQ.doxygen} | 2 +- 25 files changed, 1118 insertions(+), 1197 deletions(-) rename doc/{OpenMS_tutorial => doxygen}/images/ExperimentalSettings.graphml (98%) rename doc/{OpenMS_tutorial => doxygen}/images/ExperimentalSettings.png (100%) mode change 100755 => 100644 rename doc/{OpenMS_tutorial => doxygen}/images/Kernel.graphml (98%) rename doc/{OpenMS_tutorial => doxygen}/images/Kernel.png (100%) rename doc/{OpenMS_tutorial => doxygen}/images/Kernel_DataPoints.png (100%) mode change 100755 => 100644 rename doc/{OpenMS_tutorial => doxygen}/images/MetaInfo.graphml (98%) rename doc/{OpenMS_tutorial => doxygen}/images/MetaInfo.png (100%) mode change 100755 => 100644 rename doc/{OpenMS_tutorial => doxygen}/images/OpenMS_overview.png (100%) rename doc/{OpenMS_tutorial => doxygen}/images/RawPeakFeatureMap.png (100%) rename doc/{OpenMS_tutorial => doxygen}/images/SpectrumSettings.graphml (98%) rename doc/{OpenMS_tutorial => doxygen}/images/SpectrumSettings.png (100%) mode change 100755 => 100644 rename doc/{OpenMS_tutorial => doxygen}/images/Terms_Map.png (100%) mode change 100755 => 100644 rename doc/{OpenMS_tutorial => doxygen}/images/Terms_Spectrum.png (100%) mode change 100755 => 100644 delete mode 100644 doc/doxygen/public/KnownDevBugs.doxygen delete mode 100755 doc/doxygen/public/OpenMS_Tutorial_html.doxygen rename doc/doxygen/public/{coding-conventions.doxygen => developer_coding_conventions.doxygen} (99%) rename doc/doxygen/public/{cpp-guide.doxygen => developer_cpp_guide.doxygen} (99%) rename doc/doxygen/public/{developer-faq.doxygen => developer_faq.doxygen} (85%) rename doc/doxygen/public/{how-to-write-tests.doxygen => developer_how_to_write_tests.doxygen} (99%) rename doc/{OpenMS_tutorial/developer_Tutorial.doxygen => doxygen/public/developer_tutorial.doxygen} (97%) mode change 100755 => 100644 rename doc/doxygen/public/{FAQ.doxygen => user_FAQ.doxygen} (99%) diff --git a/doc/OpenMS_tutorial/images/ExperimentalSettings.graphml b/doc/doxygen/images/ExperimentalSettings.graphml similarity index 98% rename from doc/OpenMS_tutorial/images/ExperimentalSettings.graphml rename to doc/doxygen/images/ExperimentalSettings.graphml index 55b6d24dcc1..158e29493f0 100644 --- a/doc/OpenMS_tutorial/images/ExperimentalSettings.graphml +++ b/doc/doxygen/images/ExperimentalSettings.graphml @@ -1,433 +1,433 @@ - - - - - - - - - - - - - - - ExperimentalSettings - - - - - - - - - - - - - - - Sample - - - - - - - - - - - - - - - SampleTreatment - - - - - - - - - - - - - - - SourceFile - - - - - - - - - - - - - - - ContactPerson - - - - - - - - - - - - - - - Instrument - - - - - - - - - - - - - - - IonSource - - - - - - - - - - - - - - - MassAnalyzer - - - - - - - - - - - - - - - Detector - - - - - - - - - - - - - - - Software - - - - - - - - - - - - - - - HPLC - - - - - - - - - - - - - - - Gradient - - - - - - - - - - - - - - - ProteinIdentification - - - - - - - - - - - - - - - ProteinHit - - - - - - - - - - - - - - - - - - - - - - UMLhas - - - - - - - - - - - - - * - - - - UMLhas - - - - - - - - * - - - - UMLhas - - - - - - - - - - - - * - - - - UMLhas - - - - - - - - - - - - * - - - - UMLhas - - - - - - - - - - - - - - - UMLhas - - - - - - - - - - - - * - - - - UMLhas - - - - - - - - - - - - * - - - - UMLhas - - - - - - - - - - - - * - - - - UMLhas - - - - - - - - - - - - - - - UMLhas - - - - - - - - - - - - - - - UMLhas - - - - - - - - - - - - UMLhas - - - - - - - - - * - - - - UMLhas - - - - - - - - - - - - * - - - - UMLhas - - - - - - + + + + + + + + + + + + + + + ExperimentalSettings + + + + + + + + + + + + + + + Sample + + + + + + + + + + + + + + + SampleTreatment + + + + + + + + + + + + + + + SourceFile + + + + + + + + + + + + + + + ContactPerson + + + + + + + + + + + + + + + Instrument + + + + + + + + + + + + + + + IonSource + + + + + + + + + + + + + + + MassAnalyzer + + + + + + + + + + + + + + + Detector + + + + + + + + + + + + + + + Software + + + + + + + + + + + + + + + HPLC + + + + + + + + + + + + + + + Gradient + + + + + + + + + + + + + + + ProteinIdentification + + + + + + + + + + + + + + + ProteinHit + + + + + + + + + + + + + + + + + + + + + + UMLhas + + + + + + + + + + + + + * + + + + UMLhas + + + + + + + + * + + + + UMLhas + + + + + + + + + + + + * + + + + UMLhas + + + + + + + + + + + + * + + + + UMLhas + + + + + + + + + + + + + + + UMLhas + + + + + + + + + + + + * + + + + UMLhas + + + + + + + + + + + + * + + + + UMLhas + + + + + + + + + + + + * + + + + UMLhas + + + + + + + + + + + + + + + UMLhas + + + + + + + + + + + + + + + UMLhas + + + + + + + + + + + + UMLhas + + + + + + + + + * + + + + UMLhas + + + + + + + + + + + + * + + + + UMLhas + + + + + + diff --git a/doc/OpenMS_tutorial/images/ExperimentalSettings.png b/doc/doxygen/images/ExperimentalSettings.png old mode 100755 new mode 100644 similarity index 100% rename from doc/OpenMS_tutorial/images/ExperimentalSettings.png rename to doc/doxygen/images/ExperimentalSettings.png diff --git a/doc/OpenMS_tutorial/images/Kernel.graphml b/doc/doxygen/images/Kernel.graphml similarity index 98% rename from doc/OpenMS_tutorial/images/Kernel.graphml rename to doc/doxygen/images/Kernel.graphml index 9d1a540364a..b1250b3fc8a 100644 --- a/doc/OpenMS_tutorial/images/Kernel.graphml +++ b/doc/doxygen/images/Kernel.graphml @@ -1,164 +1,164 @@ - - - - - - - - - - - - - - - MSSpectrum - - - retention_time: DoubleReal -- ms_level: Integer - - - - - UMLClass - - - - - - - - T - - - - - - - - - - - - Peak1D - - - position: DoubleReal -- intensity: Real - - - - - UMLClass - - - - - - - - MSExperiment - - - - - - - UMLClass - - - - - - - - T - - - - - - - - - - - - ExperimentalSettings - - - - - - - UMLClass - - - - - - - - SpectrumSettings - - - - - - - UMLClass - - - - - - - - - 0..* - - - - UMLhas - - - - - - - - - 0..* - - - - UMLuses - - - - - - - - - - - - UMLinherits - - - - - - - - - - - - UMLinherits - - - - - - + + + + + + + + + + + + + + + MSSpectrum + + - retention_time: DoubleReal +- ms_level: Integer + + + + + UMLClass + + + + + + + + T + + + + + + + + + + + + Peak1D + + - position: DoubleReal +- intensity: Real + + + + + UMLClass + + + + + + + + MSExperiment + + + + + + + UMLClass + + + + + + + + T + + + + + + + + + + + + ExperimentalSettings + + + + + + + UMLClass + + + + + + + + SpectrumSettings + + + + + + + UMLClass + + + + + + + + + 0..* + + + + UMLhas + + + + + + + + + 0..* + + + + UMLuses + + + + + + + + + + + + UMLinherits + + + + + + + + + + + + UMLinherits + + + + + + diff --git a/doc/OpenMS_tutorial/images/Kernel.png b/doc/doxygen/images/Kernel.png similarity index 100% rename from doc/OpenMS_tutorial/images/Kernel.png rename to doc/doxygen/images/Kernel.png diff --git a/doc/OpenMS_tutorial/images/Kernel_DataPoints.png b/doc/doxygen/images/Kernel_DataPoints.png old mode 100755 new mode 100644 similarity index 100% rename from doc/OpenMS_tutorial/images/Kernel_DataPoints.png rename to doc/doxygen/images/Kernel_DataPoints.png diff --git a/doc/OpenMS_tutorial/images/MetaInfo.graphml b/doc/doxygen/images/MetaInfo.graphml similarity index 98% rename from doc/OpenMS_tutorial/images/MetaInfo.graphml rename to doc/doxygen/images/MetaInfo.graphml index 9d4cbad290d..6daa94e5f51 100644 --- a/doc/OpenMS_tutorial/images/MetaInfo.graphml +++ b/doc/doxygen/images/MetaInfo.graphml @@ -1,108 +1,108 @@ - - - - - - - - - - - - - - - MetaInfo - - - - - - - - - - - - - - - MetaInfoInterface - - - - - - - - - - - - - - - DataValue - - - - - - - - - - - - - - - MetaInfoRegistry - - - - - - - - - - - - - - - * - - - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + MetaInfo + + + + + + + + + + + + + + + MetaInfoInterface + + + + + + + + + + + + + + + DataValue + + + + + + + + + + + + + + + MetaInfoRegistry + + + + + + + + + + + + + + + * + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/OpenMS_tutorial/images/MetaInfo.png b/doc/doxygen/images/MetaInfo.png old mode 100755 new mode 100644 similarity index 100% rename from doc/OpenMS_tutorial/images/MetaInfo.png rename to doc/doxygen/images/MetaInfo.png diff --git a/doc/OpenMS_tutorial/images/OpenMS_overview.png b/doc/doxygen/images/OpenMS_overview.png similarity index 100% rename from doc/OpenMS_tutorial/images/OpenMS_overview.png rename to doc/doxygen/images/OpenMS_overview.png diff --git a/doc/OpenMS_tutorial/images/RawPeakFeatureMap.png b/doc/doxygen/images/RawPeakFeatureMap.png similarity index 100% rename from doc/OpenMS_tutorial/images/RawPeakFeatureMap.png rename to doc/doxygen/images/RawPeakFeatureMap.png diff --git a/doc/OpenMS_tutorial/images/SpectrumSettings.graphml b/doc/doxygen/images/SpectrumSettings.graphml similarity index 98% rename from doc/OpenMS_tutorial/images/SpectrumSettings.graphml rename to doc/doxygen/images/SpectrumSettings.graphml index f9bf3afd657..e0365a24265 100644 --- a/doc/OpenMS_tutorial/images/SpectrumSettings.graphml +++ b/doc/doxygen/images/SpectrumSettings.graphml @@ -1,350 +1,350 @@ - - - - - - - - - - - - - - - SpectrumSettings - - - - - - - - - - - - - - - SourceFile - - - - - - - - - - - - - - - AcquisitionInfo - - - - - - - - - - - - - - - Precursor - - - - - - - - - - - - - - - Product - - - - - - - - - - - - - - - DataProcessing - - - - - - - - - - - - - - - InstrumentSettings - - - - - - - - - - - - - - - ScanWindow - - - - - - - - - - - - - - - Software - - - - - - - - - - - - - - - Acquisition - - - - - - - - - - - - - - - PeptideIdentification - - - - - - - - - - - - - - - PeptideHit - - - - - - - - - - - - - - - - - - - - - - UMLhas - - - - - - - - - - - - - - - UMLhas - - - - - - - - - * - - - - UMLhas - - - - - - - - - - - - * - - - - UMLhas - - - - - - - - - - - - * - - - - UMLhas - - - - - - - - - - - - - - - UMLhas - - - - - - - - - * - - - - UMLhas - - - - - - - - - - - - UMLhas - - - - - - - - - * - - - - UMLhas - - - - - - - - - * - - - - UMLhas - - - - - - - - - - - - * - - - - UMLhas - - - - - - + + + + + + + + + + + + + + + SpectrumSettings + + + + + + + + + + + + + + + SourceFile + + + + + + + + + + + + + + + AcquisitionInfo + + + + + + + + + + + + + + + Precursor + + + + + + + + + + + + + + + Product + + + + + + + + + + + + + + + DataProcessing + + + + + + + + + + + + + + + InstrumentSettings + + + + + + + + + + + + + + + ScanWindow + + + + + + + + + + + + + + + Software + + + + + + + + + + + + + + + Acquisition + + + + + + + + + + + + + + + PeptideIdentification + + + + + + + + + + + + + + + PeptideHit + + + + + + + + + + + + + + + + + + + + + + UMLhas + + + + + + + + + + + + + + + UMLhas + + + + + + + + + * + + + + UMLhas + + + + + + + + + + + + * + + + + UMLhas + + + + + + + + + + + + * + + + + UMLhas + + + + + + + + + + + + + + + UMLhas + + + + + + + + + * + + + + UMLhas + + + + + + + + + + + + UMLhas + + + + + + + + + * + + + + UMLhas + + + + + + + + + * + + + + UMLhas + + + + + + + + + + + + * + + + + UMLhas + + + + + + diff --git a/doc/OpenMS_tutorial/images/SpectrumSettings.png b/doc/doxygen/images/SpectrumSettings.png old mode 100755 new mode 100644 similarity index 100% rename from doc/OpenMS_tutorial/images/SpectrumSettings.png rename to doc/doxygen/images/SpectrumSettings.png diff --git a/doc/OpenMS_tutorial/images/Terms_Map.png b/doc/doxygen/images/Terms_Map.png old mode 100755 new mode 100644 similarity index 100% rename from doc/OpenMS_tutorial/images/Terms_Map.png rename to doc/doxygen/images/Terms_Map.png diff --git a/doc/OpenMS_tutorial/images/Terms_Spectrum.png b/doc/doxygen/images/Terms_Spectrum.png old mode 100755 new mode 100644 similarity index 100% rename from doc/OpenMS_tutorial/images/Terms_Spectrum.png rename to doc/doxygen/images/Terms_Spectrum.png diff --git a/doc/doxygen/install/install-linux.doxygen b/doc/doxygen/install/install-linux.doxygen index dcbb7b7163a..61817b4fa62 100644 --- a/doc/doxygen/install/install-linux.doxygen +++ b/doc/doxygen/install/install-linux.doxygen @@ -4,7 +4,7 @@ This document describes how to build %OpenMS on a GNU/Linux system from source. If you encounter errors during configuring/compiling our software, - have a look at our @ref known_dev_bugs section and search in our issue tracker, + search in our issue tracker, maybe the error is already known. If not, please write to the mailing list or report the error on our issue tracker. diff --git a/doc/doxygen/install/install-macs.doxygen b/doc/doxygen/install/install-macs.doxygen index aa33d579f3d..8a44da1c34f 100644 --- a/doc/doxygen/install/install-macs.doxygen +++ b/doc/doxygen/install/install-macs.doxygen @@ -17,8 +17,8 @@ are required by %OpenMS. Most of these libraries are made available in our "contrib-package" (see below).
- If you encounter errors during configuring/compiling our software, have a - look at our @ref known_dev_bugs section, maybe the error is + If you encounter errors during configuring/compiling our software, + search in our issue tracker, already known. If not, please write to the mailing list (open-ms-general AT lists.sourceforge.net) or report the error on our issue tracker. diff --git a/doc/doxygen/install/install-win.doxygen b/doc/doxygen/install/install-win.doxygen index 95ecb6e3df1..aef26879918 100644 --- a/doc/doxygen/install/install-win.doxygen +++ b/doc/doxygen/install/install-win.doxygen @@ -15,8 +15,10 @@ This document especially considers the installation of several libraries which are required by %OpenMS. Most of these libraries are made available in our "contrib-package" (see below).
- If you encounter errors during configuring/compiling our software, have a look at our "Known Issues" section \ref known_dev_bugs "here", - maybe the error is already known. If not, please write to the mailing list. + If you encounter errors during configuring/compiling our software, + search in our issue tracker, + already known. If not, please write to the mailing list (open-ms-general AT lists.sourceforge.net) or report the error + on our issue tracker.

diff --git a/doc/doxygen/public/KnownDevBugs.doxygen b/doc/doxygen/public/KnownDevBugs.doxygen deleted file mode 100644 index d17289dd4f2..00000000000 --- a/doc/doxygen/public/KnownDevBugs.doxygen +++ /dev/null @@ -1,54 +0,0 @@ -/** - @page known_dev_bugs Known Issues - - Have look at the Internal FAQ, if you cannot find your answer here. Write to the %OpenMS mailing list, if the problem persists. - - @section known_issues_windows Known Issues on Windows - -
    -
  • Starting a (GUI) TOPP executable (like TOPPView or FeatureFinderCentroided) gives "The application was unable to start correctly (0xc0000005). Click OK to close the application"
    - When you run the tool in Debug mode and look where it crashes, you might actually find it to be a very weird place - e.g. when creating a perfectly legal String from a QString: -@code - QFileInfo fi(file.toQString()); - return fi.path() -@endcode - The reason this happens is usually: you've mixed DLL's from multiple runtimes (e.g. compiled with VS10 and VS9). This can easily happen, - if you use your Qt (build with VS9) to link against your %OpenMS (build with VS10). The loader will load VS9 and VS10 runtimes and will NOT - tell you that they conflict. Instead, very weird things are going to happen. - You can identify if you are affected by looking at the DLL's that are loaded via daisy-chaining - see either DependencyWalker's output or the 'output' - window in VS when running the app from inside VS. It might read: -@code -'MSSimulator.exe': Loaded 'C:\Windows\winsxs\amd64_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.21022.8_none_4ec74c6b3093419c\msvcp90d.dll', Symbols loaded. -'MSSimulator.exe': Loaded 'C:\Windows\winsxs\amd64_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.21022.8_none_4ec74c6b3093419c\msvcr90d.dll', Symbols loaded. -'MSSimulator.exe': Loaded 'C:\dev\qt-everywhere-opensource-src-4.7.1\bin\QtSqld4.dll', Symbols loaded. -@endcode - As this was a VS10 build, the vc90 DLL's have no place here, but got loaded from the Qt4 DLL's.
    - Solution: recompile Qt (in this case) using VS10 and link against the new Qt.
  • -
  • Starting a (GUI) TOPP executable (like TOPPView or FeatureFinderCentroided) gives "Entry point not found"
    - This usually happens when your PATH contains multiple versions of DLL's on which TOPP/%OpenMS depends. - Candidates are all QT (QtGui4.dll, QtCore4.dll, ...) or Xerces-C (xerces-c_3_0) libraries. - Usually other external programs (Miktex, Mendeley etc) put their own binary directory (which contains these incompatible DLL's) before - the contrib directory in your %PATH%.
    - Solution: put the contrib directory at the very beginning of your %PATH%. The other tools should be unaffected as DLL's are first searched in the path of the executable (where their DLL's should be as well). We do that for %OpenMS as well, but only in the binary installer packages, not for the developer version.
  • -
  • Compiling the contrib or %OpenMS, the windows.h header file seems to be missing!
    - Your error message might look like this: -@code -c:\dev\contrib_build\src\bzip2-1.0.5\bzlib.h(79) : fatal error C1083: -Cannot open include file: 'windows.h': No such file or directory -@endcode - This can happen if you are using the VS Express Edition or VS2008 on Win7 (other cases might be possible as well). - The reason is that your INCLUDE environment path does not contain the system header windows.h, which is required by the contrib and %OpenMS.
    - Solution: You need to download the Microsoft SDK for Windows 7 (or whatever your OS is). Make sure to select "Header Files" Section during install and make sure that the SDK's include path is in your INCLUDE environment.
  • -
- - @section known_issues_linux Known Issues on Linux - -
    -
  • Contrib fails to compile on Ubuntu 10.04 Your error message might look like: -@code -gzip: stdin: invalid compressed data--crc error -@endcode -This happens with a buggy version of gzip in Ubuntu 10.04.
    -Solution: To solve this issue update gzip using lucid-proposed (see https://wiki.ubuntu.com/Testing/EnableProposed) -
-*/ diff --git a/doc/doxygen/public/Main.doxygen b/doc/doxygen/public/Main.doxygen index 0a1cd931402..b70de32a9e8 100755 --- a/doc/doxygen/public/Main.doxygen +++ b/doc/doxygen/public/Main.doxygen @@ -18,7 +18,7 @@

%OpenMS library

- Information for developers (please make sure to read the Developer Quickstart Guide). + Information for developers (please make sure to read the @ref developer_tutorial).
  @@ -39,7 +39,7 @@ Misc:
    -
  • @subpage FAQ +
  • @subpage user_FAQ
  • @subpage ChangeLog
@@ -56,24 +56,19 @@ Development:
    -
  • @subpage developer_tutorial -
  • @subpage coding_conventions +
  • @subpage developer_tutorial +
  • @subpage developer_coding_conventions
  • @subpage developer_faq -
  • @subpage cpp_guide -
  • @subpage how_to_write_tests +
  • @subpage developer_cpp_guide +
  • @subpage developer_how_to_write_tests
Documentation: - Misc: -
    -
  • @subpage known_dev_bugs -
- diff --git a/doc/doxygen/public/OpenMS_Tutorial_html.doxygen b/doc/doxygen/public/OpenMS_Tutorial_html.doxygen deleted file mode 100755 index 6a5fd808177..00000000000 --- a/doc/doxygen/public/OpenMS_Tutorial_html.doxygen +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2002-2023, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -------------------------------------------------------------------------- -// $Maintainer: $ -// $Authors: Marc Sturm, Oliver Alka $ -// -------------------------------------------------------------------------- - -/** - - @page developer_tutorial Developer C++ Quickstart Guide - - First, we give a small introduction to this tutorial and %OpenMS: - - @subpage tutorial_introduction - - @subpage tutorial_gf - - @subpage tutorial_structure - - @subpage tutorial_developing - - @subpage tutorial_terms - - Then you should read about the basic classes and concepts of %OpenMS: - - @subpage tutorial_library - - @subpage tutorial_library_overview - - @subpage tutorial_library_kernelclasses - - @subpage tutorial_library_kernelclasses_peaks - - @subpage tutorial_library_kernelclasses_spectra - - @subpage tutorial_library_kernelclasses_chrom - - @subpage tutorial_library_kernelclasses_precursor - - @subpage tutorial_library_kernelclasses_mrm - - @subpage tutorial_library_kernelclasses_map - - @subpage tutorial_library_kernelclasses_mse - - @subpage tutorial_library_kernelclasses_fmap - - @subpage tutorial_fileformat - - @subpage tutorial_logging - - @subpage tutorial_identifications - - @subpage tutorial_chemistry - - @subpage tutorial_element - - @subpage tutorial_aaseq - - @subpage tutorial_residue - - @subpage tutorial_residuemod - - @subpage tutorial_tsg - - @subpage tutorial_dep - - Here you can read about how to create a TOPP-Tool in %OpenMS: - - @subpage tutorial_topp - - @subpage tutorial_create - - @subpage tutorial_param_def - - @subpage tutorial_param_read - - @subpage tutorial_read - - @subpage tutorial_add - - @subpage tutorial_write - - @subpage tutorial_test - - @subpage tutorial_doc - - @subpage tutorial_polish - - @subpage tutorial_pull - - Here you find additional Information: - - @subpage tutorial_appendix - - @subpage tutorial_d_dim - - @subpage tutorial_ext_project - -*/ diff --git a/doc/doxygen/public/coding-conventions.doxygen b/doc/doxygen/public/developer_coding_conventions.doxygen similarity index 99% rename from doc/doxygen/public/coding-conventions.doxygen rename to doc/doxygen/public/developer_coding_conventions.doxygen index 3e0d8c20cab..b280f49d0d0 100644 --- a/doc/doxygen/public/coding-conventions.doxygen +++ b/doc/doxygen/public/developer_coding_conventions.doxygen @@ -1,6 +1,6 @@ /** - @page coding_conventions Coding Conventions + @page developer_coding_conventions Coding Conventions Use the following code conventions when contributing to %OpenMS. @@ -505,7 +505,7 @@ @section testing Testing - View the @subpage how_to_write_tests guidelines to learn how to write tests. + View the @subpage developer_how_to_write_tests guidelines to learn how to write tests. @section revision_control Revision control %OpenMS uses git to manage different versions of the source files. For easier identification of the responsible person each %OpenMS file contains the $Maintainer:$ string in the preamble. diff --git a/doc/doxygen/public/cpp-guide.doxygen b/doc/doxygen/public/developer_cpp_guide.doxygen similarity index 99% rename from doc/doxygen/public/cpp-guide.doxygen rename to doc/doxygen/public/developer_cpp_guide.doxygen index cd811c18021..ca2267b1319 100644 --- a/doc/doxygen/public/cpp-guide.doxygen +++ b/doc/doxygen/public/developer_cpp_guide.doxygen @@ -1,6 +1,6 @@ /** -@page cpp_guide CPP Guide +@page developer_cpp_guide CPP Guide The following page contains general C++ guidelines that are not OpenMS-specific. diff --git a/doc/doxygen/public/developer-faq.doxygen b/doc/doxygen/public/developer_faq.doxygen similarity index 85% rename from doc/doxygen/public/developer-faq.doxygen rename to doc/doxygen/public/developer_faq.doxygen index 0c0245fd0ce..0d09f81d11a 100644 --- a/doc/doxygen/public/developer-faq.doxygen +++ b/doc/doxygen/public/developer_faq.doxygen @@ -10,7 +10,7 @@ @subsection written_class_for_openms I have written a class for OpenMS. What should I do? - Follow the @subpage coding_conventions. + Follow the @subpage developer_coding_conventions. To summarize:
    @@ -200,6 +200,8 @@ Windows (Visual studio console): See Dependency Walker. Use the x64 version for 64 bit builds. Using the wrong version of depends.exe will give the wrong results. Or dumpbin /DEPENDENTS OpenMS.dll. + + @subsection how_to_get_a_list How to get a list of the symbols defined in a (shared) library or object file? Linux: Use nm <library>. @@ -210,6 +212,39 @@ Use dumpbin on object files (.o) or (shared) library files (.lib) or the DLL itself e.g. dumpbin /EXPORTS OpenMS.dll. + + + @subsection dev_faq_application_not_starting Why does my TOPP tool fail to start + +
      +
    1. + Starting a (GUI) TOPP executable (like TOPPView or FeatureFinderCentroided) gives "The application was unable to start correctly (0xc0000005). Click OK to close the application"
      + When you run the tool in Debug mode and look where it crashes, you might actually find it to be a very weird place - e.g. when creating a perfectly legal String from a QString: +@code + QFileInfo fi(file.toQString()); + return fi.path() +@endcode + The reason this happens is usually: you've mixed DLL's from multiple runtimes (e.g. compiled with VS10 and VS9). This can easily happen, + if you use your Qt (build with VS9) to link against your %OpenMS (build with VS10). The loader will load VS9 and VS10 runtimes and will NOT + tell you that they conflict. Instead, very weird things are going to happen. + You can identify if you are affected by looking at the DLL's that are loaded via daisy-chaining - see either DependencyWalker's output or the 'output' + window in VS when running the app from inside VS. It might read: +@code +'MSSimulator.exe': Loaded 'C:\Windows\winsxs\amd64_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.21022.8_none_4ec74c6b3093419c\msvcp90d.dll', Symbols loaded. +'MSSimulator.exe': Loaded 'C:\Windows\winsxs\amd64_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.21022.8_none_4ec74c6b3093419c\msvcr90d.dll', Symbols loaded. +'MSSimulator.exe': Loaded 'C:\dev\qt-everywhere-opensource-src-4.7.1\bin\QtSqld4.dll', Symbols loaded. +@endcode + As this was a VS10 build, the vc90 DLL's have no place here, but got loaded from the Qt4 DLL's.
      + Solution: recompile Qt (in this case) using VS10 and link against the new Qt. +
    2. +
    3. Starting a (GUI) TOPP executable (like TOPPView or FeatureFinderCentroided) gives "Entry point not found"
      + This usually happens when your PATH contains multiple versions of DLL's on which TOPP/%OpenMS depends. + Candidates are all QT (QtGui4.dll, QtCore4.dll, ...) or Xerces-C (xerces-c_3_0) libraries. + Usually other external programs (Miktex, Mendeley etc) put their own binary directory (which contains these incompatible DLL's) before + the contrib directory in your %PATH%.
      + Solution: put the contrib directory at the very beginning of your %PATH%. The other tools should be unaffected as DLL's are first searched in the path of the executable (where their DLL's should be as well). We do that for %OpenMS as well, but only in the binary installer packages, not for the developer version.
    4. +
    + @subsection how_to_profile_code How to profile code To just obtain overall runtime and peak RAM usage of a TOPP tool, the easiest is probably `/usr/bin/time` (or https://github.com/cbielow/wintime for Windows). diff --git a/doc/doxygen/public/how-to-write-tests.doxygen b/doc/doxygen/public/developer_how_to_write_tests.doxygen similarity index 99% rename from doc/doxygen/public/how-to-write-tests.doxygen rename to doc/doxygen/public/developer_how_to_write_tests.doxygen index 3128fc7a370..9ad9854455b 100644 --- a/doc/doxygen/public/how-to-write-tests.doxygen +++ b/doc/doxygen/public/developer_how_to_write_tests.doxygen @@ -1,5 +1,5 @@ /** - @page how_to_write_tests How To Write Tests + @page developer_how_to_write_tests How To Write Tests Testing is crucial to verify the correctness of the library - especially when using C++. But it is complicated. One of the biggest problems when building large class frameworks is portability. There is not a single C++ compiler that accepts the same code as any other compiler. Since one of the main concerns of OpenMS is portability, we have to ensure that every single line of code compiles on all platforms. Due to the long compilation times and the (hopefully in future) large number of different platforms, tests to verify the correct behaviour of all classes have to be carried out automatically. This implies a well defined interface for all tests, which is the reason for all these strange macros. This fixed format also enforces the writing of complete class tests. diff --git a/doc/OpenMS_tutorial/developer_Tutorial.doxygen b/doc/doxygen/public/developer_tutorial.doxygen old mode 100755 new mode 100644 similarity index 97% rename from doc/OpenMS_tutorial/developer_Tutorial.doxygen rename to doc/doxygen/public/developer_tutorial.doxygen index e2ed9c525a9..728ec408db2 --- a/doc/OpenMS_tutorial/developer_Tutorial.doxygen +++ b/doc/doxygen/public/developer_tutorial.doxygen @@ -25,7 +25,10 @@ /** -@page tutorial OpenMS Developer Quickstart Guide +@page developer_tutorial OpenMS Developer Guide + +@tableofcontents + @section tutorial_introduction Introduction @subsection tutorial_gf General Information @@ -35,10 +38,10 @@ Mass spectrometry (MS) is an essential analytical technique for high-throughput %OpenMS, a software framework for rapid application and method development in mass spectrometry has been designed to be portable, easy-to-use, and robust while offering a rich functionality ranging from basic data structures to sophisticated algorithms for data analysis (https://www.nature.com/nmeth/journal/v13/n9/abs/nmeth.3959.html).
    Ease of use: -%OpenMS follows the object-oriented programming paradigm, which aims at mapping real-world entities to comprehensible data structures and interfaces. %OpenMS enforces @ref coding_conventions that ensure consistent names of classes, methods and member variables which increases the usability as a software library. Another important feature of a software framework is documentation. We decided to use doxygen to generate the class documentation from the source code, which ensures consistency of code and documentation. The documentation is generated in HTML format making it easy to read with a web browser.
    +%OpenMS follows the object-oriented programming paradigm, which aims at mapping real-world entities to comprehensible data structures and interfaces. %OpenMS enforces @ref developer_coding_conventions that ensure consistent names of classes, methods and member variables which increases the usability as a software library. Another important feature of a software framework is documentation. We decided to use doxygen to generate the class documentation from the source code, which ensures consistency of code and documentation. The documentation is generated in HTML format making it easy to read with a web browser.
    Robustness: -Robustness of algorithms is essential if a new method will be applied routinely to large scale datasets. Typically, there is a trade-off between performance and robustness. %OpenMS tries to address both issues equally. In general, we try to tolerate recoverable errors, e.g. files that do not entirely fulfill the format specifications. On the other hand, exceptions (usually interally derived from BaseException) are used to handle fatal errors. To check for correctness, more than 1000 unit tests (see @ref how_to_write_tests) are implemented in total, covering public methods of classes. These tests check the behavior for both valid and invalid use. Additionally, preprocessor macros are used to enable additional consistency checks in debug mode, enforce pre- and post-conditions, and are then disabled in productive mode for performance reasons.
    +Robustness of algorithms is essential if a new method will be applied routinely to large scale datasets. Typically, there is a trade-off between performance and robustness. %OpenMS tries to address both issues equally. In general, we try to tolerate recoverable errors, e.g. files that do not entirely fulfill the format specifications. On the other hand, exceptions (usually interally derived from BaseException) are used to handle fatal errors. To check for correctness, more than 1000 unit tests (see @ref developer_how_to_write_tests) are implemented in total, covering public methods of classes. These tests check the behavior for both valid and invalid use. Additionally, preprocessor macros are used to enable additional consistency checks in debug mode, enforce pre- and post-conditions, and are then disabled in productive mode for performance reasons.
    Extensibility: Since %OpenMS is based on several external libraries it is designed for the integration of external code. All classes are encapsulated in the %OpenMS namespace to avoid symbol clashes with other libraries. Through the use of C++ templates, many data structures are adaptable to specific use cases. Also, %OpenMS supports standard formats, such as mzML and mgf, and is itself open-source software. The use of standard formats ensures that applications developed with %OpenMS can be easily integrated into existing analysis pipelines. %OpenMS source code is released under the permissive BSD 3 license and hosted on https://github.com/OpenMS/OpenMS. This allows users to participate in the project and to contribute to the code base.
    @@ -47,7 +50,7 @@ Since %OpenMS is based on several external libraries it is designed for t %OpenMS allows exposing its functionality through python bindings (%pyOpenMS). This eases the rapid development of algorithms in Python that later can be translated to C++. Please see our pyOpenMS documentation for a description and walk-through of the pyOpenMS capabilities.
    Portability: -%OpenMS supports Windows, Linux, and OS X platforms.
    +%OpenMS supports Windows, Linux, and MacOS X platforms.
    @subsection tutorial_structure The structure of the OpenMS Framework @@ -82,7 +85,7 @@ Some more details and tips are collected here.
    Conventions
    -See the manual for proper coding style: @ref coding_conventions, also see: @ref cpp_guide. +See the manual for proper coding style: @ref developer_coding_conventions, also see: @ref developer_cpp_guide.
    Commit Messages
    diff --git a/doc/doxygen/public/FAQ.doxygen b/doc/doxygen/public/user_FAQ.doxygen similarity index 99% rename from doc/doxygen/public/FAQ.doxygen rename to doc/doxygen/public/user_FAQ.doxygen index 9a6a04de094..45048564a18 100644 --- a/doc/doxygen/public/FAQ.doxygen +++ b/doc/doxygen/public/user_FAQ.doxygen @@ -13,7 +13,7 @@ /** -@page FAQ FAQ +@page user_FAQ User FAQ # TOPP From e26b24b68a0b6e5efe61339ddbc6b9d5a151163f Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Fri, 2 Feb 2024 12:00:11 +0100 Subject: [PATCH 066/242] [DOC] update user FAQ --- doc/doxygen/public/user_FAQ.doxygen | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/doc/doxygen/public/user_FAQ.doxygen b/doc/doxygen/public/user_FAQ.doxygen index 45048564a18..6b06e0aa506 100644 --- a/doc/doxygen/public/user_FAQ.doxygen +++ b/doc/doxygen/public/user_FAQ.doxygen @@ -19,15 +19,15 @@
    • How to disable the %OpenMS update check.
      -Starting with %OpenMS 2.1 all TOPP tools will check for updated versions of the tools online and will print an information message if a newer version is available. This version check occurs only once per day and tool. Information on which tools are executed will be collected anonymously to identify which tools are no longer used and to optimally distribute development resources. If the feature causes problems or concerns, it can be disabled at build or runtime: -- build time: disabling it in the build script (switch ENABLE_UPDATE_CHECK to "OFF" ) -- runtime: setting the environment variable (OPENMS_DISABLE_UPDATE_CHECK to "ON") +Starting with %OpenMS 2.1 all TOPP tools will check for updated versions of the tools online and will print an information message if a newer version is available. +This version check occurs only once per day and tool. Information on which tools are executed will be collected anonymously to identify which tools are no longer used and to optimally distribute development resources. +If the feature causes problems or concerns, it can be disabled by setting the environment variable 'OPENMS_DISABLE_UPDATE_CHECK' to "ON". +
    • How can I change the temporary directory that %OpenMS uses?
      By default %OpenMS will use the system wide temporary directory (defined -either by TMPDIR, TEMP or TMP environmental variable). You can override -this by setting the parameter "temp_dir" in the OpenMS.ini or setting -the environmental variable OPENMS_TMPDIR. +either by `TMPDIR`, `TEMP` or the `TMP` environmental variable, depending on your Operating System). You can override +this by setting the environmental variable `OPENMS_TMPDIR`.
    • Calling msConvert (of ProteoWizard) results in small mzML files with no peak data.
      The Thermo interface expects an English locale setting. Otherwise it will silently forget to @@ -41,17 +41,14 @@ OpenMS::File::find(...) of File.cpp error message: the file 'CHEMISTRY/unimod.xm is shown, you have probably moved your %OpenMS installation manually?! Then the TOPP tools cannot find some required data files anymore, e.g. XML schema files or chemical isotope data. -Either of the following actions should fix your problem: -- Set the environment variable OPENMS_DATA_PATH to your <%OpenMS>/share/OpenMS/ folder. -- [developers only] Use the cmake option -D CMAKE_INSTALL_PREFIX=... to set the installation directory. - Run 'make %OpenMS TOPP' again. -- [developers only] Execute cmake in the new location and run 'make %OpenMS TOPP' again. +To fix, set the environment variable `OPENMS_DATA_PATH` to your <%OpenMS>/share/OpenMS/ folder.
    • A TOPP tool crashes when loading a certain input file. Other files work properly.
      If an XML input file is used, please check if the file is valid. -For most XML data formats, this can be done using the @ref TOPP_FileInfo tool: +For most XML data formats, this can be done using the @ref TOPP_FileInfo tool. +Here is how to invoke it on the commandline: @code{.sh} FileInfo -v -in @endcode @@ -61,5 +58,7 @@ You can also check for corrupt data in peak files: FileInfo -c -in @endcode +You can, of course, also run it via your workflow system of choice. +
    */ From c989bbc24bd15057c04e73a5d3c5e032f6d1166b Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Fri, 2 Feb 2024 16:44:02 +0100 Subject: [PATCH 067/242] [DOC] enable finding the source of OpenMSConfig.h in our buildsystem --- cmake/add_library_macros.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/add_library_macros.cmake b/cmake/add_library_macros.cmake index cc575e588f7..3fa30b05d52 100644 --- a/cmake/add_library_macros.cmake +++ b/cmake/add_library_macros.cmake @@ -211,6 +211,7 @@ function(openms_add_library) #------------------------------------------------------------------------------ # Generate export header if requested if(NOT ${openms_add_library_DLL_EXPORT_PATH} STREQUAL "") + ## this snipped creates 'OpenMSConfig.h' in the build tree set(_CONFIG_H "include/${openms_add_library_DLL_EXPORT_PATH}${openms_add_library_TARGET_NAME}Config.h") string(TOUPPER ${openms_add_library_TARGET_NAME} _TARGET_UPPER_CASE) include(GenerateExportHeader) From c71bf632b008aeb285a28bfa6e26ca168c4f1644 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Sat, 3 Feb 2024 00:38:39 +0100 Subject: [PATCH 068/242] Stop KNIME site building multiple times on linux in GHA (#7329) * Set KNIME update site to not build on Ubuntu clang++ * Update openms_ci_matrix_full.yml * Update openms_ci_matrix_full.yml also don't build knime update site on ubuntu+clang * Update openms_ci_matrix_full.yml Document and clarify --- .github/workflows/openms_ci_matrix_full.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 93275041ff3..0295a867b53 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -390,8 +390,8 @@ jobs: path: | ${{ github.workspace }}/OpenMS/bld/doc/documentation.zip - - - if: steps.set-vars.outputs.pkg_type != 'none' || inputs.knime + # We never want to build the KNIME update site on our second Ubuntu + Clang matrix entry even if inputs.knime is true, so we check for that specific os + compiler combo + - if: steps.set-vars.outputs.pkg_type != 'none' || ( inputs.knime && !(startsWith(matrix.os, 'ubuntu') && startsWith(matrix.compiler, 'clang++') ) ) name: Generate KNIME descriptors and payloads shell: bash run: | @@ -399,8 +399,10 @@ jobs: # TODO use CTest or script to upload to CDash? cmake -DSEARCH_ENGINES_DIRECTORY="$GITHUB_WORKSPACE/_thirdparty" -DENABLE_PREPARE_KNIME_PACKAGE=ON . cmake --build . --target prepare_knime_package + - - if: steps.set-vars.outputs.pkg_type != 'none' || inputs.knime + # We never want to build the KNIME update site on our second Ubuntu + Clang matrix entry even if inputs.knime is true, so we check for that specific os + compiler combo + - if: steps.set-vars.outputs.pkg_type != 'none' || ( inputs.knime && !(startsWith(matrix.os, 'ubuntu') && startsWith(matrix.compiler, 'clang++') ) ) name: Upload KNIME payload and descriptors as artifacts uses: actions/upload-artifact@v4 with: From 83e71c755049f4c1e4c611f518850a8c5342d90d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 3 Feb 2024 00:47:49 +0100 Subject: [PATCH 069/242] Bump contrib from `5e42765` to `3a9eba4` (#7330) Bumps [contrib](https://github.com/OpenMS/contrib) from `5e42765` to `3a9eba4`. - [Commits](https://github.com/OpenMS/contrib/compare/5e427652cf36043007c7366b5e97b445fe84a7a4...3a9eba4e45bc18e1e9954f96e9e59f32c9e9b123) --- updated-dependencies: - dependency-name: contrib dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- contrib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib b/contrib index 5e427652cf3..3a9eba4e45b 160000 --- a/contrib +++ b/contrib @@ -1 +1 @@ -Subproject commit 5e427652cf36043007c7366b5e97b445fe84a7a4 +Subproject commit 3a9eba4e45bc18e1e9954f96e9e59f32c9e9b123 From fedab2b5a00fa2470f7e54b0f1ccf6fa150717af Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Mon, 5 Feb 2024 10:33:34 +0100 Subject: [PATCH 070/242] Update openms_ci_matrix_full.yml Fix duplicate ID from merge --- .github/workflows/openms_ci_matrix_full.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 0cb3b7b202e..7a489e2997b 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -258,10 +258,9 @@ jobs: fi fi - - id: cache-contrib - if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'windows') - name: Cache contrib (Windows and macOS) + - name: Cache contrib (Windows and macOS) id: cache-contrib + if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'windows') uses: actions/cache@v4 with: path: ${{ github.workspace }}/OpenMS/contrib From 41266e09dd8aa65923ad2d1f43201098fbae2546 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Mon, 5 Feb 2024 10:41:23 +0100 Subject: [PATCH 071/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 7a489e2997b..120275a61cf 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -258,8 +258,8 @@ jobs: fi fi - - name: Cache contrib (Windows and macOS) - id: cache-contrib + - id: cache-contrib + name: Cache contrib (Windows and macOS) if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'windows') uses: actions/cache@v4 with: From 6084a296832d50231048320911ec447be1e8a21e Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Mon, 5 Feb 2024 10:47:34 +0100 Subject: [PATCH 072/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 120275a61cf..d33ce751c84 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -259,8 +259,8 @@ jobs: fi - id: cache-contrib - name: Cache contrib (Windows and macOS) if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'windows') + name: Cache contrib (Windows and macOS) uses: actions/cache@v4 with: path: ${{ github.workspace }}/OpenMS/contrib From cc2999956068e91db189099388860cdef5d98659 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Mon, 5 Feb 2024 11:01:46 +0100 Subject: [PATCH 073/242] Update openms_ci_matrix_full.yml GHA parser utterly fails to determine where if finds a syntax error. Fixed syntax error --- .github/workflows/openms_ci_matrix_full.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index d33ce751c84..794e84d464f 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -463,7 +463,7 @@ jobs: - name: Generate KNIME descriptors and payloads # We never want to build the KNIME update site on our second Ubuntu + Clang matrix entry even if inputs.knime is true, so we check for that specific os + compiler combo - - if: steps.set-vars.outputs.pkg_type != 'none' || ( inputs.knime && !(startsWith(matrix.os, 'ubuntu') && startsWith(matrix.compiler, 'clang++') ) ) + if: steps.set-vars.outputs.pkg_type != 'none' || ( inputs.knime && !(startsWith(matrix.os, 'ubuntu') && startsWith(matrix.compiler, 'clang++') ) ) shell: bash run: | cd $GITHUB_WORKSPACE/OpenMS/bld/ @@ -473,7 +473,7 @@ jobs: - name: Upload KNIME payload and descriptors as artifacts # We never want to build the KNIME update site on our second Ubuntu + Clang matrix entry even if inputs.knime is true, so we check for that specific os + compiler combo - - if: steps.set-vars.outputs.pkg_type != 'none' || ( inputs.knime && !(startsWith(matrix.os, 'ubuntu') && startsWith(matrix.compiler, 'clang++') ) ) + if: steps.set-vars.outputs.pkg_type != 'none' || ( inputs.knime && !(startsWith(matrix.os, 'ubuntu') && startsWith(matrix.compiler, 'clang++') ) ) uses: actions/upload-artifact@v4 with: name: knime-${{ steps.set-vars.outputs.tp_folder }} From ab566c7b0dd845dcd2e0e7fd1419f1d56bcea208 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Mon, 5 Feb 2024 11:22:12 +0100 Subject: [PATCH 074/242] Exclude some more dlls from packaging (#7331) * Update package_general.cmake * Update cmake/package_general.cmake --- cmake/package_general.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/package_general.cmake b/cmake/package_general.cmake index f751bbe6e41..2a0bb8fd675 100644 --- a/cmake/package_general.cmake +++ b/cmake/package_general.cmake @@ -69,7 +69,7 @@ set(OPENMS_LOGOSMALL ${PROJECT_SOURCE_DIR}/cmake/MacOSX/${OPENMS_LOGOSMALL_NAME} # On Windows we need to tell CMake where to look for. # We also do not need API sets. So exclude them. if(WIN32) - set(EXCLUDE "api-ms" "ext-ms" "hvsi" "pdmutilities" "wpaxholder") + set(EXCLUDE "api-ms" "ext-ms" "hvsi" "pdmutilities" "wpaxholder" "dxgi" "uxtheme" "d3d11" "winnmm" "wldp") set(POST_EXCLUDE ".*WINDOWS.system32.*") elseif(APPLE) set(EXCLUDE "/usr/lib" "/System/") From 161b5d39dbdcc941ba36028017f6bda771e1904c Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Mon, 5 Feb 2024 13:06:46 +0100 Subject: [PATCH 075/242] fix conditionals for mark_as_latest to only run if we are a workflow_dispatch --- .github/workflows/openms_ci_matrix_full.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 794e84d464f..7052fbd784f 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -534,7 +534,7 @@ jobs: sudo chmod 600 ~/.ssh/private.key rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/* "$USER@$HOST:/OpenMSInstaller/${folder}" - if [[ 'true' == ${{ inputs.mark_as_latest }} ]]; then + if [[ ${{ github.event_name }} == 'workflow_dispatch' && 'true' == ${{ inputs.mark_as_latest }} ]]; then ln -s ./$tmpfolder latest #create link to the release folder rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/OpenMSInstaller/release/RC_GHA" # FIXME REVERT fi @@ -628,7 +628,7 @@ jobs: # Upload documentation FIXME rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/docs/ "$USER@$HOST:/Documentation/${folder}" - if [[ 'true' == ${{ inputs.mark_as_latest }} ]]; then + if [[ ${{ github.event_name }} == 'workflow_dispatch' && 'true' == ${{ inputs.mark_as_latest }} ]]; then ln -s ./$tmpfolder latest #we can use the same link from above. rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/Documentation/release/RC_GHA" # FIXME REVERT fi @@ -823,7 +823,7 @@ jobs: sudo chmod 600 ~/.ssh/private.key rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" - if [[ 'true' == ${{ inputs.mark_as_latest }} ]]; then + if [[ ${{ github.event_name }} == 'workflow_dispatch' && 'true' == ${{ inputs.mark_as_latest }} ]]; then ln -s ./$tmpfolder latest #create link to the release folder rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/knime-plugin/updateSite/release/RC_GHA" # FIXME REVERT fi From 79cbb0cfc69008835fa3b85397f2afb00b1c30b2 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Mon, 5 Feb 2024 13:50:29 +0100 Subject: [PATCH 076/242] Break out linking as latest bash chokes on variables that may or may not exist (like inputs.mark_as_latest) refactor the behavior of mark_as_latest to avoid this. --- .github/workflows/openms_ci_matrix_full.yml | 53 ++++++++++++++++----- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 7052fbd784f..48ca83c24e4 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -533,11 +533,20 @@ jobs: echo "$PASS" > ~/.ssh/private.key sudo chmod 600 ~/.ssh/private.key rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/* "$USER@$HOST:/OpenMSInstaller/${folder}" - - if [[ ${{ github.event_name }} == 'workflow_dispatch' && 'true' == ${{ inputs.mark_as_latest }} ]]; then - ln -s ./$tmpfolder latest #create link to the release folder - rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/OpenMSInstaller/release/RC_GHA" # FIXME REVERT - fi + + - name: Make installer latest + if: inputs.mark_as_latest + shell: bash + env: + PASS: ${{ secrets.ARCHIVE_RRSYNC_SSH }} + USER: ${{ secrets.ARCHIVE_RRSYNC_USER }} + HOST: ${{ secrets.ARCHIVE_RRSYNC_HOST }} + run: | + mkdir -p ~/.ssh/ + echo "$PASS" > ~/.ssh/private.key + sudo chmod 600 ~/.ssh/private.key + ln -s ./$tmpfolder latest #create link to the release folder + rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/OpenMSInstaller/release/RC_GHA" # FIXME REVERT - name: create RELEASE_TEXT if: inputs.do_release @@ -628,10 +637,19 @@ jobs: # Upload documentation FIXME rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/docs/ "$USER@$HOST:/Documentation/${folder}" - if [[ ${{ github.event_name }} == 'workflow_dispatch' && 'true' == ${{ inputs.mark_as_latest }} ]]; then - ln -s ./$tmpfolder latest #we can use the same link from above. - rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/Documentation/release/RC_GHA" # FIXME REVERT - fi + - name: Make documentation latest + if: inputs.mark_as_latest + shell: bash + env: + PASS: ${{ secrets.ARCHIVE_RRSYNC_SSH }} + USER: ${{ secrets.ARCHIVE_RRSYNC_USER }} + HOST: ${{ secrets.ARCHIVE_RRSYNC_HOST }} + run: | + mkdir -p ~/.ssh/ + echo "$PASS" > ~/.ssh/private.key + sudo chmod 600 ~/.ssh/private.key + ln -s ./$tmpfolder latest #we can use the same link from above. + rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/Documentation/release/RC_GHA" # FIXME REVERT # TODO create softlinks to latest nightly # TODO create and upload file hashes, at least for release candidate @@ -823,10 +841,19 @@ jobs: sudo chmod 600 ~/.ssh/private.key rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/de.openms.update/target/repository/* "$USER@$HOST:/knime-plugin/updateSite/$folder/" - if [[ ${{ github.event_name }} == 'workflow_dispatch' && 'true' == ${{ inputs.mark_as_latest }} ]]; then - ln -s ./$tmpfolder latest #create link to the release folder - rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/knime-plugin/updateSite/release/RC_GHA" # FIXME REVERT - fi + - name: Make KNIME installer latest + if: inputs.mark_as_latest + shell: bash + env: + PASS: ${{ secrets.ARCHIVE_RRSYNC_SSH }} + USER: ${{ secrets.ARCHIVE_RRSYNC_USER }} + HOST: ${{ secrets.ARCHIVE_RRSYNC_HOST }} + run: | + mkdir -p ~/.ssh/ + echo "$PASS" > ~/.ssh/private.key + sudo chmod 600 ~/.ssh/private.key + ln -s ./$tmpfolder latest #create link to the release folder + rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/knime-plugin/updateSite/release/RC_GHA" # FIXME REVERT do-release: if: inputs.do_release From 14b36b2b4d2d3fb7cf03479f75f3837f5b9f6ec3 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Mon, 5 Feb 2024 16:06:44 +0100 Subject: [PATCH 077/242] [DOC] some refactoring of topics --- .../developer_coding_conventions.doxygen | 6 +- .../public/developer_cpp_guide.doxygen | 174 ++++++++---------- doc/doxygen/public/developer_tutorial.doxygen | 25 +-- 3 files changed, 76 insertions(+), 129 deletions(-) diff --git a/doc/doxygen/public/developer_coding_conventions.doxygen b/doc/doxygen/public/developer_coding_conventions.doxygen index b280f49d0d0..77c26136704 100644 --- a/doc/doxygen/public/developer_coding_conventions.doxygen +++ b/doc/doxygen/public/developer_coding_conventions.doxygen @@ -53,8 +53,8 @@ @code{.cpp} if (isValid(a)) - error = 0; - return 0; + has_error = false; + return 0; // bug: will always return @endcode Thus, use braces around a block even for a single line. @@ -501,7 +501,7 @@ @subsection examples Examples - Instructive programming examples are provided in the doc/code_examples directory + Instructive programming examples are provided in the doc/code_examples directory. See @ref developer_tutorial. @section testing Testing diff --git a/doc/doxygen/public/developer_cpp_guide.doxygen b/doc/doxygen/public/developer_cpp_guide.doxygen index ca2267b1319..86eadedd10f 100644 --- a/doc/doxygen/public/developer_cpp_guide.doxygen +++ b/doc/doxygen/public/developer_cpp_guide.doxygen @@ -1,157 +1,133 @@ /** -@page developer_cpp_guide CPP Guide +@page developer_cpp_guide C++ Guide -The following page contains general C++ guidelines that are not OpenMS-specific. +The following page contains OpenMS-specific C++ guidelines, which are unrelated to @ref developer_coding_conventions. -

    The using directive

    -Using namespace OpenMS, namespace std, or similar in .h files may cause name clashes, therefore it is advised against. -@warning Don't import complete namespaces to the scope into .cpp files. Instead, introduce individual symbols to the scope where you need them. For example, write using std::vector; instead of using namespace std;. This immediately gives a hint to where the symbol is defined as well. +@section cpp_guide_dllapi What is `OPENMS_DLLAPI`? +OPENMS_DLLAPI is a preprocessor macro and ensures that the compiler, e.g. Visual Studio or g++, exports this class into the DLL when building the DLL or, in the other case, references the DLL when building an executable. -

    UInt vs Size

    +The OPENMS_DLLAPI macro is defined in OpenMSConfig.h, which in turn is created at configure time (when CMake runs). -When working with STL types (especially vectors), assign the return value of a .size() operation to the OpenMS type Size, which is defined as follows: +**Details**: on MSVC, its either set to `__declspec(dllexport)` or `__declspec(dllimport)`, depending on who includes the header (within OpenMS library, or from outside, e.g. TOPP tools or class tests.). +On g++/clang it's always `__attribute__((visibility("default")))`. + + + +@section cpp_guide_dllapi_when When to use `OPENMS_DLLAPI`? +When you've written a new OpenMS class, which is not a template class, insert the macro into the header like this: @code{.cpp} -// OpenMS/include/CONCEPT/Types.h -typedef size_t Size; +class Myclass +{ ... @endcode -Here is an example of how to correctly use Size. +becomes: @code{.cpp} -std::vector myVec; -myVec.push_back("hello"); -for (Size i=0; iUInt as a substitute for Size. Even though UInt and Size are equivalent on prominent 32 bit systems, they are usually different types on 64 bit systems, where UInt is 32 bit, whereas Size is 64 bit depending on the platform. Using UInt leads to warnings (at best) and may break your code. +It is enough to prefix the class with the macro. Do not prefix the members or member functions. -Size is an unsigned type. If you need a signed type (e.g. when comparing length of vectors), use SignedSize (also defined in types.h) +OPENMS_DLLAPI is also required for structs, global (including `extern`) variables and global functions, as long as they are not templates. Never prefix templates with `OPENMS_DLLAPI`. The only exception to this rule is when a template is fully specialized (i.e. it can be instantiated). Additionally, prefix nested public structs/classes with `OPENMS_DLLAPI`, otherwise you cannot use them from outside the library. -Use SignedSize if you require loop variables with negative values. Here is an example: +A prominent global function is "operator <<", which is overloaded quite often for OpenMS classes. Unless it is templatized, prefix it with `OPENMS_DLLAPI`. If the operator is declared a friend of some class, also make sure the friend statement contains the `OPENMS_DLLAPI` keyword. Otherwise, you will get inconsistent DLL-linkage. For example, use: @code{.cpp} -std::vector myVec; -myVec.push_back("hello"); -for (SignedSize i=0; i<(SignedSize)myVec.size() - 1; ++i) -// never use Size here, because if myVec.size()==0 then Size x = 0 - 1; gives some really BIG number! +// Adduct.h +class OPENMS_DLLAPI Adduct { - std::cout << "Index: " << i << " Value: " << myVec[i] << std::endl; + ... + friend OPENMS_DLLAPI std::ostream& operator<<(std::ostream& os, const Adduct& a); + ... +} +// Adduct.C +namespace OpenMS +{ + OPENMS_DLLAPI std::ostream& operator<<(std::ostream& os, const Adduct& a) + { + ... + } } @endcode -@section math_functions Math functions +If you forget the `OPENMS_DLLAPI` keyword, the .dll/.so will have missing symbols and executables might not be able to link against it. When compiled with `g++` you will get .. undefined reference to .. errors. -@warning Don't use GCC to access common math functions like trunc(), round(), log2(), etc. As this is not a C++ Standard requirement, Microsoft have decided to not include them. If GCC is used, it will break the windows port of OpenMS. -Instead, do the following to use these common math functions: -
      -
    • ceil() and floor()
    • -

      To use these functions, use the following directive:

      -@code{.cpp} -#include cmath -@endcode -

      Find information about math functions available at the cplusplus website or for VisualStudio specific problems: MSDN.

      -
    • round()
    • -

      OpenMS provides a Math::round() function for convenience (see MATH/MISC/MathFunctions.h).

      -
    • isnan() and isinf()
    • -

      Use the boost library. Include:

      -@code{.cpp} -#include +@section cpp_guide_logging Logging +To make direct output to `std::out` and `std::err` more consistent, %OpenMS provides several low-level macros: +@code +OPENMS_LOG_FATAL_ERROR, +OPENMS_LOG_ERROR +OPENMS_LOG_WARN, +OPENMS_LOG_INFO and +OPENMS_LOG_DEBUG @endcode +which should be used instead of the less descriptive `std::out` and `std::err` streams. +Furthermore, the OpenMS loggers insert console coloring for their output and have a deduplication cache build in, which prevents repetitive outputs by aggregating and counting their occurence. -Then use boost::math::isinf(myNumber) and boost::math::isnan(myNumber). +If you are writing an %OpenMS tool, you can also use the ProgressLogger to indicate how many percent of the processing has already been performed: +

      +Example: Tutorial_Logger.cpp +
      +Logging the Tool Progress -
    • log()
    • -

      Windows does not support log2(); use log(x)/log(2) instead.

      -
    +\snippet Tutorial_Logger.cpp Logger -@section value_vs_reference Pass-by-value versus pass-by-reference +Depending on how the user configures the ProgressLogger, this output is written to the command line or a log file. -Except of primitive types (int, double, float, ....) all method arguments should be passed as non-mutable references. -Return types of methods should be non-mutable references as well, where possible. Sometimes, references can't be used as the retuned value is constructed in the method. If the constructed type is large, save computation time with: +@section cpp_guide_input_output Input/Output -@code{.cpp} -//Bad idea -LargeObject someFunction() -{ - LargeObject tmp = ... - return tmp; -} -//Better idea -void someFunction(LargeObject& obj) -{ - obj = ... -} -@endcode +Code like stream_object << "example" << std::endl; forces the output buffer to be flushed, i.e. written to disk/console immediately, which can be a big performance loss. Get used to writing code like stream_object << "example\n";. Debugging output can be an exception, because the content of the stream buffer may be lost upon segfault etc.. -

    What is OPENMS_DLLAPI?

    -OPENMS_DLLAPI is a preprocessor macro and ensures that Visual Studio exports this class into the DLL when building the DLL or references the DLL when building an executable. +Write many digits to avoid unnecessary rounding errors. In particular, using standard output stream operators, i.e. << for doubles and floats should be avoided when full precision is required because by default, not all significant digits will be written. Before you start using os.precision(writtenDigits(FloatingPointType())); and alike, it is strongly advised to convert to an OpenMS::String, i.e. os << String(my_number) because it's faster, and gives you all significant digits for each type (6 digits for float, 15 for double). Similarly, input stream operators are also slow, especially in VisualStudio, so switching to OpenMS::String::toDouble() is advised for performance reasons. If you do not need all significant digits, simply invoke String(my_number, full_precision = false) to get up to only three fractional digits for float and double types. For Integer types, there is no problem with streams, but again: OpenMS::String(int i) is faster. There is usually no heap allocation overhead for strings because of Small String Optimizations (SSO). -The OPENMS_DLLAPI macro is defined empty on other platforms, but it might still confuse the syntax parsing of the text editor or IDE. If you are using the Eclipse Platform, fix this at: Project > Properties > C/C++ Include Paths and Symbols. -

    When to use OPENMS_DLLAPI

    -When you've written a new OpenMS class, which is not a template class, insert the macro into the header like this: -@code{.cpp} -class Myclass -{ ... -@endcode +@section cpp_guide_uint `UInt` vs. `Size` -becomes: +OpenMS uses some custom type definitions for simple arithmetic types, such as `UInt` (shorthand for `unsigned int`). +When working with STL types (especially vectors), assign the return value of a .size() operation to the OpenMS type Size, which is defined as follows: @code{.cpp} -class OPENMS_DLLAPI Myclass -{ ... +// OpenMS/include/CONCEPT/Types.h +typedef size_t Size; @endcode -It is enough to prefix the class with the macro. Do not prefix the members or member functions. - -OPENMS_DLLAPI is also required for structs, global (including extern) variables and global functions, as long as they are not templates. Never prefix templates with OPENMS_DLLAPI. The only exception to this rule is when a template is fully specialized (i.e. it can be instantiated). Additionally, prefix nested public structs/classes with OPENMS_DLLAPI, otherwise you cannot use them from outside the library. - -A prominent global function is "operator <<", which is overloaded quite often for OpenMS classes. Unless it is templatized, prefix it with OPENMS_DLLAPI. If the operator is declared a friend of some class, also make sure the friend statement contains the OPENMS_DLLAPI keyword. Otherwise, you will get inconsistent DLL-linkage. For example, use: +Here is an example of how to correctly use Size. @code{.cpp} -// Adduct.h -class OPENMS_DLLAPI Adduct +void print(const std::vector& myVec) { - ... - friend OPENMS_DLLAPI std::ostream& operator << (std::ostream& os, const Adduct& a); - ... -} -// Adduct.C -namespace OpenMS -{ - OPENMS_DLLAPI std::ostream& operator << (std::ostream& os, const Adduct& a) + for (Size i = 0; i < myVec.size(); ++i) { - ... + std::cout << "Index: " << i << " Value: " << myVec[i] << std::endl; } } @endcode -If you forget the OPENMS_DLLAPI keyword, the DLL will have missing symbols and executables might not be able to link against the DLL. When compiled with gcc you will get .. undefined reference to .. errors. +@warning Don't use UInt as a substitute for Size. Even though UInt and Size are equivalent on prominent 32 bit systems, they are usually different types on 64 bit systems, where UInt is 32 bit, whereas Size is 64 bit depending on the platform. Using UInt leads to warnings (at best) and may break your code. + +`Size` is an unsigned type. If you need a signed equivalent, use `SignedSize` (also defined in types.h). -@section pointers_vs_references Pointers vs references -Avoid using pointers. Pointers tend to cause segmentation faults. Try to use references instead. -@section iterators Iterators +@section cpp_guide_pointers_vs_references Pointers vs references + +Avoid using pointers. Pointers tend to cause segmentation faults. Try to use references instead. -In simple looping constructs, iterators are generally preferable to indexed access. Prefer ++i to i++, because the preincrement operator can save a copy constructor. Use const_iterators where possible to help avoid unwanted side effects. -@section includes Includes +@section cpp_guide_includes Includes -includes in header files should be avoided and replaced by forward declarations. Unnecessary includes cause longer compile times after changes in OpenMS header. +includes in header files should be avoided and replaced by forward declarations. Unnecessary includes cause longer compile times. Reasons for includes in header files are:
      @@ -182,12 +158,6 @@ namespace OpenMS } @endcode -@note In OpenMS, Qt headers have to be included with the library prefix. - -@section input_output Input/Output - -Code like std::cout << "example" << std::endl; forces the output buffer to be flushed, i.e. written to disk immediately, which is not ideal. Get used to writing code like std::cout << "example\n";. Debugging output can be an exception, because the content of the stream buffer may be lost upon segfault etc.. - -Write many digits to avoid unnecessary rounding errors. In particular, using standard output stream operators, i.e. << for doubles and floats should be avoided when full precision is required because by default, not all significant digits will be written. Before you start using os.precision(writtenDigits(FloatingPointType())); and alike, it is strongly advised to convert to an OpenMS::String, i.e. os << String(my_number) because it's faster, and gives you all significant digits for each type (6 digits for float, 15 for double). Similarly, input stream operators are also slow, especially in VisualStudio, so switching to OpenMS::String::toDouble() is advised for performance reasons. If you do not need all significant digits, simply invoke String(my_number, full_precision = false) to get up to only three fractional digits for float and double types. For Integer types, there is no problem with streams, but again: OpenMS::String(int i) is faster. There is usually no heap allocation overhead for strings because of Small String Optimizations (SSO). +@note In OpenMS, Qt headers have to be included with the Qt-library prefix. */ diff --git a/doc/doxygen/public/developer_tutorial.doxygen b/doc/doxygen/public/developer_tutorial.doxygen index 728ec408db2..41b9ff716b6 100644 --- a/doc/doxygen/public/developer_tutorial.doxygen +++ b/doc/doxygen/public/developer_tutorial.doxygen @@ -405,6 +405,7 @@ The following examples creates a FeatureMap containing two Feature instances. Th \snippet Tutorial_FeatureMap.cpp FeatureMap + @subsection tutorial_fileformat File Formats @@ -422,30 +423,6 @@ The following examples creates a FeatureMap containing two Feature instances. Th For further information of the HUPO Proteomics Standards Initiative please visit: http://www.psidev.info/ -@subsection tutorial_logging Logging -To make direct output to std::out and std::err more consistent, %OpenMS provides several low-level macros: -
      -OPENMS_LOG_FATAL_ERROR, -
      -OPENMS_LOG_ERROR -
      -OPENMS_LOG_WARN, -
      -OPENMS_LOG_INFO and -
      -OPENMS_LOG_DEBUG -
      -which should be used instead of the less descriptive std::out and std::err streams. - -If you are writing an %OpenMS tool, you can also use the ProgressLogger to indicate how many percent of the processing has already been performed: -

      -Example: Tutorial_Logger.cpp -
      -Logging the Tool Progress - -\snippet Tutorial_Logger.cpp Logger - -Depending on how the user configures the tool, this output is written to the command line or a log file. @subsection tutorial_identifications Identifications Identifications of proteins, peptides, and the mapping between peptides and proteins (or groups of proteins) are stored in dedicated data structures. These data structures are typically stored to disc as idXML or mzIdentML file. From f698e23b0e006d8746dcc78bdca7bfdbc09fb976 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Mon, 5 Feb 2024 16:07:00 +0100 Subject: [PATCH 078/242] amend to moving tutorial --- doc/doxygen/Doxyfile.in | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/doc/doxygen/Doxyfile.in b/doc/doxygen/Doxyfile.in index a0a0303b8cd..47e14279473 100644 --- a/doc/doxygen/Doxyfile.in +++ b/doc/doxygen/Doxyfile.in @@ -838,8 +838,7 @@ WARN_LOGFILE = "@CF_OPENMS_BIN_PATH@/doxygen/doxygen-error.log" # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = "@CF_OPENMS_SRC_PATH@/doc/OpenMS_tutorial/" \ - "@CF_OPENMS_SRC_PATH@/doc/doxygen/public/" \ +INPUT = "@CF_OPENMS_SRC_PATH@/doc/doxygen/public/" \ "@CF_OPENMS_SRC_PATH@/doc/doxygen/install/" \ @CF_OPENMS_DOCUMENTATION_DIRECTORIES@ ## already contains quotes. Do NOT add extra quotes to this variable. @@ -944,8 +943,7 @@ EXAMPLE_RECURSIVE = NO # that contain images that are to be included in the documentation (see the # \image command). -IMAGE_PATH = "@CF_OPENMS_SRC_PATH@/doc/doxygen/images/" \ - "@CF_OPENMS_SRC_PATH@/doc/OpenMS_tutorial/images/" +IMAGE_PATH = "@CF_OPENMS_SRC_PATH@/doc/doxygen/images/" # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program From 66319fb02718fe41d30c46d0c40d87884822956b Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Mon, 5 Feb 2024 16:22:30 +0100 Subject: [PATCH 079/242] [DOC] fix CMake bug, when using Doxygen 1.10, which compares lexicographically less to 1.8.;; using VERSION_LESS to fix --- doc/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 778ae40d794..1c2bec2419c 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -121,8 +121,8 @@ if(ENABLE_DOCS) # check doxygen for bug with generated latex files set(DOXYGEN_MIN_REQUIRED "1.8.13") - if (DOXYGEN_VERSION STRLESS DOXYGEN_MIN_REQUIRED ) - message(STATUS "Warning: Doxygen ( vers. installed < ${DOXYGEN_MIN_REQUIRED}) does not correctly process \\includedoc commands in developer's installation instructions. This will make them incomplete. Upgrade Doxygen to fix.") + if (DOXYGEN_VERSION VERSION_LESS DOXYGEN_MIN_REQUIRED ) + message(STATUS "Warning: Doxygen ( vers. installed = ${DOXYGEN_VERSION} < ${DOXYGEN_MIN_REQUIRED}) does not correctly process \\includedoc commands in developer's installation instructions. This will make them incomplete. Upgrade Doxygen to fix.") endif() ## if not found, use empty string to avoid `warning: the dot tool could not be found as 'DOXYGEN_DOT_EXECUTABLE-NOTFOUND/dot.exe'` in doxygen-error.log From 67788273be97ee1f515b092343ebef11901d6239 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Mon, 5 Feb 2024 17:55:25 +0100 Subject: [PATCH 080/242] [DOC] a word on clang-format --- doc/doxygen/public/developer_coding_conventions.doxygen | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/doxygen/public/developer_coding_conventions.doxygen b/doc/doxygen/public/developer_coding_conventions.doxygen index 77c26136704..2c0f96a04a3 100644 --- a/doc/doxygen/public/developer_coding_conventions.doxygen +++ b/doc/doxygen/public/developer_coding_conventions.doxygen @@ -4,7 +4,9 @@ Use the following code conventions when contributing to %OpenMS. - %OpenMS uses coding conventions that are automatically checked using cpplint (/src/tests/coding/cpplint.py). You can find a configuration file for the CLion IDE here. You can import it by selecting Preferences > Code Style > Manage. + %OpenMS uses coding conventions that are automatically checked using cpplint (/src/tests/coding/cpplint.py), when `ENABLE_STYLE_TESTING` flag is 'ON' during CMake. + + When developing in an IDE which support [Clang format](https://clang.llvm.org/docs/ClangFormat.html) you can use the our style preset from the source tree `OpenMS/.clang-format`. For Clion, you can import it by selecting **Preferences** > **Code Style** > **Manage**. [VS2017 and later also support Clang format](https://devblogs.microsoft.com/cppblog/clangformat-support-in-visual-studio-2017-15-7-preview-1/) natively. @tableofcontents From 2abe0280256e199c2316bcee91292a4fb9b410a3 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Mon, 5 Feb 2024 19:18:14 +0100 Subject: [PATCH 081/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 48ca83c24e4..b26f61f4656 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -880,7 +880,7 @@ jobs: name: create tags for other repos shell: bash env: - GH_TOKEN: ${{ github.event.issue.number }} + GH_TOKEN: ${{ steps.app-token.outputs.token }} run: | function createGitTag() { REPO=$1 From d3bd9c6519dd8a4bf008c4d5cadf3b9085d38283 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Tue, 6 Feb 2024 09:56:20 +0100 Subject: [PATCH 082/242] Update update_nightly.yml Don't use external action for pushing, check if Nightly has work not in develop and throw an error. --- .github/workflows/update_nightly.yml | 30 +++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index 421ceeee79a..bccd3a1a977 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -10,14 +10,30 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: + ref: develop fetch-depth: 0 - - name: merge_to_nightly - uses: robotology/gh-action-nightly-merge@v1.4.0 - with: - stable_branch: 'develop' - development_branch: 'nightly' - allow_ff: true - ff_only: true + - name: Fetch all branches + run: git fetch --all + + - name: Determine if develop is ahead of nightly + id: compare_branches + run: | + if git rev-list --left-right --count develop...nightly | grep -q "0$"; then + if git rev-list --left-right --count develop...nightly | grep -q "^0"; then + echo "behind=true" >> $GITHUB_OUTPUT + else + echo "behind=false" >> $GITHUB_OUTPUT + fi + else + echo "There are changes to Nightly that are not in develop, we can't automatically update" + exit 1 + + - name: Fast-forward nightly branch if behind develop + if: steps.compare_branches.outputs.behind == 'true' + run: | + git checkout nightly + git merge develop --ff-only + git push origin nightly env: GITHUB_TOKEN: ${{ secrets.OPENMS_GITHUB_APP_PRIVATE_KEY }} From 23850c44d90a478042a40746b10619d94cb21b08 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Tue, 6 Feb 2024 11:08:10 +0100 Subject: [PATCH 083/242] Update doc/doxygen/public/Main.doxygen Co-authored-by: Timo Sachsenberg --- doc/doxygen/public/Main.doxygen | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/doxygen/public/Main.doxygen b/doc/doxygen/public/Main.doxygen index b70de32a9e8..72946af1f2b 100755 --- a/doc/doxygen/public/Main.doxygen +++ b/doc/doxygen/public/Main.doxygen @@ -56,7 +56,7 @@ Development:
        -
      • @subpage developer_tutorial +
      • @subpage developer_tutorial
      • @subpage developer_coding_conventions
      • @subpage developer_faq
      • @subpage developer_cpp_guide From c1db93fbb3016b60b08cbe4b5983dce3e8d751d3 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Tue, 6 Feb 2024 15:37:07 +0100 Subject: [PATCH 084/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index b26f61f4656..23deb86dab2 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -906,7 +906,7 @@ jobs: -f sha="${SHA}" \ -F force=true } - DEOPENMS_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/de.openms.knime/git/ref/heads/develop |jq '.object.sha') + DEOPENMS_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/de.openms.knime/git/ref/heads/develop |jq -r '.object.sha') GKN_SHA=$(curl -s -X GET https://api.github.com/repos/genericworkflownodes/GenericKnimeNodes/git/ref/heads/develop |jq '.object.sha') JSViewer_SHA=$(curl -s -X GET https://api.github.com/repos/genericworkflownodes/de.openms.knime.dynamicJSViewers/git/ref/heads/master |jq '.object.sha') CONTRIB_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/contrib\?ref\=${{ github.sha }} | jq -r ".sha") From 91648980641c445b0d87e9a632752b074a259641 Mon Sep 17 00:00:00 2001 From: Radu Suciu Date: Wed, 7 Feb 2024 01:02:01 -0800 Subject: [PATCH 085/242] fix: installation of examples directory in unnecessary sub-folder (#7337) --- src/openms/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openms/CMakeLists.txt b/src/openms/CMakeLists.txt index 9197e1b9e2e..d4d18b5e3b5 100644 --- a/src/openms/CMakeLists.txt +++ b/src/openms/CMakeLists.txt @@ -174,7 +174,7 @@ install(DIRECTORY ${OPENMS_HOST_DIRECTORY}/share/OpenMS/ REGEX ".*\\/\\..*" EXCLUDE ## Exclude hidden files in subdirectories REGEX "OpenMS/examples" EXCLUDE ) -install_directory(${OPENMS_HOST_DIRECTORY}/share/OpenMS/examples ${INSTALL_SHARE_DIR}/examples examples) +install_directory(${OPENMS_HOST_DIRECTORY}/share/OpenMS/examples ${INSTALL_SHARE_DIR} examples) # Devs also need our custom find modules install_directory(${OPENMS_HOST_DIRECTORY}/cmake/Modules/ ${INSTALL_LIB_DIR}/cmake/OpenMS/Modules cmake) From f3ce46eca19f8a9c833303a18ac0f261a33d4630 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 7 Feb 2024 10:21:46 +0100 Subject: [PATCH 086/242] Update update_nightly.yml add description of how to fix nightly ahead of develop --- .github/workflows/update_nightly.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index bccd3a1a977..39cc1fb6b19 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -27,6 +27,10 @@ jobs: fi else echo "There are changes to Nightly that are not in develop, we can't automatically update" + echo "To forcibly reset Nightly please have an admin run:" + echo "git checkout nightly" + echo "git reset develop --hard" + echo "git push -f" exit 1 - name: Fast-forward nightly branch if behind develop From 78ef5d49680d813e0086510b81c24b6425bb4c6c Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 7 Feb 2024 10:33:10 +0100 Subject: [PATCH 087/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 23deb86dab2..f9d777e3b74 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -251,6 +251,10 @@ jobs: # Qt5_DIR set by Install Qt5 step echo "cmake_prefix=$Qt5_DIR/lib/cmake;$Qt5_DIR" >> $GITHUB_OUTPUT brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache + # For reasons unclear to me, the image has issues with an excess 2to3 executable when installing new python versions if it's there we remove it. + if [[-f '/usr/local/bin/2to3' ]]; then + rm '/usr/local/bin/2to3' + endif if [[ "${{ steps.set-vars.outputs.pkg_type }}" != "none" ]]; then brew install python@3.12 --force --overwrite From 1f1fa4e392ffc1b2aa9bc25ef513c5ecdf767176 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 7 Feb 2024 10:36:02 +0100 Subject: [PATCH 088/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index f9d777e3b74..0e4a76f7aa5 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -254,7 +254,7 @@ jobs: # For reasons unclear to me, the image has issues with an excess 2to3 executable when installing new python versions if it's there we remove it. if [[-f '/usr/local/bin/2to3' ]]; then rm '/usr/local/bin/2to3' - endif + fi if [[ "${{ steps.set-vars.outputs.pkg_type }}" != "none" ]]; then brew install python@3.12 --force --overwrite From 748771bdafe8554a9e91ec44d30726f8b29bb8f3 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 7 Feb 2024 10:40:05 +0100 Subject: [PATCH 089/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 0e4a76f7aa5..663e533d12b 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -252,7 +252,7 @@ jobs: echo "cmake_prefix=$Qt5_DIR/lib/cmake;$Qt5_DIR" >> $GITHUB_OUTPUT brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache # For reasons unclear to me, the image has issues with an excess 2to3 executable when installing new python versions if it's there we remove it. - if [[-f '/usr/local/bin/2to3' ]]; then + if [[ -f '/usr/local/bin/2to3' ]]; then rm '/usr/local/bin/2to3' fi From 0d9ffcd39239b14b4fade8d2eb79c43e53d2ad13 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 7 Feb 2024 11:54:29 +0100 Subject: [PATCH 090/242] Update openms_ci_matrix_full.yml fix two more sha issues --- .github/workflows/openms_ci_matrix_full.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 663e533d12b..7745eed461a 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -911,8 +911,8 @@ jobs: -F force=true } DEOPENMS_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/de.openms.knime/git/ref/heads/develop |jq -r '.object.sha') - GKN_SHA=$(curl -s -X GET https://api.github.com/repos/genericworkflownodes/GenericKnimeNodes/git/ref/heads/develop |jq '.object.sha') - JSViewer_SHA=$(curl -s -X GET https://api.github.com/repos/genericworkflownodes/de.openms.knime.dynamicJSViewers/git/ref/heads/master |jq '.object.sha') + GKN_SHA=$(curl -s -X GET https://api.github.com/repos/genericworkflownodes/GenericKnimeNodes/git/ref/heads/develop |jq -r '.object.sha') + JSViewer_SHA=$(curl -s -X GET https://api.github.com/repos/genericworkflownodes/de.openms.knime.dynamicJSViewers/git/ref/heads/master |jq -r '.object.sha') CONTRIB_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/contrib\?ref\=${{ github.sha }} | jq -r ".sha") THIRDPARTY_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/THIRDPARTY\?ref\=${{ github.sha }} | jq -r ".sha") PYDOCS_SHA=$(curl -s -X GET https://api.github.com/repos/OpenMS/OpenMS/contents/src/pyOpenMS/pyopenms-docs\?ref\=${{ github.sha }} | jq -r ".sha") From e92bb25faf80c8ff450c4ce60ccb725cb7675929 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 7 Feb 2024 12:21:09 +0100 Subject: [PATCH 091/242] Update openms_ci_matrix_full.yml trying to not specify python3 version --- .github/workflows/openms_ci_matrix_full.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 7745eed461a..96f176772f3 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -251,13 +251,9 @@ jobs: # Qt5_DIR set by Install Qt5 step echo "cmake_prefix=$Qt5_DIR/lib/cmake;$Qt5_DIR" >> $GITHUB_OUTPUT brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache - # For reasons unclear to me, the image has issues with an excess 2to3 executable when installing new python versions if it's there we remove it. - if [[ -f '/usr/local/bin/2to3' ]]; then - rm '/usr/local/bin/2to3' - fi if [[ "${{ steps.set-vars.outputs.pkg_type }}" != "none" ]]; then - brew install python@3.12 --force --overwrite + brew install python3 brew install --quiet doxygen ghostscript graphviz fi fi From 8368f1851bfbdd8d82ab1ec18a95ce1e8936be9f Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 7 Feb 2024 12:28:03 +0100 Subject: [PATCH 092/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 96f176772f3..6afda89b575 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -253,7 +253,7 @@ jobs: brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache if [[ "${{ steps.set-vars.outputs.pkg_type }}" != "none" ]]; then - brew install python3 + brew install python3 --force --overwrite brew install --quiet doxygen ghostscript graphviz fi fi From fbe93b15625a27074bfc87b2d4bd04202c57dfbd Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 7 Feb 2024 12:45:28 +0100 Subject: [PATCH 093/242] Update openms_ci_matrix_full.yml force GHA to not update preinstalled packages in brew --- .github/workflows/openms_ci_matrix_full.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 6afda89b575..7b2ecb2bc8c 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -214,6 +214,8 @@ jobs: - id: tools-prefix name: Setup build tools (and system contrib on Linux) shell: bash + env: + HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 run: | if [[ "${{ matrix.os }}" == ubuntu-* ]]; then sudo add-apt-repository universe From 285c7f8b48d15e9a9e1e8dd4fe91572fa104eb35 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 7 Feb 2024 14:36:00 +0100 Subject: [PATCH 094/242] Fix mac runner brew issues This fixes an issue where brew updates packages already present on the runner after we install packages. This was a problem because it could lead to brew trying to overwrite links to things like /usr/local/bin/2to3 with versions installed as a dependency of updates to preinstalled packages (the azure integration specifically requires python3.11 at the time of writing). When we install python with brew we can specify to clobber everything that might already be in /usr/local/. --- .github/workflows/openms_ci_matrix_full.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 0295a867b53..c45739110ad 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -150,6 +150,9 @@ jobs: - name: Setup build tools (and system contrib on Linux) id: tools-prefix shell: bash + env: + # We need to add this, otherwise brew "helpfully" updates all of the GitHub preinstalled packages, which can cause issues + HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 run: | if [[ "${{ matrix.os }}" == ubuntu-* ]]; then sudo add-apt-repository universe @@ -189,7 +192,7 @@ jobs: brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache if [[ "${{ steps.set-vars.outputs.pkg_type }}" != "none" ]]; then - brew install python@3.12 --force --overwrite + brew install python3 --force --overwrite brew install --quiet doxygen ghostscript graphviz fi fi From 5c1952f342d727fe46ff7156bbdf688f62a4820a Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Wed, 7 Feb 2024 14:43:14 +0100 Subject: [PATCH 095/242] make doxygen code snippets easier to discover for new developers --- doc/code_examples/Tutorial_AASequence.cpp | 4 +- doc/code_examples/Tutorial_Element.cpp | 4 +- .../Tutorial_EmpiricalFormula.cpp | 4 +- doc/code_examples/Tutorial_Enzyme.cpp | 4 +- doc/code_examples/Tutorial_FeatureMap.cpp | 4 +- doc/code_examples/Tutorial_Final.cpp | 32 ++++++------- .../Tutorial_IdentificationClasses.cpp | 4 +- doc/code_examples/Tutorial_Logger.cpp | 4 +- .../Tutorial_MRMTransitionGroup.cpp | 4 +- doc/code_examples/Tutorial_MSChromatogram.cpp | 4 +- doc/code_examples/Tutorial_MSExperiment.cpp | 4 +- doc/code_examples/Tutorial_MSSpectrum.cpp | 4 +- doc/code_examples/Tutorial_Precursor.cpp | 4 +- doc/code_examples/Tutorial_Residue.cpp | 4 +- .../Tutorial_ResidueModification.cpp | 4 +- doc/code_examples/Tutorial_Template.cpp | 4 +- doc/code_examples/Tutorial_Test.cpp | 4 +- .../Tutorial_TheoreticalSpectrumGenerator.cpp | 4 +- .../public/developer_cpp_guide.doxygen | 2 +- doc/doxygen/public/developer_tutorial.doxygen | 48 +++++++++---------- 20 files changed, 75 insertions(+), 75 deletions(-) diff --git a/doc/code_examples/Tutorial_AASequence.cpp b/doc/code_examples/Tutorial_AASequence.cpp index 341176ed803..a537a622bf0 100644 --- a/doc/code_examples/Tutorial_AASequence.cpp +++ b/doc/code_examples/Tutorial_AASequence.cpp @@ -2,7 +2,7 @@ // SPDX-License-Identifier: BSD-3-Clause // -//! [AASequence] +//! [doxygen_snippet_AASequence] // This script calculates the mass-to-charge ratio of a 2+ charged b-ion and full peptide from a hardcoded sequence. @@ -53,4 +53,4 @@ int main() return 0; } -//! [AASequence] +//! [doxygen_snippet_AASequence] diff --git a/doc/code_examples/Tutorial_Element.cpp b/doc/code_examples/Tutorial_Element.cpp index c62b7d9b469..3c361cc482e 100644 --- a/doc/code_examples/Tutorial_Element.cpp +++ b/doc/code_examples/Tutorial_Element.cpp @@ -2,7 +2,7 @@ // SPDX-License-Identifier: BSD-3-Clause // -//! [Element] +//! [doxygen_snippet_Element] #include #include @@ -28,4 +28,4 @@ Int main() return 0; } //end of main -//! [Element] +//! [doxygen_snippet_Element] diff --git a/doc/code_examples/Tutorial_EmpiricalFormula.cpp b/doc/code_examples/Tutorial_EmpiricalFormula.cpp index e7e2b9f05b8..ff55a5028c3 100644 --- a/doc/code_examples/Tutorial_EmpiricalFormula.cpp +++ b/doc/code_examples/Tutorial_EmpiricalFormula.cpp @@ -2,7 +2,7 @@ // SPDX-License-Identifier: BSD-3-Clause // -//! [EmpiricalFormula] +//! [doxygen_snippet_EmpiricalFormula] #include #include @@ -38,4 +38,4 @@ Int main() return 0; } //end of main -//! [EmpiricalFormula] +//! [doxygen_snippet_EmpiricalFormula] diff --git a/doc/code_examples/Tutorial_Enzyme.cpp b/doc/code_examples/Tutorial_Enzyme.cpp index d9b9aeff9a8..f4153f2e4ea 100644 --- a/doc/code_examples/Tutorial_Enzyme.cpp +++ b/doc/code_examples/Tutorial_Enzyme.cpp @@ -2,7 +2,7 @@ // SPDX-License-Identifier: BSD-3-Clause // -//! [Enzyme] +//! [doxygen_snippet_Enzyme] #include #include @@ -52,4 +52,4 @@ int main() return 0; } -//! [Enzyme] +//! [doxygen_snippet_Enzyme] diff --git a/doc/code_examples/Tutorial_FeatureMap.cpp b/doc/code_examples/Tutorial_FeatureMap.cpp index 36949025c0d..5fa7251cda1 100644 --- a/doc/code_examples/Tutorial_FeatureMap.cpp +++ b/doc/code_examples/Tutorial_FeatureMap.cpp @@ -2,7 +2,7 @@ // SPDX-License-Identifier: BSD-3-Clause // -//! [FeatureMap] +//! [doxygen_snippet_FeatureMap] #include #include @@ -39,4 +39,4 @@ int main() return 0; } //end of main -//! [FeatureMap] +//! [doxygen_snippet_FeatureMap] diff --git a/doc/code_examples/Tutorial_Final.cpp b/doc/code_examples/Tutorial_Final.cpp index a998adec556..1b0d6fbde09 100644 --- a/doc/code_examples/Tutorial_Final.cpp +++ b/doc/code_examples/Tutorial_Final.cpp @@ -1,4 +1,4 @@ -//! [final] +//! [doxygen_snippet_final] // Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin // SPDX-License-Identifier: BSD-3-Clause // -------------------------------------------------------------------------- @@ -7,7 +7,7 @@ // This file is ONLY used for code snippets in the developer tutorial // -------------------------------------------------------------------------- -//! [Includes] +//! [doxygen_snippet_Includes] #include #include @@ -15,7 +15,7 @@ #include #include -//! [Includes] +//! [doxygen_snippet_Includes] using namespace OpenMS; using namespace std; @@ -55,7 +55,7 @@ class TOPPDatabaseFilter : protected: -//! [Register] +//! [doxygen_snippet_Register] void registerOptionsAndFlags_() override { @@ -69,9 +69,9 @@ class TOPPDatabaseFilter : setValidFormats_("out", ListUtils::create("fasta")); } -//! [Register] +//! [doxygen_snippet_Register] -//! [Functionality_1] +//! [doxygen_snippet_Functionality_1] void filterByProteinIDs_(const vector& db, const vector& peptide_identifications, bool whitelist, vector& db_new) { @@ -91,11 +91,11 @@ class TOPPDatabaseFilter : } } - //! [Functionality_1] + //! [doxygen_snippet_Functionality_1] OPENMS_LOG_INFO << "Protein IDs: " << id_accessions.size() << endl; - //! [Functionality_2] + //! [doxygen_snippet_Functionality_2] for (Size i = 0; i != db.size() ; ++i) { @@ -107,13 +107,13 @@ class TOPPDatabaseFilter : } } - //! [Functionality_2] + //! [doxygen_snippet_Functionality_2] } ExitCodes main_(int, const char **) override { - //! [InputParam] + //! [doxygen_snippet_InputParam] //------------------------------------------------------------- // parsing parameters @@ -124,18 +124,18 @@ class TOPPDatabaseFilter : bool whitelist = (method == "whitelist"); String out(getStringOption_("out")); - //! [InputParam] + //! [doxygen_snippet_InputParam] //------------------------------------------------------------- // reading input //------------------------------------------------------------- - //! [InputRead] + //! [doxygen_snippet_InputRead] vector db; FASTAFile().load(in, db); - //! [InputRead] + //! [doxygen_snippet_InputRead] // Check if no filter criteria was given // If you add a new filter please check if it was set here as well @@ -175,11 +175,11 @@ class TOPPDatabaseFilter : //------------------------------------------------------------- OPENMS_LOG_INFO << "Database entries (before / after): " << db.size() << " / " << db_new.size() << endl; - //! [output] + //! [doxygen_snippet_output] FASTAFile().store(out, db_new); - //! [output] + //! [doxygen_snippet_output] return EXECUTION_OK; } @@ -196,5 +196,5 @@ int main(int argc, const char ** argv) /// @endcond -//! [final] +//! [doxygen_snippet_final] diff --git a/doc/code_examples/Tutorial_IdentificationClasses.cpp b/doc/code_examples/Tutorial_IdentificationClasses.cpp index fa09bb65be0..7c1a1439c12 100644 --- a/doc/code_examples/Tutorial_IdentificationClasses.cpp +++ b/doc/code_examples/Tutorial_IdentificationClasses.cpp @@ -6,7 +6,7 @@ // $Authors: Petra Gutenbrunner $ // -------------------------------------------------------------------------- -//! [Identification] +//! [doxygen_snippet_Identification] #include #include @@ -127,4 +127,4 @@ int main() } -//! [Identification] +//! [doxygen_snippet_Identification] diff --git a/doc/code_examples/Tutorial_Logger.cpp b/doc/code_examples/Tutorial_Logger.cpp index 06287d4a3f9..078a89c2210 100644 --- a/doc/code_examples/Tutorial_Logger.cpp +++ b/doc/code_examples/Tutorial_Logger.cpp @@ -1,4 +1,4 @@ -//! [Logger] +//! [doxygen_snippet_Logger] ProgressLogger progresslogger; progresslogger.setLogType(log_type_); // set the log type (command line or a file) @@ -15,4 +15,4 @@ } progresslogger.endProgress(); -//! [Logger] +//! [doxygen_snippet_Logger] diff --git a/doc/code_examples/Tutorial_MRMTransitionGroup.cpp b/doc/code_examples/Tutorial_MRMTransitionGroup.cpp index 362357694dd..81b1d7ad755 100644 --- a/doc/code_examples/Tutorial_MRMTransitionGroup.cpp +++ b/doc/code_examples/Tutorial_MRMTransitionGroup.cpp @@ -1,4 +1,4 @@ -//! [MRMTransitionGroup] +//! [doxygen_snippet_MRMTransitionGroup] typedef MRMTransitionGroup TrGroup; TrGroup createTransitionGroup() @@ -12,4 +12,4 @@ typedef MRMTransitionGroup TrGroup return tr_group; } -//! [MRMTransitionGroup] +//! [doxygen_snippet_MRMTransitionGroup] diff --git a/doc/code_examples/Tutorial_MSChromatogram.cpp b/doc/code_examples/Tutorial_MSChromatogram.cpp index bfe9c064767..6e46523357b 100644 --- a/doc/code_examples/Tutorial_MSChromatogram.cpp +++ b/doc/code_examples/Tutorial_MSChromatogram.cpp @@ -1,7 +1,7 @@ // Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin // SPDX-License-Identifier: BSD-3-Clause -//! [MSChromatogram] +//! [doxygen_snippet_MSChromatogram] #include #include @@ -32,4 +32,4 @@ int main() return 0; } // end of main -//! [MSChromatogram] +//! [doxygen_snippet_MSChromatogram] diff --git a/doc/code_examples/Tutorial_MSExperiment.cpp b/doc/code_examples/Tutorial_MSExperiment.cpp index 0e3328449e9..7998d59c609 100644 --- a/doc/code_examples/Tutorial_MSExperiment.cpp +++ b/doc/code_examples/Tutorial_MSExperiment.cpp @@ -2,7 +2,7 @@ // SPDX-License-Identifier: BSD-3-Clause // -//! [MSExperiment] +//! [doxygen_snippet_MSExperiment] #include #include @@ -63,4 +63,4 @@ int main() return 0; } //end of main -//! [MSExperiment] +//! [doxygen_snippet_MSExperiment] diff --git a/doc/code_examples/Tutorial_MSSpectrum.cpp b/doc/code_examples/Tutorial_MSSpectrum.cpp index 5ccb5713d13..3e6ed1de8d7 100644 --- a/doc/code_examples/Tutorial_MSSpectrum.cpp +++ b/doc/code_examples/Tutorial_MSSpectrum.cpp @@ -6,7 +6,7 @@ // $Authors: Petra Gutenbrunner $ // -------------------------------------------------------------------------- -//! [MSSpectrum] +//! [doxygen_snippet_MSSpectrum] #include @@ -40,4 +40,4 @@ int main() return 0; } -//! [MSSpectrum] +//! [doxygen_snippet_MSSpectrum] diff --git a/doc/code_examples/Tutorial_Precursor.cpp b/doc/code_examples/Tutorial_Precursor.cpp index 2d71935d49a..3444c9f4d44 100644 --- a/doc/code_examples/Tutorial_Precursor.cpp +++ b/doc/code_examples/Tutorial_Precursor.cpp @@ -1,7 +1,7 @@ // Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin // SPDX-License-Identifier: BSD-3-Clause -//! [Precursor] +//! [doxygen_snippet_Precursor] #include #include @@ -56,4 +56,4 @@ int main(int argc, const char** argv) return 0; } // end of main -//! [Precursor] +//! [doxygen_snippet_Precursor] diff --git a/doc/code_examples/Tutorial_Residue.cpp b/doc/code_examples/Tutorial_Residue.cpp index 9163a4797f1..ceaf63bb18e 100644 --- a/doc/code_examples/Tutorial_Residue.cpp +++ b/doc/code_examples/Tutorial_Residue.cpp @@ -2,7 +2,7 @@ // SPDX-License-Identifier: BSD-3-Clause // -//! [Residue] +//! [doxygen_snippet_Residue] #include #include @@ -44,4 +44,4 @@ int main() return 0; } //end of main -//! [Residue] +//! [doxygen_snippet_Residue] diff --git a/doc/code_examples/Tutorial_ResidueModification.cpp b/doc/code_examples/Tutorial_ResidueModification.cpp index 9ab73a3afe6..a0fa4900c9e 100644 --- a/doc/code_examples/Tutorial_ResidueModification.cpp +++ b/doc/code_examples/Tutorial_ResidueModification.cpp @@ -1,4 +1,4 @@ -//! [ResidueModification] +//! [doxygen_snippet_ResidueModification] // Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin // SPDX-License-Identifier: BSD-3-Clause @@ -42,4 +42,4 @@ int main() return 0; } //end of main -//! [ResidueModification] +//! [doxygen_snippet_ResidueModification] diff --git a/doc/code_examples/Tutorial_Template.cpp b/doc/code_examples/Tutorial_Template.cpp index f810bb1de46..1d91f8e5229 100644 --- a/doc/code_examples/Tutorial_Template.cpp +++ b/doc/code_examples/Tutorial_Template.cpp @@ -1,4 +1,4 @@ -//! [Template] +//! [doxygen_snippet_Template] // Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin // SPDX-License-Identifier: BSD-3-Clause // -------------------------------------------------------------------------- @@ -88,4 +88,4 @@ int main(int argc, const char ** argv) } /// @endcond -//! [Template] +//! [doxygen_snippet_Template] diff --git a/doc/code_examples/Tutorial_Test.cpp b/doc/code_examples/Tutorial_Test.cpp index 437b0393f5c..2a9ff693ab2 100644 --- a/doc/code_examples/Tutorial_Test.cpp +++ b/doc/code_examples/Tutorial_Test.cpp @@ -1,4 +1,4 @@ -//! [Test] +//! [doxygen_snippet_Test] # DatabaseFilter test: add_test("TOPP_DatabaseFilter_1" ${TOPP_BIN_PATH}/DatabaseFilter -test -in ${DATA_DIR_TOPP}/DatabaseFilter_1.fasta -accession ${DATA_DIR_TOPP}/DatabaseFilter_1.idXML -out DatabaseFilter_1_out.fasta.tmp) @@ -8,4 +8,4 @@ add_test("TOPP_DatabaseFilter_2" ${TOPP_BIN_PATH}/DatabaseFilter -test -in ${DAT add_test("TOPP_DatabaseFilter_2_out" ${DIFF} -in1 DatabaseFilter_2_out.fasta.tmp -in2 ${DATA_DIR_TOPP}/DatabaseFilter_2_out.fasta ) set_tests_properties("TOPP_DatabaseFilter_2_out" PROPERTIES DEPENDS "TOPP_DatabaseFilter_2") -//! [Test] +//! [doxygen_snippet_Test] diff --git a/doc/code_examples/Tutorial_TheoreticalSpectrumGenerator.cpp b/doc/code_examples/Tutorial_TheoreticalSpectrumGenerator.cpp index c14123a1d98..14266cbcea4 100644 --- a/doc/code_examples/Tutorial_TheoreticalSpectrumGenerator.cpp +++ b/doc/code_examples/Tutorial_TheoreticalSpectrumGenerator.cpp @@ -2,7 +2,7 @@ // SPDX-License-Identifier: BSD-3-Clause // -//! [TSG] +//! [doxygen_snippet_TSG] #include #include @@ -53,4 +53,4 @@ int main() return 0; } //end of main -//! [TSG] +//! [doxygen_snippet_TSG] diff --git a/doc/doxygen/public/developer_cpp_guide.doxygen b/doc/doxygen/public/developer_cpp_guide.doxygen index 86eadedd10f..3c7723164f4 100644 --- a/doc/doxygen/public/developer_cpp_guide.doxygen +++ b/doc/doxygen/public/developer_cpp_guide.doxygen @@ -79,7 +79,7 @@ If you are writing an %OpenMS tool, you can also use the ProgressLogger to indic
        Logging the Tool Progress -\snippet Tutorial_Logger.cpp Logger +\snippet Tutorial_Logger.cpp doxygen_snippet_Logger Depending on how the user configures the ProgressLogger, this output is written to the command line or a log file. diff --git a/doc/doxygen/public/developer_tutorial.doxygen b/doc/doxygen/public/developer_tutorial.doxygen index 41b9ff716b6..514663035e5 100644 --- a/doc/doxygen/public/developer_tutorial.doxygen +++ b/doc/doxygen/public/developer_tutorial.doxygen @@ -349,7 +349,7 @@ The most important container for raw/profile data and centroided peaks is MSSpec
        In this example, we create MS1 spectrum at 1 minute and insert peaks with descending mass-to-charge ratios (for educational reasons). We sort the peaks according to ascending mass-to-charge ratio. Finally we print the peak positions of those peaks between 800 and 1000 Thomson. For printing all the peaks in the spectrum, we simply would have used the STL-conform methods begin() and end(). In addition to the iterator access, we can also directly access the peaks via vector indices (e.g. spectrum[0] is the first Peak1D object of the MSSpectrum). -\snippet Tutorial_MSSpectrum.cpp MSSpectrum +\snippet Tutorial_MSSpectrum.cpp doxygen_snippet_MSSpectrum @subsection tutorial_library_kernelclasses_chrom Chromatograms The most important container for targeted analysis / XIC data is MSChromatogram. The elements of a MSChromatogram are chromatogram peaks (Peak1D). MSChromatogram is derived from ChromatogramSettings, a container for the metadata of a chromatogram (e.g. containing precursor and product information), similarly to SpectrumSettings. In the following example (Tutorial_MSChromatogram.cpp) program, a MSChromatogram is filled with chromatographic peaks, sorted according to retention time and a selection of peak positions is displayed. @@ -357,7 +357,7 @@ The most important container for targeted analysis / XIC data is MSChromatogram. Example: Tutorial_MSChromatogram
        Fill MSChromatogram with chromatographic peaks, sorted according to retention time -\snippet Tutorial_MSChromatogram.cpp MSChromatogram +\snippet Tutorial_MSChromatogram.cpp doxygen_snippet_MSChromatogram Since much of the functionality is shared between MSChromatogram and MSSpectrum, further examples can be gathered from the MSSpectrum subsection. @@ -368,7 +368,7 @@ The precursor data stored along with MS/MS spectra contains invaluable informati
        Retrieve precursor information -\snippet Tutorial_Precursor.cpp Precursor +\snippet Tutorial_Precursor.cpp doxygen_snippet_Precursor @subsection tutorial_library_kernelclasses_mrm MRMTransitionGroup The targeted analysis of SRM or DIA (SWATH-MS) type of data requires a set of targeted assays as well as raw data chromatograms. The MRMTransitionGroup class allows users to map these two types of information and store them together with identified features conveniently in a single object. @@ -377,7 +377,7 @@ The targeted analysis of SRM or DIA (SWATH-MS) type of data requires a set of ta
        Create an empty MRMTransitionGroup with two dummy transitions -\snippet Tutorial_MRMTransitionGroup.cpp MRMTransitionGroup +\snippet Tutorial_MRMTransitionGroup.cpp doxygen_snippet_MRMTransitionGroup Note how the identifiers of the chromatograms and the assay information (ReactionMonitoringTransition) are matched so that downstream algorithms can utilize the meta-information stored in the assays for data analysis. @@ -394,7 +394,7 @@ MSExperiment contains ExperimentalSettings (metadata of the MS run) and a vector
        The following example creates a MSExperiment containing four MSSpectrum instances. We then iterate over RT range (2,3) and m/z range (603,802) and print the peak positions using an AreaIterator. Then we show how we iterate over all spectra and peaks. In the commented out part, we show how to load/store all spectra and associated metadata from/to an mzML file. -\snippet Tutorial_MSExperiment.cpp MSExperiment +\snippet Tutorial_MSExperiment.cpp doxygen_snippet_MSExperiment @subsection tutorial_library_kernelclasses_fmap FeatureMap FeatureMap, the container for features, is simply a vector. Additionally, it is derived from ExperimentalSettings, to store the meta information. All peak and feature containers (MSSpectrum, MSExperiment, FeatureMap) are also derived from RangeManager. This class facilitates the handling of MS data ranges. It allows to calculate and store both the position range and the intensity range of the container. @@ -403,7 +403,7 @@ FeatureMap, the container for features, is simply a vector. Additionall
        The following examples creates a FeatureMap containing two Feature instances. Then we iterate over all features and output the retention time and m/z. We then show, how to use the underlying range manager to retrieve FeatureMap boundaries in rt, m/z, and intensity. -\snippet Tutorial_FeatureMap.cpp FeatureMap +\snippet Tutorial_FeatureMap.cpp doxygen_snippet_FeatureMap @subsection tutorial_fileformat File Formats @@ -433,7 +433,7 @@ Each ProteinHit contains the actual protein accession, an associated score, and
        Create all identification data needed to store an idXML file -\snippet Tutorial_IdentificationClasses.cpp Identification +\snippet Tutorial_IdentificationClasses.cpp doxygen_snippet_Identification @subsection tutorial_chemistry Chemistry @subsection tutorial_element Element, ElementDB, EmpiricalFormula @@ -442,13 +442,13 @@ An Element object is the representation of an element. It can store the name, sy Example: Tutorial_Element.cpp
        Work with Element object -\snippet Tutorial_Element.cpp Element +\snippet Tutorial_Element.cpp doxygen_snippet_Element

        Example: Tutorial_EmpiricalFormula.cpp
        Extract isotope distribution and monoisotopic weight of an EmpiricalFormula object -\snippet Tutorial_EmpiricalFormula.cpp EmpiricalFormula +\snippet Tutorial_EmpiricalFormula.cpp doxygen_snippet_EmpiricalFormula @subsection tutorial_aaseq AASequence - Representing a Peptide (amino acid sequence) An AASequence object stores a (potentially chemically modified) peptide. @@ -459,7 +459,7 @@ Once constructed, many convenient functions are available to calculate peptide o
        Compute and output basic AASequence properties -\snippet Tutorial_AASequence.cpp AASequence +\snippet Tutorial_AASequence.cpp doxygen_snippet_AASequence Internally, an AASequence object is composed of Residues. @@ -470,7 +470,7 @@ Residues are the building blocks of AASequence objects. They store physico-chemi
        Compute and output basic Residue properties -\snippet Tutorial_Residue.cpp Residue +\snippet Tutorial_Residue.cpp doxygen_snippet_Residue @subsection tutorial_residuemod ResidueModification, ModificationsDB If a residue is modified (e.g. phosphorylation of an amino acid) it can be stored in the ResidueModification class. @@ -482,7 +482,7 @@ The class ModificationsDB is a database of ResidueModifications. These are mostl
        Set a ResidueModification on a Residue -\snippet Tutorial_ResidueModification.cpp ResidueModification +\snippet Tutorial_ResidueModification.cpp doxygen_snippet_ResidueModification @subsection tutorial_tsg TheoreticalSpectrumGenerator The TheoreticalSpectrumGenerator generates ion ladders from AASequences. @@ -491,7 +491,7 @@ The TheoreticalSpectrumGenerator generates ion ladders from AASequences.
        Generate theoretical spectra -\snippet Tutorial_TheoreticalSpectrumGenerator.cpp TSG +\snippet Tutorial_TheoreticalSpectrumGenerator.cpp doxygen_snippet_TSG @subsection tutorial_dep DigestionEnzymeProtein, ProteaseDB and ProteaseDigestion %OpenMS provides the most common digestion enzymes (DigestionEnzymeProtein) used in MS. They are stored in the ProteaseDB singleton and loaded from “/share/CHEMISTRY/Enzymes.xml”. @@ -500,7 +500,7 @@ Generate theoretical spectra
        Digest amino acid sequence -\snippet Tutorial_Enzyme.cpp Enzyme +\snippet Tutorial_Enzyme.cpp doxygen_snippet_Enzyme @section tutorial_tooldev Tool development @subsection tutorial_topp TOPP-Tool @@ -521,7 +521,7 @@ The DatabaseFilter tool should provide functionality to reduce a fasta database
        Template for %OpenMS tool development -\snippet Tutorial_Template.cpp Template +\snippet Tutorial_Template.cpp doxygen_snippet_Template - Now add a line with %DatabaseFilter.cpp to src/utils/executables.cmake. This registers the novel tool in the %OpenMS build system. - Then add the tool to getUtilList() in src/openms/source/APPLICATIONS/ToolHandler.cpp @@ -536,7 +536,7 @@ Define tool parameters Each TOPP tool defines a set of parameters that will be a
        Registration of tool parameters -\snippet Tutorial_Final.cpp Register +\snippet Tutorial_Final.cpp doxygen_snippet_Register Functions, classes and references can be checked in the %OpenMS / TOPP documentation (ftp://ftp.mi.fu-berlin.de/pub/OpenMS/release-documentation/html/index.html) @@ -546,7 +546,7 @@ After a tool is executed, the registered parameters are available in the main_ f Example: Tutorial_Final.cpp
        -\snippet Tutorial_Final.cpp InputParam +\snippet Tutorial_Final.cpp doxygen_snippet_InputParam @subsection tutorial_read Read Input Files First the different file formats and data structures for peptide identifications have to be included at the top of the file. @@ -555,12 +555,12 @@ First the different file formats and data structures for peptide identifications
        Add essential includes -\snippet Tutorial_Final.cpp Includes +\snippet Tutorial_Final.cpp doxygen_snippet_Includes Read the input files
        -\snippet Tutorial_Final.cpp InputRead +\snippet Tutorial_Final.cpp doxygen_snippet_InputRead Note: both peptide_identifications and protein_identifications contain protein accessions. The difference between them is that protein_identifications only contain the inferred set of protein accessions while peptide_identifications contains all protein accessions the peptides map to. We consider only the larger set of protein accessions stored in the peptide identifications. In principle, it would be easy to add another parameter that adds a filter for the inferred accessions stored in protein_identifications. @@ -573,21 +573,21 @@ To store all proteins accessions in the set id_accessions, we write:
        Store protein accessions -\snippet Tutorial_Final.cpp Functionality_1 +\snippet Tutorial_Final.cpp doxygen_snippet_Functionality_1 Now that we assembled the set of all protein accessions we are ready to compare them to the fasta_accessions. If they are similar and the method whitelist or they are different and the method blacklist was chosen, the fasta entries are copied to the new fasta database.

        Example: Tutorial_Final.cpp
        Add method functionality -\snippet Tutorial_Final.cpp Functionality_2 +\snippet Tutorial_Final.cpp doxygen_snippet_Functionality_2 @subsection tutorial_write Write Output Files Example: Tutorial_Final.cpp
        Write the output -\snippet Tutorial_Final.cpp output +\snippet Tutorial_Final.cpp doxygen_snippet_output @subsection tutorial_test Adding TOPP tests Testing your tools is essential and required to promote your experimental util to an official TOPP tool. It is not mandatory to provide a test for a util but appreciated. @@ -597,7 +597,7 @@ For this test a .fasta and a compatible .idXML file have to be added to /src/tes
        Add tests -\snippet Tutorial_Test.cpp Test +\snippet Tutorial_Test.cpp doxygen_snippet_Test These tests run the program with the given parameters and then call a diff tool to compare the generated output to the expected output. @@ -614,7 +614,7 @@ Since different filter criteria may be introduced in the future, the structure w
        Polish your code - add additional functionality -\snippet Tutorial_Final.cpp final +\snippet Tutorial_Final.cpp doxygen_snippet_final @subsection tutorial_pull Open a pull request Afterwards you can commit your changes to a new branch “feature/DatabaseFilter” of your %OpenMS clone on github and submit a pull request on your github page. After a short review process by the %OpenMS Team, the tool will be added the %OpenMS Library. From 9e9fdf9438c31dc89de393a7833fc52e3afce9e0 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Wed, 7 Feb 2024 15:45:41 +0100 Subject: [PATCH 096/242] [DOC] update clang-format file to match coding conventions; applied on two classes --- .clang-format | 123 +- .../developer_coding_conventions.doxygen | 2 +- .../include/OpenMS/KERNEL/RangeManager.h | 1477 ++++++++--------- .../include/OpenMS/MATH/MISC/MathFunctions.h | 651 ++++---- 4 files changed, 1122 insertions(+), 1131 deletions(-) diff --git a/.clang-format b/.clang-format index da504244b0a..b3a9c21c712 100644 --- a/.clang-format +++ b/.clang-format @@ -1,71 +1,80 @@ -# Generated from CLion C/C++ Code Style settings +--- BasedOnStyle: LLVM -AccessModifierOffset: -2 +AccessModifierOffset: '-2' AlignAfterOpenBracket: Align -AlignConsecutiveAssignments: false -AlignOperands: true -AllowAllArgumentsOnNextLine: false -AllowAllConstructorInitializersOnNextLine: true -AllowAllParametersOfDeclarationOnNextLine: false -AllowShortBlocksOnASingleLine: true -AllowShortCaseLabelsOnASingleLine: false +AlignConsecutiveAssignments: 'false' +AlignConsecutiveDeclarations: 'false' +AlignEscapedNewlines: Left +AlignOperands: 'true' +AlignTrailingComments: 'true' +AllowAllArgumentsOnNextLine: 'true' +AllowAllConstructorInitializersOnNextLine: 'false' +AllowAllParametersOfDeclarationOnNextLine: 'false' +AllowShortBlocksOnASingleLine: 'true' +AllowShortCaseLabelsOnASingleLine: 'false' AllowShortFunctionsOnASingleLine: None -AllowShortIfStatementsOnASingleLine: Never +AllowShortIfStatementsOnASingleLine: Always AllowShortLambdasOnASingleLine: All -AllowShortLoopsOnASingleLine: false +AllowShortLoopsOnASingleLine: 'false' AlwaysBreakAfterReturnType: None -AlwaysBreakTemplateDeclarations: Yes -BreakBeforeBraces: Custom +AlwaysBreakBeforeMultilineStrings: 'false' +AlwaysBreakTemplateDeclarations: 'Yes' +BinPackArguments: 'true' +BinPackParameters: 'false' +BreakBeforeBinaryOperators: All BraceWrapping: - AfterCaseLabel: false - AfterClass: true - AfterControlStatement: Always - AfterEnum: true - AfterFunction: true - AfterNamespace: true - AfterUnion: true - BeforeCatch: true - BeforeElse: true - IndentBraces: false - SplitEmptyFunction: true - SplitEmptyRecord: true -BreakBeforeBinaryOperators: None -BreakBeforeTernaryOperators: false + AfterClass: true + AfterControlStatement: true + AfterEnum: true + AfterFunction: true + AfterNamespace: true + AfterObjCDeclaration: true + AfterStruct: true + AfterUnion: true + BeforeCatch: true + BeforeElse: true + IndentBraces: false +BreakBeforeBraces: Custom +BreakBeforeTernaryOperators: 'true' BreakConstructorInitializers: AfterColon BreakInheritanceList: AfterColon -ColumnLimit: 200 -CompactNamespaces: false -ContinuationIndentWidth: 2 -FixNamespaceComments: true +BreakStringLiterals: 'true' +ColumnLimit: '150' +CompactNamespaces: 'false' +ConstructorInitializerAllOnOneLineOrOnePerLine: 'true' +ContinuationIndentWidth: '2' +DerivePointerAlignment: 'false' +DisableFormat: 'false' +FixNamespaceComments: 'true' IncludeBlocks: Regroup -IndentCaseLabels: true +IndentCaseLabels: 'true' IndentPPDirectives: BeforeHash -IndentWidth: 2 -KeepEmptyLinesAtTheStartOfBlocks: false -MaxEmptyLinesToKeep: 2 -NamespaceIndentation: All -ObjCSpaceAfterProperty: false -ObjCSpaceBeforeProtocolList: true +IndentWidth: '2' +IndentWrappedFunctionNames: 'false' +KeepEmptyLinesAtTheStartOfBlocks: 'true' +Language: Cpp +MaxEmptyLinesToKeep: '2' +NamespaceIndentation: Inner PointerAlignment: Left -ReflowComments: true -SortIncludes: true -SortUsingDeclarations: true -SpaceAfterCStyleCast: false -SpaceAfterLogicalNot: false -SpaceAfterTemplateKeyword: false -SpaceBeforeAssignmentOperators: true -SpaceBeforeCpp11BracedList: true -SpaceBeforeCtorInitializerColon: true -SpaceBeforeInheritanceColon: true +SortIncludes: 'true' +SortUsingDeclarations: 'true' +SpaceAfterLogicalNot: 'true' +SpaceAfterTemplateKeyword: 'false' +SpaceBeforeAssignmentOperators: 'true' +SpaceBeforeCpp11BracedList: 'true' +SpaceBeforeCtorInitializerColon: 'false' +SpaceBeforeInheritanceColon: 'true' SpaceBeforeParens: ControlStatements -SpaceBeforeRangeBasedForLoopColon: true -SpaceInEmptyParentheses: false -SpacesBeforeTrailingComments: 1 -SpacesInAngles: false -SpacesInCStyleCastParentheses: false -SpacesInContainerLiterals: false -SpacesInParentheses: false -SpacesInSquareBrackets: false +SpaceBeforeRangeBasedForLoopColon: 'true' +SpaceInEmptyParentheses: 'false' +SpacesBeforeTrailingComments: '1' +SpacesInAngles: 'false' +SpacesInCStyleCastParentheses: 'false' +SpacesInContainerLiterals: 'false' +SpacesInParentheses: 'false' +SpacesInSquareBrackets: 'false' Standard: Cpp11 -TabWidth: 2 +TabWidth: '2' UseTab: Never + +... diff --git a/doc/doxygen/public/developer_coding_conventions.doxygen b/doc/doxygen/public/developer_coding_conventions.doxygen index 2c0f96a04a3..929a5a4475e 100644 --- a/doc/doxygen/public/developer_coding_conventions.doxygen +++ b/doc/doxygen/public/developer_coding_conventions.doxygen @@ -6,7 +6,7 @@ %OpenMS uses coding conventions that are automatically checked using cpplint (/src/tests/coding/cpplint.py), when `ENABLE_STYLE_TESTING` flag is 'ON' during CMake. - When developing in an IDE which support [Clang format](https://clang.llvm.org/docs/ClangFormat.html) you can use the our style preset from the source tree `OpenMS/.clang-format`. For Clion, you can import it by selecting **Preferences** > **Code Style** > **Manage**. [VS2017 and later also support Clang format](https://devblogs.microsoft.com/cppblog/clangformat-support-in-visual-studio-2017-15-7-preview-1/) natively. + When developing in an IDE which support [Clang format](https://clang.llvm.org/docs/ClangFormat.html) you can use the our style preset from the source tree `OpenMS/.clang-format`. For Clion, you can import it by selecting **Preferences** > **Code Style** > **Manage**. [VS2017 and later also support Clang format](https://devblogs.microsoft.com/cppblog/clangformat-support-in-visual-studio-2017-15-7-preview-1/) natively (press `Ctrl-K, Ctrl-D`). @tableofcontents diff --git a/src/openms/include/OpenMS/KERNEL/RangeManager.h b/src/openms/include/OpenMS/KERNEL/RangeManager.h index 38559ed1c05..d584308f123 100644 --- a/src/openms/include/OpenMS/KERNEL/RangeManager.h +++ b/src/openms/include/OpenMS/KERNEL/RangeManager.h @@ -8,896 +8,887 @@ #pragma once -#include -#include #include - -#include // for nan() +#include +#include #include // for min/max #include -#include // for std::ostream +#include // for nan() +#include // for std::ostream namespace OpenMS { - /// Dimensions of data acquisition for MS data - enum class MSDim - { - RT, - MZ, - INT, - IM - }; - - struct RangeRT; - struct RangeMZ; - struct RangeIntensity; - struct RangeMobility; - - /// Base class for a simple range with minimum and maximum - struct OPENMS_DLLAPI RangeBase - { - public: - /// C'tor: initialize with empty range - RangeBase() = default; - - /// Cutom C'tor which sets the range to a singular point - RangeBase(const double single) : - min_(single), max_(single) - { - } +/// Dimensions of data acquisition for MS data +enum class MSDim +{ + RT, + MZ, + INT, + IM +}; + +struct RangeRT; +struct RangeMZ; +struct RangeIntensity; +struct RangeMobility; + +/// Base class for a simple range with minimum and maximum +struct OPENMS_DLLAPI RangeBase +{ +public: + /// C'tor: initialize with empty range + RangeBase() = default; - /// Custom C'tor to set min and max - /// @throws Exception::InvalidRange if min > max - RangeBase(const double min, const double max) : - min_(min), max_(max) - { - if (min_ > max_) - throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "Invalid initialization of range"); - } - /// Copy C'tor - RangeBase(const RangeBase& rhs) = default; + /// Cutom C'tor which sets the range to a singular point + RangeBase(const double single): min_(single), max_(single) + { + } - /// Move C'tor (seems useless, but is required for completeness in derived classes' move c'tor) - RangeBase(RangeBase&& rhs) noexcept = default; + /// Custom C'tor to set min and max + /// @throws Exception::InvalidRange if min > max + RangeBase(const double min, const double max): min_(min), max_(max) + { + if (min_ > max_) throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "Invalid initialization of range"); + } + /// Copy C'tor + RangeBase(const RangeBase& rhs) = default; + + /// Move C'tor (seems useless, but is required for completeness in derived classes' move c'tor) + RangeBase(RangeBase&& rhs) noexcept = default; + + /// Assignment operator + RangeBase& operator=(const RangeBase& rhs) = default; + + /// Move assignment (seems useless, but is required for completeness in derived classes' move c'tor) + RangeBase& operator=(RangeBase&& rhs) noexcept = default; + + /// D'tor + ~RangeBase() noexcept = default; + + /// conversion operator to allow accepting a RangeBase (instead of RangeRT) for the implicitly defined special members, e.g. assignment operator + /// (RangeRT& operator=(const RangeRT&)) + operator RangeRT() const; + /// conversion operator to allow accepting a RangeBase (instead of RangeMZ) for the implicitly defined special members, e.g. assignment operator + /// (RangeMZ& operator=(const RangeMZ&)) + operator RangeMZ() const; + /// conversion operator to allow accepting a RangeBase (instead of RangeIntensity) for the implicitly defined special members, e.g. assignment + /// operator (RangeIntensity& operator=(const RangeIntensity&)) + operator RangeIntensity() const; + /// conversion operator to allow accepting a RangeBase (instead of RangeMobility) for the implicitly defined special members, e.g. assignment + /// operator (RangeMobility& operator=(const RangeMobility&)) + operator RangeMobility() const; + + /// make the range empty, i.e. isEmpty() will be true + void clear() + { + *this = RangeBase(); // overwrite with fresh instance + } - /// Assignment operator - RangeBase& operator=(const RangeBase& rhs) = default; + /// is the range empty (i.e. min > max)? + bool isEmpty() const + { + return min_ > max_; + } - /// Move assignment (seems useless, but is required for completeness in derived classes' move c'tor) - RangeBase& operator=(RangeBase&& rhs) noexcept = default; + /// is @p value within [min, max]? + bool contains(const double value) const + { + return uint8_t(min_ <= value) & uint8_t(value <= max_); // using && leads to branches on all compilers in Debug and in Release on MVSC + } - /// D'tor - ~RangeBase() noexcept = default; + /// is the range @p inner_range within [min, max]? + bool contains(const RangeBase& inner_range) const + { + return uint8_t(contains(inner_range.min_)) + & uint8_t(contains(inner_range.max_)); // using && leads to branches on all compilers in Debug and in Release on MVSC + } - /// conversion operator to allow accepting a RangeBase (instead of RangeRT) for the implicitly defined special members, e.g. assignment operator (RangeRT& operator=(const RangeRT&)) - operator RangeRT() const; - /// conversion operator to allow accepting a RangeBase (instead of RangeMZ) for the implicitly defined special members, e.g. assignment operator (RangeMZ& operator=(const RangeMZ&)) - operator RangeMZ() const; - /// conversion operator to allow accepting a RangeBase (instead of RangeIntensity) for the implicitly defined special members, e.g. assignment operator (RangeIntensity& operator=(const RangeIntensity&)) - operator RangeIntensity() const; - /// conversion operator to allow accepting a RangeBase (instead of RangeMobility) for the implicitly defined special members, e.g. assignment operator (RangeMobility& operator=(const RangeMobility&)) - operator RangeMobility() const; + /** @name Accessors for min and max - /// make the range empty, i.e. isEmpty() will be true - void clear() - { - *this = RangeBase(); // overwrite with fresh instance - } + We use accessors, to keep range consistent (i.e. ensure that min <= max) + */ + ///@{ - /// is the range empty (i.e. min > max)? - bool isEmpty() const - { - return min_ > max_; - } + /// sets the minimum (and the maximum, if uninitialized) + void setMin(const double min) + { + min_ = min; + if (max_ < min) max_ = min; + } - /// is @p value within [min, max]? - bool contains(const double value) const - { - return uint8_t(min_ <= value) & uint8_t(value <= max_); // using && leads to branches on all compilers in Debug and in Release on MVSC - } + /// sets the maximum (and the minimum, if uninitialized) + void setMax(const double max) + { + max_ = max; + if (min_ > max) min_ = max; + } - /// is the range @p inner_range within [min, max]? - bool contains(const RangeBase& inner_range) const - { - return uint8_t(contains(inner_range.min_)) & uint8_t(contains(inner_range.max_)); // using && leads to branches on all compilers in Debug and in Release on MVSC - } + /// only useful if isEmpty() returns false + double getMin() const + { + return min_; + } - /** @name Accessors for min and max + /// only useful if isEmpty() returns false + double getMax() const + { + return max_; + } + ///@} - We use accessors, to keep range consistent (i.e. ensure that min <= max) - */ - ///@{ + /// ensure the range includes the range of @p other + void extend(const RangeBase& other) + { + min_ = std::min(min_, other.min_); + max_ = std::max(max_, other.max_); + } - /// sets the minimum (and the maximum, if uninitialized) - void setMin(const double min) - { - min_ = min; - if (max_ < min) - max_ = min; - } + /// extend the range such that it includes the given @p value + void extend(const double value) + { + min_ = std::min(min_, value); + max_ = std::max(max_, value); + } - /// sets the maximum (and the minimum, if uninitialized) - void setMax(const double max) - { - max_ = max; - if (min_ > max) - min_ = max; - } + /// Extend the range by @p by units to left and right + /// Using negative values will shrink the range. It may become empty. + /// Calling this on an empty range will not have any effect. + void extendLeftRight(const double by) + { + if (isEmpty()) return; + min_ -= by; + max_ += by; + } - /// only useful if isEmpty() returns false - double getMin() const - { - return min_; - } + /** + * \brief If the current range is a single point, e.g. min==max, then extend the range by @p min_span / 2 on either side. + * + * Calling span() afterwards, returns @p min_span. + */ + void minSpanIfSingular(const double min_span) + { + if (min_ == max_) extendLeftRight(min_span / 2); + } - /// only useful if isEmpty() returns false - double getMax() const - { - return max_; - } - ///@} + /// Ensure the range of this does not exceed the range of @p other. + /// If @p other already contains() this range, nothing changes. + /// If this range is entirely outside the range of @p other, + /// the resulting range is empty. + /// Empty ranges are not modified. + /// @throw Exception::InvalidRange if @p other is empty + void clampTo(const RangeBase& other) + { + if (isEmpty()) return; + if (other.isEmpty()) throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); - /// ensure the range includes the range of @p other - void extend(const RangeBase& other) - { - min_ = std::min(min_, other.min_); - max_ = std::max(max_, other.max_); - } + min_ = std::max(min_, other.min_); + max_ = std::min(max_, other.max_); + } - /// extend the range such that it includes the given @p value - void extend(const double value) - { - min_ = std::min(min_, value); - max_ = std::max(max_, value); - } + /// Move range of *this to min/max of @p sandbox, without changing the span, if possible. + /// This does tighten the range unless @p sandbox's ranges are smaller than *this. + /// Empty ranges are not modified. + /// @param sandbox Range to translate/move the current range into + /// @throw Exception::InvalidRange if @p sandbox is empty + void pushInto(const RangeBase& sandbox) + { + if (isEmpty()) return; + if (sandbox.isEmpty()) throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); - /// Extend the range by @p by units to left and right - /// Using negative values will shrink the range. It may become empty. - /// Calling this on an empty range will not have any effect. - void extendLeftRight(const double by) + if (! sandbox.contains(*this)) { - if (isEmpty()) return; - min_ -= by; - max_ += by; + if (getSpan() > sandbox.getSpan()) + { // make interval fit into sandbox (= ensure full containment) + max_ = min_ + sandbox.getSpan(); + } + if (min_ < sandbox.min_) + { // need to shift right (positive shift) + shift(sandbox.min_ - min_); + } + else if (max_ > sandbox.max_) + { // need to shift left (negative shift) + shift(sandbox.max_ - max_); + } } + } - /** - * \brief If the current range is a single point, e.g. min==max, then extend the range by @p min_span / 2 on either side. - * - * Calling span() afterwards, returns @p min_span. - */ - void minSpanIfSingular(const double min_span) - { - if (min_ == max_) extendLeftRight(min_span / 2); - } + /** + @brief Scale the range of the dimension by a @p factor. A factor > 1 increases the range; factor < 1 decreases it. - /// Ensure the range of this does not exceed the range of @p other. - /// If @p other already contains() this range, nothing changes. - /// If this range is entirely outside the range of @p other, - /// the resulting range is empty. - /// Empty ranges are not modified. - /// @throw Exception::InvalidRange if @p other is empty - void clampTo(const RangeBase& other) - { - if (isEmpty()) return; - if (other.isEmpty()) throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); + Let d = max - min; then min = min - d*(factor-1)/2, + i.e. scale(1.5) extends the range by 25% on each side. - min_ = std::max(min_, other.min_); - max_ = std::min(max_, other.max_); - } + Scaling an empty range will not have any effect. - /// Move range of *this to min/max of @p sandbox, without changing the span, if possible. - /// This does tighten the range unless @p sandbox's ranges are smaller than *this. - /// Empty ranges are not modified. - /// @param sandbox Range to translate/move the current range into - /// @throw Exception::InvalidRange if @p sandbox is empty - void pushInto(const RangeBase& sandbox) - { - if (isEmpty()) return; - if (sandbox.isEmpty()) throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); + @param factor The multiplier to increase the range by + */ + void scaleBy(const double factor) + { + if (isEmpty()) return; + const double dist = max_ - min_; + const double extension = dist * (factor - 1) / 2; + min_ -= extension; + max_ += extension; + } - if (!sandbox.contains(*this)) - { - if (getSpan() > sandbox.getSpan()) - { // make interval fit into sandbox (= ensure full containment) - max_ = min_ + sandbox.getSpan(); - } - if (min_ < sandbox.min_) - { // need to shift right (positive shift) - shift(sandbox.min_ - min_); - } - else if (max_ > sandbox.max_) - { // need to shift left (negative shift) - shift(sandbox.max_ - max_); - } - } - } + /// Move the range by @p distance (negative values shift left) + /// Shifting an empty range will not have any effect. + void shift(const double distance) + { + if (isEmpty()) return; + min_ += distance; + max_ += distance; + } - /** - @brief Scale the range of the dimension by a @p factor. A factor > 1 increases the range; factor < 1 decreases it. + /// Compute the center point of the range + /// If range is empty(), 'nan' will be returned + double center() const + { + if (isEmpty()) return nan(""); + return min_ + (max_ - min_) / 2.0; + } - Let d = max - min; then min = min - d*(factor-1)/2, - i.e. scale(1.5) extends the range by 25% on each side. + /// Get the 'width' of the range + /// If range is empty(), 'nan' will be returned + double getSpan() const + { + if (isEmpty()) return nan(""); + return max_ - min_; + } - Scaling an empty range will not have any effect. + bool operator==(const RangeBase& rhs) const + { + return min_ == rhs.min_ && max_ == rhs.max_; + } - @param factor The multiplier to increase the range by - */ - void scaleBy(const double factor) - { - if (isEmpty()) return; - const double dist = max_ - min_; - const double extension = dist * (factor - 1) / 2; - min_ -= extension; - max_ += extension; - } + /** + * \brief Return the current range, or (if empty) a full range (-1e308, 1e308). + * \return A range where always: min <= max + */ + std::pair getNonEmptyRange() const + { + // pair with full range + if (isEmpty()) return {std::numeric_limits::lowest(), std::numeric_limits::max()}; + else + return {min_, max_}; + } - /// Move the range by @p distance (negative values shift left) - /// Shifting an empty range will not have any effect. - void shift(const double distance) - { - if (isEmpty()) return; - min_ += distance; - max_ += distance; - } +protected: + // make members non-accessible to maintain invariant: min <= max (unless uninitialized) + double min_ = std::numeric_limits::max(); + double max_ = std::numeric_limits::lowest(); +}; - /// Compute the center point of the range - /// If range is empty(), 'nan' will be returned - double center() const - { - if (isEmpty()) return nan(""); - return min_ + (max_ - min_) / 2.0; - } +OPENMS_DLLAPI std::ostream& operator<<(std::ostream& out, const RangeBase& b); - /// Get the 'width' of the range - /// If range is empty(), 'nan' will be returned - double getSpan() const - { - if (isEmpty()) return nan(""); - return max_ - min_; - } +struct OPENMS_DLLAPI RangeRT : public RangeBase +{ - bool operator==(const RangeBase& rhs) const - { - return min_ == rhs.min_ && max_ == rhs.max_; - } + const static MSDim DIM = MSDim::RT; - /** - * \brief Return the current range, or (if empty) a full range (-1e308, 1e308). - * \return A range where always: min <= max - */ - std::pair getNonEmptyRange() const - { - // pair with full range - if (isEmpty()) return {std::numeric_limits::lowest(), std::numeric_limits::max()}; - else return {min_, max_}; - } + // Rule of 0! + using RangeBase::RangeBase; // inherit C'tors from base - protected: - // make members non-accessible to maintain invariant: min <= max (unless uninitialized) - double min_ = std::numeric_limits::max(); - double max_ = std::numeric_limits::lowest(); - }; + /** @name Accessors for min and max - OPENMS_DLLAPI std::ostream& operator<<(std::ostream& out, const RangeBase& b); + We use accessors, to keep range consistent (i.e. ensure that min <= max) + */ + ///@{ - struct OPENMS_DLLAPI RangeRT : public RangeBase { + /// sets the minimum (and the maximum, if uninitialized) + void setMinRT(const double min) + { + setMin(min); + } - const static MSDim DIM = MSDim::RT; + /// sets the maximum (and the minimum, if uninitialized) + void setMaxRT(const double max) + { + setMax(max); + } - // Rule of 0! - using RangeBase::RangeBase; // inherit C'tors from base + /// only useful if isEmpty() returns false + double getMinRT() const + { + return min_; + } - /** @name Accessors for min and max + /// only useful if isEmpty() returns false + double getMaxRT() const + { + return max_; + } + ///@} - We use accessors, to keep range consistent (i.e. ensure that min <= max) - */ - ///@{ + /// extend the range such that it includes the given @p value + void extendRT(const double value) + { + extend(value); + } - /// sets the minimum (and the maximum, if uninitialized) - void setMinRT(const double min) - { - setMin(min); - } + /// is @p value within [min, max]? + bool containsRT(const double value) const + { + return RangeBase::contains(value); + } - /// sets the maximum (and the minimum, if uninitialized) - void setMaxRT(const double max) - { - setMax(max); - } + /// is the range @p inner_range within [min, max] of this range? + bool containsRT(const RangeBase& inner_range) const + { + return RangeBase::contains(inner_range); + } +}; - /// only useful if isEmpty() returns false - double getMinRT() const - { - return min_; - } +OPENMS_DLLAPI std::ostream& operator<<(std::ostream& out, const RangeRT& range); - /// only useful if isEmpty() returns false - double getMaxRT() const - { - return max_; - } - ///@} +struct OPENMS_DLLAPI RangeMZ : public RangeBase +{ - /// extend the range such that it includes the given @p value - void extendRT(const double value) - { - extend(value); - } + const static MSDim DIM = MSDim::MZ; - /// is @p value within [min, max]? - bool containsRT(const double value) const - { - return RangeBase::contains(value); - } + // Rule of 0! + using RangeBase::RangeBase; // inherit C'tors from base - /// is the range @p inner_range within [min, max] of this range? - bool containsRT(const RangeBase& inner_range) const - { - return RangeBase::contains(inner_range); - } - }; + /** @name Accessors for min and max - OPENMS_DLLAPI std::ostream& operator<<(std::ostream& out, const RangeRT& range); + We use accessors, to keep range consistent (i.e. ensure that min <= max) + */ + ///@{ - struct OPENMS_DLLAPI RangeMZ : public RangeBase + /// sets the minimum (and the maximum, if uninitialized) + void setMinMZ(const double min) { + setMin(min); + } - const static MSDim DIM = MSDim::MZ; - - // Rule of 0! - using RangeBase::RangeBase; // inherit C'tors from base + /// sets the maximum (and the minimum, if uninitialized) + void setMaxMZ(const double max) + { + setMax(max); + } - /** @name Accessors for min and max + /// only useful if isEmpty() returns false + double getMinMZ() const + { + return min_; + } - We use accessors, to keep range consistent (i.e. ensure that min <= max) - */ - ///@{ + /// only useful if isEmpty() returns false + double getMaxMZ() const + { + return max_; + } + ///@} - /// sets the minimum (and the maximum, if uninitialized) - void setMinMZ(const double min) - { - setMin(min); - } + /// extend the range such that it includes the given @p value + void extendMZ(const double value) + { + extend(value); + } - /// sets the maximum (and the minimum, if uninitialized) - void setMaxMZ(const double max) - { - setMax(max); - } + /// is @p value within [min, max]? + bool containsMZ(const double value) const + { + return RangeBase::contains(value); + } - /// only useful if isEmpty() returns false - double getMinMZ() const - { - return min_; - } + /// is the range @p inner_range within [min, max] of this range? + bool containsMZ(const RangeBase& inner_range) const + { + return RangeBase::contains(inner_range); + } +}; +OPENMS_DLLAPI std::ostream& operator<<(std::ostream& out, const RangeMZ& range); - /// only useful if isEmpty() returns false - double getMaxMZ() const - { - return max_; - } - ///@} +struct OPENMS_DLLAPI RangeIntensity : public RangeBase +{ - /// extend the range such that it includes the given @p value - void extendMZ(const double value) - { - extend(value); - } + const static MSDim DIM = MSDim::INT; - /// is @p value within [min, max]? - bool containsMZ(const double value) const - { - return RangeBase::contains(value); - } + // Rule of 0! + using RangeBase::RangeBase; // inherit C'tors from base - /// is the range @p inner_range within [min, max] of this range? - bool containsMZ(const RangeBase& inner_range) const - { - return RangeBase::contains(inner_range); - } - }; - OPENMS_DLLAPI std::ostream& operator<<(std::ostream& out, const RangeMZ& range); + /** @name Accessors for min and max - struct OPENMS_DLLAPI RangeIntensity : public RangeBase { + We use accessors, to keep range consistent (i.e. ensure that min <= max) + */ + ///@{ - const static MSDim DIM = MSDim::INT; + /// sets the minimum (and the maximum, if uninitialized) + void setMinIntensity(const double min) + { + setMin(min); + } - // Rule of 0! - using RangeBase::RangeBase; // inherit C'tors from base + /// sets the maximum (and the minimum, if uninitialized) + void setMaxIntensity(const double max) + { + setMax(max); + } - /** @name Accessors for min and max + /// only useful if isEmpty() returns false + double getMinIntensity() const + { + return min_; + } - We use accessors, to keep range consistent (i.e. ensure that min <= max) - */ - ///@{ + /// only useful if isEmpty() returns false + double getMaxIntensity() const + { + return max_; + } + ///@} - /// sets the minimum (and the maximum, if uninitialized) - void setMinIntensity(const double min) - { - setMin(min); - } + /// extend the range such that it includes the given @p value + void extendIntensity(const double value) + { + extend(value); + } - /// sets the maximum (and the minimum, if uninitialized) - void setMaxIntensity(const double max) - { - setMax(max); - } + /// is @p value within [min, max]? + bool containsIntensity(const double value) const + { + return RangeBase::contains(value); + } - /// only useful if isEmpty() returns false - double getMinIntensity() const - { - return min_; - } + /// is the range @p inner_range within [min, max] of this range? + bool containsIntensity(const RangeBase& inner_range) const + { + return RangeBase::contains(inner_range); + } +}; +OPENMS_DLLAPI std::ostream& operator<<(std::ostream& out, const RangeIntensity& range); - /// only useful if isEmpty() returns false - double getMaxIntensity() const - { - return max_; - } - ///@} +struct OPENMS_DLLAPI RangeMobility : public RangeBase +{ + const static MSDim DIM = MSDim::IM; - /// extend the range such that it includes the given @p value - void extendIntensity(const double value) - { - extend(value); - } + // Rule of 0! + using RangeBase::RangeBase; // inherit C'tors from base - /// is @p value within [min, max]? - bool containsIntensity(const double value) const - { - return RangeBase::contains(value); - } + /** @name Accessors for min and max - /// is the range @p inner_range within [min, max] of this range? - bool containsIntensity(const RangeBase& inner_range) const - { - return RangeBase::contains(inner_range); - } - }; - OPENMS_DLLAPI std::ostream& operator<<(std::ostream& out, const RangeIntensity& range); + We use accessors, to keep range consistent (i.e. ensure that min <= max) + */ + ///@{ - struct OPENMS_DLLAPI RangeMobility : public RangeBase + /// sets the minimum (and the maximum, if uninitialized) + void setMinMobility(const double min) { - const static MSDim DIM = MSDim::IM; - - // Rule of 0! - using RangeBase::RangeBase; // inherit C'tors from base - - /** @name Accessors for min and max + setMin(min); + } - We use accessors, to keep range consistent (i.e. ensure that min <= max) - */ - ///@{ + /// sets the maximum (and the minimum, if uninitialized) + void setMaxMobility(const double max) + { + setMax(max); + } - /// sets the minimum (and the maximum, if uninitialized) - void setMinMobility(const double min) - { - setMin(min); - } + /// only useful if isEmpty() returns false + double getMinMobility() const + { + return min_; + } - /// sets the maximum (and the minimum, if uninitialized) - void setMaxMobility(const double max) - { - setMax(max); - } + /// only useful if isEmpty() returns false + double getMaxMobility() const + { + return max_; + } + ///@} - /// only useful if isEmpty() returns false - double getMinMobility() const - { - return min_; - } + /// extend the range such that it includes the given @p value + void extendMobility(const double value) + { + extend(value); + } - /// only useful if isEmpty() returns false - double getMaxMobility() const - { - return max_; - } - ///@} + /// is @p value within [min, max]? + bool containsMobility(const double value) const + { + return RangeBase::contains(value); + } - /// extend the range such that it includes the given @p value - void extendMobility(const double value) - { - extend(value); - } + /// is the range @p inner_range within [min, max] of this range? + bool containsMobility(const RangeBase& inner_range) const + { + return RangeBase::contains(inner_range); + } +}; - /// is @p value within [min, max]? - bool containsMobility(const double value) const - { - return RangeBase::contains(value); - } +OPENMS_DLLAPI std::ostream& operator<<(std::ostream& out, const RangeMobility& range); - /// is the range @p inner_range within [min, max] of this range? - bool containsMobility(const RangeBase& inner_range) const - { - return RangeBase::contains(inner_range); - } - }; +/// Enum listing state of dimensions (RangeBases) +enum class HasRangeType +{ + ALL, ///< all dimensions are filled + SOME, ///< some dimensions are empty, some are filled + NONE ///< all dimensions are empty (=cleared) +}; - OPENMS_DLLAPI std::ostream& operator<<(std::ostream& out, const RangeMobility& range); +/** + @brief Handles the management of a multidimensional range, e.g. RangeMZ and RangeIntensity for spectra. - /// Enum listing state of dimensions (RangeBases) - enum class HasRangeType - { - ALL, ///< all dimensions are filled - SOME,///< some dimensions are empty, some are filled - NONE ///< all dimensions are empty (=cleared) - }; + Instantiate it with the dimensions which are supported/required, e.g. + `RangeManager range_spec` for a spectrum and use the strongly typed features, such as + `range_spec.getMaxRT()/setMaxRT(500.0)` or `range_spec.extend(RangeMZ{100, 1500})`. - /** - @brief Handles the management of a multidimensional range, e.g. RangeMZ and RangeIntensity for spectra. + Use RangeManagerContainer as a base class for all peak and feature containers like MSSpectrum, MSExperiment and FeatureMap. - Instantiate it with the dimensions which are supported/required, e.g. - `RangeManager range_spec` for a spectrum and use the strongly typed features, such as - `range_spec.getMaxRT()/setMaxRT(500.0)` or `range_spec.extend(RangeMZ{100, 1500})`. + The implementation uses non-virtual multiple inheritance using variadic templates. Each dimension, e.g. RangeRT, is inherited from, thus + all members of the base class become accessible in the RangeManager, e.g. getMaxRT(). + Operations (e.g. assignment, or extension of ranges) across RangeManagers with a different, yet overlapping set of base classes + is enabled using fold expressions and constexpr evaluations, which are resolved at compile time (see for_each_base_ member function). - Use RangeManagerContainer as a base class for all peak and feature containers like MSSpectrum, MSExperiment and FeatureMap. +*/ +template +class RangeManager : public RangeBases... +{ +public: + using ThisRangeType = RangeManager; - The implementation uses non-virtual multiple inheritance using variadic templates. Each dimension, e.g. RangeRT, is inherited from, thus - all members of the base class become accessible in the RangeManager, e.g. getMaxRT(). - Operations (e.g. assignment, or extension of ranges) across RangeManagers with a different, yet overlapping set of base classes - is enabled using fold expressions and constexpr evaluations, which are resolved at compile time (see for_each_base_ member function). + // rule of 0 -- no need for a virtual d'tor or anything fancy + // ... - */ - template - class RangeManager : public RangeBases... + bool operator==(const RangeManager& rhs) const { - public: - using ThisRangeType = RangeManager; - // rule of 0 -- no need for a virtual d'tor or anything fancy - // ... - - bool operator==(const RangeManager& rhs) const - { - bool equal = true; - for_each_base_([&](auto* base) { - using T_BASE = std::decay_t; // remove const/ref qualifiers - equal &= ((T_BASE&) rhs == (T_BASE&) *this); - }); - return equal; - } - - bool operator!=(const RangeManager& rhs) const - { - return !operator==(rhs); - } + bool equal = true; + for_each_base_([&](auto* base) { + using T_BASE = std::decay_t; // remove const/ref qualifiers + equal &= ((T_BASE&)rhs == (T_BASE&)*this); + }); + return equal; + } - /// copy all overlapping dimensions from @p rhs to this instance. - /// Dimensions which are not contained in @p rhs are left untouched. - /// @param rhs Range to copy from - /// @return true if one or more dimensions overlapped - template - bool assignUnsafe(const RangeManager& rhs) - { - bool found = false; - for_each_base_([&](auto* base) { - using T_BASE = std::decay_t; // remove const/ref qualifiers - if constexpr (std::is_base_of_v>) - { - base->operator=((T_BASE&) rhs); - found = true; - } - }); - - return found; - } + bool operator!=(const RangeManager& rhs) const + { + return ! operator==(rhs); + } - /// copy all overlapping dimensions from @p rhs to this instance. - /// Dimensions which are not contained in @p rhs are left untouched. - /// @param rhs Range to copy from - /// @throw Exception::InvalidRange if no dimensions overlapped - template - auto& assign(const RangeManager& rhs) - { - if (!assignUnsafe(rhs)) + /// copy all overlapping dimensions from @p rhs to this instance. + /// Dimensions which are not contained in @p rhs are left untouched. + /// @param rhs Range to copy from + /// @return true if one or more dimensions overlapped + template + bool assignUnsafe(const RangeManager& rhs) + { + bool found = false; + for_each_base_([&](auto* base) { + using T_BASE = std::decay_t; // remove const/ref qualifiers + if constexpr (std::is_base_of_v>) { - throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION , "No assignment took place (no dimensions in common!);"); + base->operator=((T_BASE&)rhs); + found = true; } - return *this; - } + }); - /// extend all dimensions which overlap with @p rhs to contain the range of @p rhs - /// Dimensions which are not contained in @p rhs are left untouched. - /// @param rhs Range to extend from - /// @return false if no dimensions overlapped - template - bool extendUnsafe(const RangeManager& rhs) + return found; + } + + /// copy all overlapping dimensions from @p rhs to this instance. + /// Dimensions which are not contained in @p rhs are left untouched. + /// @param rhs Range to copy from + /// @throw Exception::InvalidRange if no dimensions overlapped + template + auto& assign(const RangeManager& rhs) + { + if (! assignUnsafe(rhs)) { - bool found = false; - for_each_base_([&](auto* base) { - using T_BASE = std::decay_t; // remove const/ref qualifiers - if constexpr (std::is_base_of_v>) - { - base->extend((T_BASE&) rhs); - found = true; - } - }); - return found; + throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "No assignment took place (no dimensions in common!);"); } + return *this; + } - /// extend all dimensions which overlap with @p rhs to contain the range of @p rhs - /// Dimensions which are not contained in @p rhs are left untouched. - /// @param rhs Range to extend from - /// @throw Exception::InvalidRange if no dimensions overlapped - template - void extend(const RangeManager& rhs) - { - if (!extendUnsafe(rhs)) + /// extend all dimensions which overlap with @p rhs to contain the range of @p rhs + /// Dimensions which are not contained in @p rhs are left untouched. + /// @param rhs Range to extend from + /// @return false if no dimensions overlapped + template + bool extendUnsafe(const RangeManager& rhs) + { + bool found = false; + for_each_base_([&](auto* base) { + using T_BASE = std::decay_t; // remove const/ref qualifiers + if constexpr (std::is_base_of_v>) { - throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "No assignment took place (no dimensions in common!);"); + base->extend((T_BASE&)rhs); + found = true; } - } + }); + return found; + } - /// calls RangeBase::scale() for each dimension - void scaleBy(const double factor) + /// extend all dimensions which overlap with @p rhs to contain the range of @p rhs + /// Dimensions which are not contained in @p rhs are left untouched. + /// @param rhs Range to extend from + /// @throw Exception::InvalidRange if no dimensions overlapped + template + void extend(const RangeManager& rhs) + { + if (! extendUnsafe(rhs)) { - for_each_base_([&](auto* base) { - base->scaleBy(factor); - }); + throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "No assignment took place (no dimensions in common!);"); } + } - /** - * \brief If any dimension is a single point, e.g. min==max, then extend this dimension by @p min_span / 2 on either side. - * - * Empty dimensions remain unchanged. - * - * @see DimBase::minSpanIfSingular - * - */ - void minSpanIfSingular(const double min_span) - { - for_each_base_([&](auto* base) { - base->minSpanIfSingular(min_span); - }); - } + /// calls RangeBase::scale() for each dimension + void scaleBy(const double factor) + { + for_each_base_([&](auto* base) { base->scaleBy(factor); }); + } + /** + * \brief If any dimension is a single point, e.g. min==max, then extend this dimension by @p min_span / 2 on either side. + * + * Empty dimensions remain unchanged. + * + * @see DimBase::minSpanIfSingular + * + */ + void minSpanIfSingular(const double min_span) + { + for_each_base_([&](auto* base) { base->minSpanIfSingular(min_span); }); + } - /// Move range of *this to min/max of @p rhs, without changing the span, if possible. - /// This does tighten the range unless @p rhs's ranges are smaller than *this. - /// Dimensions which are not contained in @p rhs or are empty are left untouched. - /// @param rhs Range to translate/move the current range into - /// @return true if dimensions overlapped, false otherwise - template - bool pushIntoUnsafe(const RangeManager& rhs) - { - bool found = false; - for_each_base_([&](auto* base) { - using T_BASE = std::decay_t; // remove const/ref qualifiers - if constexpr (std::is_base_of_v>) - { - const auto& rhs_base = (T_BASE&)rhs; - if (!rhs_base.isEmpty()) base->pushInto(rhs_base); - found = true; - } - }); - return found; - } - /// Move range of *this to min/max of @p sandbox, without changing the span, if possible. - /// This does tighten the range unless @p sandbox's ranges are smaller than *this. - /// Dimensions which are not contained in @p sandbox or are empty are left untouched. - /// @param sandbox Range to translate/move the current range into - /// @throw Exception::InvalidRange if no dimensions overlapped - template - void pushInto(const RangeManager& sandbox) - { - if (!pushIntoUnsafe(sandbox)) + /// Move range of *this to min/max of @p rhs, without changing the span, if possible. + /// This does tighten the range unless @p rhs's ranges are smaller than *this. + /// Dimensions which are not contained in @p rhs or are empty are left untouched. + /// @param rhs Range to translate/move the current range into + /// @return true if dimensions overlapped, false otherwise + template + bool pushIntoUnsafe(const RangeManager& rhs) + { + bool found = false; + for_each_base_([&](auto* base) { + using T_BASE = std::decay_t; // remove const/ref qualifiers + if constexpr (std::is_base_of_v>) { - throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "No assignment took place (no dimensions in common!);"); + const auto& rhs_base = (T_BASE&)rhs; + if (! rhs_base.isEmpty()) base->pushInto(rhs_base); + found = true; } - } - + }); + return found; + } - /// Clamp min/max of all overlapping dimensions to min/max of @p rhs - /// Dimensions which are not contained in @p rhs or where rhs is empty are left untouched. - /// @param rhs Range to clamp to - /// @return true if dimensions overlapped, false otherwise - template - bool clampToUnsafe(const RangeManager& rhs) + /// Move range of *this to min/max of @p sandbox, without changing the span, if possible. + /// This does tighten the range unless @p sandbox's ranges are smaller than *this. + /// Dimensions which are not contained in @p sandbox or are empty are left untouched. + /// @param sandbox Range to translate/move the current range into + /// @throw Exception::InvalidRange if no dimensions overlapped + template + void pushInto(const RangeManager& sandbox) + { + if (! pushIntoUnsafe(sandbox)) { - bool found = false; - for_each_base_([&](auto* base) { - using T_BASE = std::decay_t; // remove const/ref qualifiers - if constexpr (std::is_base_of_v>) - { - const auto& rhs_base = (T_BASE&)rhs; - if (!rhs_base.isEmpty()) base->clampTo(rhs_base); - found = true; - } - }); - return found; + throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "No assignment took place (no dimensions in common!);"); } + } - /// Clamp min/max of all overlapping dimensions to min/max of @p rhs. - /// This may tighten the range (even to a single point). - /// Dimensions which are not contained in @p rhs or where rhs is empty are left untouched. - /// @param rhs Range to clamp to - /// @throw Exception::InvalidRange if no dimensions overlapped - template - void clampTo(const RangeManager& rhs) - { - if (!clampToUnsafe(rhs)) + + /// Clamp min/max of all overlapping dimensions to min/max of @p rhs + /// Dimensions which are not contained in @p rhs or where rhs is empty are left untouched. + /// @param rhs Range to clamp to + /// @return true if dimensions overlapped, false otherwise + template + bool clampToUnsafe(const RangeManager& rhs) + { + bool found = false; + for_each_base_([&](auto* base) { + using T_BASE = std::decay_t; // remove const/ref qualifiers + if constexpr (std::is_base_of_v>) { - throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "No assignment took place (no dimensions in common!);"); + const auto& rhs_base = (T_BASE&)rhs; + if (! rhs_base.isEmpty()) base->clampTo(rhs_base); + found = true; } - } + }); + return found; + } - /// obtain a range dimension at runtime using @p dim - const RangeBase& getRangeForDim(MSDim dim) const + /// Clamp min/max of all overlapping dimensions to min/max of @p rhs. + /// This may tighten the range (even to a single point). + /// Dimensions which are not contained in @p rhs or where rhs is empty are left untouched. + /// @param rhs Range to clamp to + /// @throw Exception::InvalidRange if no dimensions overlapped + template + void clampTo(const RangeManager& rhs) + { + if (! clampToUnsafe(rhs)) { - RangeBase* r_base = nullptr; - - static_for_each_base_([&](auto* base) { - using Base = std::decay_t; // remove const/ref qualifiers - if (base->DIM == dim) - r_base = (Base*)this; - }); - - assert((r_base != nullptr) && "No base class has this MSDim!"); - return *r_base; + throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "No assignment took place (no dimensions in common!);"); } + } - /// obtain a range dimension at runtime using @p dim - RangeBase& getRangeForDim(MSDim dim) - { - RangeBase* r_base = nullptr; + /// obtain a range dimension at runtime using @p dim + const RangeBase& getRangeForDim(MSDim dim) const + { + RangeBase* r_base = nullptr; - static_for_each_base_([&](auto* base) { - using Base = std::decay_t; // remove const/ref qualifiers - if (base->DIM == dim) - r_base = (Base*) this; - }); + static_for_each_base_([&](auto* base) { + using Base = std::decay_t; // remove const/ref qualifiers + if (base->DIM == dim) r_base = (Base*)this; + }); - assert((r_base != nullptr) && "No base class has this MSDim!"); - return *r_base; - } + assert((r_base != nullptr) && "No base class has this MSDim!"); + return *r_base; + } - /// is any/some/all dimension in this range populated? - HasRangeType hasRange() const - { - constexpr size_t total{sizeof...(RangeBases)};// total number of bases - size_t count{0}; - for_each_base_([&](auto* base) { - count += !base->isEmpty(); - }); - switch (count) - { - case 0: - return HasRangeType::NONE; - case total: - return HasRangeType::ALL; - default: - return HasRangeType::SOME; - } - } + /// obtain a range dimension at runtime using @p dim + RangeBase& getRangeForDim(MSDim dim) + { + RangeBase* r_base = nullptr; - /// Are all dimensions of @p rhs (which overlap with this Range) contained in this range? - /// An empty dimension is considered contained in the other dimension (even if that one is empty as well). - /// If only all overlapping dimensions are empty, true is returned. - /// @throws Exception::InvalidRange if no dimensions overlap - template - bool containsAll(const RangeManager& rhs) const - { - bool contained = true; // assume rhs is contained, until proven otherwise - bool has_overlap = false; - for_each_base_([&](auto* base) { - using T_BASE = std::decay_t; // remove const/ref qualifiers - if constexpr (std::is_base_of_v>) - { - has_overlap = true; // at least one dimension overlaps - if (((T_BASE&)rhs).isEmpty()) return; - if (base->contains((T_BASE&) rhs)) return; - contained = false; - } - }); - if (!has_overlap) throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); - - return contained; - } + static_for_each_base_([&](auto* base) { + using Base = std::decay_t; // remove const/ref qualifiers + if (base->DIM == dim) r_base = (Base*)this; + }); - /// Resets all ranges - void clearRanges() - { - for_each_base_([&](auto* base) { - base->clear(); - }); + assert((r_base != nullptr) && "No base class has this MSDim!"); + return *r_base; + } + + /// is any/some/all dimension in this range populated? + HasRangeType hasRange() const + { + constexpr size_t total {sizeof...(RangeBases)}; // total number of bases + size_t count {0}; + for_each_base_([&](auto* base) { count += ! base->isEmpty(); }); + switch (count) + { + case 0: + return HasRangeType::NONE; + case total: + return HasRangeType::ALL; + default: + return HasRangeType::SOME; } + } - /// Resets the dimension of the given @p range. Any type of ion mobility in @p range will clear the RTMobility dimension. - /// If the @p range is not contained in this class, then nothing happens. - ThisRangeType& clear(const DIM_UNIT range) - { - switch (range) + /// Are all dimensions of @p rhs (which overlap with this Range) contained in this range? + /// An empty dimension is considered contained in the other dimension (even if that one is empty as well). + /// If only all overlapping dimensions are empty, true is returned. + /// @throws Exception::InvalidRange if no dimensions overlap + template + bool containsAll(const RangeManager& rhs) const + { + bool contained = true; // assume rhs is contained, until proven otherwise + bool has_overlap = false; + for_each_base_([&](auto* base) { + using T_BASE = std::decay_t; // remove const/ref qualifiers + if constexpr (std::is_base_of_v>) { - case DIM_UNIT::RT: - if constexpr (std::is_base_of_v) this->RangeRT::clear(); - break; - case DIM_UNIT::MZ: - if constexpr (std::is_base_of_v) this->RangeMZ::clear(); - break; - case DIM_UNIT::INT: - if constexpr (std::is_base_of_v) this->RangeIntensity::clear(); - break; - // assume all ion mobility ranges are the same and never occur together. If this is violated at some point, then split RangeMobility into subclasses... - case DIM_UNIT::IM_MS: - case DIM_UNIT::IM_VSSC: - case DIM_UNIT::FAIMS_CV: - if constexpr (std::is_base_of_v) this->RangeMobility::clear(); - break; - default: - // all cases should be covered above - assert(false && "This should never be reached. Did you forget to implement a new DIM_UNIT?"); + has_overlap = true; // at least one dimension overlaps + if (((T_BASE&)rhs).isEmpty()) return; + if (base->contains((T_BASE&)rhs)) return; + contained = false; } - return *this; - } + }); + if (! has_overlap) throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); - /// print each dimension (base classes) to a stream - void printRange(std::ostream& out) const - { - for_each_base_([&](auto* base) { - out << *base; - }); - } + return contained; + } - protected: - /// use fold expression to iterate over all RangeBases of RangeManager and apply a lambda (Visitor) for each one - template - void for_each_base_(Visitor&& visitor) - { - (void(visitor(static_cast(this))), ...); - } - /// .. and a const version - template - void for_each_base_(Visitor&& visitor) const - { - (void(visitor(static_cast(this))), ...); - } + /// Resets all ranges + void clearRanges() + { + for_each_base_([&](auto* base) { base->clear(); }); + } - /// use fold expression to iterate over all RangeBases of RangeManager and apply a lambda (Visitor) for each one (for static members) - template - static void static_for_each_base_(Visitor&& visitor) - { - (void(visitor(static_cast(nullptr))), ...); - } - }; + /// Resets the dimension of the given @p range. Any type of ion mobility in @p range will clear the RTMobility dimension. + /// If the @p range is not contained in this class, then nothing happens. + ThisRangeType& clear(const DIM_UNIT range) + { + switch (range) + { + case DIM_UNIT::RT: + if constexpr (std::is_base_of_v) this->RangeRT::clear(); + break; + case DIM_UNIT::MZ: + if constexpr (std::is_base_of_v) this->RangeMZ::clear(); + break; + case DIM_UNIT::INT: + if constexpr (std::is_base_of_v) this->RangeIntensity::clear(); + break; + // assume all ion mobility ranges are the same and never occur together. If this is violated at some point, then split RangeMobility into + // subclasses... + case DIM_UNIT::IM_MS: + case DIM_UNIT::IM_VSSC: + case DIM_UNIT::FAIMS_CV: + if constexpr (std::is_base_of_v) this->RangeMobility::clear(); + break; + default: + // all cases should be covered above + assert(false && "This should never be reached. Did you forget to implement a new DIM_UNIT?"); + } + return *this; + } + + /// print each dimension (base classes) to a stream + void printRange(std::ostream& out) const + { + for_each_base_([&](auto* base) { out << *base; }); + } - template - std::ostream& operator<<(std::ostream& out, const RangeManager& me) +protected: + /// use fold expression to iterate over all RangeBases of RangeManager and apply a lambda (Visitor) for each one + template + void for_each_base_(Visitor&& visitor) + { + (void(visitor(static_cast(this))), ...); + } + /// .. and a const version + template + void for_each_base_(Visitor&& visitor) const { - me.printRange(out); - return out; + (void(visitor(static_cast(this))), ...); } - /// use this class as a base class for containers, e.g. MSSpectrum. It forces them to implement 'updateRanges()' as a common interface - /// and provides a 'getRange()' member which saves casting to a range type manually - template - class RangeManagerContainer - : public RangeManager + /// use fold expression to iterate over all RangeBases of RangeManager and apply a lambda (Visitor) for each one (for static members) + template + static void static_for_each_base_(Visitor&& visitor) { - public: - using ThisRangeType = typename RangeManager::ThisRangeType; + (void(visitor(static_cast(nullptr))), ...); + } +}; + +template +std::ostream& operator<<(std::ostream& out, const RangeManager& me) +{ + me.printRange(out); + return out; +} + +/// use this class as a base class for containers, e.g. MSSpectrum. It forces them to implement 'updateRanges()' as a common interface +/// and provides a 'getRange()' member which saves casting to a range type manually +template +class RangeManagerContainer : public RangeManager +{ +public: + using ThisRangeType = typename RangeManager::ThisRangeType; - /// D'tor - virtual ~RangeManagerContainer() = default; // required since we have virtual methods + /// D'tor + virtual ~RangeManagerContainer() = default; // required since we have virtual methods - /// implement this function to reflect the underlying data of the derived class (e.g. an MSSpectrum) - /// Usually, call clearRanges() internally and then populate the dimensions. - virtual void updateRanges() = 0; + /// implement this function to reflect the underlying data of the derived class (e.g. an MSSpectrum) + /// Usually, call clearRanges() internally and then populate the dimensions. + virtual void updateRanges() = 0; - /// get range of current data (call updateRanges() before to ensure the range is accurate) - const ThisRangeType& getRange() const - { - return (ThisRangeType&)*this; - } + /// get range of current data (call updateRanges() before to ensure the range is accurate) + const ThisRangeType& getRange() const + { + return (ThisRangeType&)*this; + } - /// get mutable range, provided for efficiency reasons (avoid updateRanges(), if only minor changes were made) - ThisRangeType& getRange() - { - return (ThisRangeType&)*this; - } - }; + /// get mutable range, provided for efficiency reasons (avoid updateRanges(), if only minor changes were made) + ThisRangeType& getRange() + { + return (ThisRangeType&)*this; + } +}; - /// Range which contains all known dimensions - using RangeAllType = RangeManager; +/// Range which contains all known dimensions +using RangeAllType = RangeManager; -} // namespace OpenMS +} // namespace OpenMS diff --git a/src/openms/include/OpenMS/MATH/MISC/MathFunctions.h b/src/openms/include/OpenMS/MATH/MISC/MathFunctions.h index b8ee51114cd..7777ff54fed 100644 --- a/src/openms/include/OpenMS/MATH/MISC/MathFunctions.h +++ b/src/openms/include/OpenMS/MATH/MISC/MathFunctions.h @@ -8,406 +8,397 @@ #pragma once -#include #include #include - +#include #include // for mt19937_64 #include #include -#include // for std::pair +#include // for std::pair namespace OpenMS { - /** - @brief %Math namespace. +/** + @brief %Math namespace. - Contains mathematical auxiliary functions. + Contains mathematical auxiliary functions. - @ingroup Concept - */ - namespace Math - { + @ingroup Concept +*/ +namespace Math +{ - /** - @brief Given an interval/range and a new value, extend the range to include the new value if needed + /** + @brief Given an interval/range and a new value, extend the range to include the new value if needed - @param min The current minimum of the range - @param max The current maximum of the range - @param value The new value which may extend the range - @return true if the range was modified - */ - template - bool extendRange(T& min, T& max, const T& value) + @param min The current minimum of the range + @param max The current maximum of the range + @param value The new value which may extend the range + @return true if the range was modified + */ + template + bool extendRange(T& min, T& max, const T& value) + { + if (value < min) { - if (value < min) - { - min = value; - return true; - } - if (value > max) - { - max = value; - return true; - } - return false; + min = value; + return true; } - - /** - * \brief Is a @p value contained in [min, max] ? - * \tparam T Type, e.g. double - * \return True if contained, false otherwise - */ - template - bool contains(T value, T min, T max) + if (value > max) { - return min <= value && value <= max; + max = value; + return true; } + return false; + } - /** - * \brief Zoom into an interval [left, right], decreasing its width by @p factor (which must be in [0,inf]). - * - * To actually zoom in, the @p factor needs to be within [0,1]. Chosing a factor > 1 actually zooms out. - * @p align (between [0,1]) determines where the zoom happens: - * i.e. align = 0 leaves @p left the same and reduces @p right (or extends if factor>1) - * whereas align = 0.5 zooms into the center of the range etc - * - * You can do round trips, i.e. undo a zoom in, by inverting the factor: - * \code - * [a2, b2] = zoomIn(a1, b1, 0.5, al); // zoom in - * [a1, b1] === zoomIn(a2, b2, 2, al); // zoom out again (inverting) - * \endcode - * - * \param left Start of interval - * \param right End of interval - * \param factor Number between [0,1] to shrink, or >1 to extend the span (=right-left) - * \param align Where to position the smaller/shrunk interval (0 = left, 1 = right, 0.5=center etc) - * \return [new_left, new_right] as pair - */ - inline std::pair zoomIn(const double left, const double right, const float factor, const float align) - { - OPENMS_PRECONDITION(factor >= 0, "Factor must be >=0") - OPENMS_PRECONDITION(align >= 0, "align must be >=0") - OPENMS_PRECONDITION(align <= 1, "align must be <=1") - std::pair res; - auto old_width = right - left; - auto offset_left = (1.0f - factor) * old_width * align; - res.first = left + offset_left; - res.second = res.first + old_width * factor; - return res; - } + /** + * \brief Is a @p value contained in [min, max] ? + * \tparam T Type, e.g. double + * \return True if contained, false otherwise + */ + template + bool contains(T value, T min, T max) + { + return min <= value && value <= max; + } + + /** + * \brief Zoom into an interval [left, right], decreasing its width by @p factor (which must be in [0,inf]). + * + * To actually zoom in, the @p factor needs to be within [0,1]. Chosing a factor > 1 actually zooms out. + * @p align (between [0,1]) determines where the zoom happens: + * i.e. align = 0 leaves @p left the same and reduces @p right (or extends if factor>1) + * whereas align = 0.5 zooms into the center of the range etc + * + * You can do round trips, i.e. undo a zoom in, by inverting the factor: + * \code + * [a2, b2] = zoomIn(a1, b1, 0.5, al); // zoom in + * [a1, b1] === zoomIn(a2, b2, 2, al); // zoom out again (inverting) + * \endcode + * + * \param left Start of interval + * \param right End of interval + * \param factor Number between [0,1] to shrink, or >1 to extend the span (=right-left) + * \param align Where to position the smaller/shrunk interval (0 = left, 1 = right, 0.5=center etc) + * \return [new_left, new_right] as pair + */ + inline std::pair zoomIn(const double left, const double right, const float factor, const float align) + { + OPENMS_PRECONDITION(factor >= 0, "Factor must be >=0") + OPENMS_PRECONDITION(align >= 0, "align must be >=0") + OPENMS_PRECONDITION(align <= 1, "align must be <=1") + std::pair res; + auto old_width = right - left; + auto offset_left = (1.0f - factor) * old_width * align; + res.first = left + offset_left; + res.second = res.first + old_width * factor; + return res; + } + + /** + @brief rounds @p x up to the next decimal power 10 ^ @p decPow + + @verbatim + e.g.: (123.0 , 1) => 130 + (123.0 , 2) => 200 + (0.123 ,-2) => 0.13 ( 10^-2 = 0.01 ) + @endverbatim - /** - @brief rounds @p x up to the next decimal power 10 ^ @p decPow + @ingroup MathFunctionsMisc + */ + inline double ceilDecimal(double x, int decPow) + { + return (ceil(x / pow(10.0, decPow))) * pow(10.0, decPow); // decimal shift right, ceiling, decimal shift left + } + + /** + @brief rounds @p x to the next decimal power 10 ^ @p decPow @verbatim - e.g.: (123.0 , 1) => 130 - (123.0 , 2) => 200 - (0.123 ,-2) => 0.13 ( 10^-2 = 0.01 ) + e.g.: (123.0 , 1) => 120 + (123.0 , 2) => 100 @endverbatim @ingroup MathFunctionsMisc - */ - inline double ceilDecimal(double x, int decPow) - { - return (ceil(x / pow(10.0, decPow))) * pow(10.0, decPow); // decimal shift right, ceiling, decimal shift left - } + */ + inline double roundDecimal(double x, int decPow) + { + if (x > 0) return (floor(0.5 + x / pow(10.0, decPow))) * pow(10.0, decPow); - /** - @brief rounds @p x to the next decimal power 10 ^ @p decPow + return -((floor(0.5 + fabs(x) / pow(10.0, decPow))) * pow(10.0, decPow)); + } - @verbatim - e.g.: (123.0 , 1) => 120 - (123.0 , 2) => 100 - @endverbatim + /** + @brief transforms point @p x of interval [left1,right1] into interval [left2,right2] - @ingroup MathFunctionsMisc - */ - inline double roundDecimal(double x, int decPow) - { - if (x > 0) - return (floor(0.5 + x / pow(10.0, decPow))) * pow(10.0, decPow); + @ingroup MathFunctionsMisc + */ + inline double intervalTransformation(double x, double left1, double right1, double left2, double right2) + { + return left2 + (x - left1) * (right2 - left2) / (right1 - left1); + } - return -((floor(0.5 + fabs(x) / pow(10.0, decPow))) * pow(10.0, decPow)); - } + /** + @brief Transforms a number from linear to log10 scale. Avoids negative logarithms by adding 1. - /** - @brief transforms point @p x of interval [left1,right1] into interval [left2,right2] + @param x The number to transform - @ingroup MathFunctionsMisc - */ - inline double intervalTransformation(double x, double left1, double right1, double left2, double right2) - { - return left2 + (x - left1) * (right2 - left2) / (right1 - left1); - } + @ingroup MathFunctionsMisc + */ + inline double linear2log(double x) + { + return log10(x + 1); //+1 to avoid negative logarithms + } - /** - @brief Transforms a number from linear to log10 scale. Avoids negative logarithms by adding 1. + /** + @brief Transforms a number from log10 to to linear scale. Subtracts the 1 added by linear2log(double) - @param x The number to transform + @param x The number to transform - @ingroup MathFunctionsMisc - */ - inline double linear2log(double x) - { - return log10(x + 1); //+1 to avoid negative logarithms - } + @ingroup MathFunctionsMisc + */ + inline double log2linear(double x) + { + return pow(10, x) - 1; + } - /** - @brief Transforms a number from log10 to to linear scale. Subtracts the 1 added by linear2log(double) + /** + @brief Returns true if the given integer is odd - @param x The number to transform + @ingroup MathFunctionsMisc + */ + inline bool isOdd(UInt x) + { + return (x & 1) != 0; + } - @ingroup MathFunctionsMisc - */ - inline double log2linear(double x) - { - return pow(10, x) - 1; - } + /** + @brief Rounds the value - /** - @brief Returns true if the given integer is odd + @ingroup MathFunctionsMisc + */ + template + T round(T x) + { + if (x >= T(0)) { return T(floor(x + T(0.5))); } + else { return T(ceil(x - T(0.5))); } + } - @ingroup MathFunctionsMisc - */ - inline bool isOdd(UInt x) - { - return (x & 1) != 0; - } + /** + @brief Returns if @p a is approximately equal @p b , allowing a tolerance of @p tol - /** - @brief Rounds the value + @ingroup MathFunctionsMisc + */ + inline bool approximatelyEqual(double a, double b, double tol) + { + return std::fabs(a - b) <= tol; + } - @ingroup MathFunctionsMisc - */ - template - T round(T x) + /** + @brief Returns the greatest common divisor (gcd) of two numbers by applying the Euclidean algorithm. + @param a A number. + @param b A number. + @return The greatest common divisor. + @see gcd(T a, T b, T& a1, T& b1) + @ingroup MathFunctionsMisc + */ + template + T gcd(T a, T b) + { + T c; + while (b != 0) { - if (x >= T(0)) - { - return T(floor(x + T(0.5))); - } - else - { - return T(ceil(x - T(0.5))); - } + c = a % b; + a = b; + b = c; } + return a; + } - /** - @brief Returns if @p a is approximately equal @p b , allowing a tolerance of @p tol + /** + @brief Returns the greatest common divisor by applying the extended Euclidean algorithm (Knuth TAoCP vol. 2, p342). + Calculates u1, u2 and u3 (which is returned) so that a * u1 + b * u2 = u3 = gcd(a, b, u1, u2) + + @param a A number. + @param b A number. + @param u1 A reference to the number to be returned (see the above formula). + @param u2 A reference to the number to be returned (see the above formula). + @return The greatest common divisor. + @see gcd(T, T) + @ingroup MathFunctionsMisc + */ + template + T gcd(T a, T b, T& u1, T& u2) + { + u1 = 1; + u2 = 0; + T u3 = a; - @ingroup MathFunctionsMisc - */ - inline bool approximatelyEqual(double a, double b, double tol) - { - return std::fabs(a - b) <= tol; - } + T v1 = 0; + T v2 = 1; + T v3 = b; - /** - @brief Returns the greatest common divisor (gcd) of two numbers by applying the Euclidean algorithm. - @param a A number. - @param b A number. - @return The greatest common divisor. - @see gcd(T a, T b, T& a1, T& b1) - @ingroup MathFunctionsMisc - */ - template - T gcd(T a, T b) + while (v3 != 0) { - T c; - while (b != 0) - { - c = a % b; - a = b; - b = c; - } - return a; + T q = u3 / v3; + T t1 = u1 - v1 * q; + T t2 = u2 - v2 * q; + T t3 = u3 - v3 * q; + + u1 = v1; + u2 = v2; + u3 = v3; + + v1 = t1; + v2 = t2; + v3 = t3; } - /** - @brief Returns the greatest common divisor by applying the extended Euclidean algorithm (Knuth TAoCP vol. 2, p342). - Calculates u1, u2 and u3 (which is returned) so that a * u1 + b * u2 = u3 = gcd(a, b, u1, u2) - - @param a A number. - @param b A number. - @param u1 A reference to the number to be returned (see the above formula). - @param u2 A reference to the number to be returned (see the above formula). - @return The greatest common divisor. - @see gcd(T, T) - @ingroup MathFunctionsMisc - */ - template - T gcd(T a, T b, T & u1, T & u2) - { - u1 = 1; - u2 = 0; - T u3 = a; + return u3; + } - T v1 = 0; - T v2 = 1; - T v3 = b; + /** + @brief Compute parts-per-million of two @em m/z values. - while (v3 != 0) - { - T q = u3 / v3; - T t1 = u1 - v1 * q; - T t2 = u2 - v2 * q; - T t3 = u3 - v3 * q; - - u1 = v1; - u2 = v2; - u3 = v3; - - v1 = t1; - v2 = t2; - v3 = t3; - } + The returned ppm value can be either positive (mz_obs > mz_ref) or negative (mz_obs < mz_ref)! - return u3; - } + @param mz_obs Observed (experimental) m/z + @param mz_ref Reference (theoretical) m/z + @return The ppm value + */ + template + T getPPM(T mz_obs, T mz_ref) + { + return (mz_obs - mz_ref) / mz_ref * 1e6; + } - /** - @brief Compute parts-per-million of two @em m/z values. + /** + @brief Compute absolute parts-per-million of two @em m/z values. - The returned ppm value can be either positive (mz_obs > mz_ref) or negative (mz_obs < mz_ref)! + The returned ppm value is always >= 0. - @param mz_obs Observed (experimental) m/z - @param mz_ref Reference (theoretical) m/z - @return The ppm value - */ - template - T getPPM(T mz_obs, T mz_ref) - { - return (mz_obs - mz_ref) / mz_ref * 1e6; - } - - /** - @brief Compute absolute parts-per-million of two @em m/z values. - - The returned ppm value is always >= 0. - - @param mz_obs Observed (experimental) m/z - @param mz_ref Reference (theoretical) m/z - @return The absolute ppm value - */ - template - T getPPMAbs(T mz_obs, T mz_ref) - { - return std::fabs(getPPM(mz_obs, mz_ref)); - } + @param mz_obs Observed (experimental) m/z + @param mz_ref Reference (theoretical) m/z + @return The absolute ppm value + */ + template + T getPPMAbs(T mz_obs, T mz_ref) + { + return std::fabs(getPPM(mz_obs, mz_ref)); + } - /** - @brief Compute the mass diff in [Th], given a ppm value and a reference point. + /** + @brief Compute the mass diff in [Th], given a ppm value and a reference point. - The returned mass diff can be either positive (ppm > 0) or negative (ppm < 0)! + The returned mass diff can be either positive (ppm > 0) or negative (ppm < 0)! - @param ppm Parts-per-million error - @param mz_ref Reference m/z - @return The mass diff in [Th] - */ - template - T ppmToMass(T ppm, T mz_ref) - { - return (ppm / T(1e6)) * mz_ref; - } - - /* - @brief Compute the absolute mass diff in [Th], given a ppm value and a reference point. - - The returned mass diff is always positive! - - @param ppm Parts-per-million error - @param mz_ref Reference m/z - @return The absolute mass diff in [Th] - */ - template - T ppmToMassAbs(T ppm, T mz_ref) - { - return std::fabs(ppmToMass(ppm, mz_ref)); - } + @param ppm Parts-per-million error + @param mz_ref Reference m/z + @return The mass diff in [Th] + */ + template + T ppmToMass(T ppm, T mz_ref) + { + return (ppm / T(1e6)) * mz_ref; + } - /** - @brief Return tolerance window around @p val given tolerance @p tol + /* + @brief Compute the absolute mass diff in [Th], given a ppm value and a reference point. - Note that when ppm is used, the window is not symmetric. In this case, - (right - @p val) > (@p val - left), i.e., the tolerance window also - includes the largest value x which still has @p val in *its* tolerance - window for the given ppms, so the compatibility relation is symmetric. + The returned mass diff is always positive! - @param val Value - @param tol Tolerance - @param ppm Whether @p tol is in ppm or absolute - @return Tolerance window boundaries - */ - inline std::pair getTolWindow(double val, double tol, bool ppm) - { - double left, right; + @param ppm Parts-per-million error + @param mz_ref Reference m/z + @return The absolute mass diff in [Th] + */ + template + T ppmToMassAbs(T ppm, T mz_ref) + { + return std::fabs(ppmToMass(ppm, mz_ref)); + } - if (ppm) - { - left = val - val * tol * 1e-6; - right = val / (1.0 - tol * 1e-6); - } - else - { - left = val - tol; - right = val + tol; - } + /** + @brief Return tolerance window around @p val given tolerance @p tol + + Note that when ppm is used, the window is not symmetric. In this case, + (right - @p val) > (@p val - left), i.e., the tolerance window also + includes the largest value x which still has @p val in *its* tolerance + window for the given ppms, so the compatibility relation is symmetric. + + @param val Value + @param tol Tolerance + @param ppm Whether @p tol is in ppm or absolute + @return Tolerance window boundaries + */ + inline std::pair getTolWindow(double val, double tol, bool ppm) + { + double left, right; - return std::make_pair(left, right); + if (ppm) + { + left = val - val * tol * 1e-6; + right = val / (1.0 - tol * 1e-6); } - - /** - @brief Returns the value of the @p q th quantile (0-1) in a sorted non-empty vector @p x - */ - template typename T1::value_type quantile(const T1 &x, double q) + else { - if (x.empty()) throw Exception::InvalidParameter(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, - "Quantile requested from empty container."); - if (q < 0.0) q = 0.; - if (q > 1.0) q = 1.; - - const auto n = x.size(); - const auto id = std::max(0., n * q - 1); // -1 for c++ index starting at 0 - const auto lo = floor(id); - const auto hi = ceil(id); - const auto qs = x[lo]; - const auto h = (id - lo); - - return (1.0 - h) * qs + h * x[hi]; + left = val - tol; + right = val + tol; } - // portable random shuffle - class OPENMS_DLLAPI RandomShuffler + return std::make_pair(left, right); + } + + /** + @brief Returns the value of the @p q th quantile (0-1) in a sorted non-empty vector @p x + */ + template + typename T1::value_type quantile(const T1& x, double q) + { + if (x.empty()) throw Exception::InvalidParameter(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "Quantile requested from empty container."); + if (q < 0.0) q = 0.; + if (q > 1.0) q = 1.; + + const auto n = x.size(); + const auto id = std::max(0., n * q - 1); // -1 for c++ index starting at 0 + const auto lo = floor(id); + const auto hi = ceil(id); + const auto qs = x[lo]; + const auto h = (id - lo); + + return (1.0 - h) * qs + h * x[hi]; + } + + // portable random shuffle + class OPENMS_DLLAPI RandomShuffler + { + public: + explicit RandomShuffler(int seed): rng_(boost::mt19937_64(seed)) { - public: - explicit RandomShuffler(int seed): - rng_(boost::mt19937_64(seed)) - {} + } - explicit RandomShuffler(const boost::mt19937_64& mt_rng): - rng_(mt_rng) - {} + explicit RandomShuffler(const boost::mt19937_64& mt_rng): rng_(mt_rng) + { + } - RandomShuffler() = default; - ~RandomShuffler() = default; + RandomShuffler() = default; + ~RandomShuffler() = default; - boost::mt19937_64 rng_; - template - void portable_random_shuffle (RandomAccessIterator first, RandomAccessIterator last) + boost::mt19937_64 rng_; + template + void portable_random_shuffle(RandomAccessIterator first, RandomAccessIterator last) + { + for (auto i = (last - first) - 1; i > 0; --i) // OMS_CODING_TEST_EXCLUDE { - for (auto i = (last-first)-1; i > 0; --i) // OMS_CODING_TEST_EXCLUDE - { - boost::uniform_int d(0, i); - std::swap(first[i], first[d(rng_)]); - } + boost::uniform_int d(0, i); + std::swap(first[i], first[d(rng_)]); } + } - void seed(uint64_t val) - { - rng_.seed(val); - } - }; - } // namespace Math + void seed(uint64_t val) + { + rng_.seed(val); + } + }; +} // namespace Math } // namespace OpenMS - From e6c4a26929bdf2b235fa5c4621e4c73537b70ade Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 7 Feb 2024 16:01:18 +0100 Subject: [PATCH 097/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 23 +++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 7b2ecb2bc8c..954b94a0b21 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -596,6 +596,7 @@ jobs: artifacts: ${{ github.workspace }}/*.exe, ${{ github.workspace }}/*.deb, ${{ github.workspace }}/*.pkg # TODO add src + # FIXME Export upload_url deploy-docs: if: github.ref == 'refs/heads/nightly' || contains(github.ref, 'release/') || inputs.package @@ -864,7 +865,6 @@ jobs: permissions: write-all steps: -# get token - name: get a token so that we can update the tags uses: actions/create-github-app-token@v1 id: app-token @@ -927,8 +927,6 @@ jobs: createGitTag genericworkflownodes/de.openms.knime.dynamicJSViewers $JSViewer_SHA || updateGitTag genericworkflownodes/de.openms.knime.dynamicJSViewers $GKN_SHA createGitTag genericworkflownodes/GenericKnimeNodes $GKN_SHA || updateGitTag genericworkflownodes/GenericKnimeNodes $GKN_SHA - - #- name: merge branch back into develop - name: Merge to Develop if: inputs.mark_as_latest uses: actions/github-script@v7 @@ -953,7 +951,20 @@ jobs: labels: ['feature', 'automated pr'] }); - #- name: create text for website and update it. - # if: inputs.announce_release - # run: #FIXME + - name: create text for website and update it. + if: inputs.announce_release + shell: bash + run: | + curl -u $gitusr -X POST -d @data.json https://api.github.com/repos/OpenMS/OpenMS/releases > release_result.json + OPENMS_RELEASE_URL=$(cat release_result.json | jq -r ".upload_url") + git clone https://$gitusr@github.com/OpenMS/OpenMS-website + cp release${{ needs.build_and_test.outputs.version_number }}.md OpenMS-website/content/en/news/ + cat RELEASE_TEXT_WEBSITE.md >> OpenMS-website/content/en/news/release${{ needs.build_and_test.outputs.version_number }}.md + pushd OpenMS-website + git checkout -b "releaseannouncement${{ needs.build_and_test.outputs.version_number }}" + git add content/en/news/release${{ needs.build_and_test.outputs.version_number }}.md + git commit -am "Announce release ${{ needs.build_and_test.outputs.version_number }}" + git push --set-upstream origin releaseannouncement${{ needs.build_and_test.outputs.version_number }} + gh pr create --title "Release announcement for ${{ needs.build_and_test.outputs.version_number }}" --body "announces ${{ needs.build_and_test.outputs.version_number }}" + popd From 11f3b00dab91220a977f3d959fe75ce703474100 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Wed, 7 Feb 2024 16:34:22 +0100 Subject: [PATCH 098/242] Update dependabot.yml --- .github/dependabot.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 776dd9c22dd..6a168978802 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,7 +1,8 @@ # Please see the documentation for all configuration options: # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates -# checks if submodules (contrib and thirdparty) were updated +# checks if submodules (contrib and thirdparty) were updated. +# Ignored vcpkg because of the large number of updates. version: 2 updates: - package-ecosystem: "gitsubmodule" From 820f72aca924a2d03fa94dde4dbe51956caec9b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Feb 2024 16:38:48 +0100 Subject: [PATCH 099/242] Bump contrib from `3a9eba4` to `5545518` (#7340) Bumps [contrib](https://github.com/OpenMS/contrib) from `3a9eba4` to `5545518`. - [Commits](https://github.com/OpenMS/contrib/compare/3a9eba4e45bc18e1e9954f96e9e59f32c9e9b123...554551862ed1000e6b074d35cb887943e81f8606) --- updated-dependencies: - dependency-name: contrib dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- contrib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib b/contrib index 3a9eba4e45b..554551862ed 160000 --- a/contrib +++ b/contrib @@ -1 +1 @@ -Subproject commit 3a9eba4e45bc18e1e9954f96e9e59f32c9e9b123 +Subproject commit 554551862ed1000e6b074d35cb887943e81f8606 From e9b1e8036dd895b1956b46d282ae472bdfaa691c Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Wed, 7 Feb 2024 17:06:11 +0100 Subject: [PATCH 100/242] Update package_general.cmake (#7341) --- cmake/package_general.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/package_general.cmake b/cmake/package_general.cmake index 2a0bb8fd675..0474adee2dc 100644 --- a/cmake/package_general.cmake +++ b/cmake/package_general.cmake @@ -69,7 +69,7 @@ set(OPENMS_LOGOSMALL ${PROJECT_SOURCE_DIR}/cmake/MacOSX/${OPENMS_LOGOSMALL_NAME} # On Windows we need to tell CMake where to look for. # We also do not need API sets. So exclude them. if(WIN32) - set(EXCLUDE "api-ms" "ext-ms" "hvsi" "pdmutilities" "wpaxholder" "dxgi" "uxtheme" "d3d11" "winnmm" "wldp") + set(EXCLUDE "api-ms" "ext-ms" "hvsi" "pdmutilities" "wpaxholder" "dxgi" "uxtheme" "d3d11" "winmm" "wldp") set(POST_EXCLUDE ".*WINDOWS.system32.*") elseif(APPLE) set(EXCLUDE "/usr/lib" "/System/") From c4f36777ddd870d296a855158f0f266157596169 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 7 Feb 2024 17:45:08 +0100 Subject: [PATCH 101/242] Add code to update website on release. --- .github/workflows/openms_ci_matrix_full.yml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 954b94a0b21..ca85a4811fc 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -582,11 +582,11 @@ jobs: RELEASE_TEXT=$(cat releaseTextHeader.txt $GITHUB_WORKSPACE/changelog.txt releaseTextFooter.txt) RELEASE_TEXT_ESCAPED_QUOTES="${RELEASE_TEXT//\"/\\\"}" cat releaseTextHeader.txt $GITHUB_WORKSPACE/changelog.txt releaseTextFooter.txt > RELEASE_TEXT_GH.md - # cat RELEASE_TEXT_GH.md | jq -R -s '.' > RELEASE_TEXT_GH.json + echo release_text_contents=`cat RELEASE_TEXT_GH.md` >> $GITHUB_OUTPUT - name: run GHA release action. if: inputs.do_release - uses: ncipollo/release-action@v1 + uses: ncipollo/release-action@v1.14.0 with: bodyFile: RELEASE_TEXT_GH.md tag: ${{ env.RUN_NAME }} @@ -596,7 +596,7 @@ jobs: artifacts: ${{ github.workspace }}/*.exe, ${{ github.workspace }}/*.deb, ${{ github.workspace }}/*.pkg # TODO add src - # FIXME Export upload_url + deploy-docs: if: github.ref == 'refs/heads/nightly' || contains(github.ref, 'release/') || inputs.package @@ -951,15 +951,18 @@ jobs: labels: ['feature', 'automated pr'] }); + - name: checkout website + uses: actions/checkout@v4 + with: + path: OpenMS-website + - name: create text for website and update it. if: inputs.announce_release shell: bash run: | - curl -u $gitusr -X POST -d @data.json https://api.github.com/repos/OpenMS/OpenMS/releases > release_result.json - OPENMS_RELEASE_URL=$(cat release_result.json | jq -r ".upload_url") - git clone https://$gitusr@github.com/OpenMS/OpenMS-website + OPENMS_RELEASE_URL= ${{ needs.deploy-installer.outputs.upload_url }} cp release${{ needs.build_and_test.outputs.version_number }}.md OpenMS-website/content/en/news/ - cat RELEASE_TEXT_WEBSITE.md >> OpenMS-website/content/en/news/release${{ needs.build_and_test.outputs.version_number }}.md + echo ${{ needs.deploy-installer.outputs.release_text_contents }} >> OpenMS-website/content/en/news/release${{ needs.build_and_test.outputs.version_number }}.md pushd OpenMS-website git checkout -b "releaseannouncement${{ needs.build_and_test.outputs.version_number }}" git add content/en/news/release${{ needs.build_and_test.outputs.version_number }}.md From 6856ed89b536de53dba0bf901deebb830ee21aa0 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 7 Feb 2024 18:22:38 +0100 Subject: [PATCH 102/242] update GHA action versions for Node 20 --- .github/workflows/openms_ci_matrix_full.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index ca85a4811fc..e029b949c12 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -340,7 +340,7 @@ jobs: # Upload the changelog to the same artifact that we will add the installers to. - name: Upload changelog as artifact if: steps.set-vars.outputs.pkg_type != 'none' && startsWith(steps.extract_branch.outputs.RUN_NAME,'release') && startsWith(matrix.os, 'ubuntu') - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: changelog.txt path: | @@ -509,7 +509,7 @@ jobs: name: installer-Linux - name: Download changelog as artifact - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: changelog.txt From b447ae35250f51dc4d2ca559bc489ce986510199 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Thu, 8 Feb 2024 08:55:35 +0100 Subject: [PATCH 103/242] Update update_nightly.yml --- .github/workflows/update_nightly.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index 39cc1fb6b19..08033d0aa96 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -32,6 +32,7 @@ jobs: echo "git reset develop --hard" echo "git push -f" exit 1 + fi - name: Fast-forward nightly branch if behind develop if: steps.compare_branches.outputs.behind == 'true' From 7322f57ee40ff4f8aadcfa00d4aa19fdcebd4151 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Thu, 8 Feb 2024 13:42:23 +0100 Subject: [PATCH 104/242] comment out tag creation of repo's we dont have access to right now --- .github/workflows/openms_ci_matrix_full.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 3c7b91f6764..20cb951bd84 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -925,8 +925,9 @@ jobs: createGitTag OpenMS/OpenMS-docs $DOCS_SHA || updateGitTag OpenMS/OpenMS-docs $DOCS_SHA createGitTag OpenMS/de.openms.knime $DEOPENMS_SHA || updateGitTag OpenMS/de.openms.knime $DEOPENMS_SHA - createGitTag genericworkflownodes/de.openms.knime.dynamicJSViewers $JSViewer_SHA || updateGitTag genericworkflownodes/de.openms.knime.dynamicJSViewers $GKN_SHA - createGitTag genericworkflownodes/GenericKnimeNodes $GKN_SHA || updateGitTag genericworkflownodes/GenericKnimeNodes $GKN_SHA + #FIXME reenable these after we get the correct access permissions + #createGitTag genericworkflownodes/de.openms.knime.dynamicJSViewers $JSViewer_SHA || updateGitTag genericworkflownodes/de.openms.knime.dynamicJSViewers $GKN_SHA + #createGitTag genericworkflownodes/GenericKnimeNodes $GKN_SHA || updateGitTag genericworkflownodes/GenericKnimeNodes $GKN_SHA - name: Merge to Develop if: inputs.mark_as_latest From 547aeecf2fc476e196bd2f50dfcd07a6d7f0c7fc Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Thu, 8 Feb 2024 13:57:41 +0100 Subject: [PATCH 105/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index c45739110ad..4b9d6881498 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -147,7 +147,7 @@ jobs: aqtversion: '==3.1.*' archives: 'qtsvg qtimageformats qtbase' - - name: Setup build tools (and system contrib on Linux) + - name: Setup build tools (and system contrib on Linux and Mac) id: tools-prefix shell: bash env: @@ -190,7 +190,7 @@ jobs: # Qt5_DIR set by Install Qt5 step echo "cmake_prefix=$Qt5_DIR/lib/cmake;$Qt5_DIR" >> $GITHUB_OUTPUT brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache - + brew install libsvm xerces-c boost glpk eigen sqlite coinutils cbc cgl clp if [[ "${{ steps.set-vars.outputs.pkg_type }}" != "none" ]]; then brew install python3 --force --overwrite brew install --quiet doxygen ghostscript graphviz From f9ec9007fd2e528614c2f87bbc772a149c114d94 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Thu, 8 Feb 2024 14:01:23 +0100 Subject: [PATCH 106/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 4b9d6881498..7470685f24b 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -199,16 +199,16 @@ jobs: - - if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'windows') - name: Cache contrib (Windows and macOS) + - if: startsWith(matrix.os, 'windows') + name: Cache contrib (Windows) id: cache-contrib uses: actions/cache@v4 with: path: ${{ github.workspace }}/OpenMS/contrib key: ${{ runner.os }}-contrib3 - - if: (startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'windows')) && steps.cache-contrib.outputs.cache-hit != 'true' - name: Download contrib build from archive (Windows and macOS) + - if: startsWith(matrix.os, 'windows') && steps.cache-contrib.outputs.cache-hit != 'true' + name: Download contrib build from archive (Windows) shell: bash run: | cd OpenMS/contrib From cdc210487d069533de32325ba963dad308c01b19 Mon Sep 17 00:00:00 2001 From: Julianus Pfeuffer Date: Thu, 8 Feb 2024 14:10:42 +0100 Subject: [PATCH 107/242] With system contrib, do not use static. Remove contrib fix --- .github/workflows/openms_ci_matrix_full.yml | 27 +-------------------- 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 7470685f24b..d82cb8b2eaa 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -110,7 +110,7 @@ jobs: echo "contrib_os_ver=10.15.5/" >> $GITHUB_OUTPUT echo "contrib_compiler=appleclang-11.0.0/" >> $GITHUB_OUTPUT echo "xvfb=" >> $GITHUB_OUTPUT - echo "static_boost=ON" >> $GITHUB_OUTPUT + echo "static_boost=OFF" >> $GITHUB_OUTPUT if [ "$DO_PACKAGE" = true ]; then echo "pkg_type=pkg" >> $GITHUB_OUTPUT echo "enable_docs=ON" >> $GITHUB_OUTPUT @@ -217,31 +217,6 @@ jobs: rm contribbld.tar.gz ls -la - - if: startsWith(matrix.os, 'macos') - name: Fix contrib install names (macOS) - shell: bash - run: | - shopt -s nullglob # ensure that for loop is only executed if there is at least one .dylib file - for lib in $GITHUB_WORKSPACE/OpenMS/contrib/lib/*.dylib - do - install_name_tool -id $lib $lib - done - - # create symlinks like brew https://github.com/Homebrew/homebrew-core/blob/master/Formula/qt.rb#L61 - # Warning: Qt5_DIR will change meaning in the new jurplel/install-qt-action. Use QT_ROOT_DIR instead - # https://github.com/jurplel/install-qt-action/blob/master/README_upgrade_guide.md - pushd $Qt5_DIR/include - for f in $Qt5_DIR/lib/*.framework/Headers - do - lnknm=$(basename "${f%/*}" ".framework") - ln -s $f $lnknm - done - for f in $Qt5_DIR/lib/*.framework/Versions/5/Qt* - do - install_name_tool -id $f $f - done - popd - - name: Setup ccache cache uses: actions/cache@v4 with: From 90925192833c2946a9167eeeee5a7953e5303b93 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Thu, 8 Feb 2024 14:16:07 +0100 Subject: [PATCH 108/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index d82cb8b2eaa..930aefcb6ed 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -190,7 +190,7 @@ jobs: # Qt5_DIR set by Install Qt5 step echo "cmake_prefix=$Qt5_DIR/lib/cmake;$Qt5_DIR" >> $GITHUB_OUTPUT brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache - brew install libsvm xerces-c boost glpk eigen sqlite coinutils cbc cgl clp + brew install libsvm xerces-c boost eigen sqlite coinutils cbc cgl clp if [[ "${{ steps.set-vars.outputs.pkg_type }}" != "none" ]]; then brew install python3 --force --overwrite brew install --quiet doxygen ghostscript graphviz From 147388b3a6b64bb548d634ffa8e06a85a8869e84 Mon Sep 17 00:00:00 2001 From: Julianus Pfeuffer Date: Thu, 8 Feb 2024 20:53:54 +0100 Subject: [PATCH 109/242] Try macos-14 M1 in CI --- .github/workflows/openms_ci_matrix_full.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 930aefcb6ed..111c886adee 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -46,6 +46,14 @@ jobs: # TODO implement support for other versions compiler_ver: 14.2 + - os: macos-14 + # Since the appleclang version is dependent on the XCode versions that are installed + # on the GH runners, use this as the choice for a specific version + # TODO currently unused but XCode/appleclang is the default + compiler: xcode + # TODO implement support for other versions + compiler_ver: 14.2 + # Make sure the compilers are available in that version on the GH runners # We are not installing anything. - os: ubuntu-22.04 From cc8fde18730a2649bff981eca7d6a11e02be8313 Mon Sep 17 00:00:00 2001 From: Julianus Pfeuffer Date: Thu, 8 Feb 2024 21:28:24 +0100 Subject: [PATCH 110/242] Macos14 has new xcodr 15 --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 111c886adee..dfc20cf3fc3 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -52,7 +52,7 @@ jobs: # TODO currently unused but XCode/appleclang is the default compiler: xcode # TODO implement support for other versions - compiler_ver: 14.2 + compiler_ver: 15.0.1 # Make sure the compilers are available in that version on the GH runners # We are not installing anything. From e21422be06967ac5f4282273230a2e0a4ab2a8a5 Mon Sep 17 00:00:00 2001 From: Julianus Pfeuffer Date: Thu, 8 Feb 2024 22:04:55 +0100 Subject: [PATCH 111/242] aqtinstall does not support M1/2/Universal At least Not for qt5 --- .github/workflows/openms_ci_matrix_full.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index dfc20cf3fc3..c8b319a9ec5 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -146,8 +146,8 @@ jobs: # NOTE: x64 is hardcoded. No support for 32bit arch: x64 - - if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'windows') - name: Install Qt (Windows and macOS) + - if: startsWith(matrix.os, 'windows') + name: Install Qt (Windows) uses: jurplel/install-qt-action@v3 with: version: '5.15.2' # 5.12.7 is broken https://bugreports.qt.io/browse/QTBUG-81715, > 5.15.2 is not available on official archives (https://github.com/miurahr/aqtinstall/issues/636) @@ -198,7 +198,7 @@ jobs: # Qt5_DIR set by Install Qt5 step echo "cmake_prefix=$Qt5_DIR/lib/cmake;$Qt5_DIR" >> $GITHUB_OUTPUT brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache - brew install libsvm xerces-c boost eigen sqlite coinutils cbc cgl clp + brew install libsvm xerces-c boost eigen sqlite coinutils cbc cgl clp qt@5 if [[ "${{ steps.set-vars.outputs.pkg_type }}" != "none" ]]; then brew install python3 --force --overwrite brew install --quiet doxygen ghostscript graphviz From 1059d49ff112ee6e1988e52b6c30d9bc8fb490ed Mon Sep 17 00:00:00 2001 From: Julianus Pfeuffer Date: Thu, 8 Feb 2024 22:16:13 +0100 Subject: [PATCH 112/242] Link qt and set came prefix --- .github/workflows/openms_ci_matrix_full.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index c8b319a9ec5..dfee49b8092 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -195,10 +195,11 @@ jobs: fi if [[ "${{ matrix.os }}" == macos-* ]]; then - # Qt5_DIR set by Install Qt5 step - echo "cmake_prefix=$Qt5_DIR/lib/cmake;$Qt5_DIR" >> $GITHUB_OUTPUT + brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache brew install libsvm xerces-c boost eigen sqlite coinutils cbc cgl clp qt@5 + brew link qt@5 + echo "cmake_prefix=$(brew --prefix qt@5)/lib/cmake;$(brew --prefix qt@5)" >> $GITHUB_OUTPUT if [[ "${{ steps.set-vars.outputs.pkg_type }}" != "none" ]]; then brew install python3 --force --overwrite brew install --quiet doxygen ghostscript graphviz From abb4cd8002ffbc5339526e6ad06b8560a10e0565 Mon Sep 17 00:00:00 2001 From: Julianus Pfeuffer Date: Thu, 8 Feb 2024 22:33:26 +0100 Subject: [PATCH 113/242] brew link is broken for qt https://github.com/Homebrew/homebrew-core/issues/8392 --- .github/workflows/openms_ci_matrix_full.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index dfee49b8092..10288ae9996 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -198,7 +198,6 @@ jobs: brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache brew install libsvm xerces-c boost eigen sqlite coinutils cbc cgl clp qt@5 - brew link qt@5 echo "cmake_prefix=$(brew --prefix qt@5)/lib/cmake;$(brew --prefix qt@5)" >> $GITHUB_OUTPUT if [[ "${{ steps.set-vars.outputs.pkg_type }}" != "none" ]]; then brew install python3 --force --overwrite From 0c68396df7b8d5cd5932514fcc70a9a3db85ee43 Mon Sep 17 00:00:00 2001 From: Julianus Pfeuffer Date: Thu, 8 Feb 2024 22:55:38 +0100 Subject: [PATCH 114/242] Prefix path not working/not clear. Use qt_dir --- .github/workflows/openms_ci_matrix_full.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 10288ae9996..5d19bd86f4d 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -199,6 +199,7 @@ jobs: brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache brew install libsvm xerces-c boost eigen sqlite coinutils cbc cgl clp qt@5 echo "cmake_prefix=$(brew --prefix qt@5)/lib/cmake;$(brew --prefix qt@5)" >> $GITHUB_OUTPUT + echo "Qt5_DIR=$(brew --prefix qt@5)/lib/cmake/Qt5" >> $GITHUB_PATH if [[ "${{ steps.set-vars.outputs.pkg_type }}" != "none" ]]; then brew install python3 --force --overwrite brew install --quiet doxygen ghostscript graphviz From 13ca79ab152154ec8a1f7a0ce0dcc84fd983043f Mon Sep 17 00:00:00 2001 From: Julianus Pfeuffer Date: Thu, 8 Feb 2024 23:08:42 +0100 Subject: [PATCH 115/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 5d19bd86f4d..d27ee7e1910 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -199,7 +199,7 @@ jobs: brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache brew install libsvm xerces-c boost eigen sqlite coinutils cbc cgl clp qt@5 echo "cmake_prefix=$(brew --prefix qt@5)/lib/cmake;$(brew --prefix qt@5)" >> $GITHUB_OUTPUT - echo "Qt5_DIR=$(brew --prefix qt@5)/lib/cmake/Qt5" >> $GITHUB_PATH + echo "Qt5_DIR=$(ls $(brew --prefix qt@5)/*)/lib/cmake/Qt5" >> $GITHUB_PATH if [[ "${{ steps.set-vars.outputs.pkg_type }}" != "none" ]]; then brew install python3 --force --overwrite brew install --quiet doxygen ghostscript graphviz From f513f351217c7ad39287a2c335c484ca90b72c76 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 9 Feb 2024 10:32:30 +0100 Subject: [PATCH 116/242] Update update_nightly.yml --- .github/workflows/update_nightly.yml | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index 08033d0aa96..4ad3daea694 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -2,25 +2,20 @@ name: Update nightly from develop on: schedule: - cron: '7 1 * * *' + workflow_dispatch: #FIXME remove once we've got this working jobs: make_nightly: runs-on: ubuntu-latest steps: - - - name: Checkout - uses: actions/checkout@v4 - with: - ref: develop - fetch-depth: 0 - + - name: Fetch all branches run: git fetch --all - name: Determine if develop is ahead of nightly id: compare_branches run: | - if git rev-list --left-right --count develop...nightly | grep -q "0$"; then - if git rev-list --left-right --count develop...nightly | grep -q "^0"; then + if git rev-list --left-right --count develop@{upstream}...nightly@{upstream} | grep -q "0$"; then + if git rev-list --left-right --count develop@{upstream}...nightly@{upstream} | grep -q "^0"; then echo "behind=true" >> $GITHUB_OUTPUT else echo "behind=false" >> $GITHUB_OUTPUT From fa7344d6b0d0b7fdc130cb5170b78bb11642c7bf Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 9 Feb 2024 11:28:05 +0100 Subject: [PATCH 117/242] Update update_nightly.yml testing --- .github/workflows/update_nightly.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index 4ad3daea694..56d9bc6f0db 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -8,6 +8,11 @@ jobs: runs-on: ubuntu-latest steps: + - name: Checkout + uses: actions/checkout@v4 + with: + ref: develop + - name: Fetch all branches run: git fetch --all From cb1b459b3f538aaa17d2b9663be351d462329f54 Mon Sep 17 00:00:00 2001 From: Julianus Pfeuffer Date: Fri, 9 Feb 2024 11:38:46 +0100 Subject: [PATCH 118/242] Try to incorporate to packaging --- .github/workflows/openms_ci_matrix_full.yml | 62 +++++++++++++-------- 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index d27ee7e1910..cd2575f3dcc 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -46,7 +46,7 @@ jobs: # TODO implement support for other versions compiler_ver: 14.2 - - os: macos-14 + - os: macos-14-arm64 # Since the appleclang version is dependent on the XCode versions that are installed # on the GH runners, use this as the choice for a specific version # TODO currently unused but XCode/appleclang is the default @@ -65,6 +65,8 @@ jobs: compiler_ver: 15 runs-on: ${{ matrix.os }} + env: + TERM: xterm-256color steps: - uses: actions/checkout@v4 @@ -76,6 +78,17 @@ jobs: run: echo "RUN_NAME=${{ github.event.pull_request && github.event.number || github.ref_name }}" >> $GITHUB_OUTPUT id: extract_branch + - id: cpus + name: Get the number of CPUs that the current process has access to + run: | + from os import environ, sched_getaffinity + + num_cpus = len(sched_getaffinity(0)) + output_file = environ["GITHUB_OUTPUT"] + with open(output_file, "a", encoding="utf-8") as output_stream: + output_stream.write(f"count={num_cpus}\n") + shell: python + - id: set-vars name: Set extra variables run: | @@ -195,19 +208,16 @@ jobs: fi if [[ "${{ matrix.os }}" == macos-* ]]; then - brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache brew install libsvm xerces-c boost eigen sqlite coinutils cbc cgl clp qt@5 echo "cmake_prefix=$(brew --prefix qt@5)/lib/cmake;$(brew --prefix qt@5)" >> $GITHUB_OUTPUT - echo "Qt5_DIR=$(ls $(brew --prefix qt@5)/*)/lib/cmake/Qt5" >> $GITHUB_PATH + echo "Qt5_DIR=$(ls $(brew --prefix qt@5)/*)/lib/cmake/Qt5" >> $GITHUB_ENV if [[ "${{ steps.set-vars.outputs.pkg_type }}" != "none" ]]; then brew install python3 --force --overwrite brew install --quiet doxygen ghostscript graphviz fi fi - - - if: startsWith(matrix.os, 'windows') name: Cache contrib (Windows) id: cache-contrib @@ -230,12 +240,12 @@ jobs: uses: actions/cache@v4 with: path: .ccache - key: ${{ runner.os }}-ccache-${{ steps.extract_branch.outputs.RUN_NAME }}-${{ github.run_number }} + key: ${{ runner.os }}-${{ runner.arch }}-ccache-${{ steps.extract_branch.outputs.RUN_NAME }}-${{ github.run_number }} # Restoring: From current branch/PR, otherwise from nightly, otherwise from any branch. restore-keys: | - ${{ runner.os }}-ccache-${{ steps.extract_branch.outputs.RUN_NAME }} - ${{ runner.os }}-ccache-nightly - ${{ runner.os }}-ccache- + ${{ runner.os }}-${{ runner.arch }}-ccache-${{ steps.extract_branch.outputs.RUN_NAME }} + ${{ runner.os }}-${{ runner.arch }}-ccache-nightly + ${{ runner.os }}-${{ runner.arch }}-ccache- - name: Add THIRDPARTY shell: bash @@ -285,7 +295,7 @@ jobs: CI_PROVIDER: "GitHub-Actions" CMAKE_GENERATOR: "Ninja" SOURCE_DIRECTORY: "${{ github.workspace }}/OpenMS" - BUILD_NAME: "${{ steps.extract_branch.outputs.RUN_NAME }}-${{ steps.set-vars.outputs.tp_folder }}-${{ matrix.compiler }}-class-topp-${{ github.run_number }}" + BUILD_NAME: "${{ steps.extract_branch.outputs.RUN_NAME }}-${{ steps.set-vars.outputs.tp_folder }}-${{ runner.arch }}-${{ matrix.compiler }}-${{ matrix.compiler_ver }}-class-topp-${{ github.run_number }}" ENABLE_STYLE_TESTING: "OFF" ENABLE_TOPP_TESTING: "ON" ENABLE_CLASS_TESTING: "ON" @@ -299,7 +309,7 @@ jobs: OPENMP: "ON" BOOST_USE_STATIC: ${{ steps.set-vars.outputs.static_boost }} # BUILD_FLAGS: "-p:CL_MPCount=2" # For VS Generator and MSBuild - BUILD_FLAGS: "-j2" # Ninja will otherwise use all cores (doesn't go well in GHA). TODO make dependent on runner + BUILD_FLAGS: "-j${{ steps.cpus.outputs.count }}" # Ninja will otherwise use all cores (doesn't go well in GHA). TODO make dependent on runner CMAKE_CCACHE_EXE: "ccache" CCACHE_BASEDIR: ${{ github.workspace }} CCACHE_DIR: ${{ github.workspace }}/.ccache @@ -318,7 +328,7 @@ jobs: env: SOURCE_DIRECTORY: "${{ github.workspace }}/OpenMS" CI_PROVIDER: "GitHub-Actions" - BUILD_NAME: "${{ steps.extract_branch.outputs.RUN_NAME }}-${{ steps.set-vars.outputs.tp_folder }}-${{ matrix.compiler }}-class-topp-${{ github.run_number }}" + BUILD_NAME: "${{ steps.extract_branch.outputs.RUN_NAME }}-${{ steps.set-vars.outputs.tp_folder }}-${{ runner.arch }}-${{ matrix.compiler }}-${{ matrix.compiler_ver }}-class-topp-${{ github.run_number }}" # The rest of the vars should be saved in the CMakeCache @@ -345,14 +355,14 @@ jobs: PACKAGE_TYPE: ${{ steps.set-vars.outputs.pkg_type }} SEARCH_ENGINES_DIRECTORY: "${{ github.workspace }}/_thirdparty" CI_PROVIDER: "GitHub-Actions" - BUILD_NAME: "${{ steps.extract_branch.outputs.RUN_NAME }}-${{ steps.set-vars.outputs.tp_folder }}-${{ matrix.compiler }}-class-topp-${{ github.run_number }}" + BUILD_NAME: "${{ steps.extract_branch.outputs.RUN_NAME }}-${{ steps.set-vars.outputs.tp_folder }}-${{ runner.arch }}-${{ matrix.compiler }}-${{ matrix.compiler_ver }}-class-topp-${{ github.run_number }}" # WARNING: Here you have to make sure that only one matrix configuration per OS produces packages. See set-vars steps. - if: steps.set-vars.outputs.pkg_type != 'none' name: Upload packages as artifacts uses: actions/upload-artifact@v4 with: - name: installer-${{ steps.set-vars.outputs.tp_folder }} + name: format('installer-{0}{1}', steps.set-vars.outputs.tp_folder, runner.arch == 'arm64' && '-arm64' || '') path: | ${{ github.workspace }}/OpenMS/bld/*.exe ${{ github.workspace }}/OpenMS/bld/*.deb @@ -393,7 +403,7 @@ jobs: name: Upload KNIME payload and descriptors as artifacts uses: actions/upload-artifact@v4 with: - name: knime-${{ steps.set-vars.outputs.tp_folder }} + name: ${{ format('knime-{0}{1}', steps.set-vars.outputs.tp_folder, runner.arch == 'arm64' && '-arm64' || '') }} path: ${{ github.workspace }}/OpenMS/bld/knime/**/* deploy-installer: @@ -408,10 +418,14 @@ jobs: # WOW, you cannot download with wildcard. INCREDIBLY ANNOYING https://github.com/actions/download-artifact/issues/6 # Maybe in the next 3 years...... - - name: Download macos installer artifacts + - name: Download macOS installer artifacts uses: actions/download-artifact@v4 with: name: installer-MacOS + - name: Download macOS Silicon installer artifacts + uses: actions/download-artifact@v4 + with: + name: installer-MacOS-arm64 - name: Download win installer artifacts uses: actions/download-artifact@v4 with: @@ -430,10 +444,10 @@ jobs: run: | echo "Upload" if [[ "${{ env.RUN_NAME }}" == "nightly" ]]; then - folder=nightlyGHA # TODO: Change back when we deactivate Jenkins + folder=nightlyGHA # TODO: Change back when we deactivate Jenkins elif [[ "${{ env.RUN_NAME }}" == "release/*" ]]; then tmpfolder=${{ env.RUN_NAME }} - folder=${tmpfolder/release/RC_GHA} # TODO: change back to RC after proper release + folder=${tmpfolder/release/RC_GHA} # TODO: change back to RC after proper release else folder=experimental/${{ env.RUN_NAME }} fi @@ -461,14 +475,13 @@ jobs: rm $GITHUB_WORKSPACE/docs/documentation.zip echo "Upload" if [[ "${{ env.RUN_NAME }}" == "nightly" ]]; then - folder=nightlyGHA # TODO: Change back when we deactivate Jenkins + folder=nightlyGHA # TODO: Change back when we deactivate Jenkins elif [[ "${{ env.RUN_NAME }}" == "release/*" ]]; then tmpfolder=${{ env.RUN_NAME }} - folder=${tmpfolder/release/RC_GHA} # TODO: change back to RC after proper release + folder=${tmpfolder/release/RC_GHA} # TODO: change back to RC after proper release else folder=experimental/${{ env.RUN_NAME }} fi - echo $folder mkdir -p ~/.ssh/ echo "$PASS" > ~/.ssh/private.key @@ -496,11 +509,16 @@ jobs: # WOW, you cannot download with wildcard. INCREDIBLY ANNOYING https://github.com/actions/download-artifact/issues/6 # Maybe in the next 3 years...... - - name: Download macos installer artifacts + - name: Download macOS installer artifacts uses: actions/download-artifact@v4 with: name: knime-MacOS path: ${{ env.PLUGIN_SOURCE }} + - name: Download macOS Silicon installer artifacts + uses: actions/download-artifact@v4 + with: + name: knime-MacOS-arm64 + path: ${{ env.PLUGIN_SOURCE }} - name: Download win installer artifacts uses: actions/download-artifact@v4 with: From b0ab9c4f979c99d627ee61494e31c77d0f76e592 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 9 Feb 2024 11:45:09 +0100 Subject: [PATCH 119/242] Update update_nightly.yml --- .github/workflows/update_nightly.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index 56d9bc6f0db..f3411ac1788 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -19,8 +19,8 @@ jobs: - name: Determine if develop is ahead of nightly id: compare_branches run: | - if git rev-list --left-right --count develop@{upstream}...nightly@{upstream} | grep -q "0$"; then - if git rev-list --left-right --count develop@{upstream}...nightly@{upstream} | grep -q "^0"; then + if git rev-list --left-right --count origin/develop...origin/nightly | grep -q "0$"; then + if git rev-list --left-right --count origin/develop...origin/nightly | grep -q "^0"; then echo "behind=true" >> $GITHUB_OUTPUT else echo "behind=false" >> $GITHUB_OUTPUT From 79ce76a64c60c3fb2b3dc2650fd39b70b0bc2507 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 9 Feb 2024 11:55:27 +0100 Subject: [PATCH 120/242] Update update_nightly.yml --- .github/workflows/update_nightly.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index f3411ac1788..4e663600792 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -19,8 +19,8 @@ jobs: - name: Determine if develop is ahead of nightly id: compare_branches run: | - if git rev-list --left-right --count origin/develop...origin/nightly | grep -q "0$"; then - if git rev-list --left-right --count origin/develop...origin/nightly | grep -q "^0"; then + if git rev-list --left-right --count origin/develop...origin/nightly | grep "0$"; then + if git rev-list --left-right --count origin/develop...origin/nightly | grep "^0"; then echo "behind=true" >> $GITHUB_OUTPUT else echo "behind=false" >> $GITHUB_OUTPUT From d8ea3ef057d1e4db17974cfb29982c690b7619fd Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 9 Feb 2024 12:05:01 +0100 Subject: [PATCH 121/242] Update update_nightly.yml --- .github/workflows/update_nightly.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index 4e663600792..a379f61ab30 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -19,13 +19,14 @@ jobs: - name: Determine if develop is ahead of nightly id: compare_branches run: | - if git rev-list --left-right --count origin/develop...origin/nightly | grep "0$"; then - if git rev-list --left-right --count origin/develop...origin/nightly | grep "^0"; then + if git rev-list --left-right --count origin/develop...origin/nightly | grep -q "0$"; then + if git rev-list --left-right --count origin/develop...origin/nightly | grep -q "^0"; then echo "behind=true" >> $GITHUB_OUTPUT else echo "behind=false" >> $GITHUB_OUTPUT fi else + echo `git rev-list --left-right --count origin/develop...origin/nightly` echo "There are changes to Nightly that are not in develop, we can't automatically update" echo "To forcibly reset Nightly please have an admin run:" echo "git checkout nightly" From 7dfa869ec52eab70575569595f577e9feb96bd4f Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 9 Feb 2024 12:11:21 +0100 Subject: [PATCH 122/242] Update update_nightly.yml --- .github/workflows/update_nightly.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index a379f61ab30..7fe2038259b 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -12,6 +12,7 @@ jobs: uses: actions/checkout@v4 with: ref: develop + fetch-depth: 0 - name: Fetch all branches run: git fetch --all From 8affedcaed27af5fbdc128c392a940ec3a03e7a6 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 9 Feb 2024 12:14:14 +0100 Subject: [PATCH 123/242] Update update_nightly.yml --- .github/workflows/update_nightly.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index 7fe2038259b..e19221861cf 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -22,8 +22,10 @@ jobs: run: | if git rev-list --left-right --count origin/develop...origin/nightly | grep -q "0$"; then if git rev-list --left-right --count origin/develop...origin/nightly | grep -q "^0"; then + git rev-list --left-right --count origin/develop...origin/nightly echo "behind=true" >> $GITHUB_OUTPUT else + git rev-list --left-right --count origin/develop...origin/nightly echo "behind=false" >> $GITHUB_OUTPUT fi else From b5ad4a68f0c92da44d431659b56412f16cf13aba Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 9 Feb 2024 12:17:14 +0100 Subject: [PATCH 124/242] Update update_nightly.yml --- .github/workflows/update_nightly.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index e19221861cf..6f0b3d00502 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -21,7 +21,7 @@ jobs: id: compare_branches run: | if git rev-list --left-right --count origin/develop...origin/nightly | grep -q "0$"; then - if git rev-list --left-right --count origin/develop...origin/nightly | grep -q "^0"; then + if git rev-list --left-right --count origin/develop...origin/nightly | grep -qv "^0"; then git rev-list --left-right --count origin/develop...origin/nightly echo "behind=true" >> $GITHUB_OUTPUT else From 1ede9ac47fbfad1b880b4a53933375a781d82d13 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 9 Feb 2024 12:31:36 +0100 Subject: [PATCH 125/242] Update update_nightly.yml --- .github/workflows/update_nightly.yml | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index 6f0b3d00502..77f22a01c62 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -2,7 +2,12 @@ name: Update nightly from develop on: schedule: - cron: '7 1 * * *' - workflow_dispatch: #FIXME remove once we've got this working + workflow_dispatch: + inputs: + force: + type: boolean + description: Forcibly reset Nightly to Develop? + default: false jobs: make_nightly: runs-on: ubuntu-latest @@ -18,23 +23,18 @@ jobs: run: git fetch --all - name: Determine if develop is ahead of nightly + if: ! inputs.force id: compare_branches run: | if git rev-list --left-right --count origin/develop...origin/nightly | grep -q "0$"; then if git rev-list --left-right --count origin/develop...origin/nightly | grep -qv "^0"; then - git rev-list --left-right --count origin/develop...origin/nightly echo "behind=true" >> $GITHUB_OUTPUT else - git rev-list --left-right --count origin/develop...origin/nightly echo "behind=false" >> $GITHUB_OUTPUT fi else - echo `git rev-list --left-right --count origin/develop...origin/nightly` echo "There are changes to Nightly that are not in develop, we can't automatically update" - echo "To forcibly reset Nightly please have an admin run:" - echo "git checkout nightly" - echo "git reset develop --hard" - echo "git push -f" + echo "To forcibly reset Nightly please have an admin run this action with 'force' enabled" exit 1 fi @@ -46,3 +46,12 @@ jobs: git push origin nightly env: GITHUB_TOKEN: ${{ secrets.OPENMS_GITHUB_APP_PRIVATE_KEY }} + + - name: Forcibly reset nightly + if: inputs.force + run: | + git checkout nightly + git reset develop --hard + git push origin nightly -f + env: + GITHUB_TOKEN: ${{ secrets.OPENMS_GITHUB_APP_PRIVATE_KEY }} From aea1f1fdc71d2d38e813788a760c7f58ade5a8b5 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 9 Feb 2024 12:32:41 +0100 Subject: [PATCH 126/242] Update update_nightly.yml --- .github/workflows/update_nightly.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index 77f22a01c62..fbdfadea254 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -23,7 +23,7 @@ jobs: run: git fetch --all - name: Determine if develop is ahead of nightly - if: ! inputs.force + if: inputs.force == 'false' id: compare_branches run: | if git rev-list --left-right --count origin/develop...origin/nightly | grep -q "0$"; then From 4b5220d0c12cea2a7db40ad892c55c66980d6603 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 9 Feb 2024 12:34:31 +0100 Subject: [PATCH 127/242] Update update_nightly.yml --- .github/workflows/update_nightly.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index fbdfadea254..84f7f2e1b0a 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -23,7 +23,7 @@ jobs: run: git fetch --all - name: Determine if develop is ahead of nightly - if: inputs.force == 'false' + if: inputs.force != 'true' id: compare_branches run: | if git rev-list --left-right --count origin/develop...origin/nightly | grep -q "0$"; then From 39575d2142d0f49098019c80dc6cfbfed9f76f76 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Fri, 9 Feb 2024 12:49:05 +0100 Subject: [PATCH 128/242] Exclude some tests on mac for MRMAssay_test.cpp (#7349) * Update MRMAssay_test.cpp * add comments, fix logic --- .../openms/source/MRMAssay_test.cpp | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/tests/class_tests/openms/source/MRMAssay_test.cpp b/src/tests/class_tests/openms/source/MRMAssay_test.cpp index 4cd918fcae5..3d77038a36c 100644 --- a/src/tests/class_tests/openms/source/MRMAssay_test.cpp +++ b/src/tests/class_tests/openms/source/MRMAssay_test.cpp @@ -624,9 +624,9 @@ START_SECTION(void uisTransitions(OpenMS::TargetedExperiment& exp, std::vector fragment_types2; fragment_types2.push_back(String("y")); std::vector fragment_charges2; @@ -650,8 +650,9 @@ START_SECTION(void uisTransitions(OpenMS::TargetedExperiment& exp, std::vector fragment_types2; fragment_types2.push_back(String("y")); fragment_types2.push_back(String("b")); @@ -746,8 +749,10 @@ START_SECTION(void uisTransitions(OpenMS::TargetedExperiment& exp, std::vector fragment_types3; fragment_types3.push_back(String("y")); fragment_types3.push_back(String("b")); @@ -772,7 +777,9 @@ START_SECTION(void uisTransitions(OpenMS::TargetedExperiment& exp, std::vector Date: Fri, 9 Feb 2024 13:05:07 +0100 Subject: [PATCH 129/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index cd2575f3dcc..5cd86aab11a 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -46,7 +46,7 @@ jobs: # TODO implement support for other versions compiler_ver: 14.2 - - os: macos-14-arm64 + - os: macos-14 # Since the appleclang version is dependent on the XCode versions that are installed # on the GH runners, use this as the choice for a specific version # TODO currently unused but XCode/appleclang is the default From 536874b986a3fccda0937af431851d25db4ffc7c Mon Sep 17 00:00:00 2001 From: Julianus Pfeuffer Date: Fri, 9 Feb 2024 13:09:36 +0100 Subject: [PATCH 130/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 5cd86aab11a..1904f1e7011 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -78,16 +78,9 @@ jobs: run: echo "RUN_NAME=${{ github.event.pull_request && github.event.number || github.ref_name }}" >> $GITHUB_OUTPUT id: extract_branch - - id: cpus - name: Get the number of CPUs that the current process has access to - run: | - from os import environ, sched_getaffinity - - num_cpus = len(sched_getaffinity(0)) - output_file = environ["GITHUB_OUTPUT"] - with open(output_file, "a", encoding="utf-8") as output_stream: - output_stream.write(f"count={num_cpus}\n") - shell: python + - name: Get number of CPU cores + uses: SimenB/github-actions-cpu-cores@v1 + id: cpu-cores - id: set-vars name: Set extra variables @@ -309,7 +302,7 @@ jobs: OPENMP: "ON" BOOST_USE_STATIC: ${{ steps.set-vars.outputs.static_boost }} # BUILD_FLAGS: "-p:CL_MPCount=2" # For VS Generator and MSBuild - BUILD_FLAGS: "-j${{ steps.cpus.outputs.count }}" # Ninja will otherwise use all cores (doesn't go well in GHA). TODO make dependent on runner + BUILD_FLAGS: "-j${{ steps.cpu-cores.outputs.count }}" # Ninja will otherwise use all cores (doesn't go well in GHA). TODO make dependent on runner CMAKE_CCACHE_EXE: "ccache" CCACHE_BASEDIR: ${{ github.workspace }} CCACHE_DIR: ${{ github.workspace }}/.ccache From f94d899aa752b0d97cfcfda136608d1456cd8da0 Mon Sep 17 00:00:00 2001 From: Julianus Pfeuffer Date: Fri, 9 Feb 2024 13:52:09 +0100 Subject: [PATCH 131/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 1904f1e7011..1cce83e1caf 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -204,7 +204,7 @@ jobs: brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache brew install libsvm xerces-c boost eigen sqlite coinutils cbc cgl clp qt@5 echo "cmake_prefix=$(brew --prefix qt@5)/lib/cmake;$(brew --prefix qt@5)" >> $GITHUB_OUTPUT - echo "Qt5_DIR=$(ls $(brew --prefix qt@5)/*)/lib/cmake/Qt5" >> $GITHUB_ENV + echo "Qt5_DIR=$(brew --prefix qt@5)/lib/cmake/Qt5" >> $GITHUB_ENV if [[ "${{ steps.set-vars.outputs.pkg_type }}" != "none" ]]; then brew install python3 --force --overwrite brew install --quiet doxygen ghostscript graphviz From 7736cb7a8b25ea4173f645eb539f53c34f259f44 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 9 Feb 2024 14:00:53 +0100 Subject: [PATCH 132/242] Update .github/workflows/update_nightly.yml Co-authored-by: Timo Sachsenberg --- .github/workflows/update_nightly.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index 84f7f2e1b0a..bf1e13c64a9 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -51,7 +51,7 @@ jobs: if: inputs.force run: | git checkout nightly - git reset develop --hard + git reset --hard develop git push origin nightly -f env: GITHUB_TOKEN: ${{ secrets.OPENMS_GITHUB_APP_PRIVATE_KEY }} From fb75a43ef3569ac713e5445c0b79e6dbb869795c Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Fri, 9 Feb 2024 14:24:24 +0100 Subject: [PATCH 133/242] actually define outputs --- .github/workflows/openms_ci_matrix_full.yml | 24 +++++++++++++-------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 20cb951bd84..088f4950b68 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -486,6 +486,10 @@ jobs: if: github.ref == 'refs/heads/nightly' || contains(github.ref, 'release/') || inputs.package runs-on: ubuntu-latest needs: build-and-test + outputs: + upload_url: ${{ steps.create_release.outputs.upload_url }} + release_text_contents: ${{ steps.mk_release_txt.outputs.release_text_contents }} + steps: - name: Extract branch/PR infos @@ -552,6 +556,7 @@ jobs: rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/OpenMSInstaller/release/RC_GHA" # FIXME REVERT - name: create RELEASE_TEXT + id: mk_release_txt if: inputs.do_release shell: bash run: | @@ -560,7 +565,7 @@ jobs: cat > releaseTextHeader.txt << EOF Dear OpenMS-Users, - we are proud to announce the release of OpenMS ${{ needs.build_and_test.outputs.version_number }}. Grab it here + we are proud to announce the release of OpenMS ${{ needs.build-and-test.outputs.version_number }}. Grab it here In the following you find all important changes to the previous version: @@ -586,6 +591,7 @@ jobs: echo release_text_contents=`cat RELEASE_TEXT_GH.md` >> $GITHUB_OUTPUT - name: run GHA release action. + id: create_release if: inputs.do_release uses: ncipollo/release-action@v1.14.0 with: @@ -862,7 +868,7 @@ jobs: do-release: if: inputs.do_release runs-on: ubuntu-latest - needs: [build-deploy-knime-updatesite,deploy-installer] + needs: [build-deploy-knime-updatesite,deploy-installer, build-and-test] permissions: write-all steps: @@ -963,13 +969,13 @@ jobs: shell: bash run: | OPENMS_RELEASE_URL= ${{ needs.deploy-installer.outputs.upload_url }} - cp release${{ needs.build_and_test.outputs.version_number }}.md OpenMS-website/content/en/news/ - echo ${{ needs.deploy-installer.outputs.release_text_contents }} >> OpenMS-website/content/en/news/release${{ needs.build_and_test.outputs.version_number }}.md + cp release${{ needs.build-and-test.outputs.version_number }}.md OpenMS-website/content/en/news/ + echo ${{ needs.deploy-installer.outputs.release_text_contents }} >> OpenMS-website/content/en/news/release${{ needs.build-and-test.outputs.version_number }}.md pushd OpenMS-website - git checkout -b "releaseannouncement${{ needs.build_and_test.outputs.version_number }}" - git add content/en/news/release${{ needs.build_and_test.outputs.version_number }}.md - git commit -am "Announce release ${{ needs.build_and_test.outputs.version_number }}" - git push --set-upstream origin releaseannouncement${{ needs.build_and_test.outputs.version_number }} - gh pr create --title "Release announcement for ${{ needs.build_and_test.outputs.version_number }}" --body "announces ${{ needs.build_and_test.outputs.version_number }}" + git checkout -b "releaseannouncement${{ needs.build-and-test.outputs.version_number }}" + git add content/en/news/release${{ needs.build-and-test.outputs.version_number }}.md + git commit -am "Announce release ${{ needs.build-and-test.outputs.version_number }}" + git push --set-upstream origin releaseannouncement${{ needs.build-and-test.outputs.version_number }} + gh pr create --title "Release announcement for ${{ needs.build-and-test.outputs.version_number }}" --body "announces ${{ needs.build-and-test.outputs.version_number }}" popd From 4be904ed50e814262b3a16a06c11675a98849b7f Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Fri, 9 Feb 2024 15:06:51 +0100 Subject: [PATCH 134/242] [DOC] modernize first set of Tutorials; fix docs of affected classes along the way. also update raw input data (avoid parser warnings) --- doc/code_examples/Tutorial_AASequence.cpp | 31 +- doc/code_examples/Tutorial_Clustering.cpp | 60 +- doc/code_examples/Tutorial_DPosition.cpp | 21 +- doc/code_examples/Tutorial_DRange.cpp | 27 +- doc/code_examples/Tutorial_Element.cpp | 52 +- .../Tutorial_EmpiricalFormula.cpp | 12 +- doc/code_examples/Tutorial_Enzyme.cpp | 18 +- doc/code_examples/Tutorial_FeatureFinder.cpp | 1 - doc/code_examples/Tutorial_FeatureMap.cpp | 6 +- doc/code_examples/Tutorial_FileIO.cpp | 24 +- .../Tutorial_FileIO_Consumer.cpp | 34 +- doc/code_examples/Tutorial_FileIO_mzML.cpp | 15 +- doc/code_examples/data/Tutorial_FileIO.mzXML | 56 +- .../data/Tutorial_FileIO_indexed.mzML | 126 +-- .../data/Tutorial_GaussFilter.mzML | 79 +- .../data/Tutorial_MorphologicalFilter.mzML | 79 +- .../CLUSTERING/ClusterHierarchical.h | 270 +++---- .../COMPARISON/CLUSTERING/CompleteLinkage.h | 87 ++- .../include/OpenMS/DATASTRUCTURES/DPosition.h | 2 +- .../OpenMS/DATASTRUCTURES/DistanceMatrix.h | 724 +++++++++--------- 20 files changed, 984 insertions(+), 740 deletions(-) diff --git a/doc/code_examples/Tutorial_AASequence.cpp b/doc/code_examples/Tutorial_AASequence.cpp index a537a622bf0..5ebdb300a7b 100644 --- a/doc/code_examples/Tutorial_AASequence.cpp +++ b/doc/code_examples/Tutorial_AASequence.cpp @@ -18,21 +18,17 @@ int main() const String s = "DEFIANGER"; AASequence peptide1 = AASequence::fromString(s); - // generate AASequence object from string literal + // ... or generate AASequence object from string literal AASequence peptide2 = AASequence::fromString("PEPTIDER"); - // extract prefix and suffix - AASequence prefix(peptide1.getPrefix(2)); - AASequence suffix(peptide1.getSuffix(3)); - cout << peptide1.toString() << " " - << prefix << " " - << suffix << endl; - + // extract prefix and suffix of the first/last AA residues + AASequence prefix(peptide1.getPrefix(2)); // "PE" + AASequence suffix(peptide1.getSuffix(3)); // "DER" + cout << peptide1.toString() << " " << prefix << " " << suffix << endl; + // create chemically modified peptide AASequence peptide_meth_ox = AASequence::fromString("PEPTIDESEKUEM(Oxidation)CER"); - cout << peptide_meth_ox.toString() << " " - << peptide_meth_ox.toUnmodifiedString() - << endl; + cout << peptide_meth_ox.toString() << " --> unmodified: " << peptide_meth_ox.toUnmodifiedString() << endl; // mass of the full, uncharged peptide double peptide_mass_mono = peptide_meth_ox.getMonoWeight(); @@ -42,14 +38,19 @@ int main() cout << "Average mass of the uncharged, full peptide: " << peptide_mass_avg << endl; // mass of the 2+ charged b-ion with the given sequence - double ion_mass_2plus = peptide_meth_ox.getMonoWeight(Residue::BIon, 2); - cout << "Mass of the doubly positively charged b-ion: " << ion_mass_2plus << endl; + double ion_mass_b3_2plus = peptide_meth_ox.getPrefix(3).getMonoWeight(Residue::BIon, 2); + cout << "Mass of the doubly positively charged b3-ion: " << ion_mass_b3_2plus << endl; // mass-to-charge ratio (m/z) of the 2+ charged b-ion and full peptide with the given sequence - cout << "Mass-to-charge of the doubly positively charged b-ion: " << peptide_meth_ox.getMZ(2, Residue::BIon) << endl; + cout << "Mass-to-charge of the doubly positively charged b3-ion: " << peptide_meth_ox.getPrefix(3).getMZ(2, Residue::BIon) << endl; cout << "Mass-to-charge of the doubly positively charged peptide: " << peptide_meth_ox.getMZ(2) << endl; - // ... many more + // count AA's to get a frequency table + std::map aa_freq; + peptide_meth_ox.getAAFrequencies(aa_freq); + cout << "Number of Proline (P) residues in '" << peptide_meth_ox.toString() << "' is " << aa_freq['P'] << endl; + + return 0; } diff --git a/doc/code_examples/Tutorial_Clustering.cpp b/doc/code_examples/Tutorial_Clustering.cpp index df320872090..9e648a9901f 100644 --- a/doc/code_examples/Tutorial_Clustering.cpp +++ b/doc/code_examples/Tutorial_Clustering.cpp @@ -5,57 +5,71 @@ #include #include #include +#include #include -#include #include #include +#include +#include using namespace OpenMS; using namespace std; + +/// A functor, which provides a similarity value for two entities (here: doubles), in range [0, 1) class LowLevelComparator { public: double operator()(const double first, const double second) const { - double x, y; - x = min(second, first); - y = max(first, second); - if ((y - x) > 1) - { - throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); - } - return 1 - (y - x); + // we just use a linear distance between them, i.e. the closer the values, the more similar they are + auto distance = std::fabs(first - second); + if (distance > 1) { throw Exception::InvalidRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); } + return 1 - distance; } - }; // end of LowLevelComparator Int main() { // data - vector data; // must be filled - - srand(333); - Size nr = 12; - data.resize(nr); - for (Size i = 0; i < nr; ++i) - { - data[i] = (double)rand() / RAND_MAX; - } + vector data; +#if 1 // manual data + data = {0.01, 0.02, 0.7, 0.3, 0.31}; +#else // random data + const auto N = 5; + std::mt19937 rng; // default constructed, seeded with fixed seed + std::uniform_real_distribution<> dis(0.0, 1.0); // uniform values between [0, 1) + std::generate_n(back_inserter(data), N, [&]() { return dis(rng); }); +#endif + // print raw data to console + std::cout << "raw data: "; + for_each(data.begin(), data.end(), [](auto elem) { std::cout << elem << ' '; }); + std::cout << '\n'; + // determines the distance between two data points LowLevelComparator llc; - CompleteLinkage sl; + + SingleLinkage sl; + // or try: + //CompleteLinkage sl; + vector tree; DistanceMatrix dist; // will be filled ClusterHierarchical ch; - ch.setThreshold(0.15); + ch.setThreshold(1); // maximal distance between clusters; default threshold = 1, i.e. full clustering + // note: not all methods support a threshold, e.g. SingleLinkage requires t = 1. - // clustering + // do clustering. + // Note: There are other overloads of this function for clustering spectra ch.cluster(data, llc, sl, tree, dist); + // depending on the cluster method, the distance matrix may have shrunken, e.g. for complete linkage to the point where clustering was stopped + std::cout << "distance matrix:\n" << dist << "\n\n"; + ClusterAnalyzer ca; + std::cout << "binary tree in Newick format (numbers are indices into the data)"; std::cout << ca.newickTree(tree) << std::endl; return 0; -} //end of main +} // end of main diff --git a/doc/code_examples/Tutorial_DPosition.cpp b/doc/code_examples/Tutorial_DPosition.cpp index 84bba1c35da..a30100a5cc4 100644 --- a/doc/code_examples/Tutorial_DPosition.cpp +++ b/doc/code_examples/Tutorial_DPosition.cpp @@ -9,14 +9,27 @@ using namespace OpenMS; Int main() { - DPosition<2> pos; - pos[0] = 8.15; - pos[1] = 47.11; + DPosition<2> pos {-8.15, 47.11}; + static_assert(pos.size() == 2); - for (Size i = 0; i < DPosition<2>::DIMENSION; ++i) + std::cout << "largest possible value: " << DPosition<2>::maxPositive() << '\n'; + // make values in all dimensions positive and print + std::cout << "abs: " << pos.abs() << '\n'; + + // manipulate individual dimensions + pos[0] = -3.15; + pos[1] = 7.11; + + for (Size i = 0; i < pos.DIMENSION; ++i) { std::cout << "Dimension " << i << ": " << pos[i] << std::endl; } + // same thing + int i = 0; + for (const auto e : pos) + { + std::cout << "Dimension " << i++ << ": " << e << std::endl; + } return 0; } //end of main diff --git a/doc/code_examples/Tutorial_DRange.cpp b/doc/code_examples/Tutorial_DRange.cpp index c98b0d1f22f..8a383564e30 100644 --- a/doc/code_examples/Tutorial_DRange.cpp +++ b/doc/code_examples/Tutorial_DRange.cpp @@ -9,15 +9,30 @@ using namespace OpenMS; Int main() { + // A D-dimensional range, without units; + // Note: if you want something more modern with dimensions for RT, m/z, intensity and mobility, then use RangeManager. + // + // You can use any dimension you like; for D=2 and D=3 there are some convenience overloads though, especially for C'tors + // a 2-dimensional, i.e. [x_min..x_max, y_min..y_max], range DRange<2> range; - range.setMin(DPosition<2>(2.0, 3.0)); - range.setMax(DPosition<2>(1.0, 5.0)); + range.setMin(DPosition<2>(2.0, 3.0)); // for (x_min, y_min) + range.setMax(DPosition<2>(4.0, 5.0)); // for (x_max, y_max) + std::cout << "values:\n" << range; // prints [2..4, 3..5] - for (UInt i = 0; i < DRange<2>::DIMENSION; ++i) + // Note: the class maintains the invariant min<=max for each dimension + // Thus, setting a 'min' which is larger than the current 'max', also adjusts 'max' to the same value + range.setMin(DPosition<2>(10.0, 2.0)); // for (x_max, y_max) + std::cout << "\nadjusted max:\n" << range; // prints [10..10, 2..5] + + // you can also set each dimension's min/max: 0 = X, 1 = Y + range.setDimMinMax(0, {0.6, 6.6}); + std::cout << "\nnew X range:\n" << range; + + // print values using a custom format + for (UInt i = 0; i < range.DIMENSION; ++i) { - std::cout << "min " << i << ": " << range.minPosition()[i] << std::endl; - std::cout << "max " << i << ": " << range.maxPosition()[i] << std::endl; + std::cout << "DIM " << i << ": " << range.minPosition()[i] << " ... " << range.maxPosition()[i] << '\n'; } - return 0; + } //end of main diff --git a/doc/code_examples/Tutorial_Element.cpp b/doc/code_examples/Tutorial_Element.cpp index 3c361cc482e..e049f614426 100644 --- a/doc/code_examples/Tutorial_Element.cpp +++ b/doc/code_examples/Tutorial_Element.cpp @@ -4,28 +4,60 @@ //! [doxygen_snippet_Element] -#include #include +#include +#include #include +#include using namespace OpenMS; using namespace std; Int main() { - const ElementDB * db = ElementDB::getInstance(); + const ElementDB& db = *ElementDB::getInstance(); // extract carbon element from ElementDB // .getResidue("C") would work as well - Element carbon = *db->getElement("Carbon"); + const Element& carbon = *db.getElement("Carbon"); // output name, symbol, monoisotopic weight and average weight - cout << carbon.getName() << " " - << carbon.getSymbol() << " " - << carbon.getMonoWeight() << " " - << carbon.getAverageWeight() << endl; - - return 0; -} //end of main + cout << carbon.getName() << " " << carbon.getSymbol() << " " << carbon.getMonoWeight() << " " << carbon.getAverageWeight() << endl; + + + if (db.hasElement("foo")) { std::cout << "worth a try..."; } + + // get all elements currently known; you can also get them by atomic number or symbols: + const auto all_elements_name = db.getNames(); + const auto all_elements_AN = db.getAtomicNumbers(); + const auto all_elements_symbols = db.getSymbols(); + std::cout << "We currently know of: " << all_elements_name.size() << " elements (incl. isotopes)\n" + << " with: " << all_elements_AN.size() << " different atomic numbers (linking to the monoisotopic isotope)\n" + << " and: " << all_elements_symbols.size() << " different symbols\n\n"; + + std::cout << "\nLet's find all hydrogen isotopes:\n"; + for (const auto e : all_elements_name) + { + // all hydrogens have AN == 1 + if (e.second->getAtomicNumber() == 1) + { + std::cout << " --> " << std::setw(30) << e.first + << " Symbol: " << std::setw(5) << e.second->getSymbol() + << " AN: " << std::setw(3) << e.second->getAtomicNumber() + << " mono-weight: " << std::setw(14)<< e.second->getMonoWeight() << "\n"; + } + } + + std::cout << "\nLets print all monoisotopic elements:\n"; + for (const auto e : all_elements_AN) + { + std::cout << std::setw(30) << e.first + << " Symbol: " << std::setw(5) << e.second->getSymbol() + << " AN: " << std::setw(3) << e.second->getAtomicNumber() + << " mono-weight: " << std::setw(14)<< e.second->getMonoWeight() << "\n"; + } + + +} // end of main //! [doxygen_snippet_Element] diff --git a/doc/code_examples/Tutorial_EmpiricalFormula.cpp b/doc/code_examples/Tutorial_EmpiricalFormula.cpp index ff55a5028c3..749a5f4fd08 100644 --- a/doc/code_examples/Tutorial_EmpiricalFormula.cpp +++ b/doc/code_examples/Tutorial_EmpiricalFormula.cpp @@ -16,26 +16,26 @@ Int main() { EmpiricalFormula methanol("CH3OH"), water("H2O"); - // sum up empirical formula + // sum up empirical formulae EmpiricalFormula sum = methanol + water; // get element from ElementDB const Element * carbon = ElementDB::getInstance()->getElement("Carbon"); // output number of carbon atoms and average weight - cout << sum << " " - << sum.getNumberOf(carbon) << " " - << sum.getAverageWeight() << endl; + cout << "Formula: " << sum + << "\n average weight: " << sum.getAverageWeight() + << "\n # of Carbons: " << sum.getNumberOf(carbon); // extract the isotope distribution IsotopeDistribution iso_dist = sum.getIsotopeDistribution(CoarseIsotopePatternGenerator(3)); + std::cout << "\n\nCoarse isotope distribution of " << sum << ": \n"; for (const auto& it : iso_dist) { - cout << it.getMZ() << " " << it.getIntensity() << endl; + cout << "m/z: " << it.getMZ() << " abundance: " << it.getIntensity() << endl; } - return 0; } //end of main //! [doxygen_snippet_EmpiricalFormula] diff --git a/doc/code_examples/Tutorial_Enzyme.cpp b/doc/code_examples/Tutorial_Enzyme.cpp index f4153f2e4ea..c3f40bc8e3d 100644 --- a/doc/code_examples/Tutorial_Enzyme.cpp +++ b/doc/code_examples/Tutorial_Enzyme.cpp @@ -28,28 +28,34 @@ int main() // digest C-terminally amidated peptide vector products; - protease.digest(AASequence::fromString("ARCDRE.(Amidated)"), products); + auto aa_seq = AASequence::fromString("ARCDRE.(Amidated)"); + protease.digest(aa_seq, products); // output digestion products + std::cout << "digesting " << aa_seq.toString() << " into:\n"; for (const AASequence& p : products) { - cout << p.toString() << " "; + cout << "--> " << p.toString() << "\n"; } cout << endl; // allow many miss-cleavages protease.setMissedCleavages(10); - protease.digest(AASequence::fromString("ARCDRE.(Amidated)"), products); + protease.digest(aa_seq, products); // output digestion products + std::cout << "digesting " << aa_seq.toString() << " with 10 MCs into:\n"; for (const AASequence& p : products) { - cout << p.toString() << " "; + cout << "--> " << p.toString() << "\n"; } cout << endl; - // ... many more - return 0; + // verify an infix of a protein is a digestion product: + String peptide = "FFFRAAA"; + cout << "Is '" << peptide.prefix(4) << "' a valid digestion product of '" << peptide << "'? " + << std::boolalpha << protease.isValidProduct(peptide, 0, 4); // yes it is! + } //! [doxygen_snippet_Enzyme] diff --git a/doc/code_examples/Tutorial_FeatureFinder.cpp b/doc/code_examples/Tutorial_FeatureFinder.cpp index bcd3e35d1af..ee1d3a0c719 100644 --- a/doc/code_examples/Tutorial_FeatureFinder.cpp +++ b/doc/code_examples/Tutorial_FeatureFinder.cpp @@ -21,5 +21,4 @@ Int main() ff.run("simple", input, output, parameters, seeds); - return 0; } //end of main diff --git a/doc/code_examples/Tutorial_FeatureMap.cpp b/doc/code_examples/Tutorial_FeatureMap.cpp index 5fa7251cda1..77d5412236e 100644 --- a/doc/code_examples/Tutorial_FeatureMap.cpp +++ b/doc/code_examples/Tutorial_FeatureMap.cpp @@ -24,9 +24,9 @@ int main() map.push_back(feature); //append feature 2 // Iteration over FeatureMap - for (auto it = map.begin(); it != map.end(); ++it) + for (auto& f : map) { - cout << it->getRT() << " - " << it->getMZ() << endl; + cout << f.getRT() << " - " << f.getMZ() << endl; } // Calculate and output the ranges @@ -35,8 +35,6 @@ int main() cout << "RT: " << map.getMinRT() << " - " << map.getMaxRT() << endl; cout << "m/z: " << map.getMinMZ() << " - " << map.getMaxMZ() << endl; - // ... and many more - return 0; } //end of main //! [doxygen_snippet_FeatureMap] diff --git a/doc/code_examples/Tutorial_FileIO.cpp b/doc/code_examples/Tutorial_FileIO.cpp index 0ec279e3e8f..fbcafdddb87 100644 --- a/doc/code_examples/Tutorial_FileIO.cpp +++ b/doc/code_examples/Tutorial_FileIO.cpp @@ -4,6 +4,7 @@ #include #include +#include #include using namespace OpenMS; @@ -11,21 +12,31 @@ using namespace std; int main(int argc, const char** argv) { - if (argc < 2) return 1; - // the path to the data should be given on the command line + // path to the data should be given on the command line + if (argc != 2) + { + std::cerr << "usage: " << argv[0] << " \n\n"; + return 1; + } String tutorial_data_path(argv[1]); + auto file_mzXML = tutorial_data_path + "/data/Tutorial_FileIO.mzXML"; + + if (!File::exists(file_mzXML)) + { + std::cerr << "The file " << file_mzXML << " was not found. Did you provide the correct path?\n"; + } // temporary data storage PeakMap map; // convert MzXML to MzML. Internally we use FileHandler to do the actual work. - // Here we limit the input type to be MZXML only - FileHandler().loadExperiment(tutorial_data_path + "/data/Tutorial_FileIO.mzXML", map, {FileTypes::MZXML}); + // Here we limit the input type to be MzXML only + FileHandler().loadExperiment(file_mzXML, map, {FileTypes::MZXML}); FileHandler().storeExperiment("Tutorial_FileIO.mzML", map, {FileTypes::MZML}); // The FileHandler object can also hold options for how to load the file - FileHandler f = FileHandler(); - PeakFileOptions opts = PeakFileOptions(); + FileHandler f; + PeakFileOptions opts; // Here we set the MZ range to load to 100-200 opts.setMZRange( {100, 200} ); f.setOptions(opts); @@ -48,5 +59,4 @@ int main(int argc, const char** argv) // If we try to load something from a file that can't store that info (for example trying to get an experiment from an idXML file) // An error gets thrown at run time. Check out @p FileHandler class for more info - return 0; } //end of main diff --git a/doc/code_examples/Tutorial_FileIO_Consumer.cpp b/doc/code_examples/Tutorial_FileIO_Consumer.cpp index 293071c3ebf..935fd04774e 100644 --- a/doc/code_examples/Tutorial_FileIO_Consumer.cpp +++ b/doc/code_examples/Tutorial_FileIO_Consumer.cpp @@ -4,6 +4,7 @@ #include #include +#include #include using namespace OpenMS; @@ -15,17 +16,17 @@ class TICWritingConsumer : public MSDataWritingConsumer // they are written to disk (to "filename") using the processSpectrum_ and // processChromatogram_ functions. public: - double TIC; - int nr_spectra; + double TIC {}; + int nr_spectra {}; - // Create new consumer, set TIC to zero - TICWritingConsumer(String filename) : MSDataWritingConsumer(filename) - { TIC = 0.0; nr_spectra = 0;} + // Create new consumer + TICWritingConsumer(const String& filename) : MSDataWritingConsumer(filename) + {} // Add a data processing step for spectra before they are written to disk void processSpectrum_(MSDataWritingConsumer::SpectrumType & s) override { - for (Size i = 0; i < s.size(); i++) { TIC += s[i].getIntensity(); } + for (const auto& p : s) TIC += p.getIntensity(); nr_spectra++; } // Empty chromatogram data processing @@ -34,17 +35,22 @@ class TICWritingConsumer : public MSDataWritingConsumer int main(int argc, const char** argv) { - if (argc < 2) return 1; - // the path to the data should be given on the command line + // path to the data should be given on the command line + if (argc != 2) + { + std::cerr << "usage: " << argv[0] << " \n\n"; + return 1; + } String tutorial_data_path(argv[1]); + auto file_mzXML = tutorial_data_path + "/data/Tutorial_FileIO.mzXML"; + + if (! File::exists(file_mzXML)) { std::cerr << "The file " << file_mzXML << " was not found. Did you provide the correct path?\n"; } // Create the consumer, set output file name, transform - TICWritingConsumer * consumer = new TICWritingConsumer("Tutorial_FileIO_output.mzML"); - MzMLFile().transform(tutorial_data_path + "/data/Tutorial_FileIO_indexed.mzML", consumer); + TICWritingConsumer consumer("Tutorial_FileIO_output.mzML"); + MzMLFile().transform(tutorial_data_path + "/data/Tutorial_FileIO_indexed.mzML", &consumer); - std::cout << "There are " << consumer->nr_spectra << " spectra in the input file." << std::endl; - std::cout << "The total ion current is " << consumer->TIC << std::endl; - delete consumer; + std::cout << "There are " << consumer.nr_spectra << " spectra in the input file.\n"; + std::cout << "The total ion current is " << consumer.TIC << std::endl; - return 0; } //end of main diff --git a/doc/code_examples/Tutorial_FileIO_mzML.cpp b/doc/code_examples/Tutorial_FileIO_mzML.cpp index 56bd9587e8a..f720ccb8957 100644 --- a/doc/code_examples/Tutorial_FileIO_mzML.cpp +++ b/doc/code_examples/Tutorial_FileIO_mzML.cpp @@ -4,6 +4,7 @@ #include #include +#include #include using namespace OpenMS; @@ -11,15 +12,22 @@ using namespace std; int main(int argc, const char** argv) { - if (argc < 2) return 1; - // the path to the data should be given on the command line + // path to the data should be given on the command line + if (argc != 2) + { + std::cerr << "usage: " << argv[0] << " \n\n"; + return 1; + } String tutorial_data_path(argv[1]); + auto file_mzXML = tutorial_data_path + "/data/Tutorial_FileIO_indexed.mzXML"; + + if (! File::exists(file_mzXML)) { std::cerr << "The file " << file_mzXML << " was not found. Did you provide the correct path?\n"; } IndexedMzMLFileLoader imzml; // load data from an indexed MzML file OnDiscPeakMap map; - imzml.load(tutorial_data_path + "/data/Tutorial_FileIO_indexed.mzML", map); + imzml.load(file_mzXML, map); // get the first spectrum in memory, do some constant (non-changing) data processing MSSpectrum s = map.getSpectrum(0); @@ -29,5 +37,4 @@ int main(int argc, const char** argv) // store the (unmodified) data in a different file imzml.store("Tutorial_FileIO_output.mzML", map); - return 0; } //end of main diff --git a/doc/code_examples/data/Tutorial_FileIO.mzXML b/doc/code_examples/data/Tutorial_FileIO.mzXML index 3617cdfc039..2d4260c031c 100644 --- a/doc/code_examples/data/Tutorial_FileIO.mzXML +++ b/doc/code_examples/data/Tutorial_FileIO.mzXML @@ -1,19 +1,55 @@ - - - + + + - - QvAAAELIAAA= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QvAAAELIAAA= - - QtwAAELIAABC8AAAQ0gAAEMCAABCyAAA + + QtwAAELIAABC8AAAQ0gAAEMCAABCyAAA - - QsgAAELIAABC3AAAQ0gAAELwAABDlgAAQwIAAENIAABDDAAAQsgAAA== + + QsgAAELIAABC3AAAQ0gAAELwAABDlgAAQwIAAENIAABDDAAAQsgAAA== - 0 + +2775 +3013 +3272 + +3565 diff --git a/doc/code_examples/data/Tutorial_FileIO_indexed.mzML b/doc/code_examples/data/Tutorial_FileIO_indexed.mzML index f4c5f699044..687123d4940 100644 --- a/doc/code_examples/data/Tutorial_FileIO_indexed.mzML +++ b/doc/code_examples/data/Tutorial_FileIO_indexed.mzML @@ -12,6 +12,13 @@ + + + + + + + @@ -20,7 +27,7 @@ - + @@ -28,11 +35,14 @@ - + + + + @@ -81,7 +91,7 @@ - + @@ -106,7 +116,7 @@ - + @@ -121,20 +131,50 @@ - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -143,17 +183,17 @@ - - - - + + + + - + @@ -170,7 +210,7 @@ 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6G14QD7iTfTrbXhAlZM3vu9teEDFcSKI8214QMt8DlL3bXhArrT7G/tteEBqGerl/m14QACr2a8CbnhAcmnKeQZueEDAVLxDCm54QOpsrw0ObnhA8LGj1xFueEDWI5mhFW54QJfCj2sZbnhAOY6HNR1ueEC6hoD/IG54QBiseskkbnhAWf51kyhueEB5fXJdLG54QHspcCcwbnhAXwJv8TNueEAmCG+7N254QM46cIU7bnhAW5pyTz9ueEDLJnYZQ254QB/geuNGbnhAWsaArUpueEB72Yd3Tm54QIAZkEFSbnhAboaZC1ZueEBCIKTVWW54QP3mr59dbnhAotq8aWFueEAw+8ozZW54QKZI2v1obnhACMPqx2xueEBUavyRcG54QIk+D1x0bnhAqz8jJnhueEC6bTjwe254QLXITrp/bnhAnlBmhINueEB0BX9Oh254QDjnmBiLbnhA7fWz4o5ueECRMdCskm54QCOa7XaWbnhAqC8MQZpueEAe8isLnm54QIPhTNWhbnhA3f1un6VueEAqR5JpqW54QGe9tjOtbnhAm2Dc/bBueEDDMAPItG54QN8tK5K4bnhA8VdUXLxueED5rn4mwG54QPgyqvDDbnhA7uPWusdueEDcwQSFy254QMHMM0/PbnhAnwRkGdNueEB4aZXj1m54QEn7x63abnhAPvE6i1tveECUqpZVX294QPWQ8x9jb3hAZ6RR6mZveEDn5LC0am94QHVSEX9ub3hAFO1ySXJveEDDtNUTdm94QIKpOd55b3hAVMueqH1veEA3GgVzgW94QCyWbD2Fb3hANT/VB4lveEBSFT/SjG94QIIYqpyQb3hAOB24JatveEAeiSzwrm94QBwiorqyb3hANegYhbZveEBo25BPum94QLT7CRq+b3hAHkmE5MFveECiw/+uxW94QEJrfHnJb3hAAED6Q81veEDcQXkO0W94QNNw+djUb3hA68x6o9hveEAjVv1t3G94QHgMgTjgb3hA8O8FA+RveECIAIzN5294QEA+E5jrb3hAGqmbYu9veEAYQSUt8294QKx2fstCcHhAJ/AhlkZweEDUlsZgSnB4QK5qbCtOcHhAuGsT9lFweED1mbvAVXB4QGH1ZItZcHhA/30PVl1weEDQM7sgYXB4QNUWaOtkcHhACicWtmhweEB1ZMWAbHB4QBbPdUtwcHhA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L216QHJHYDc0bXpAlCpcpjhtekCIilkVPW16QFNnWIRBbXpA9MBY80VtekBpl1piSm16QLfqXdFObXpA3rpiQFNtekDaB2mvV216QApUA1bwu3pAs62R3/S7ekCikSFp+bt6QN3/svL9u3pAYPhFfAK8ekAse9oFB7x6QESIcI8LvHpAqB8IGRC8ekBXQaGiFLx6QFXtOywZvHpAoSPYtR28ekA65HU/Irx6QCUvFckmvHpAYAS2Uiu8ekDqY1jcL7x6QD+1fGN13XpAU/Ry+HndekCCw2qNft16QM0iZCKD3XpAMxJft4fdekC2kVtMjN16QFahWeGQ3XpAFEFZdpXdekDxcFoLmt16QO4wXaCe3XpAC4FhNaPdekBKYWfKp916QKzRbl+s3XpAL9J39LDdekDXYoKJtd16QKSDjh663XpAlTScs77dekCudatIw916QOxGvN3H3XpAUqjOcszdekDimeIH0d16QJsb+JzV3XpAfC0PMtrdekCKzyfH3t16QMQBQlzj3XpAKcRd8efdekC9FnuG7N16QH/5mRvx3XpAb2y6sPXdekCQb9xF+t16QOECANv+3XpAYiYlcAPeekAX2ksFCN56QP4ddJoM3npAGPKdLxHeekBpVsnEFd56QO5K9lka3npAqM8k7x7eekCa5FSEI956QMWJhhko3npAJr+5rizeekDChO5DMd56QJnaJNk13npAqMBcbjreekD2NpYDP956QH890ZhD3npARdQNLkjeekBK+0vDTN56QI+yi1hR3npAEPrM7VXeekDV0Q+DWt56QAw+AliI3npAykhW7YzeekDU46uCkd56QCkPAxiW3npAx8pbrZreekC0FrZCn956QO7yEdij3npAdV9vbajeekBMXM4Crd56QHTpLpix3npA6gaRLbbeekCztPTCut56QM7yWVi/3npAPMHA7cPeekD9HymDyN56QBQPkxjN3npAfo7+rdHeekBAnmtD1t56QFk+2tja3npAyG5Kbt/eekCRL7wD5N56QIBFekdE33pAsG4O3UjfekBKKKRyTd96QFFyOwhS33pAxUzUnVbfekClt24zW996QPSyCslf33pAsj6oXmTfekDeWkf0aN96QH0H6Ilt33pAjUSKH3LfekANEi61dt96QANw00p733pAa1564H/fekCpokJn0t96QEBKB/3W33pA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P919QGCGx69E3X1A64RDWUrdfUATqcECUN19QN7yQaxV3X1ATGLEVVvdfUBb90j/YN19QBCyz6hm3X1Aa5JYUmzdfUBrmOP7cd19QFpsYCpa3n1AEKRF1F/efUClAS1+Zd59QBaFFihr3n1AYy4C0nDefUCS/e97dt59QKDy3yV83n1Ajw3Sz4HefUBhTsZ5h959QBq1vCON3n1AtEG1zZLefUA49K93mN59QKPMrCGe3n1A9cqry6PefUA076x1qd59QF45sB+v3n1Acqm1ybTefUB2P71zut59QGr7xh3A3n1ATN3Sx8XefUAg5eBxy959QOkS8RvR3n1Ao2YDxtbefUBU4Bdw3N59QP1/Lhri3n1AmkVHxOfefUAzMWJu7d59QMVCfxjz3n1AUHqewvjefUDc179s/t59QGRb4xYE331A6QQJwQnffUBw1DBrD999QPnJWhUV331Ag+WGvxrffUATJ7VpIN99QKaO5RMm331AQBwYvivffUDjz0xoMd99QI2pgxI3331AQam8vDzffUABz/dmQt99QM4aNRFI331Ap4x0u03ffUCQJLZlU999QIri+Q9Z331AksY/ul7ffUCw0IdkZN99QOEA0g5q331AJlceuW/ffUCC02xjdd99QPZ1vQ17331AgT4QuIDffUAoLWViht99QOlBvAyM331AxXwVt5HffUDA3XBhl999QNpkzgud331AExIutqLffUBv5Y9gqN99QO3e8wqu331AjP5ZtbPffUBTRMJfud99QECwLAq/331AUkKZtMTffUCO+gdfyt99QPXYeAnQ331AhN3rs9XffUBBCGFe2999QC1Z2Ajh331ARNBRs+bffUCPbc1d7N99QAkxSwjy331AtBrLsvfffUCVKk1d/d99QKpg0QcD4H1A9LxXsgjgfUB3P+BcDuB9QDLoagcU4H1AJbf3sRngfUBWrIZcH+B9QMLHFwcl4H1AaQmrsSrgfUBRcUBcMOB9QHj/1wY24H1A37NxsTvgfUCKjg1cQeB9QHmPqwZH4H1AqrZLsUzgfUAjBO5bUuB9QON3kgZY4H1A6RE5sV3gfUA80uFbY+B9QNm4jAZp4H1AwMU5sW7gfUD3+OhbdOB9QHtSmgZ64H1ATtJNsX/gfUBzeANcheB9QOtEuwaL4H1Aszd1sZDgfUDTUDFcluB9QEiQ7wac4H1A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KweKQOFNkqszB4pAKjKcRTwHikDtxavfRAeKQCgJwXlNB4pA4vvbE1YHikAknvytXgeKQPHvIkhnB4pATPFO4m8HikBBooB8eAeKQAgXBpr3CopAX0eNNgALikCkKRrTCAuKQNi9rG8RC4pACARFDBoLikA1/OKoIguKQGKmhkUrC4pAmwIw4jMLikDjEN9+PAuKQDzRkxtFC4pAs0NOuE0LikBJaA5VVguKQAE/1PFeC4pA58efjmcLikD+AnErcAuKQEjwR8h4C4pA0Y8kZYELikCb4QYCiguKQKjl7p6SC4pAB5zcO5sLikC4BNDYowuKQL0fyXWsC4pAJO3HErULikA6kM3vjg2KQGGFC46XDYpAKy5PLKANikCaipjKqA2KQLKa52ixDYpAfV48B7oNikAA1palwg2KQDwB90PLDYpAPeBc4tMNikAFc8iA3A2KQJi5OR/lDYpAArSwve0NikBEYi1c9g2KQGDEr/r+DYpAv1VFb/4QikCeTskPBxGKQGL9UrAPEYpADWLiUBgRikChfHfxIBGKQCxNEpIpEYpAsNOyMjIRikAuEFnTOhGKQLMCBXRDEYpAQqu2FEwRikDdCW61VBGKQJEeK1ZdEYpAPkXVihISikBXBRAsGxKKQAR8UM0jEopAUamWbiwSikBCjeIPNRKKQNcnNLE9EopAHnmLUkYSikAYgejzThKKQMk/S5VXEopAPLWzNmASikB04SHYaBKKQHLElXlxEopA9SuyNQQTikD47IzXDBOKQDdlbXkVE4pAsJRTGx4TikBoez+9JhOKQGsZMV8vE4pAum4oATgTikBZeyWjQBOKQFM/KEVJE4pArbow51ETikBl7T6JWhOKQIvXUitjE4pAHnlszWsTikAl0otvdBOKQKjisBF9E4pAq6rbs4UTikCe/EKQyxaKQFFvnjTUFopAt5v/2NwWikDSgWZ95RaKQK8h0yHuFopAT3tFxvYWikC1jr1q/xaKQO5bOw8IF4pA/eK+sxAXikDjI0hYGReKQKse1/whF4pAWtNroSoXikDwQQZGMxeKQH1qpuo7F4pA/0xMj0QXikB86fczTReKQP4/qdhVF4pAh1BgfV4XikAdGx0iZxeKQMif38ZvF4pAjN6na3gXikBt13UQgReKQHSKSbWJF4pARg31fz0aikDA75gmRhqKQDOOQs1OGopA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kNuKQKxk8iuZ24pAz5ybVKLbikAWFEt9q9uKQILKAKa024pAGMC8zr3bikDj9H73xtuKQOhoRyDQ24pAKhwWSdnbikCzDutx4tuKQHXkOEb13IpA14zPb/7cikBIdWyZB92KQNWdD8MQ3YpAgQa57BndikBQr2gWI92KQE6YHkAs3YpAf8HaaTXdikDlKp2TPt2KQI3UZb1H3YpAe74051DdikCy6AkRWt2KQD9T5Tpj3YpAJP7GZGzdikBl6a6Odd2KQA8Vnbh+3YpAJYGR4ofdikCrLYwMkd2KQKwajTaa3YpALEiUYKPdikAutqGKrN2KQMBktbS13YpA5FPP3r7dikCfg+8IyN2KQPrzFTPR3YpA/KRCXdrdikCnlnWH492KQAfJrrHs3YpAIDzu2/XdikD07zMG/92KQJLkfzAI3opA+xnSWhHeikA0kCqFGt6KQEhHia8j3opAPD/u2SzeikASeFkENt6KQNjxyi4/3opAj6xCWUjeikA9qMCDUd6KQOzkRK5a3opAomLP2GPeikBfIWADbd6KQDMh9y123opAIGKUWH/eikAn5DeDiN6KQFin4a2R3opAtauR2JreikBB8UcDpN6KQAp4BC6t3opAEUDHWLbeikBaSZCDv96KQPOTX67I3opA3x812dHeikAf7RAE296KQML78i7k3opAy0vbWe3eikA83cmE9t6KQCOwvq//3opAg8S52gjfikBfGrsFEt+KQMSxwjAb34pAtYrQWyTfikA0peSGLd+KQFAB/7E234pADJ8f3T/fikBpfkYISd+KQHafczNS34pANQKnXlvfikCppuCJZN+KQN20ZuB234pAox6zC4DfikA+ygU3id+KQLO3XmKS34pAA+e9jZvfikA8WCO5pN+KQGELj+St34pAdQABELffikCGN3k7wN+KQJWw92bJ34pAqGt8ktLfikDKaAe+29+KQP6nmOnk34pASCkwFe7fikC07M1A99+KQEbycWwA4IpAADocmAngikDyw8zDEuCKQBuQg+8b4IpAhcBot+XgikC1hq/j7uCKQLiP/A/44IpAkdtPPAHhikBMaqloCuGKQO07CZUT4YpAeFBvwRzhikD4p9vtJeGKQHJCThov4YpA6B/HRjjhikBoQEZzQeGKQPSjy59K4YpAj0pXzFPhikAKMdgElOGKQCfxlTGd4YpA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 @@ -182,18 +222,18 @@ - - - - - + + + + + - + @@ -210,7 +250,7 @@ AAAwuugCaUAAAGB00QVpQAAAkC66CGlAAADA6KILaUAAAPCiiw5pQAAAIF10EWlAAABQF10UaUAAAIDRRRdpQAAAsIsuGmlAAADgRRcdaUAAABAAACBpQAAAQLroImlAAABwdNElaUAAAKAuuihpQAAA0OiiK2lAAAAAo4suaUAAADBddDFpQAAAYBddNGlAAACQ0UU3aUAAAMCLLjppQAAA8EUXPWlAAAAgAABAaUAAAFC66EJpQAAAgHTRRWlAAACwLrpIaUAAAODooktpQAAAEKOLTmlAAABAXXRRaUAAAHAXXVRpQAAAoNFFV2lAAADQiy5aaUAAAABGF11pQAAAMAAAYGlAAABguuhiaUAAAJB00WVpQAAAwC66aGlAAADw6KJraUAAACCji25pQAAAUF10cWlAAACAF110aUAAALDRRXdpQAAA4IsuemlAAAAQRhd9aUAAAEAAAIBpQAAAcLrogmlAAACgdNGFaUAAANAuuohpQAAAAOmii2lAAAAwo4uOaUAAAGBddJFpQAAAkBddlGlAAADA0UWXaUAAAPCLLpppQAAAIEYXnWlAAABQAACgaUAAAIC66KJpQAAAsHTRpWlAAADgLrqoaUAAABDpoqtpQAAAQKOLrmlAAABwXXSxaUAAAKAXXbRpQAAA0NFFt2lAAAAAjC66aUAAADBGF71pQAAAYAAAwGlAAACQuujCaUAAAMB00cVpQAAA8C66yGlAAAAg6aLLaUAAAFCji85pQAAAgF100WlAAACwF13UaUAAAODRRddpQAAAEIwu2mlAAABARhfdaUAAAHAAAOBpQAAAoLro4mlAAADQdNHlaUAAAAAvuuhpQAAAMOmi62lAAABgo4vuaUAAAJBddPFpQAAAwBdd9GlAAADw0UX3aUAAACCMLvppQAAAUEYX/WlAAACAAAAAakAAALC66AJqQAAA4HTRBWpAAAAQL7oIakAAAEDpogtqQAAAcKOLDmpAAACgXXQRakAAANAXXRRqQAAAANJFF2pAAAAwjC4aakAAAGBGFx1qQAAAkAAAIGpAAADAuugiakAAAPB00SVqQAAAIC+6KGpAAABQ6aIrakAAAICjiy5qQAAAsF10MWpAAADgF100akAAABDSRTdqQAAAQIwuOmpAAABwRhc9akAAAKAAAEBqQAAA0LroQmpAAAAAddFFakAAADAvukhqQAAAYOmiS2pAAACQo4tOakAAAMBddFFqQAAA8BddVGpAAAAg0kVXakAAAFCMLlpqQAAAgEYXXWpAAACwAABgakAAAOC66GJqQAAAEHXRZWpAAABAL7poakAAAHDpomtqQAAAoKOLbmpAAADQXXRxakAAAAAYXXRqQAAAMNJFd2pAAABgjC56akAAAJBGF31qQAAAwAAAgGpAAADwuuiCakAAACB10YVqQAAAUC+6iGpAAACA6aKLakAAALCji45qQAAA4F10kWpAAAAQGF2UakAAAEDSRZdqQAAAcIwummpAAACgRhedakAAANAAAKBqQAAAALvoompAAAAwddGlakAAAGAvuqhqQAAAkOmiq2pAAADAo4uuakAAAPBddLFqQAAAIBhdtGpAAABQ0kW3akAAAICMLrpqQAAAsEYXvWpAAADgAADAakAAABC76MJqQAAAQHXRxWpAAABwL7rIakAAAKDpostqQAAA0KOLzmpAAAAAXnTRakAAADAYXdRqQAAAYNJF12pAAACQjC7aakAAAMBGF91qQAAA8AAA4GpAAAAgu+jiakAAAFB10eVqQAAAgC+66GpAAACw6aLrakAAAOCji+5qQAAAEF508WpAAABAGF30akAAAHDSRfdqQAAAoIwu+mpAAADQRhf9akAAAAABAABrQAAAMLvoAmtAAABgddEFa0AAAJAvughrQAAAwOmiC2tAAADwo4sOa0AAACBedBFrQAAAUBhdFGtAAACA0kUXa0AAALCMLhprQAAA4EYXHWtAAAAQAQAga0AAAEC76CJrQAAAcHXRJWtAAACgL7ooa0AAANDpoitrQAAAAKSLLmtAAAAwXnQxa0AAAGAYXTRrQAAAkNJFN2tAAADAjC46a0AAAPBGFz1rQAAAIAEAQGtAAABQu+hCa0AAAIB10UVrQAAAsC+6SGtAAADg6aJLa0AAABCki05rQAAAQF50UWtAAABwGF1Ua0AAAKDSRVdrQAAA0IwuWmtAAAAARxdda0AAADABAGBrQAAAYLvoYmtAAACQddFla0AAAMAvumhrQAAA8Omia2tAAAAgpItua0AAAFBedHFrQAAAgBhddGtAAACw0kV3a0AAAOCMLnprQAAAEEcXfWtAAABAAQCAa0AAAHC76IJrQAAAoHXRhWtAAADQL7qIa0AAAADqootrQAAAMKSLjmtAAABgXnSRa0AAAJAYXZRrQAAAwNJFl2tAAADwjC6aa0AAACBHF51rQAAAUAEAoGtAAACAu+iia0AAALB10aVrQAAA4C+6qGtAAAAQ6qKra0AAAECki65rQAAAcF50sWtAAACgGF20a0AAANDSRbdrQAAAAI0uumtAAAAwRxe9a0AAAGABAMBrQAAAkLvowmtAAADAddHFa0AAAPAvushrQAAAIOqiy2tAAABQpIvOa0AAAIBedNFrQAAAsBhd1GtAAADg0kXXa0AAABCNLtprQAAAQEcX3WtAAABwAQDga0AAAKC76OJrQAAA0HXR5WtAAAAAMLroa0AAADDqoutrQAAAYKSL7mtAAACQXnTxa0AAAMAYXfRrQAAA8NJF92tAAAAgjS76a0AAAFBHF/1rQAAAgAEAAGxAAACwu+gCbEAAAOB10QVsQAAAEDC6CGxAAABA6qILbEAAAHCkiw5sQAAAoF50EWxAAADQGF0UbEAAAADTRRdsQAAAMI0uGmxAAABgRxcdbEAAAJABACBsQAAAwLvoImxAAADwddElbEAAACAwuihsQAAAUOqiK2xAAACApIsubEAAALBedDFsQAAA4BhdNGxAAAAQ00U3bEAAAECNLjpsQAAAcEcXPWxAAACgAQBAbEAAANC76EJsQAAAAHbRRWxAAAAwMLpIbEAAAGDqoktsQAAAkKSLTmxAAADAXnRRbEAAAPAYXVRsQAAAINNFV2xAAABQjS5abEAAAIBHF11sQAAAsAEAYGxAAADgu+hibEAAABB20WVsQAAAQDC6aGxAAABw6qJrbEAAAKCki25sQAAA0F50cWxAAAAAGV10bEAAADDTRXdsQAAAYI0uemxAAACQRxd9bEAAAMABAIBsQAAA8LvogmxAAAAgdtGFbEAAAFAwuohsQAAAgOqii2xAAACwpIuObEAAAOBedJFsQAAAEBldlGxAAABA00WXbEAAAHCNLppsQAAAoEcXnWxAAADQAQCgbEAAAAC86KJsQAAAMHbRpWxAAABgMLqobEAAAJDqoqtsQAAAwKSLrmxAAADwXnSxbEAAACAZXbRsQAAAUNNFt2xAAACAjS66bEAAALBHF71sQAAA4AEAwGxAAAAQvOjCbEAAAEB20cVsQAAAcDC6yGxAAACg6qLLbEAAANCki85sQAAAAF900WxAAAAwGV3UbEAAAGDTRddsQAAAkI0u2mxAAADARxfdbEAAAPABAOBsQAAAILzo4mxAAABQdtHlbEAAAIAwuuhsQAAAsOqi62xAAADgpIvubEAAABBfdPFsQAAAQBld9GxAAABw00X3bEAAAKCNLvpsQAAA0EcX/WxAAAAAAgAAbUAAADC86AJtQAAAYHbRBW1AAACQMLoIbUAAAMDqogttQAAA8KSLDm1AAAAgX3QRbUAAAFAZXRRtQAAAgNNFF21AAACwjS4abUAAAOBHFx1tQAAAEAIAIG1AAABAvOgibUAAAHB20SVtQAAAoDC6KG1AAADQ6qIrbUAAAACliy5tQAAAMF90MW1AAABgGV00bUAAAJDTRTdtQAAAwI0uOm1AAADwRxc9bUAAACACAEBtQAAAULzoQm1AAACAdtFFbUAAALAwukhtQAAA4OqiS21AAAAQpYtObUAAAEBfdFFtQAAAcBldVG1AAACg00VXbUAAANCNLlptQAAAAEgXXW1AAAAwAgBgbUAAAGC86GJtQAAAkHbRZW1AAADAMLpobUAAAPDqomttQAAAIKWLbm1AAABQX3RxbUAAAIAZXXRtQAAAsNNFd21AAADgjS56bUAAABBIF31tQAAAQAIAgG1AAABwvOiCbUAAAKB20YVtQAAA0DC6iG1AAAAA66KLbUAAADCli45tQAAAYF90kW1AAACQGV2UbUAAAMDTRZdtQAAA8I0umm1AAAAgSBedbUAAAFACAKBtQAAAgLzoom1AAACwdtGlbUAAAOAwuqhtQAAAEOuiq21AAABApYuubUAAAHBfdLFtQAAAoBldtG1AAADQ00W3bUAAAACOLrptQAAAMEgXvW1AAABgAgDAbUAAAJC86MJtQAAAwHbRxW1AAADwMLrIbUAAACDrosttQAAAUKWLzm1AAACAX3TRbUAAALAZXdRtQAAA4NNF121AAAAQji7abUAAAEBIF91tQAAAcAIA4G1AAACgvOjibUAAANB20eVtQAAAADG66G1AAAAw66LrbUAAAGCli+5tQAAAkF908W1AAADAGV30bUAAAPDTRfdtQAAAII4u+m1AAABQSBf9bUAAAIACAABuQAAAsLzoAm5AAADgdtEFbkAAABAxughuQAAAQOuiC25AAABwpYsObkAAAKBfdBFuQAAA0BldFG5AAAAA1EUXbkAAADCOLhpuQAAAYEgXHW5AAACQAgAgbkAAAMC86CJuQAAA8HbRJW5AAAAgMboobkAAAFDroituQAAAgKWLLm5AAACwX3QxbkAAAOAZXTRuQAAAENRFN25AAABAji46bkAAAHBIFz1uQAAAoAIAQG5AAADQvOhCbkAAAAB30UVuQAAAMDG6SG5AAABg66JLbkAAAJCli05uQAAAwF90UW5AAADwGV1UbkAAACDURVduQAAAUI4uWm5AAACASBddbkAAALACAGBuQAAA4LzoYm5AAAAQd9FlbkAAAEAxumhuQAAAcOuia25AAACgpYtubkAAANBfdHFuQAAAABpddG5AAAAw1EV3bkAAAGCOLnpuQAAAkEgXfW5AAADAAgCAbkAAAPC86IJuQAAAIHfRhW5AAABQMbqIbkAAAIDrootuQAAAsKWLjm5AAADgX3SRbkAAABAaXZRuQAAAQNRFl25AAABwji6abkAAAKBIF51uQAAA0AIAoG5AAAAAveiibkAAADB30aVuQAAAYDG6qG5AAACQ66KrbkAAAMCli65uQAAA8F90sW5AAAAgGl20bkAAAFDURbduQAAAgI4uum5AAACwSBe9bkAAAOACAMBuQAAAEL3owm5AAABAd9HFbkAAAHAxushuQAAAoOuiy25AAADQpYvObkAAAABgdNFuQAAAMBpd1G5AAABg1EXXbkAAAJCOLtpuQAAAwEgX3W5AAADwAgDgbkAAACC96OJuQAAAUHfR5W5AAACAMbrobkAAALDroutuQAAA4KWL7m5AAAAQYHTxbkAAAEAaXfRuQAAAcNRF925AAACgji76bkAAANBIF/1uQAAAAAMAAG9AAAAwvegCb0AAAGB30QVvQAAAkDG6CG9AAADA66ILb0AAAPCliw5vQAAAIGB0EW9AAABQGl0Ub0AAAIDURRdvQAAAsI4uGm9AAADgSBcdb0AAABADACBvQAAAQL3oIm9AAABwd9Elb0AAAKAxuihvQAAA0OuiK29AAAAAposub0AAADBgdDFvQAAAYBpdNG9AAACQ1EU3b0AAAMCOLjpvQAAA8EgXPW9AAAAgAwBAb0AAAFC96EJvQAAAgHfRRW9AAACwMbpIb0AAAODroktvQAAAEKaLTm9AAABAYHRRb0AAAHAaXVRvQAAAoNRFV29AAADQji5ab0AAAABJF11vQAAAMAMAYG9AAABgvehib0AAAJB3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AAB4pYuecUAAAJACAKBxQAAAqF90oXFAAADAvOiicUAAANgZXaRxQAAA8HbRpXFAAAAI1EWncUAAACAxuqhxQAAAOI4uqnFAAABQ66KrcUAAAGhIF61xQAAAgKWLrnFAAACYAgCwcUAAALBfdLFxQAAAyLzosnFAAADgGV20cUAAAPh20bVxQAAAENRFt3FAAAAoMbq4cUAAAECOLrpxQAAAWOuiu3FAAABwSBe9cUAAAIili75xQAAAoAIAwHFAAAC4X3TBcUAAANC86MJxQAAA6BldxHFAAAAAd9HFcUAAABjURcdxQAAAMDG6yHFAAABIji7KcUAAAGDrostxQAAAeEgXzXFAAACQpYvOcUAAAKgCANBxQAAAwF900XFAAADYvOjScUAAAPAZXdRxQAAACHfR1XFAAAAg1EXXcUAAADgxuthxQAAAUI4u2nFAAABo66LbcUAAAIBIF91xQAAAmKWL3nFAAACwAgDgcUAAAMhfdOFxQAAA4Lzo4nFAAAD4GV3kcUAAABB30eVxQAAAKNRF53FAAABAMbrocUAAAFiOLupxQAAAcOui63FAAACISBftcUAAAKCli+5xQAAAuAIA8HFAAADQX3TxcUAAAOi86PJxQAAAABpd9HFAAAAYd9H1cUAAADDURfdxQAAASDG6+HFAAABgji76cUAAAHjrovtxQAAAkEgX/XFAAACopYv+cUAAAMACAAByQAAA2F90AXJAAADwvOgCckAAAAgaXQRyQAAAIHfRBXJAAAA41EUHckAAAFAxughyQAAAaI4uCnJAAACA66ILckAAAJhIFw1yQAAAsKWLDnJAAADIAgAQckAAAOBfdBFyQAAA+LzoEnJAAAAQGl0UckAAACh30RVyQAAAQNRFF3JAAABYMboYckAAAHCOLhpyQAAAiOuiG3JAAACgSBcdckAAALilix5yQAAA0AIAIHJAAADoX3QhckAAAAC96CJyQAAAGBpdJHJAAAAwd9ElckAAAEjURSdyQAAAYDG6KHJAAAB4ji4qckAAAJDroityQAAAqEgXLXJAAADApYsuckAAANgCADByQAAA8F90MXJAAAAIvegyckAAACAaXTRyQAAAOHfRNXJAAABQ1EU3ckAAAGgxujhyQAAAgI4uOnJAAACY66I7ckAAALBIFz1yQAAAyKWLPnJAAADgAgBAckAAAPhfdEFyQAAAEL3oQnJAAAAoGl1EckAAAEB30UVyQAAAWNRFR3JAAABwMbpIckAAAIiOLkpyQAAAoOuiS3JAAAC4SBdNckAAANCli05yQAAA6AIAUHJAAAAAYHRRckAAABi96FJyQAAAMBpdVHJAAABId9FVckAAAGDURVdyQAAAeDG6WHJAAACQji5ackAAAKjroltyQAAAwEgXXXJAAADYpYteckAAAPACAGByQAAACGB0YXJAAAAgvehickAAADgaXWRyQAAAUHfRZXJAAABo1EVnckAAAIAxumhyQAAAmI4uanJAAACw66JrckAAAMhIF21yQAAA4KWLbnJAAAD4AgBwckAAABBgdHFyQAAAKL3ocnJAAABAGl10ckAAAFh30XVyQAAAcNRFd3JAAACIMbp4ckAAAKCOLnpyQAAAuOuie3JAAADQSBd9ckAAAOili35yQAAAAAMAgHJAAAAYYHSBckAAADC96IJyQAAASBpdhHJAAABgd9GFckAAAHjURYdyQAAAkDG6iHJAAACoji6KckAAAMDrootyQAAA2EgXjXJAAADwpYuOckAAAAgDAJByQAAAIGB0kXJAAAA4veiSckAAAFAaXZRyQAAAaHfRlXJAAACA1EWXckAAAJgxuphyQAAAsI4umnJAAADI66KbckAAAOBIF51yQAAA+KWLnnJAAAAQAwCgckAAAChgdKFyQAAAQL3oonJAAABYGl2kckAAAHB30aVyQAAAiNRFp3JAAACgMbqockAAALiOLqpyQAAA0Ouiq3JAAADoSBetckAAAACmi65yQAAAGAMAsHJAAAAwYHSxckAAAEi96LJyQAAAYBpdtHJAAAB4d9G1ckAAAJDURbdyQAAAqDG6uHJAAADAji66ckAAANjrortyQAAA8EgXvXJAAAAIpou+ckAAACADAMByQAAAOGB0wXJAAABQvejCckAAAGgaXcRyQAAAgHfRxXJAAACY1EXHckAAALAxushyQAAAyI4uynJAAADg66LLckAAAPhIF81yQAAAEKaLznJAAAAoAwDQckAAAEBgdNFyQAAAWL3o0nJAAABwGl3UckAAAIh30dVyQAAAoNRF13JAAAC4MbrYckAAANCOLtpyQAAA6Oui23JAAAAASRfdckAAABimi95yQAAAMAMA4HJAAABIYHThckAAAGC96OJyQAAAeBpd5HJA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F+15QAAAoKmL7nlAAAC4BgDweUAAANBjdPF5QAAA6MDo8nlAAAAAHl30eUAAABh70fV5QAAAMNhF93lAAABINbr4eUAAAGCSLvp5QAAAeO+i+3lAAACQTBf9eUAAAKipi/55QAAAwAYAAHpAAADYY3QBekAAAPDA6AJ6QAAACB5dBHpAAAAge9EFekAAADjYRQd6QAAAUDW6CHpAAABoki4KekAAAIDvogt6QAAAmEwXDXpAAACwqYsOekAAAMgGABB6QAAA4GN0EXpAAAD4wOgSekAAABAeXRR6QAAAKHvRFXpAAABA2EUXekAAAFg1uhh6QAAAcJIuGnpAAACI76IbekAAAKBMFx16QAAAuKmLHnpAAADQBgAgekAAAOhjdCF6QAAAAMHoInpAAAAYHl0kekAAADB70SV6QAAASNhFJ3pAAABgNbooekAAAHiSLip6QAAAkO+iK3pAAACoTBctekAAAMCpiy56QAAA2AYAMHpAAADwY3QxekAAAAjB6DJ6QAAAIB5dNHpAAAA4e9E1ekAAAFDYRTd6QAAAaDW6OHpAAACAki46ekAAAJjvojt6QAAAsEwXPXpAAADIqYs+ekAAAOAGAEB6QAAA+GN0QXpAAAAQwehCekAAACgeXUR6QAAAQHvRRXpAAABY2EVHekAAAHA1ukh6QAAAiJIuSnpAAACg76JLekAAALhMF016QAAA0KmLTnpAAADoBgBQekAAAABkdFF6QAAAGMHoUnpAAAAwHl1UekAAAEh70VV6QAAAYNhFV3pAAAB4NbpYekAAAJCSLlp6QAAAqO+iW3pAAADATBddekAAANipi156QAAA8AYAYHpAAAAIZHRhekAAACDB6GJ6QAAAOB5dZHpAAABQe9FlekAAAGjYRWd6QAAAgDW6aHpAAACYki5qekAAALDvomt6QAAAyEwXbXpAAADgqYtuekAAAPgGAHB6QAAAEGR0cXpAAAAowehyekAAAEAeXXR6QAAAWHvRdXpAAABw2EV3ekAAAIg1unh6QAAAoJIuenpAAAC476J7ekAAANBMF316QAAA6KmLfnpAAAAABwCAekAAABhkdIF6QAAAMMHognpAAABIHl2EekAAAGB70YV6QAAAeNhFh3pAAACQNbqIekAAAKiSLop6QAAAwO+ii3pAAADYTBeNekAAAPCpi456QAAACAcAkHpAAAAgZHSRekAAADjB6JJ6QAAAUB5dlHpAAABoe9GVekAAAIDYRZd6QAAAmDW6mHpAAACwki6aekAAAMjvopt6QAAA4EwXnXpAAAD4qYueekAAABAHAKB6QAAAKGR0oXpAAABAweiiekAAAFgeXaR6QAAAcHvRpXpAAACI2EWnekAAAKA1uqh6QAAAuJIuqnpAAADQ76KrekAAAOhMF616QAAAAKqLrnpAAAAYBwCwekAAADBkdLF6QAAASMHosnpAAABgHl20ekAAAHh70bV6QAAAkNhFt3pAAACoNbq4ekAAAMCSLrp6QAAA2O+iu3pAAADwTBe9ekAAAAiqi756QAAAIAcAwHpAAAA4ZHTBekAAAFDB6MJ6QAAAaB5dxHpAAACAe9HFekAAAJjYRcd6QAAAsDW6yHpAAADIki7KekAAAODvost6QAAA+EwXzXpAAAAQqovOekAAACgHANB6QAAAQGR00XpAAABYwejSekAAAHAeXdR6QAAAiHvR1XpAAACg2EXXekAAALg1uth6QAAA0JIu2npAAADo76LbekAAAABNF916QAAAGKqL3npAAAAwBwDgekAAAEhkdOF6QAAAYMHo4npAAAB4Hl3kekAAAJB70eV6QAAAqNhF53pAAADANbroekAAANiSLup6QAAA8O+i63pAAAAITRftekAAACCqi+56QAAAOAcA8HpAAABQZHTxekAAAGjB6PJ6QAAAgB5d9HpAAACYe9H1ekAAALDYRfd6QAAAyDW6+HpAAADgki76ekAAAPjvovt6QAAAEE0X/XpAAAAoqov+ekAAAEAHAAB7QAAAWGR0AXtAAABwwegCe0AAAIgeXQR7QAAAoHvRBXtAAAC42EUHe0AAANA1ugh7QAAA6JIuCntAAAAA8KILe0AAABhNFw17QAAAMKqLDntAAABIBwAQe0AAAGBkdBF7QAAAeMHoEntAAACQHl0Ue0AAAKh70RV7QAAAwNhFF3tAAADYNboYe0AAAPCSLhp7QAAACPCiG3tAAAAgTRcde0AAADiqix57QAAAUAcAIHtAAABoZHQhe0AAAIDB6CJ7QAAAmB5dJHtAAACwe9Ele0AAAMjYRSd7QAAA4DW6KHtAAAD4ki4qe0AAABDwoit7QAAAKE0XLXtAAABAqosue0AAAFgHADB7QAAAcGR0MXtAAACIwegye0AAAKAe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AAAAZ3QRikAAAIyVLhKKQAAAGMToEopAAACk8qITikAAADAhXRSKQAAAvE8XFYpAAABIftEVikAAANSsixaKQAAAYNtFF4pAAADsCQAYikAAAHg4uhiKQAAABGd0GYpAAACQlS4aikAAABzE6BqKQAAAqPKiG4pAAAA0IV0cikAAAMBPFx2KQAAATH7RHYpAAADYrIseikAAAGTbRR+KQAAA8AkAIIpAAAB8OLogikAAAAhndCGKQAAAlJUuIopAAAAgxOgiikAAAKzyoiOKQAAAOCFdJIpAAADETxclikAAAFB+0SWKQAAA3KyLJopAAABo20UnikAAAPQJACiKQAAAgDi6KIpAAAAMZ3QpikAAAJiVLiqKQAAAJMToKopAAACw8qIrikAAADwhXSyKQAAAyE8XLYpAAABUftEtikAAAOCsiy6KQAAAbNtFL4pAAAD4CQAwikAAAIQ4ujCKQAAAEGd0MYpAAACclS4yikAAACjE6DKKQAAAtPKiM4pAAABAIV00ikAAAMxPFzWKQAAAWH7RNYpAAADkrIs2ikAAAHDbRTeKQAAA/AkAOIpAAACIOLo4ikAAABRndDmKQAAAoJUuOopAAAAsxOg6ikAAALjyojuKQAAARCFdPIpAAADQTxc9ikAAAFx+0T2KQAAA6KyLPopAAAB020U/ikAAAAAKAECKQAAAjDi6QIpAAAAYZ3RBikAAAKSVLkKKQAAAMMToQopAAAC88qJDikAAAEghXUSKQAAA1E8XRYpAAABgftFFikAAAOysi0aKQAAAeNtFR4pAAAAECgBIikAAAJA4ukiKQAAAHGd0SYpAAAColS5KikAAADTE6EqKQAAAwPKiS4pAAABMIV1MikAAANhPF02KQAAAZH7RTYpAAADwrItOikAAAHzbRU+KQAAACAoAUIpAAACUOLpQikAAACBndFGKQAAArJUuUopAAAA4xOhSikAAAMTyolOKQAAAUCFdVIpAAADcTxdVikAAAGh+0VWKQAAA9KyLVopAAACA20VXikAAAAwKAFiKQAAAmDi6WIpAAAAkZ3RZikAAALCVLlqKQAAAPMToWopAAADI8qJbikAAAFQhXVyKQAAA4E8XXYpAAABsftFdikAAAPisi16KQAAAhNtFX4pAAAAQCgBgikAAAJw4umCKQAAAKGd0YYpAAAC0lS5iikAAAEDE6GKKQAAAzPKiY4pAAABYIV1kikAAAORPF2WKQAAAcH7RZYpAAAD8rItmikAAAIjbRWeKQAAAFAoAaIpAAACgOLpoikAAACxndGmKQAAAuJUuaopAAABExOhqikAAANDyomuKQAAAXCFdbIpAAADoTxdtikAAAHR+0W2KQAAAAK2LbopAAACM20VvikAAABgKAHCKQAAApDi6cIpAAAAwZ3RxikAAALyVLnKKQAAASMTocopAAADU8qJzikAAAGAhXXSKQAAA7E8XdYpAAAB4ftF1ikAAAASti3aKQAAAkNtFd4pAAAAcCgB4ikAAAKg4uniKQAAANGd0eYpAAADAlS56ikAAAEzE6HqKQAAA2PKie4pAAABkIV18ikAAAPBPF32KQAAAfH7RfYpAAAAIrYt+ikAAAJTbRX+KQAAAIAoAgIpAAACsOLqAikAAADhndIGKQAAAxJUugopAAABQxOiCikAAANzyooOKQAAAaCFdhIpAAAD0TxeFikAAAIB+0YWKQAAADK2LhopAAACY20WHikAAACQKAIiKQAAAsDi6iIpAAAA8Z3SJikAAAMiVLoqKQAAAVMToiopAAADg8qKLikAAAGwhXYyKQAAA+E8XjYpAAACEftGNikAAABCti46KQAAAnNtFj4pAAAAoCgCQikAAALQ4upCKQAAAQGd0kYpAAADMlS6SikAAAFjE6JKKQAAA5PKik4pAAABwIV2UikAAAPxPF5WKQAAAiH7RlYpAAAAUrYuWikAAAKDbRZeKQAAALAoAmIpAAAC4OLqYikAAAERndJmKQAAA0JUumopAAABcxOiaikAAAOjyopuKQAAAdCFdnIpAAAAAUBedikAAAIx+0Z2KQAAAGK2LnopAAACk20WfikAAADAKAKCKQAAAvDi6oIpAAABIZ3ShikAAANSVLqKKQAAAYMTooopAAADs8qKjikAAAHghXaSKQAAABFAXpYpAAACQftGlikAAAByti6aKQAAAqNtFp4pAAAA0CgCoikAAAMA4uqiKQAAATGd0qYpAAADYlS6qikAAAGTE6KqKQAAA8PKiq4pAAAB8IV2sikAAAAhQF62KQAAAlH7RrYpAAAAgrYuuikAAAKzbRa+KQAAAOAoAsIpAAADEOLqwikAAAFBndLGKQAAA3JUusopAAABoxOiyikAAAPTyorOKQAAAgCFdtIpAAAAMUBe1ikAAAJh+0bWKQAAAJK2LtopAAACw20W3ikAAADwKALiKQAAAyDi6uIpAAABUZ3S5ikAAAOCVLrqKQAAAbMTouopAAAD48qK7ikAAAIQhXbyKQAAAEFAXvYpAAACcftG9ikAAACiti76KQAAAtNtFv4pAAABACgDAikAAAMw4usCKQAAAWGd0wYpAAADklS7CikAAAHDE6MKKQAAA/PKiw4pAAACIIV3EikAAABRQF8WKQAAAoH7RxYpAAAAsrYvGikAAALjbRceKQAAARAoAyIpAAADQOLrIikAAAFxndMmKQAAA6JUuyopAAAB0xOjKikAAAADzosuKQAAAjCFdzIpAAAAYUBfNikAAAKR+0c2KQAAAMK2LzopAAAC820XPikAAAEgKANCKQAAA1Di60IpAAABgZ3TRikAAAOyVLtKKQAAAeMTo0opAAAAE86LTikAAAJAhXdSKQAAAHFAX1YpAAACoftHVikAAADSti9aKQAAAwNtF14pAAABMCgDYikAAANg4utiKQAAAZGd02YpAAADwlS7aikAAAHzE6NqKQAAACPOi24pAAACUIV3cikAAACBQF92KQAAArH7R3YpAAAA4rYveikAAAMTbRd+KQAAAUAoA4IpAAADcOLrgikAAAGhndOGKQAAA9JUu4opAAACAxOjiikAAAAzzouOKQAAAmCFd5IpAAAAkUBflikAAALB+0eWKQAAAPK2L5opAAADI20XnikAAAFQKAOiKQAAA4Di66IpAAABsZ3TpikAAAPiVLuqKQAAAhMTo6opAAAAQ86LrikAAAJwhXeyKQAAAKFAX7YpAAAC0ftHtikAAAECti+6KQAAAzNtF74pAAABYCgDwikAAAOQ4uvCKQAAAcGd08YpAAAD8lS7yikAAAIjE6PKKQAAAFPOi84pAAACgIV30ikAAACxQF/WKQAAAuH7R9YpAAABErYv2ikAAANDbRfeKQAAAXAoA+IpAAADoOLr4ikAAAHRndPmKQAAAAJYu+opAAACMxOj6ikAAABjzovuKQAAApCFd/IpAAAAwUBf9ikAAALx+0f2KQAAASK2L/opAAADU20X/ikAAAGAKAACLQAAA7Di6AItAAAB4Z3QBi0AAAASWLgKLQAAAkMToAotAAAAc86IDi0AAAKghXQSLQAAANFAXBYtAAADAftEFi0AAAEyt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AACIOroYm0AAAM5RFxmbQAAAFGl0GZtAAABagNEZm0AAAKCXLhqbQAAA5q6LGptAAAAsxugam0AAAHLdRRubQAAAuPSiG5tAAAD+CwAcm0AAAEQjXRybQAAAijq6HJtAAADQURcdm0AAABZpdB2bQAAAXIDRHZtAAACily4em0AAAOiuix6bQAAALsboHptAAAB03UUfm0AAALr0oh+bQAAAAAwAIJtAAABGI10gm0AAAIw6uiCbQAAA0lEXIZtAAAAYaXQhm0AAAF6A0SGbQAAApJcuIptAAADqrosim0AAADDG6CKbQAAAdt1FI5tAAAC89KIjm0AAAAIMACSbQAAASCNdJJtAAACOOrokm0AAANRRFyWbQAAAGml0JZtAAABggNElm0AAAKaXLiabQAAA7K6LJptAAAAyxugmm0AAAHjdRSebQAAAvvSiJ5tAAAAEDAAom0AAAEojXSibQAAAkDq6KJtAAADWURcpm0AAABxpdCmbQAAAYoDRKZtAAAColy4qm0AAAO6uiyqbQAAANMboKptAAAB63UUrm0AAAMD0oiubQAAABgwALJtAAABMI10sm0AAAJI6uiybQAAA2FEXLZtAAAAeaXQtm0AAAGSA0S2bQAAAqpcuLptAAADwrosum0AAADbG6C6bQAAAfN1FL5tAAADC9KIvm0AAAAgMADCbQAAATiNdMJtAAACUOrowm0AAANpRFzGbQAAAIGl0MZtAAABmgNExm0AAAKyXLjKbQAAA8q6LMptAAAA4xugym0AAAH7dRTObQAAAxPSiM5tAAAAKDAA0m0AAAFAjXTSbQAAAljq6NJtAAADcURc1m0AAACJpdDWbQAAAaIDRNZtAAACuly42m0AAAPSuizabQAAAOsboNptAAACA3UU3m0AAAMb0ojebQAAADAwAOJtAAABSI104m0AAAJg6ujibQAAA3lEXOZtAAAAkaXQ5m0AAAGqA0TmbQAAAsJcuOptAAAD2ros6m0AAADzG6DqbQAAAgt1FO5tAAADI9KI7m0AAAA4MADybQAAAVCNdPJtAAACaOro8m0AAAOBRFz2bQAAAJml0PZtAAABsgNE9m0AAALKXLj6bQAAA+K6LPptAAAA+xug+m0AAAITdRT+bQAAAyvSiP5tAAAAQDABAm0AAAFYjXUCbQAAAnDq6QJtAAADiURdBm0AAAChp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RZObQAAA9PSik5tAAAA6DACUm0AAAIAjXZSbQAAAxjq6lJtAAAAMUheVm0AAAFJpdJWbQAAAmIDRlZtAAADely6Wm0AAACSvi5abQAAAasbolptAAACw3UWXm0AAAPb0opebQAAAPAwAmJtAAACCI12Ym0AAAMg6upibQAAADlIXmZtAAABUaXSZm0AAAJqA0ZmbQAAA4JcumptAAAAmr4uam0AAAGzG6JqbQAAAst1Fm5tAAAD49KKbm0AAAD4MAJybQAAAhCNdnJtAAADKOrqcm0AAABBSF52bQAAAVml0nZtAAACcgNGdm0AAAOKXLp6bQAAAKK+LnptAAABuxuiem0AAALTdRZ+bQAAA+vSin5tAAABADACgm0AAAIYjXaCbQAAAzDq6oJtAAAASUhehm0AAAFhpdKGbQAAAnoDRoZtAAADkly6im0AAACqvi6KbQAAAcMbooptAAAC23UWjm0AAAPz0oqObQAAAQgwApJtAAACII12km0AAAM46uqSbQAAAFFIXpZtAAABaaXSlm0AAAKCA0aWbQAAA5pcupptAAAAsr4umm0AAAHLG6KabQAAAuN1Fp5tAAAD+9KKnm0AAAEQMAKibQAAAiiNdqJtAAADQOrqom0AAABZSF6mbQAAAXGl0qZtAAACigNGpm0AAAOiXLqqbQAAALq+LqptAAAB0xuiqm0AAALrdRaubQAAAAPWiq5tAAABGDACsm0AAAIwjXaybQAAA0jq6rJtAAAAYUhetm0AAAF5pdK2bQAAApIDRrZtAAADqly6um0AAADCvi66bQAAAdsborptAAAC83UWvm0AAAAL1oq+bQAAASAwAsJtAAACOI12wm0AAANQ6urCbQAAAGlIXsZtAAABgaXSxm0AAAKaA0bGbQAAA7JcusptAAAAyr4uym0AAAHjG6LKbQAAAvt1Fs5tAAAAE9aKzm0AAAEoMALSbQAAAkCNdtJtAAADWOrq0m0AAABxSF7WbQAAAYml0tZtAAACogNG1m0AAAO6XLrabQAAANK+LtptAAAB6xui2m0AAAMDdRbebQAAABvWit5tAAABMDAC4m0AAAJIjXbibQAAA2Dq6uJtAAAAeUhe5m0AAAGRpdLmbQAAAqoDRuZtAAADwly66m0AAADavi7qbQAAAfMbouptAAADC3UW7m0AAAAj1orubQAAATgwAvJtA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 @@ -219,21 +259,9 @@ - - + + - - - - - - - - - - - - @@ -241,8 +269,6 @@ - - @@ -253,7 +279,7 @@ ZjGx+bg2dD+CXqWoICyAPwIjQjaj+YY/yxgMm+5ilz9SJ6CJsOGhPzDw3Hu45Kg/YUwNR2q0rz/cnbXbLjSzP79Qravv6bM/oyv+3L3JtD9PJltKg8i3Px6vLSlk1Lo/jMOZX80Bvj9XaA3LjKTAP2XsccyfXMI/+6bDHYK9wj8lzLT9KyvDP7/ERdseqsQ/N8MN+Pwwxj/upJiWa+THP45AvK5fsMk/HdRY1aVZyz8p2GzSWr7LPze2sexcK8w/LiySiW7QzT/ABG7dzVPPP3qFGMJEltA/dQrf6FBz0T8dEA7jW0XSP9VGYm9PfdI/JpUWG+Bv0z+k374OnDPUP1yfTLaUBtU/p7OTwVHy1T/p/temnvLWP87s4E2kIdc/1VsDWyVY1z9qIIMC3BnYP0Kd3x0G4Ng/Hg4lbb252T/0gfdohJHaPxAO41tFbNs/5B+QXue52z8v2vZQtfDbP1MiiV5Gsdw/0akrn+V53T9t5RI0U0feP2q0L7PiLt8/ - + DJ9oSy7bREtwIg9JRZzXSNpN30envf5HEb0NSQ4lZ0uG7R1LtSJPSe653kgxhfJHZqTLR0/0D0jgSotLnGwoS7GXhklf569Iatn1R9noCkil9Q9IiWCGSxT/wkmoxXFJ/5PaSIT+i0ffX+pHULYUSADkqEtivD1LORC5SLdM60etMd5Hv8OPRw+ze0vF2cdKXEp+SXUBGUld+dRHv6EYSIr1mkebVTdLa29LSxTZYUnvwsxI9qKtRxmExEeBOZhH @@ -263,15 +289,15 @@ - - - 10581 - 332162 - - - 651965 - - - 655460 + + + 13647 + 335264 + + + 655100 + + +657279 0 - + \ No newline at end of file diff --git a/doc/code_examples/data/Tutorial_GaussFilter.mzML b/doc/code_examples/data/Tutorial_GaussFilter.mzML index c07af2ae8fb..e6b713b365a 100644 --- a/doc/code_examples/data/Tutorial_GaussFilter.mzML +++ b/doc/code_examples/data/Tutorial_GaussFilter.mzML @@ -1,22 +1,33 @@ + - + + + + + + + + + + + - + - + @@ -29,6 +40,9 @@ + + + @@ -38,8 +52,12 @@ - - + + + + + + @@ -50,7 +68,7 @@ - + @@ -61,9 +79,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -71,7 +119,7 @@ - + @@ -83,7 +131,7 @@ AAAAAAAgjUAAAACgmSGNQAAAAEAzI41AAAAAwMwkjUAAAABgZiaNQAAAAAAAKI1AAAAAoJkpjUAAAABAMyuNQAAAAMDMLI1AAAAAYGYujUAAAAAAADCNQAAAAKCZMY1AAAAAQDMzjUAAAADAzDSNQAAAAGBmNo1AAAAAAAA4jUAAAACgmTmNQAAAAEAzO41AAAAAwMw8jUAAAABgZj6NQAAAAAAAQI1AAAAAoJlBjUAAAABAM0ONQAAAAMDMRI1AAAAAYGZGjUAAAAAAAEiNQAAAAKCZSY1AAAAAQDNLjUAAAADAzEyNQAAAAGBmTo1AAAAAAABQjUAAAACgmVGNQAAAAEAzU41AAAAAwMxUjUAAAABgZlaNQAAAAAAAWI1AAAAAoJlZjUAAAABAM1uNQAAAAMDMXI1AAAAAYGZejUAAAAAAAGCNQAAAAKCZYY1AAAAAQDNjjUAAAADAzGSNQAAAAGBmZo1AAAAAAABojUAAAACgmWmNQAAAAEAza41AAAAAwMxsjUAAAABgZm6NQAAAAAAAcI1AAAAAoJlxjUAAAABAM3ONQAAAAMDMdI1AAAAAYGZ2jUAAAAAAAHiNQAAAAKCZeY1AAAAAQDN7jUAAAADAzHyNQAAAAGBmfo1AAAAAAACAjUAAAACgmYGNQAAAAEAzg41AAAAAwMyEjUAAAABgZoaNQAAAAAAAiI1A - + AAC4QgAAWEMAAJ5CAACWQwAAVUMAABxDAADCQgAAAAAAAGhDAAAAAAAAAAAAAAAAAACCQgAANEIAABJDAAAAAAAAJkMAABhEAAAXRAAAgkMAAAAAAADaQgAAOEIAAAAAAAAiRACwkUUA0oxGAMKFRgBwkUUAgGVEAGAgRQAkCkYAOKFFAIDdRAAAIUQAYAhFAMDhRQAwokUAgGhEAABPQwDAb0QAQPdEACCiRAAAdkMAAAAAAADmQgAAhkMAAA5EAAAgQwAAukIAgIxDAADyQwBAX0QAAOpCAAAAAAAAgkMAAARDAADYQwCAWkQAACNDAAAAAAAAfEMAAJxDAABUQgAAAAAAAAAA @@ -96,7 +144,7 @@ - + @@ -108,7 +156,7 @@ AAAAAAAgjUAAAACgmSGNQAAAAEAzI41AAAAAwMwkjUAAAABgZiaNQAAAAAAAKI1AAAAAoJkpjUAAAABAMyuNQAAAAMDMLI1AAAAAYGYujUAAAAAAADCNQAAAAKCZMY1AAAAAQDMzjUAAAADAzDSNQAAAAGBmNo1AAAAAAAA4jUAAAACgmTmNQAAAAEAzO41AAAAAwMw8jUAAAABgZj6NQAAAAAAAQI1AAAAAoJlBjUAAAABAM0ONQAAAAMDMRI1AAAAAYGZGjUAAAAAAAEiNQAAAAKCZSY1AAAAAQDNLjUAAAADAzEyNQAAAAGBmTo1AAAAAAABQjUAAAACgmVGNQAAAAEAzU41AAAAAwMxUjUAAAABgZlaNQAAAAAAAWI1AAAAAoJlZjUAAAABAM1uNQAAAAMDMXI1AAAAAYGZejUAAAAAAAGCNQAAAAKCZYY1AAAAAQDNjjUAAAADAzGSNQAAAAGBmZo1AAAAAAABojUAAAACgmWmNQAAAAEAza41AAAAAwMxsjUAAAABgZm6NQAAAAAAAcI1AAAAAoJlxjUAAAABAM3ONQAAAAMDMdI1AAAAAYGZ2jUAAAAAAAHiNQAAAAKCZeY1AAAAAQDN7jUAAAADAzHyNQAAAAGBmfo1AAAAAAACAjUAAAACgmYGNQAAAAEAzg41AAAAAwMyEjUAAAABgZoaNQAAAAAAAiI1A - + AAAAAAAAvkIAAKlDAAAsQgAAo0MAAD9DAABUQgAAvEIAAAAAAAAAAAAAAAAAABJDAAAAAAAAAAAAAAAAAAAAAAAAAAAAANBCAACOQgAAAAAAAAAAAACaQgAAfEMAAE1DAACVQwC4nEUAyGtGANgRRgDABEUAgB1EAOAYRQA490UAgHZFAABORAAAEkMAIKFEAIAyRQAA/kQAgMNDAMADRACAz0MAkA9FAGC2RACA9UMAABxCAIAgRADgzEQAgN9DAABIQgAAAAAAABBCAIAgRAAA7EMAAAJDAACgQwAAREMAAKhCAAAAAAAAAAAAANJCAAAAAAAAAAAAAF5DAAA0QgAAAAAAAAAA @@ -118,3 +166,12 @@ + + + 7949 + 10447 + + +12947 +0 + \ No newline at end of file diff --git a/doc/code_examples/data/Tutorial_MorphologicalFilter.mzML b/doc/code_examples/data/Tutorial_MorphologicalFilter.mzML index 661dedab777..476ffd084d8 100644 --- a/doc/code_examples/data/Tutorial_MorphologicalFilter.mzML +++ b/doc/code_examples/data/Tutorial_MorphologicalFilter.mzML @@ -1,22 +1,33 @@ + - + + + + + + + + + + + - + - + @@ -29,6 +40,9 @@ + + + @@ -38,8 +52,12 @@ - - + + + + + + @@ -50,7 +68,7 @@ - + @@ -61,9 +79,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -71,7 +119,7 @@ - + @@ -83,7 +131,7 @@ AAAAAAAgjUAAAACgmSGNQAAAAEAzI41AAAAAwMwkjUAAAABgZiaNQAAAAAAAKI1AAAAAoJkpjUAAAABAMyuNQAAAAMDMLI1AAAAAYGYujUAAAAAAADCNQAAAAKCZMY1AAAAAQDMzjUAAAADAzDSNQAAAAGBmNo1AAAAAAAA4jUAAAACgmTmNQAAAAEAzO41AAAAAwMw8jUAAAABgZj6NQAAAAAAAQI1AAAAAoJlBjUAAAABAM0ONQAAAAMDMRI1AAAAAYGZGjUAAAAAAAEiNQAAAAKCZSY1AAAAAQDNLjUAAAADAzEyNQAAAAGBmTo1AAAAAAABQjUAAAACgmVGNQAAAAEAzU41AAAAAwMxUjUAAAABgZlaNQAAAAAAAWI1AAAAAoJlZjUAAAABAM1uNQAAAAMDMXI1AAAAAYGZejUAAAAAAAGCNQAAAAKCZYY1AAAAAQDNjjUAAAADAzGSNQAAAAGBmZo1AAAAAAABojUAAAACgmWmNQAAAAEAza41AAAAAwMxsjUAAAABgZm6NQAAAAAAAcI1AAAAAoJlxjUAAAABAM3ONQAAAAMDMdI1AAAAAYGZ2jUAAAAAAAHiNQAAAAKCZeY1AAAAAQDN7jUAAAADAzHyNQAAAAGBmfo1AAAAAAACAjUAAAACgmYGNQAAAAEAzg41AAAAAwMyEjUAAAABgZoaNQAAAAAAAiI1A - + AAC4QgAAWEMAAJ5CAACWQwAAVUMAABxDAADCQgAAAAAAAGhDAAAAAAAAAAAAAAAAAACCQgAANEIAABJDAAAAAAAAJkMAABhEAAAXRAAAgkMAAAAAAADaQgAAOEIAAAAAAAAiRACwkUUA0oxGAMKFRgBwkUUAgGVEAGAgRQAkCkYAOKFFAIDdRAAAIUQAYAhFAMDhRQAwokUAgGhEAABPQwDAb0QAQPdEACCiRAAAdkMAAAAAAADmQgAAhkMAAA5EAAAgQwAAukIAgIxDAADyQwBAX0QAAOpCAAAAAAAAgkMAAARDAADYQwCAWkQAACNDAAAAAAAAfEMAAJxDAABUQgAAAAAAAAAA @@ -96,7 +144,7 @@ - + @@ -108,7 +156,7 @@ AAAAAAAgjUAAAACgmSGNQAAAAEAzI41AAAAAwMwkjUAAAABgZiaNQAAAAAAAKI1AAAAAoJkpjUAAAABAMyuNQAAAAMDMLI1AAAAAYGYujUAAAAAAADCNQAAAAKCZMY1AAAAAQDMzjUAAAADAzDSNQAAAAGBmNo1AAAAAAAA4jUAAAACgmTmNQAAAAEAzO41AAAAAwMw8jUAAAABgZj6NQAAAAAAAQI1AAAAAoJlBjUAAAABAM0ONQAAAAMDMRI1AAAAAYGZGjUAAAAAAAEiNQAAAAKCZSY1AAAAAQDNLjUAAAADAzEyNQAAAAGBmTo1AAAAAAABQjUAAAACgmVGNQAAAAEAzU41AAAAAwMxUjUAAAABgZlaNQAAAAAAAWI1AAAAAoJlZjUAAAABAM1uNQAAAAMDMXI1AAAAAYGZejUAAAAAAAGCNQAAAAKCZYY1AAAAAQDNjjUAAAADAzGSNQAAAAGBmZo1AAAAAAABojUAAAACgmWmNQAAAAEAza41AAAAAwMxsjUAAAABgZm6NQAAAAAAAcI1AAAAAoJlxjUAAAABAM3ONQAAAAMDMdI1AAAAAYGZ2jUAAAAAAAHiNQAAAAKCZeY1AAAAAQDN7jUAAAADAzHyNQAAAAGBmfo1AAAAAAACAjUAAAACgmYGNQAAAAEAzg41AAAAAwMyEjUAAAABgZoaNQAAAAAAAiI1A - + AAAAAAAAvkIAAKlDAAAsQgAAo0MAAD9DAABUQgAAvEIAAAAAAAAAAAAAAAAAABJDAAAAAAAAAAAAAAAAAAAAAAAAAAAAANBCAACOQgAAAAAAAAAAAACaQgAAfEMAAE1DAACVQwC4nEUAyGtGANgRRgDABEUAgB1EAOAYRQA490UAgHZFAABORAAAEkMAIKFEAIAyRQAA/kQAgMNDAMADRACAz0MAkA9FAGC2RACA9UMAABxCAIAgRADgzEQAgN9DAABIQgAAAAAAABBCAIAgRAAA7EMAAAJDAACgQwAAREMAAKhCAAAAAAAAAAAAANJCAAAAAAAAAAAAAF5DAAA0QgAAAAAAAAAA @@ -118,3 +166,12 @@ + + + 7989 + 10487 + + +12987 +0 + \ No newline at end of file diff --git a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterHierarchical.h b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterHierarchical.h index fdac17cd15c..5b43d8e597c 100644 --- a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterHierarchical.h +++ b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterHierarchical.h @@ -14,182 +14,182 @@ // #pragma once -#include -#include -#include #include -#include +#include #include #include +#include #include - +#include +#include #include namespace OpenMS { - /** - @brief Hierarchical clustering with generic clustering functions +/** + @brief Hierarchical clustering with generic clustering functions - ClusterHierarchical clusters objects with corresponding distancemethod and clusteringmethod. - @ingroup SpectraClustering - */ - class OPENMS_DLLAPI ClusterHierarchical - { + ClusterHierarchical clusters objects with corresponding distancemethod and clusteringmethod. + @ingroup SpectraClustering +*/ +class OPENMS_DLLAPI ClusterHierarchical +{ private: - - /// the threshold given to the ClusterFunctor - double threshold_; + /// the threshold given to the ClusterFunctor + double threshold_; public: - /// default constructor - ClusterHierarchical() : - threshold_(1.0) - { - } + /// default constructor + ClusterHierarchical(): threshold_(1.0) + { + } - /// copy constructor - ClusterHierarchical(const ClusterHierarchical & source) : - threshold_(source.threshold_) - { - } + /// copy constructor + ClusterHierarchical(const ClusterHierarchical& source): threshold_(source.threshold_) + { + } - /// destructor - virtual ~ClusterHierarchical() - { - } + /// destructor + virtual ~ClusterHierarchical() + { + } - /** - @brief Clustering function + /** + @brief Clustering function - Cluster data using SimilarityComparator and ClusterFunctor. + Cluster data using SimilarityComparator and ClusterFunctor. - Creates a DistanceMatrix (if an empty matrix is passed) and the clustering is started. - Clustering stops if the ClusterHierarchical::threshold_ is reached by the ClusterFunctor. + Creates a DistanceMatrix (if an empty matrix is passed) and the clustering is started. + Clustering stops if the ClusterHierarchical::threshold_ is reached by the ClusterFunctor. - First template parameter is the cluster object type, - Second template parameter is the similarity functor applicable to the type. + First template parameter is the cluster object type, + Second template parameter is the similarity functor applicable to the type. - For example, @ref PeakSpectrum with a @ref PeakSpectrumCompareFunctor. + For example, @ref PeakSpectrum with a @ref PeakSpectrumCompareFunctor. - The similarity functor must provide the similarity calculation with the ()-operator and - yield normalized values in range of [0,1] for the type of < Data >. + The similarity functor must provide the similarity calculation with the ()-operator and + yield normalized values in range of [0,1] for the type of < Data >. - @param data vector of objects to be clustered - @param comparator similarity functor fitting for types in data - @param clusterer a clustermethod implementation, baseclass ClusterFunctor - @param cluster_tree the vector that will hold the BinaryTreeNodes representing the clustering (for further investigation with the ClusterAnalyzer methods) - @param original_distance the DistanceMatrix holding the pairwise distances of the elements in @p data, will be made newly if given size does not fit to the number of elements given in @ data - @see ClusterFunctor, BinaryTreeNode, ClusterAnalyzer - */ - template - void cluster(std::vector & data, - const SimilarityComparator & comparator, - const ClusterFunctor & clusterer, - std::vector & cluster_tree, - DistanceMatrix & original_distance) - { - if (original_distance.dimensionsize() != data.size()) - { - // create distance matrix for data using comparator - original_distance.clear(); - original_distance.resize(data.size(), 1); - for (Size i = 0; i < data.size(); i++) - { - for (Size j = 0; j < i; j++) - { - // distance value is 1-similarity value, since similarity is in range of [0,1] - original_distance.setValueQuick(i, j, 1 - comparator(data[i], data[j])); - } - } - } + @param data Values to be clustered + @param comparator Similarity functor which returns a similarity in [0, 1] for any pair of values in @p data + @param clusterer A cluster method implementation, e.g. SingleLinkage or CompleteLinkage. See base class ClusterFunctor. + @param cluster_tree The vector that will hold the BinaryTreeNodes representing the clustering (for further investigation with the + ClusterAnalyzer methods) + @param original_distance Precomputed DistanceMatrix holding the pairwise distances of the elements in @p data; if empty or wrong size, it will be re-created using @p comparator - // create clustering with ClusterMethod, DistanceMatrix and Data - clusterer(original_distance, cluster_tree, threshold_); - } - - /** - @brief clustering function for binned PeakSpectrum - - A version of the clustering function for PeakSpectra employing binned similarity methods. From the given PeakSpectrum BinnedSpectrum are generated, so the similarity functor @see BinnedSpectrumCompareFunctor can be applied. - - @param data vector of @ref PeakSpectrum s to be clustered - @param comparator a BinnedSpectrumCompareFunctor - @param sz the desired binsize for the @ref BinnedSpectrum s - @param sp the desired binspread for the @ref BinnedSpectrum s - @param offset the desired bins offset for the @ref BinnedSpectrum s - @param clusterer a clustermethod implementation, base class ClusterFunctor - @param cluster_tree the vector that will hold the BinaryTreeNodes representing the clustering (for further investigation with the ClusterAnalyzer methods) - @param original_distance the DistanceMatrix holding the pairwise distances of the elements in @p data, will be made newly if given size does not fit to the number of elements given in @p data - @see ClusterFunctor, BinaryTreeNode, ClusterAnalyzer, BinnedSpectrum, BinnedSpectrumCompareFunctor - - @ingroup SpectraClustering - */ - void cluster(std::vector & data, - const BinnedSpectrumCompareFunctor & comparator, - double sz, - UInt sp, - float offset, - const ClusterFunctor & clusterer, - std::vector & cluster_tree, - DistanceMatrix & original_distance) const + @see ClusterFunctor, BinaryTreeNode, ClusterAnalyzer + */ + template + void cluster(std::vector& data, + const SimilarityComparator& comparator, + const ClusterFunctor& clusterer, + std::vector& cluster_tree, + DistanceMatrix& original_distance) + { + if (original_distance.dimensionsize() != data.size()) { - std::vector binned_data; - binned_data.reserve(data.size()); - - //transform each PeakSpectrum to a corresponding BinnedSpectrum with given settings of size and spread - for (Size i = 0; i < data.size(); i++) - { - //double sz(2), UInt sp(1); - binned_data.emplace_back(data[i], sz, false, sp, offset); - } - - //create distancematrix for data with comparator + // create distance matrix for data using comparator original_distance.clear(); original_distance.resize(data.size(), 1); - - for (Size i = 0; i < binned_data.size(); i++) + for (Size i = 0; i < data.size(); i++) { for (Size j = 0; j < i; j++) { - //distance value is 1-similarity value, since similarity is in range of [0,1] - original_distance.setValue(i, j, 1 - comparator(binned_data[i], binned_data[j])); + // distance value is 1-similarity value, since similarity is in range of [0,1] + original_distance.setValueQuick(i, j, 1 - comparator(data[i], data[j])); } } - - // create Clustering with ClusterMethod, DistanceMatrix and Data - clusterer(original_distance, cluster_tree, threshold_); } - /// get the threshold - double getThreshold() const + // create clustering with ClusterMethod, DistanceMatrix and Data + clusterer(original_distance, cluster_tree, threshold_); + } + + /** + @brief clustering function for binned PeakSpectrum + + A version of the clustering function for PeakSpectra employing binned similarity methods. From the given PeakSpectrum BinnedSpectrum are + generated, so the similarity functor @see BinnedSpectrumCompareFunctor can be applied. + + @param data vector of @ref PeakSpectrum s to be clustered + @param comparator a BinnedSpectrumCompareFunctor + @param sz the desired binsize for the @ref BinnedSpectrum s + @param sp the desired binspread for the @ref BinnedSpectrum s + @param offset the desired bins offset for the @ref BinnedSpectrum s + @param clusterer a clustermethod implementation, base class ClusterFunctor + @param cluster_tree the vector that will hold the BinaryTreeNodes representing the clustering (for further investigation with the + ClusterAnalyzer methods) + @param original_distance the DistanceMatrix holding the pairwise distances of the elements in @p data, will be made newly if given size does not + fit to the number of elements given in @p data + @see ClusterFunctor, BinaryTreeNode, ClusterAnalyzer, BinnedSpectrum, BinnedSpectrumCompareFunctor + + @ingroup SpectraClustering + */ + void cluster(std::vector& data, + const BinnedSpectrumCompareFunctor& comparator, + double sz, + UInt sp, + float offset, + const ClusterFunctor& clusterer, + std::vector& cluster_tree, + DistanceMatrix& original_distance) const + { + std::vector binned_data; + binned_data.reserve(data.size()); + + // transform each PeakSpectrum to a corresponding BinnedSpectrum with given settings of size and spread + for (Size i = 0; i < data.size(); i++) { - return threshold_; + // double sz(2), UInt sp(1); + binned_data.emplace_back(data[i], sz, false, sp, offset); } - /// set the threshold (in terms of distance) - /// The default is 1, i.e. only at similarity 0 the clustering stops. - /// Warning: clustering is not supported by all methods yet (e.g. SingleLinkage does ignore it). - void setThreshold(double x) + // create distancematrix for data with comparator + original_distance.clear(); + original_distance.resize(data.size(), 1); + + for (Size i = 0; i < binned_data.size(); i++) { - threshold_ = x; + for (Size j = 0; j < i; j++) + { + // distance value is 1-similarity value, since similarity is in range of [0,1] + original_distance.setValue(i, j, 1 - comparator(binned_data[i], binned_data[j])); + } } - }; + // create Clustering with ClusterMethod, DistanceMatrix and Data + clusterer(original_distance, cluster_tree, threshold_); + } - /** @brief Exception thrown if clustering is attempted without a normalized compare functor + /// get the threshold + double getThreshold() const + { + return threshold_; + } - due to similarity - distance conversions that are mandatory in some context, compare functors - must return values normalized in the range [0,1] to ensure a clean conversion - */ - class OPENMS_DLLAPI UnnormalizedComparator : - public Exception::BaseException + /// set the threshold (in terms of distance) + /// The default is 1, i.e. only at similarity 0 the clustering stops. + /// Warning: clustering is not supported by all methods yet (e.g. SingleLinkage does ignore it). + void setThreshold(double x) { -public: - UnnormalizedComparator(const char * file, int line, const char * function, const char * message - = "Clustering with unnormalized similarity measurement requested, normalized is mandatory") throw(); - ~UnnormalizedComparator() throw() override; - }; + threshold_ = x; + } +}; -} +/** @brief Exception thrown if clustering is attempted without a normalized compare functor + due to similarity - distance conversions that are mandatory in some context, compare functors + must return values normalized in the range [0,1] to ensure a clean conversion +*/ +class OPENMS_DLLAPI UnnormalizedComparator : public Exception::BaseException +{ +public: + UnnormalizedComparator(const char* file, + int line, + const char* function, + const char* message = "Clustering with unnormalized similarity measurement requested, normalized is mandatory") throw(); + ~UnnormalizedComparator() throw() override; +}; + +} // namespace OpenMS diff --git a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/CompleteLinkage.h b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/CompleteLinkage.h index 30c9517215f..259536a2138 100644 --- a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/CompleteLinkage.h +++ b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/CompleteLinkage.h @@ -8,61 +8,66 @@ // #pragma once -#include -#include -#include - +#include #include #include -#include +#include +#include +#include namespace OpenMS { - /** - @brief CompleteLinkage ClusterMethod +/** + @brief CompleteLinkage ClusterMethod - The details of the method can be found in: - Backhaus, Erichson, Plinke, Weiber Multivariate Analysemethoden, Springer 2000 and - Ellen M. Voorhees: Implementing agglomerative hierarchic clustering algorithms for use in document retrieval. Inf. Process. Manage. 22(6): 465-476 (1986) - @see ClusterFunctor + The details of the method can be found in: + Backhaus, Erichson, Plinke, Weiber Multivariate Analysemethoden, Springer 2000 and + Ellen M. Voorhees: Implementing agglomerative hierarchic clustering algorithms for use in document retrieval. Inf. Process. Manage. 22(6): 465-476 + (1986) + @see ClusterFunctor - @ingroup SpectraClustering - */ - class OPENMS_DLLAPI CompleteLinkage : - public ClusterFunctor, public ProgressLogger - { + @ingroup SpectraClustering +*/ +class OPENMS_DLLAPI CompleteLinkage : public ClusterFunctor, public ProgressLogger +{ public: + /// default constructor + CompleteLinkage(); - /// default constructor - CompleteLinkage(); + /// copy constructor + CompleteLinkage(const CompleteLinkage& source); - /// copy constructor - CompleteLinkage(const CompleteLinkage & source); + /// destructor + ~CompleteLinkage() override; - /// destructor - ~CompleteLinkage() override; + /// assignment operator + CompleteLinkage& operator=(const CompleteLinkage& source); - /// assignment operator - CompleteLinkage & operator=(const CompleteLinkage & source); - - /** - @brief clusters the indices according to their respective element distances + /** + @brief clusters the indices according to their respective element distances - @param original_distance DistanceMatrix containing the distances of the elements to be clustered, will be changed during clustering process, make sure to have a copy or be able to redo - @param cluster_tree vector< BinaryTreeNode >, represents the clustering, each node contains the next merged clusters (not element indices) and their distance, strict order is kept: left_child < right_child - @param threshold float value, the minimal distance from which on cluster merging is considered unrealistic. By default set to 1, i.e. complete clustering until only one cluster remains - @throw ClusterFunctor::InsufficientInput thrown if input is <2 - The clustering method is complete linkage, where the updated distances after merging two clusters are each the maximal distance between the elements of their clusters. After @p threshold is exceeded, @p cluster_tree is filled with dummy clusteringsteps (children: (0,1), distance:-1) to the root. - @see ClusterFunctor , BinaryTreeNode - */ - void operator()(DistanceMatrix & original_distance, std::vector & cluster_tree, const float threshold = 1) const override; + Complete linkage updates the distances after merging two clusters using the maximal distance between the + elements of their clusters. After @p threshold is exceeded, @p cluster_tree is filled with dummy clusteringsteps (children: (0,1), distance:-1) to + the root. - /// creates a new instance of a CompleteLinkage object - static ClusterFunctor * create(); + @param original_distance Contains the distances of the elements to be clustered, will be changed during clustering process, make sure to have a copy + or be able to redo + @param cluster_tree Represents the clustering, each node contains the next merged clusters (not element indices) and their distance, strict order is + kept: left_child < right_child + @param threshold The minimal distance from which on cluster merging is considered unrealistic. By default set to 1, i.e. complete + clustering until only one cluster remains + + @throw ClusterFunctor::InsufficientInput thrown if input is <2. + + @see ClusterFunctor , BinaryTreeNode + */ + void operator()(DistanceMatrix& original_distance, std::vector& cluster_tree, const float threshold = 1) const override; - /// get the identifier for this object - static const String getProductName(); + /// creates a new instance of a CompleteLinkage object + static ClusterFunctor* create(); - }; + /// get the identifier for this object + static const String getProductName(); +}; -} +} // namespace OpenMS diff --git a/src/openms/include/OpenMS/DATASTRUCTURES/DPosition.h b/src/openms/include/OpenMS/DATASTRUCTURES/DPosition.h index 48e65c85ab9..51a88122225 100644 --- a/src/openms/include/OpenMS/DATASTRUCTURES/DPosition.h +++ b/src/openms/include/OpenMS/DATASTRUCTURES/DPosition.h @@ -330,7 +330,7 @@ namespace OpenMS } /// Returns the number of dimensions - static Size size() + constexpr static Size size() { return D; } diff --git a/src/openms/include/OpenMS/DATASTRUCTURES/DistanceMatrix.h b/src/openms/include/OpenMS/DATASTRUCTURES/DistanceMatrix.h index db122e84340..0f6150a4b4a 100644 --- a/src/openms/include/OpenMS/DATASTRUCTURES/DistanceMatrix.h +++ b/src/openms/include/OpenMS/DATASTRUCTURES/DistanceMatrix.h @@ -8,11 +8,11 @@ #pragma once +#include +#include #include #include -#include #include - #include #include #include @@ -21,493 +21,455 @@ namespace OpenMS { - /** - @brief A two-dimensional distance matrix, similar to OpenMS::Matrix - - Similar to OpenMS::Matrix, but contains only elements above the main - diagonal, hence translating access with operator(,) for elements of above - the main diagonal to corresponding elements below the main diagonal and - returning 0 for requested elements in the main diagonal, since - self-distance is assumed to be 0. Keeps track of the minimal element in the - Matrix with OpenMS::DistanceMatrix::min_element_ if only for setting a - value OpenMS::DistanceMatrix::setValue is used. Other - OpenMS::DistanceMatrix altering methods may require a manual update by call - of OpenMS::DistanceMatrix::updateMinElement, see the respective methods - documentation. - - @ingroup Datastructures - */ - template - class DistanceMatrix - { +/** + @brief A two-dimensional distance matrix, similar to OpenMS::Matrix + + Similar to OpenMS::Matrix, but contains only elements above the main + diagonal, hence translating access with operator(,) for elements of above + the main diagonal to corresponding elements below the main diagonal and + returning 0 for requested elements in the main diagonal, since + self-distance is assumed to be 0. Keeps track of the minimal element in the + Matrix with OpenMS::DistanceMatrix::min_element_ if only for setting a + value OpenMS::DistanceMatrix::setValue is used. Other + OpenMS::DistanceMatrix altering methods may require a manual update by call + of OpenMS::DistanceMatrix::updateMinElement, see the respective methods + documentation. + + @ingroup Datastructures +*/ +template +class DistanceMatrix +{ public: + ///@name STL compliance type definitions + //@{ + typedef Value value_type; + //@} - ///@name STL compliance type definitions - //@{ - typedef Value value_type; - //@} - - ///@name OpenMS compliance type definitions - //@{ - typedef Size SizeType; - typedef value_type ValueType; - //@} + ///@name OpenMS compliance type definitions + //@{ + typedef Size SizeType; + typedef value_type ValueType; + //@} - /** @brief default constructor + /** @brief default constructor - */ - DistanceMatrix() : - matrix_(nullptr), init_size_(0), dimensionsize_(0), min_element_(0, 0) - { - } + */ + DistanceMatrix(): matrix_(nullptr), init_size_(0), dimensionsize_(0), min_element_(0, 0) + { + } - /** - @brief detailed constructor + /** + @brief detailed constructor - @param dimensionsize the number of rows (and therewith cols) - @param value DistanceMatrix will be filled with this element (main diagonal will still "hold" only zeros) - @throw Exception::OutOfMemory if requested dimensionsize is to big to fit into memory - */ - DistanceMatrix(SizeType dimensionsize, Value value = Value()) : - matrix_(new ValueType*[dimensionsize]), init_size_(dimensionsize), dimensionsize_(dimensionsize), min_element_(0, 0) + @param dimensionsize the number of rows (and therewith cols) + @param value DistanceMatrix will be filled with this element (main diagonal will still "hold" only zeros) + @throw Exception::OutOfMemory if requested dimensionsize is to big to fit into memory + */ + DistanceMatrix(SizeType dimensionsize, Value value = Value()): + matrix_(new ValueType*[dimensionsize]), + init_size_(dimensionsize), + dimensionsize_(dimensionsize), + min_element_(0, 0) + { + matrix_[0] = NULL; + SizeType i = 1; + for (i = 1; i < dimensionsize; ++i) { - matrix_[0] = NULL; - SizeType i = 1; - for (i = 1; i < dimensionsize; ++i) + matrix_[i] = new ValueType[i]; + if (matrix_[i] == NULL) { - matrix_[i] = new ValueType[i]; - if (matrix_[i] == NULL) + SizeType j = i; + for (i = 1; i < j; i++) { - SizeType j = i; - for (i = 1; i < j; i++) - { - delete[] matrix_[i]; - } - delete[] matrix_; - matrix_ = NULL; - dimensionsize_ = 0; - init_size_ = 0; - throw Exception::OutOfMemory(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, (UInt)((((dimensionsize - 2) * (dimensionsize - 1)) / 2) * sizeof(ValueType))); + delete[] matrix_[i]; } + delete[] matrix_; + matrix_ = NULL; + dimensionsize_ = 0; + init_size_ = 0; + throw Exception::OutOfMemory(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, + (UInt)((((dimensionsize - 2) * (dimensionsize - 1)) / 2) * sizeof(ValueType))); } - if (matrix_ != NULL) + } + if (matrix_ != NULL) + { + for (i = 1; i < dimensionsize; ++i) { - for (i = 1; i < dimensionsize; ++i) + for (SizeType j = 0; j < i; ++j) { - for (SizeType j = 0; j < i; ++j) - { - matrix_[i][j] = value; - } + matrix_[i][j] = value; } - min_element_ = std::make_pair(1, 0); } + min_element_ = std::make_pair(1, 0); } + } - /** - @brief copy constructor + /** + @brief copy constructor - @param source this DistanceMatrix will be copied - @throw Exception::OutOfMemory if requested dimensionsize is to big to fit into memory - */ - DistanceMatrix(const DistanceMatrix& source) : + @param source this DistanceMatrix will be copied + @throw Exception::OutOfMemory if requested dimensionsize is to big to fit into memory + */ + DistanceMatrix(const DistanceMatrix& source): matrix_(new ValueType*[source.dimensionsize_]), init_size_(source.dimensionsize_), dimensionsize_(source.dimensionsize_), min_element_(source.min_element_) + { + matrix_[0] = NULL; + SizeType i = 1; + for (i = 1; i < dimensionsize_; ++i) { - matrix_[0] = NULL; - SizeType i = 1; - for (i = 1; i < dimensionsize_; ++i) - { - matrix_[i] = new ValueType[i]; - if (matrix_[i] == NULL) - { - SizeType j = i; - for (i = 1; i < j; i++) - { - delete[] matrix_[i]; - } - delete[] matrix_; - matrix_ = NULL; - dimensionsize_ = 0; - init_size_ = 0; - min_element_ = std::make_pair(0, 0); - throw Exception::OutOfMemory(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, (UInt)((((dimensionsize_ - 2) * (dimensionsize_ - 1)) / 2) * sizeof(ValueType))); - } - } - if (matrix_ != NULL) + matrix_[i] = new ValueType[i]; + if (matrix_[i] == NULL) { - for (i = 1; i < dimensionsize_; ++i) + SizeType j = i; + for (i = 1; i < j; i++) { - std::copy(source.matrix_[i], source.matrix_[i] + i, matrix_[i]); + delete[] matrix_[i]; } + delete[] matrix_; + matrix_ = NULL; + dimensionsize_ = 0; + init_size_ = 0; + min_element_ = std::make_pair(0, 0); + throw Exception::OutOfMemory(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, + (UInt)((((dimensionsize_ - 2) * (dimensionsize_ - 1)) / 2) * sizeof(ValueType))); } } - - /// destructor - ~DistanceMatrix() + if (matrix_ != NULL) { - for (SizeType i = 1; i < init_size_; i++) + for (i = 1; i < dimensionsize_; ++i) { - delete[] matrix_[i]; + std::copy(source.matrix_[i], source.matrix_[i] + i, matrix_[i]); } - delete[] matrix_; } + } - /** - @brief gets a value at a given position (read only): - - @param i the i-th row - @param j the j-th col - */ - const ValueType operator()(SizeType i, SizeType j) const + /// destructor + ~DistanceMatrix() + { + for (SizeType i = 1; i < init_size_; i++) { - return getValue(i, j); + delete[] matrix_[i]; } + delete[] matrix_; + } - /** - @brief gets a value at a given position (read only): + /** + @brief gets a value at a given position (read only): - @param i the i-th row - @param j the j-th col - */ - ValueType operator()(SizeType i, SizeType j) - { - return getValue(i, j); - } + @param i the i-th row + @param j the j-th col + */ + const ValueType operator()(SizeType i, SizeType j) const + { + return getValue(i, j); + } - /** - @brief gets a value at a given position: + /** + @brief gets a value at a given position (read only): - @param i the i-th row - @param j the j-th col - @throw Exception::OutOfRange if given coordinates are out of range - */ - const ValueType getValue(SizeType i, SizeType j) const - { - if (i >= dimensionsize_ || j >= dimensionsize_) - { - throw Exception::OutOfRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); - } - // elements on main diagonal are not stored and assumed to be 0 - if (i == j) - { - return 0; - } - if (i < j) - { - std::swap(i, j); - } - return (const ValueType)(matrix_[i][j]); - } + @param i the i-th row + @param j the j-th col + */ + ValueType operator()(SizeType i, SizeType j) + { + return getValue(i, j); + } - /** - @brief gets a value at a given position: + /** + @brief gets a value at a given position: - @param i the i-th row - @param j the j-th col - @throw Exception::OutOfRange if given coordinates are out of range - */ - ValueType getValue(SizeType i, SizeType j) - { - if (i >= dimensionsize_ || j >= dimensionsize_) - { - throw Exception::OutOfRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); - } - // elements on main diagonal are not stored and assumed to be 0 - if (i == j) - { - return 0; - } - if (i < j) - { - std::swap(i, j); - } - return matrix_[i][j]; - } + @param i the i-th row + @param j the j-th col + @throw Exception::OutOfRange if given coordinates are out of range + */ + const ValueType getValue(SizeType i, SizeType j) const + { + if (i >= dimensionsize_ || j >= dimensionsize_) { throw Exception::OutOfRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); } + // elements on main diagonal are not stored and assumed to be 0 + if (i == j) { return 0; } + if (i < j) { std::swap(i, j); } + return (const ValueType)(matrix_[i][j]); + } + + /** + @brief gets a value at a given position: - /** - @brief sets a value at a given position: + @param i the i-th row + @param j the j-th col + @throw Exception::OutOfRange if given coordinates are out of range + */ + ValueType getValue(SizeType i, SizeType j) + { + if (i >= dimensionsize_ || j >= dimensionsize_) { throw Exception::OutOfRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); } + // elements on main diagonal are not stored and assumed to be 0 + if (i == j) { return 0; } + if (i < j) { std::swap(i, j); } + return matrix_[i][j]; + } + + /** + @brief sets a value at a given position: - @param i the i-th row - @param j the j-th col - @param value the set-value - @throw Exception::OutOfRange if given coordinates are out of range - */ - void setValue(SizeType i, SizeType j, ValueType value) + @param i the i-th row + @param j the j-th col + @param value the set-value + @throw Exception::OutOfRange if given coordinates are out of range + */ + void setValue(SizeType i, SizeType j, ValueType value) + { + if (i >= dimensionsize_ || j >= dimensionsize_) { throw Exception::OutOfRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); } + // elements on main diagonal are not stored and assumed to be 0 + if (i != j) { - if (i >= dimensionsize_ || j >= dimensionsize_) + if (i < j) { std::swap(i, j); } + if (i != min_element_.first && j != min_element_.second) { - throw Exception::OutOfRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); - } - // elements on main diagonal are not stored and assumed to be 0 - if (i != j) - { - if (i < j) - { - std::swap(i, j); - } - if (i != min_element_.first && j != min_element_.second) + matrix_[i][j] = value; + if (value < matrix_[min_element_.first][min_element_.second]) // keep min_element_ up-to-date { - matrix_[i][j] = value; - if (value < matrix_[min_element_.first][min_element_.second]) // keep min_element_ up-to-date - { - min_element_ = std::make_pair(i, j); - } + min_element_ = std::make_pair(i, j); } + } + else + { + if (value <= matrix_[min_element_.first][min_element_.second]) { matrix_[i][j] = value; } else { - if (value <= matrix_[min_element_.first][min_element_.second]) - { - matrix_[i][j] = value; - } - else - { - matrix_[i][j] = value; - updateMinElement(); - } + matrix_[i][j] = value; + updateMinElement(); } } } + } - /** - @brief sets a value at a given position: + /** + @brief sets a value at a given position: - @param i the i-th row - @param j the j-th col - @param value the set-value - @throw Exception::OutOfRange if given coordinates are out of range + @param i the i-th row + @param j the j-th col + @param value the set-value + @throw Exception::OutOfRange if given coordinates are out of range - possible invalidation of min_element_ - make sure to update before further usage of matrix - */ - void setValueQuick(SizeType i, SizeType j, ValueType value) + possible invalidation of min_element_ - make sure to update before further usage of matrix + */ + void setValueQuick(SizeType i, SizeType j, ValueType value) + { + if (i >= dimensionsize_ || j >= dimensionsize_) { throw Exception::OutOfRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); } + // elements on main diagonal are not stored and assumed to be 0 + if (i != j) { - if (i >= dimensionsize_ || j >= dimensionsize_) - { - throw Exception::OutOfRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); - } - // elements on main diagonal are not stored and assumed to be 0 - if (i != j) - { - if (i < j) - { - std::swap(i, j); - } - matrix_[i][j] = value; - } + if (i < j) { std::swap(i, j); } + matrix_[i][j] = value; } + } - /// reset all - void clear() + /// reset all + void clear() + { + for (SizeType i = 1; i < init_size_; i++) { - for (SizeType i = 1; i < init_size_; i++) - { - delete[] matrix_[i]; - } - delete[] matrix_; - matrix_ = nullptr; - min_element_ = std::make_pair(0, 0); - dimensionsize_ = 0; - init_size_ = 0; + delete[] matrix_[i]; } + delete[] matrix_; + matrix_ = nullptr; + min_element_ = std::make_pair(0, 0); + dimensionsize_ = 0; + init_size_ = 0; + } - /** - @brief resizing the container + /** + @brief resizing the container - @param dimensionsize the desired number of rows (and therewith cols) - @param value which the matrix will be filled with - @throw Exception::OutOfMemory thrown if size of DistanceMatrix requested does not fit into memory + @param dimensionsize the desired number of rows (and therewith cols) + @param value which the matrix will be filled with + @throw Exception::OutOfMemory thrown if size of DistanceMatrix requested does not fit into memory - invalidates all content - */ - void resize(SizeType dimensionsize, Value value = Value()) + invalidates all content + */ + void resize(SizeType dimensionsize, Value value = Value()) + { + for (SizeType j = 1; j < init_size_; j++) { - for (SizeType j = 1; j < init_size_; j++) - { - delete[] matrix_[j]; - } - delete[] matrix_; - dimensionsize_ = dimensionsize; - init_size_ = dimensionsize; - min_element_ = std::make_pair(0, 0); - matrix_ = new ValueType*[dimensionsize_]; - for (SizeType j = 1; j < dimensionsize_; ++j) + delete[] matrix_[j]; + } + delete[] matrix_; + dimensionsize_ = dimensionsize; + init_size_ = dimensionsize; + min_element_ = std::make_pair(0, 0); + matrix_ = new ValueType*[dimensionsize_]; + for (SizeType j = 1; j < dimensionsize_; ++j) + { + matrix_[j] = new ValueType[j]; + if (matrix_[j] == nullptr) { - matrix_[j] = new ValueType[j]; - if (matrix_[j] == nullptr) + for (SizeType k = 1; k < j; ++k) { - for (SizeType k = 1; k < j; ++k) - { - delete[] matrix_[k]; - } - delete[] matrix_; - matrix_ = nullptr; - dimensionsize_ = 0; - init_size_ = 0; - throw Exception::OutOfMemory(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, (UInt)((((dimensionsize_ - 2) * (dimensionsize_ - 1)) / 2) * sizeof(Value))); + delete[] matrix_[k]; } + delete[] matrix_; + matrix_ = nullptr; + dimensionsize_ = 0; + init_size_ = 0; + throw Exception::OutOfMemory(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, + (UInt)((((dimensionsize_ - 2) * (dimensionsize_ - 1)) / 2) * sizeof(Value))); } - if (matrix_ != nullptr) + } + if (matrix_ != nullptr) + { + for (SizeType j = 0; j < dimensionsize; ++j) { - for (SizeType j = 0; j < dimensionsize; ++j) + for (SizeType k = 0; k < j; ++k) { - for (SizeType k = 0; k < j; ++k) - { - matrix_[j][k] = value; - } + matrix_[j][k] = value; } - min_element_ = std::make_pair(1, 0); } + min_element_ = std::make_pair(1, 0); } + } - /** - @brief reduces DistanceMatrix by one dimension. first the jth row, then jth column + /** + @brief reduces DistanceMatrix by one dimension. first the jth row, then jth column - @param j the jth row (and therewith also jth col) to be removed - @throw Exception::OutOfRange if @p j is grater than the greatest row number + @param j the jth row (and therewith also jth col) to be removed + @throw Exception::OutOfRange if @p j is grater than the greatest row number - May invalidates min_element_, make sure to update min_element_ if necessary before used - */ - void reduce(SizeType j) + May invalidates min_element_, make sure to update min_element_ if necessary before used + */ + void reduce(SizeType j) + { + if (j >= dimensionsize_) { throw Exception::OutOfRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); } + // delete row j and therefor overwrite with row j+1 and iterate like this to last row + SizeType i = j + 1; + while (i < dimensionsize_ && matrix_[i] != nullptr) { - if (j >= dimensionsize_) - { - throw Exception::OutOfRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); - } - //delete row j and therefor overwrite with row j+1 and iterate like this to last row - SizeType i = j + 1; - while (i < dimensionsize_ && matrix_[i] != nullptr) - { - //left out in the copy is each rows jth element, pointer working here as iterators just fine - std::copy(matrix_[i] + j + 1, matrix_[i] + i, std::copy(matrix_[i], matrix_[i] + j, matrix_[i - 1])); - ++i; - } - //last row is freed and the pointer set to NULL (outer array's size is not changed) - delete[] matrix_[i - 1]; - matrix_[i - 1] = nullptr; - --dimensionsize_; + // left out in the copy is each rows jth element, pointer working here as iterators just fine + std::copy(matrix_[i] + j + 1, matrix_[i] + i, std::copy(matrix_[i], matrix_[i] + j, matrix_[i - 1])); + ++i; } + // last row is freed and the pointer set to NULL (outer array's size is not changed) + delete[] matrix_[i - 1]; + matrix_[i - 1] = nullptr; + --dimensionsize_; + } - /// gives the number of rows (i.e. number of columns) - SizeType dimensionsize() const - { - return dimensionsize_; - } + /// gives the number of rows (i.e. number of columns) + SizeType dimensionsize() const + { + return dimensionsize_; + } - /** - @brief keep track of the actual minimum element after altering the matrix + /** + @brief keep track of the actual minimum element after altering the matrix - @throw Exception::OutOfRange thrown if there is no element to access - */ - void updateMinElement() + @throw Exception::OutOfRange thrown if there is no element to access + */ + void updateMinElement() + { + min_element_ = std::make_pair(1, 0); + // error if dimensionsize_<1, return if dimensionsize_ == 1, else + if (dimensionsize_ < 1) { throw Exception::OutOfRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); } + if (dimensionsize_ != 1) // else matrix has one element: (1,0) { - min_element_ = std::make_pair(1, 0); - //error if dimensionsize_<1, return if dimensionsize_ == 1, else - if (dimensionsize_ < 1) - { - throw Exception::OutOfRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); - } - if (dimensionsize_ != 1) //else matrix has one element: (1,0) + ValueType* row_min_; + for (SizeType r = 2; r < dimensionsize_ && matrix_[r] != nullptr; ++r) { - ValueType* row_min_; - for (SizeType r = 2; r < dimensionsize_ && matrix_[r] != nullptr; ++r) - { - row_min_ = std::min_element(matrix_[r], matrix_[r] + r); - if (*row_min_ < matrix_[min_element_.first][min_element_.second]) - { - min_element_ = std::make_pair(r, row_min_ - matrix_[r]); - } - } + row_min_ = std::min_element(matrix_[r], matrix_[r] + r); + if (*row_min_ < matrix_[min_element_.first][min_element_.second]) { min_element_ = std::make_pair(r, row_min_ - matrix_[r]); } } } + } - /** - @brief Equality comparator. + /** + @brief Equality comparator. - @throw Exception::Precondition thrown if given DistanceMatrix is not compatible in size - */ - bool operator==(DistanceMatrix const& rhs) const + @throw Exception::Precondition thrown if given DistanceMatrix is not compatible in size + */ + bool operator==(DistanceMatrix const& rhs) const + { + OPENMS_PRECONDITION(dimensionsize_ == rhs.dimensionsize_, "DistanceMatrices have different sizes."); + for (Size i = 1; i < rhs.dimensionsize(); ++i) { - OPENMS_PRECONDITION(dimensionsize_ == rhs.dimensionsize_, "DistanceMatrices have different sizes."); - for (Size i = 1; i < rhs.dimensionsize(); ++i) + for (Size j = 0; j < i; ++j) { - for (Size j = 0; j < i; ++j) - { - if (matrix_[i][j] != rhs.matrix_[i][j]) - { - return false; - } - } + if (matrix_[i][j] != rhs.matrix_[i][j]) { return false; } } - return true; } + return true; + } - /** - @brief Indexpair of minimal element + /** + @brief Indexpair of minimal element - @throw Exception::OutOfRange thrown if there is no element to access - */ - std::pair getMinElementCoordinates() const - { - if (dimensionsize_ == 0) - { - throw Exception::OutOfRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); - } - return min_element_; - } + @throw Exception::OutOfRange thrown if there is no element to access + */ + std::pair getMinElementCoordinates() const + { + if (dimensionsize_ == 0) { throw Exception::OutOfRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); } + return min_element_; + } protected: - /// sparse element not to be included in base container - ValueType** matrix_; - /// number of actually stored rows - SizeType init_size_; // actual size of outer array - /// number of accessibly stored rows (i.e. number of columns) - SizeType dimensionsize_; //number of virtual elements: ((dimensionsize-1)*(dimensionsize))/2 - /// index of minimal element(i.e. number in underlying SparseVector) - std::pair min_element_; + /// sparse element not to be included in base container + ValueType** matrix_; + /// number of actually stored rows + SizeType init_size_; // actual size of outer array + /// number of accessibly stored rows (i.e. number of columns) + SizeType dimensionsize_; // number of virtual elements: ((dimensionsize-1)*(dimensionsize))/2 + /// index of minimal element(i.e. number in underlying SparseVector) + std::pair min_element_; private: - /// assignment operator (unsafe) - DistanceMatrix& operator=(const DistanceMatrix& rhs) - { - matrix_ = rhs.matrix_; - init_size_ = rhs.init_size_; - dimensionsize_ = rhs.dimensionsize_; - min_element_ = rhs.min_element_; + /// assignment operator (unsafe) + DistanceMatrix& operator=(const DistanceMatrix& rhs) + { + matrix_ = rhs.matrix_; + init_size_ = rhs.init_size_; + dimensionsize_ = rhs.dimensionsize_; + min_element_ = rhs.min_element_; - return *this; - } + return *this; + } - }; // class DistanceMatrix +}; // class DistanceMatrix - /** - @brief Print the contents to a stream. +/** + @brief Print the contents to a stream (and colors the diagonal, if the stream is cout/cerr) - @relatesalso DistanceMatrix - */ - template - std::ostream& operator<<(std::ostream& os, const DistanceMatrix& matrix) - { - typedef typename DistanceMatrix::SizeType SizeType; + @relatesalso DistanceMatrix +*/ +template +std::ostream& operator<<(std::ostream& os, const DistanceMatrix& matrix) +{ + using SizeType = DistanceMatrix::SizeType; - std::ios_base::fmtflags flag_backup = os.setf(std::ios::scientific); - std::streamsize precision_backup = os.precision(); - //~ os.precision(15); - os.precision(writtenDigits(0.0)); // #include + // we need to print a square matrix. So we set the width + //std::ios_base::fmtflags flag_backup = os.setf(std::ios::scientific); // 'scientific' messes with the width; don't do it + std::streamsize precision_backup = os.precision(6); // we could go with `writtenDigits(Value())`, but it becomes unreadable... + auto width_backup = os.width(8); - //evtl. color lower triangular matrix o.s.l.t. - for (SizeType i = 0; i < matrix.dimensionsize(); ++i) + for (SizeType i = 0; i < matrix.dimensionsize(); ++i) + { + for (SizeType j = 0; j < matrix.dimensionsize(); ++j) { - for (SizeType j = 0; j < matrix.dimensionsize(); ++j) + if (i == j) + { // color the diagonal in red (conditional, see Colorizer) + os << red(matrix(i, j)) << '\t'; + } + else { os << matrix(i, j) << '\t'; } - os << std::endl; } - os.flags(flag_backup); - os.precision(precision_backup); - return os; + os << '\n'; } + //os.flags(flag_backup); + os.precision(precision_backup); + os.width(width_backup); + return os; +} } // namespace OpenMS - From 988991f19b5c5da6f49cd52a02d036dfdb8388c9 Mon Sep 17 00:00:00 2001 From: Julianus Pfeuffer Date: Fri, 9 Feb 2024 15:35:21 +0100 Subject: [PATCH 135/242] Add KNIME pacakge support for arm --- cmake/knime_package_support.cmake | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/cmake/knime_package_support.cmake b/cmake/knime_package_support.cmake index 52c77928bde..cb330e1ea0a 100644 --- a/cmake/knime_package_support.cmake +++ b/cmake/knime_package_support.cmake @@ -107,6 +107,25 @@ else() set(ARCH "32") endif() +if(APPLE) + set(MACOS_TARGET_ARCHS ${CMAKE_OSX_ARCHITECTURES}) + if (NOT MACOS_TARGET_ARCHS) + # Warning: if cmake is a subprocess of a process that is run under Rosetta, + # it will yield x86_64 (but probably also build for it. Therefore it should be fine.) + set(MACOS_TARGET_ARCHS ${CMAKE_HOST_SYSTEM_PROCESSOR}) + endif() + # Name according to GenericKNIMENodes specification + if (MACOS_TARGET_ARCHS STREQUAL "x86_64") + set(ARCH "64") + elseif (MACOS_TARGET_ARCHS STREQUAL "arm64") + set(ARCH "arm64") + elseif ("x86_64" IN_LIST MACOS_TARGET_ARCHS AND "arm64" IN_LIST MACOS_TARGET_ARCHS) + set(ARCH "universal") + else () + message(ERROR "Couldn't determine MACOS_TARGET_ARCHS.") + endif() +endif() + set(PLATFORM "") if (APPLE) set(PLATFORM "mac") From d638d894844c156f15c1d24e981a3b88f9292b88 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Sat, 10 Feb 2024 13:00:05 +0100 Subject: [PATCH 136/242] remove upload-url stuff --- .github/workflows/openms_ci_matrix_full.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 088f4950b68..72610d61e70 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -487,7 +487,6 @@ jobs: runs-on: ubuntu-latest needs: build-and-test outputs: - upload_url: ${{ steps.create_release.outputs.upload_url }} release_text_contents: ${{ steps.mk_release_txt.outputs.release_text_contents }} @@ -968,7 +967,6 @@ jobs: if: inputs.announce_release shell: bash run: | - OPENMS_RELEASE_URL= ${{ needs.deploy-installer.outputs.upload_url }} cp release${{ needs.build-and-test.outputs.version_number }}.md OpenMS-website/content/en/news/ echo ${{ needs.deploy-installer.outputs.release_text_contents }} >> OpenMS-website/content/en/news/release${{ needs.build-and-test.outputs.version_number }}.md pushd OpenMS-website From dce3b52d249967d8308f5399596b9d2c9f2fc6a7 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Sat, 10 Feb 2024 13:47:33 +0100 Subject: [PATCH 137/242] tidy --- .github/workflows/openms_ci_matrix_full.yml | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index beba8f17e0d..7db9207d2c2 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -208,7 +208,6 @@ jobs: fi fi - - name: Emulate a Visual Studio shell (Windows) if: startsWith(matrix.os, 'windows') uses: egor-tensin/vs-shell@v2 @@ -216,8 +215,8 @@ jobs: # NOTE: x64 is hardcoded. No support for 32bit arch: x64 - - if: startsWith(matrix.os, 'windows') - name: Install Qt (Windows) + - name: Install Qt (Windows) + if: startsWith(matrix.os, 'windows') uses: jurplel/install-qt-action@v3 with: version: '5.15.2' # 5.12.7 is broken https://bugreports.qt.io/browse/QTBUG-81715, > 5.15.2 is not available on official archives (https://github.com/miurahr/aqtinstall/issues/636) @@ -275,16 +274,16 @@ jobs: fi fi - - if: startsWith(matrix.os, 'windows') - name: Cache contrib (Windows) + - name: Cache contrib (Windows) + if: startsWith(matrix.os, 'windows') id: cache-contrib uses: actions/cache@v4 with: path: ${{ github.workspace }}/OpenMS/contrib key: ${{ runner.os }}-contrib3 - - if: startsWith(matrix.os, 'windows') && steps.cache-contrib.outputs.cache-hit != 'true' - name: Download contrib build from archive (Windows) + - name: Download contrib build from archive (Windows) + if: startsWith(matrix.os, 'windows') && steps.cache-contrib.outputs.cache-hit != 'true' shell: bash run: | cd OpenMS/contrib @@ -375,7 +374,7 @@ jobs: OPENMP: "ON" BOOST_USE_STATIC: ${{ steps.set-vars.outputs.static_boost }} # BUILD_FLAGS: "-p:CL_MPCount=2" # For VS Generator and MSBuild - BUILD_FLAGS: "-j${{ steps.cpu-cores.outputs.count }}" # Ninja will otherwise use all cores (doesn't go well in GHA). TODO make dependent on runner + BUILD_FLAGS: "-j${{ steps.cpu-cores.outputs.count }}" # Ninja will otherwise use all cores (doesn't go well in GHA). CMAKE_CCACHE_EXE: "ccache" CCACHE_BASEDIR: ${{ github.workspace }} CCACHE_DIR: ${{ github.workspace }}/.ccache @@ -588,7 +587,7 @@ jobs: with: bodyFile: RELEASE_TEXT_GH.md tag: ${{ env.RUN_NAME }} - draft: true #FIXME revert + draft: true artifactErrorsFailBuild: true makeLatest: ${{ inputs.mark_as_latest }} artifacts: @@ -634,7 +633,7 @@ jobs: echo "$PASS" > ~/.ssh/private.key sudo chmod 600 ~/.ssh/private.key - # Upload documentation FIXME + # Upload documentation rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" $GITHUB_WORKSPACE/docs/ "$USER@$HOST:/Documentation/${folder}" - name: Make documentation latest @@ -927,7 +926,6 @@ jobs: #FIXME reenable these after we get the correct access permissions #createGitTag genericworkflownodes/de.openms.knime.dynamicJSViewers $JSViewer_SHA || updateGitTag genericworkflownodes/de.openms.knime.dynamicJSViewers $GKN_SHA - #createGitTag genericworkflownodes/GenericKnimeNodes $GKN_SHA || updateGitTag genericworkflownodes/GenericKnimeNodes $GKN_SHA - name: Merge to Develop if: inputs.mark_as_latest From 7251f47136d6474926457159d1f983d6c16a108e Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Sat, 10 Feb 2024 13:53:22 +0100 Subject: [PATCH 138/242] fix incorrectly escaped naming for upload artifact --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 7db9207d2c2..88d344739a2 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -426,7 +426,7 @@ jobs: if: steps.set-vars.outputs.pkg_type != 'none' uses: actions/upload-artifact@v4 with: - name: format('installer-{0}{1}', steps.set-vars.outputs.tp_folder, runner.arch == 'arm64' && '-arm64' || '') + name: ${{ format('installer-{0}{1}', steps.set-vars.outputs.tp_folder, runner.arch == 'arm64' && '-arm64' || '') }} path: | ${{ github.workspace }}/OpenMS/bld/*.exe ${{ github.workspace }}/OpenMS/bld/*.deb From 27c5ff2494b7c43809405aceab0cbd8f8b70e34b Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Sat, 10 Feb 2024 14:15:31 +0100 Subject: [PATCH 139/242] added creating a src archive and uploading it as part of the release --- .github/workflows/openms_ci_matrix_full.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 88d344739a2..122facb5114 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -441,6 +441,16 @@ jobs: directory: ${{ github.workspace }}/OpenMS/bld/doc exclusions: '/CMakeFiles/* /doxygen/* /code_examples/*' filename: 'documentation.zip' + + #Zip the source + - name: Zip source + if: steps.set-vars.outputs.pkg_type != 'none' && startsWith(matrix.os, 'ubuntu') + uses: thedoctor0/zip-release@0.7.6 + with: + type: 'tar' + directory: ${{ github.workspace }}/OpenMS + exclusions: '/bld/*' + filename: 'source.tar.gz' # Only upload docs when we are building the package, use the ubuntu build simply 'cause its fast @@ -489,10 +499,12 @@ jobs: uses: actions/download-artifact@v4 with: name: installer-MacOS + - name: Download macOS Silicon installer artifacts uses: actions/download-artifact@v4 with: name: installer-MacOS-arm64 + - name: Download win installer artifacts uses: actions/download-artifact@v4 with: From 9524bb9045ba9d28091fa1a9ffe5aa64bc586213 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Sat, 10 Feb 2024 15:08:25 +0100 Subject: [PATCH 140/242] fixed (hopefully) --- .github/workflows/openms_ci_matrix_full.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 122facb5114..2bcdd4e652c 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -515,6 +515,11 @@ jobs: with: name: installer-Linux + - name: Download source archive as artifact + uses: actions/download-artifact@v4 + with: + name: source.tar.gz + - name: Download changelog as artifact uses: actions/download-artifact@v4 with: @@ -603,8 +608,7 @@ jobs: artifactErrorsFailBuild: true makeLatest: ${{ inputs.mark_as_latest }} artifacts: - ${{ github.workspace }}/*.exe, ${{ github.workspace }}/*.deb, ${{ github.workspace }}/*.pkg - # TODO add src + ${{ github.workspace }}/*.exe, ${{ github.workspace }}/*.deb, ${{ github.workspace }}/*.pkg, ${{ github.workspace }}/*.tar.gz deploy-docs: @@ -972,7 +976,6 @@ jobs: if: inputs.announce_release shell: bash run: | - cp release${{ needs.build-and-test.outputs.version_number }}.md OpenMS-website/content/en/news/ echo ${{ needs.deploy-installer.outputs.release_text_contents }} >> OpenMS-website/content/en/news/release${{ needs.build-and-test.outputs.version_number }}.md pushd OpenMS-website git checkout -b "releaseannouncement${{ needs.build-and-test.outputs.version_number }}" From dd63213e630a24bef68e3e8b666f90e7deac0d7e Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Sat, 10 Feb 2024 16:40:36 +0100 Subject: [PATCH 141/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 2bcdd4e652c..e52798cee27 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -449,7 +449,7 @@ jobs: with: type: 'tar' directory: ${{ github.workspace }}/OpenMS - exclusions: '/bld/*' + exclusions: './bld/* .' filename: 'source.tar.gz' # Only upload docs when we are building the package, use the ubuntu build simply 'cause its fast From 7cc77a9536c8825721247fe6a99986e91e5ecbce Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Sat, 10 Feb 2024 17:17:59 +0100 Subject: [PATCH 142/242] Update openms_ci_matrix_full.yml actually upload the artifact --- .github/workflows/openms_ci_matrix_full.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index e52798cee27..1be1c7556dc 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -449,9 +449,21 @@ jobs: with: type: 'tar' directory: ${{ github.workspace }}/OpenMS - exclusions: './bld/* .' + exclusions: './bld/* ./source.tar.gz' filename: 'source.tar.gz' + + + # Upload the source tar + - name: Upload source tar as artifact + if: steps.set-vars.outputs.pkg_type != 'none' && startsWith(matrix.os, 'ubuntu') + uses: actions/upload-artifact@v4 + with: + name: source.tar.gz + path: | + ${{ github.workspace }}/source.tar.gz + + # Only upload docs when we are building the package, use the ubuntu build simply 'cause its fast - name: Upload Documentation as artifacts From 579940aff2700645a3bb3c3e6ee7be6c9735b61c Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Sat, 10 Feb 2024 17:32:22 +0100 Subject: [PATCH 143/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 1be1c7556dc..946d5757e2a 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -448,7 +448,8 @@ jobs: uses: thedoctor0/zip-release@0.7.6 with: type: 'tar' - directory: ${{ github.workspace }}/OpenMS + directory: ${{ github.workspace }} + path: OpenMS exclusions: './bld/* ./source.tar.gz' filename: 'source.tar.gz' From 4bd8c01487d330c66dbbfe3a3141628f0d412961 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Sat, 10 Feb 2024 19:27:32 +0100 Subject: [PATCH 144/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 946d5757e2a..0784cae6d8d 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -450,7 +450,7 @@ jobs: type: 'tar' directory: ${{ github.workspace }} path: OpenMS - exclusions: './bld/* ./source.tar.gz' + exclusions: '${{ github.workspace }}/bld/* ./source.tar.gz ${{ github.workspace }}/THIRDPARTY/* ${{ github.workspace }}/.git/*' filename: 'source.tar.gz' From 87299cf3202c4aff8aac5bf62f299f3299d42fae Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Sat, 10 Feb 2024 19:40:50 +0100 Subject: [PATCH 145/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 0784cae6d8d..9279d0463b1 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -450,7 +450,7 @@ jobs: type: 'tar' directory: ${{ github.workspace }} path: OpenMS - exclusions: '${{ github.workspace }}/bld/* ./source.tar.gz ${{ github.workspace }}/THIRDPARTY/* ${{ github.workspace }}/.git/*' + exclusions: '/bld/* ./source.tar.gz /THIRDPARTY/* /.git/*' filename: 'source.tar.gz' From 7feb640da2dd5168bb561cb46fbace9c1092e427 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Sat, 10 Feb 2024 19:53:24 +0100 Subject: [PATCH 146/242] Update openms_ci_matrix_full.yml If there was any documentation as to what directory exclusions were relative to it would make this a hell of a lot easier. --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 9279d0463b1..cd106bb322e 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -450,7 +450,7 @@ jobs: type: 'tar' directory: ${{ github.workspace }} path: OpenMS - exclusions: '/bld/* ./source.tar.gz /THIRDPARTY/* /.git/*' + exclusions: 'bld/* ./source.tar.gz THIRDPARTY/* .git/*' filename: 'source.tar.gz' From 42ceb92371d5c33a587407ea98b2952068dd928b Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Sat, 10 Feb 2024 20:52:36 +0100 Subject: [PATCH 147/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index cd106bb322e..33761d201b9 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -989,7 +989,7 @@ jobs: if: inputs.announce_release shell: bash run: | - echo ${{ needs.deploy-installer.outputs.release_text_contents }} >> OpenMS-website/content/en/news/release${{ needs.build-and-test.outputs.version_number }}.md + echo '${{ needs.deploy-installer.outputs.release_text_contents }}' >> OpenMS-website/content/en/news/release${{ needs.build-and-test.outputs.version_number }}.md pushd OpenMS-website git checkout -b "releaseannouncement${{ needs.build-and-test.outputs.version_number }}" git add content/en/news/release${{ needs.build-and-test.outputs.version_number }}.md From 5dbdfa2dbcbb1e27102bcee5ee122370718fe501 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Sat, 10 Feb 2024 21:52:43 +0100 Subject: [PATCH 148/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 33761d201b9..eef2e43bdeb 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -984,6 +984,7 @@ jobs: uses: actions/checkout@v4 with: path: OpenMS-website + repository: OpenMS/OpenMS-website - name: create text for website and update it. if: inputs.announce_release From ed888ad29793124bc9ca8bfe33e8153e0ecd10cf Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Sun, 11 Feb 2024 12:07:59 +0100 Subject: [PATCH 149/242] add user.email and user.name --- .github/workflows/openms_ci_matrix_full.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index eef2e43bdeb..a0a2001e634 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -992,6 +992,8 @@ jobs: run: | echo '${{ needs.deploy-installer.outputs.release_text_contents }}' >> OpenMS-website/content/en/news/release${{ needs.build-and-test.outputs.version_number }}.md pushd OpenMS-website + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" git checkout -b "releaseannouncement${{ needs.build-and-test.outputs.version_number }}" git add content/en/news/release${{ needs.build-and-test.outputs.version_number }}.md git commit -am "Announce release ${{ needs.build-and-test.outputs.version_number }}" From 712e8b8a9508a6f23e27f7dc81da88cf637c60b3 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Sun, 11 Feb 2024 14:26:14 +0100 Subject: [PATCH 150/242] moved the website update to another job --- .github/workflows/openms_ci_matrix_full.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index a0a2001e634..d6612df5630 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -980,6 +980,13 @@ jobs: labels: ['feature', 'automated pr'] }); + create-website-update: + if: inputs.announce_release + runs-on: ubuntu-latest + needs: [deploy-installer, build-and-test] + permissions: write-all + steps: + - name: checkout website uses: actions/checkout@v4 with: @@ -987,7 +994,6 @@ jobs: repository: OpenMS/OpenMS-website - name: create text for website and update it. - if: inputs.announce_release shell: bash run: | echo '${{ needs.deploy-installer.outputs.release_text_contents }}' >> OpenMS-website/content/en/news/release${{ needs.build-and-test.outputs.version_number }}.md @@ -999,5 +1005,4 @@ jobs: git commit -am "Announce release ${{ needs.build-and-test.outputs.version_number }}" git push --set-upstream origin releaseannouncement${{ needs.build-and-test.outputs.version_number }} gh pr create --title "Release announcement for ${{ needs.build-and-test.outputs.version_number }}" --body "announces ${{ needs.build-and-test.outputs.version_number }}" - popd - + popd \ No newline at end of file From 04dcbf14a57ed2f026f2781fe864230fb4a63204 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Sun, 11 Feb 2024 15:03:14 +0100 Subject: [PATCH 151/242] create token for website --- .github/workflows/openms_ci_matrix_full.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index d6612df5630..042918c9607 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -993,8 +993,19 @@ jobs: path: OpenMS-website repository: OpenMS/OpenMS-website + - name: get a token so that we can update the website + uses: actions/create-github-app-token@v1 + id: app-token + with: + app-id: ${{ vars.OPENMS_GITHUB_APP_ID }} + private-key: ${{ secrets.OPENMS_GITHUB_APP_PRIVATE_KEY }} + owner: ${{ github.repository_owner }} + + - name: create text for website and update it. shell: bash + env: + GH_TOKEN: ${{ steps.app-token.outputs.token }} run: | echo '${{ needs.deploy-installer.outputs.release_text_contents }}' >> OpenMS-website/content/en/news/release${{ needs.build-and-test.outputs.version_number }}.md pushd OpenMS-website From 381434fe015eada970ace71ffaca3b2352100b16 Mon Sep 17 00:00:00 2001 From: Julianus Pfeuffer Date: Sun, 11 Feb 2024 16:58:21 +0100 Subject: [PATCH 152/242] Correct order to use token at checkout --- .github/workflows/openms_ci_matrix_full.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 042918c9607..0b5ca4ee76c 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -987,12 +987,6 @@ jobs: permissions: write-all steps: - - name: checkout website - uses: actions/checkout@v4 - with: - path: OpenMS-website - repository: OpenMS/OpenMS-website - - name: get a token so that we can update the website uses: actions/create-github-app-token@v1 id: app-token @@ -1000,7 +994,13 @@ jobs: app-id: ${{ vars.OPENMS_GITHUB_APP_ID }} private-key: ${{ secrets.OPENMS_GITHUB_APP_PRIVATE_KEY }} owner: ${{ github.repository_owner }} - + + - name: checkout website + uses: actions/checkout@v4 + with: + path: OpenMS-website + repository: OpenMS/OpenMS-website + token: ${{ steps.app-token.outputs.token }} - name: create text for website and update it. shell: bash @@ -1016,4 +1016,4 @@ jobs: git commit -am "Announce release ${{ needs.build-and-test.outputs.version_number }}" git push --set-upstream origin releaseannouncement${{ needs.build-and-test.outputs.version_number }} gh pr create --title "Release announcement for ${{ needs.build-and-test.outputs.version_number }}" --body "announces ${{ needs.build-and-test.outputs.version_number }}" - popd \ No newline at end of file + popd From 7ffeae56012101ee77a37fb26a7dc7e11b84a26e Mon Sep 17 00:00:00 2001 From: axelwalter Date: Mon, 12 Feb 2024 10:33:49 +0100 Subject: [PATCH 153/242] SiriusAdapter replaced with SiriusExport and adaptations to AssayGeneratorMetabo (#7234) * rework SiriusAdapter to SiriusExport * AssayGeneratorMetabo rework - does not execute SIRIUS directly - takes SIRIUS workspace as input * remove sirius executable param * always set precursor charge to one * Update doc/doxygen/public/TOPP.doxygen Co-authored-by: Timo Sachsenberg * Update doc/OpenMS_tutorial/developer_Tutorial.doxygen Co-authored-by: Timo Sachsenberg * Update src/openms/source/ANALYSIS/ID/SiriusExportAlgorithm.cpp Co-authored-by: Timo Sachsenberg * Update src/openms/source/ANALYSIS/ID/SiriusExportAlgorithm.cpp Co-authored-by: Timo Sachsenberg * Update src/openms/source/FORMAT/DATAACCESS/SiriusFragmentAnnotation.cpp Co-authored-by: Timo Sachsenberg * fix accidental rename * Remove SIRIUS and CSI MzTabWriter * AssayGeneratorMetabo remove boost for string trimming * use CsvFile to parse compound.info file * edit description of SIRIUS params in Constants * remove unused functions * update docs for SiriusExport * update AssayGeneratorMetabo docs * SiriusExport mandatory output * update tests * split AssayGeneratorMetabo tool - new AssayGeneratorMetaboSirius tool * SiriusExport - export multiple mzML/featureXML files into one .ms file - optional output: tsv file with CompoundInfo to use in AssayGeneratorMetabo * remove unused imports * read compound info table in AssayGeneratorMetaboSirius * remove unused function to sort SIRIUS workspace * export compound info only if they match a feature * fix ambiguity groups with correct file index * extract decoy specs from SIRIUS subdirs only if decoy_generation is set * update resolveOverlappingTargetDecoyMassesByIndividualMassShift with mz tolerance * rename function * update pxd files * update changelog * update tests * fix test names * set test dependencies * Update CHANGELOG Co-authored-by: Timo Sachsenberg * Update src/openms/source/ANALYSIS/ID/SiriusMSConverter.cpp Co-authored-by: Timo Sachsenberg * Update src/openms/source/ANALYSIS/ID/SiriusMSConverter.cpp Co-authored-by: Timo Sachsenberg * update docs * pass CsvFile as const reference * fix formatting * use default param handler for SiriusExportAlgorithm * descriptive parameter names * set min int for mass trace filter parameter * update docs * add AccurateMassSearch to executables.cmake - was accidentally removed * Update src/topp/SiriusExport.cpp Co-authored-by: Oliver Alka * Update src/topp/SiriusExport.cpp Co-authored-by: Oliver Alka * update comments --------- Co-authored-by: Timo Sachsenberg Co-authored-by: Oliver Alka --- CHANGELOG | 5 +- CMakeLists.txt | 9 - cmake/knime_package_support.cmake | 1 - doc/doxygen/public/TOPP.doxygen | 3 +- doc/doxygen/public/developer_tutorial.doxygen | 4 +- .../ANALYSIS/ID/SiriusAdapterAlgorithm.h | 306 - .../ANALYSIS/ID/SiriusExportAlgorithm.h | 81 + .../OpenMS/ANALYSIS/ID/SiriusMSConverter.h | 43 +- .../include/OpenMS/ANALYSIS/ID/sources.cmake | 2 +- .../ANALYSIS/TARGETED/MetaboTargetedAssay.h | 7 +- .../TARGETED/MetaboTargetedTargetDecoy.h | 5 +- src/openms/include/OpenMS/CONCEPT/Constants.h | 5 +- src/openms/include/OpenMS/FORMAT/CsvFile.h | 2 +- .../DATAACCESS/CsiFingerIdMzTabWriter.h | 97 - .../DATAACCESS/SiriusFragmentAnnotation.h | 12 +- .../FORMAT/DATAACCESS/SiriusMzTabWriter.h | 142 - .../OpenMS/FORMAT/DATAACCESS/sources.cmake | 2 - .../ANALYSIS/ID/SiriusAdapterAlgorithm.cpp | 656 - .../ANALYSIS/ID/SiriusExportAlgorithm.cpp | 178 + .../source/ANALYSIS/ID/SiriusMSConverter.cpp | 82 +- src/openms/source/ANALYSIS/ID/sources.cmake | 2 +- .../ANALYSIS/TARGETED/MetaboTargetedAssay.cpp | 28 +- .../TARGETED/MetaboTargetedTargetDecoy.cpp | 106 +- .../source/APPLICATIONS/ToolHandler.cpp | 3 +- src/openms/source/FORMAT/CsvFile.cpp | 2 +- .../DATAACCESS/CsiFingerIdMzTabWriter.cpp | 192 - .../DATAACCESS/SiriusFragmentAnnotation.cpp | 106 +- .../FORMAT/DATAACCESS/SiriusMzTabWriter.cpp | 262 - .../source/FORMAT/DATAACCESS/sources.cmake | 2 - src/pyOpenMS/pxds/CsiAdapterHit.pxd | 23 - .../pxds/CsiAdapterIdentification.pxd | 20 - src/pyOpenMS/pxds/CsiAdapterRun.pxd | 9 - src/pyOpenMS/pxds/CsiFingerIdMzTabWriter.pxd | 19 - src/pyOpenMS/pxds/MetaboTargetedAssay.pxd | 4 +- .../pxds/MetaboTargetedTargetDecoy.pxd | 4 +- src/pyOpenMS/pxds/SiriusAdapterAlgorithm.pxd | 100 - src/pyOpenMS/pxds/SiriusAdapterHit.pxd | 21 - .../pxds/SiriusAdapterIdentification.pxd | 19 - src/pyOpenMS/pxds/SiriusAdapterRun.pxd | 10 - src/pyOpenMS/pxds/SiriusExportAlgorithm.pxd | 68 + .../pxds/SiriusFragmentAnnotation.pxd | 12 +- src/pyOpenMS/pxds/SiriusMSFile.pxd | 11 - src/pyOpenMS/pxds/SiriusMzTabWriter.pxd | 38 - .../decoys/C10H12N3O3PS2_[M+H]+.tsv | 17 - .../decoys/C15H17ClN4_[M+H]+.tsv | 23 + .../formula_candidates.tsv | 4 +- .../spectra/C10H12N3O3PS2_[M+H]+.tsv | 17 - .../spectra/C15H17ClN4_[M+H]+.tsv | 23 + .../SiriusFragmentAnnotation_test/spectrum.ms | 1214 +- .../source/SiriusFragmentAnnotation_test.cpp | 31 +- .../.format | 1 + .../.version | 1 + .../compound.config | 199 + .../compound.info | 7 + .../decoys/C16H25NO2_[M+Na]+.tsv | 14 + .../formula_candidates.tsv | 12 + .../scores/C10H27N3O4S_[M+H3N+H]+.info | 3 + .../scores/C11H27N4O2_[M+K]+.info | 3 + .../scores/C12H24N5OP_[M+H]+.info | 3 + .../scores/C12H28N2O2P_[M+Na]+.info | 3 + .../scores/C13H29NO2S_[M+Na]+.info | 3 + .../scores/C14H19N7_[M+H]+.info | 3 + .../scores/C14H23N4O_[M+Na]+.info | 3 + .../scores/C16H21N4O_[M+H]+.info | 3 + .../scores/C16H25NO2_[M+Na]+.info | 3 + .../scores/C8H25N6O3S_[M+H]+.info | 3 + .../scores/C9H26N4O4P_[M+H]+.info | 3 + .../spectra/C10H27N3O4S_[M+H3N+H]+.tsv | 13 + .../spectra/C11H27N4O2_[M+K]+.tsv | 13 + .../spectra/C12H24N5OP_[M+H]+.tsv | 13 + .../spectra/C12H28N2O2P_[M+Na]+.tsv | 14 + .../spectra/C13H29NO2S_[M+Na]+.tsv | 14 + .../spectra/C14H19N7_[M+H]+.tsv | 11 + .../spectra/C14H23N4O_[M+Na]+.tsv | 15 + .../spectra/C16H21N4O_[M+H]+.tsv | 13 + .../spectra/C16H25NO2_[M+Na]+.tsv | 14 + .../spectra/C8H25N6O3S_[M+H]+.tsv | 17 + .../spectra/C9H26N4O4P_[M+H]+.tsv | 16 + .../spectrum.ms | 538 + .../trees/C10H27N3O4S_[M+H3N+H]+.json | 697 + .../trees/C11H27N4O2_[M+K]+.json | 647 + .../trees/C12H24N5OP_[M+H]+.json | 647 + .../trees/C12H28N2O2P_[M+Na]+.json | 697 + .../trees/C13H29NO2S_[M+Na]+.json | 697 + .../trees/C14H19N7_[M+H]+.json | 547 + .../trees/C14H23N4O_[M+Na]+.json | 737 + .../trees/C16H21N4O_[M+H]+.json | 647 + .../trees/C16H25NO2_[M+Na]+.json | 697 + .../trees/C8H25N6O3S_[M+H]+.json | 856 + .../trees/C9H26N4O4P_[M+H]+.json | 801 + .../compound.config | 199 + .../compound.info | 6 + .../decoys/C15H17ClN4_[M+H]+.tsv | 23 + .../formula_candidates.tsv | 2 + .../scores/C15H17ClN4_[M+H]+.info | 3 + .../spectra/C15H17ClN4_[M+H]+.tsv | 23 + .../spectrum.ms | 692 + .../trees/C15H17ClN4_[M+H]+.json | 1301 + .../compound.config | 199 + .../compound.info | 6 + .../formula_candidates.tsv | 2 + .../scores/C13H22NO3PS_[M+Na]+.info | 3 + .../spectra/C13H22NO3PS_[M+Na]+.tsv | 2 + .../spectrum.ms | 178 + .../trees/C13H22NO3PS_[M+Na]+.json | 55 + .../canopus_formula_summary.tsv | 1 + .../formula_identifications.tsv | 4 + .../report.mztab | 34 + .../AssayGeneratorMetaboSirius_output_1.tsv | 4 + .../AssayGeneratorMetaboSirius_output_2.tsv | 7 + .../AssayGeneratorMetaboSirius_output_3.tsv | 7 + src/tests/topp/CMakeLists.txt | 54 +- ...ureXML => SiriusExport_1_input.featureXML} | 6 +- ...3_input.mzML => SiriusExport_1_input.mzML} | 4 +- ...r_5_output.ms => SiriusExport_1_output.ms} | 280 +- src/tests/topp/SiriusExport_2_output.ms | 5636 +++ .../SiriusExport_2_output_compoundinfo.tsv | 13 + src/tests/topp/SiriusExport_3_output.ms | 38149 ++++++++++++++++ .../SiriusExport_3_output_compoundinfo.tsv | 14 + .../THIRDPARTY/SiriusAdapter_10_output.mzTab | 175 - .../THIRDPARTY/SiriusAdapter_1_ann_out.mzML | 2555 -- .../THIRDPARTY/SiriusAdapter_1_input.mzML | 2241 - .../THIRDPARTY/SiriusAdapter_1_output.mzTab | 60 - .../SiriusAdapter_2_feat_ann_out.mzML | 1156 - .../SiriusAdapter_2_input.featureXML | 1798 - .../THIRDPARTY/SiriusAdapter_2_input.mzML | 7465 --- .../THIRDPARTY/SiriusAdapter_2_output.mzTab | 30 - .../SiriusAdapter_3_feat_only_ann_out.mzML | 2070 - .../THIRDPARTY/SiriusAdapter_3_output.mzTab | 50 - .../THIRDPARTY/SiriusAdapter_4_foutput.mzTab | 19 - .../SiriusAdapter_4_input.featureXML | 1455 - .../THIRDPARTY/SiriusAdapter_4_input.mzML | 5094 --- .../topp/THIRDPARTY/SiriusAdapter_6_output.ms | 1118 - .../THIRDPARTY/SiriusAdapter_7_output.mzTab | 15 - .../THIRDPARTY/SiriusAdapter_8_output.mzTab | 32 - .../THIRDPARTY/SiriusAdapter_9_output.mzTab | 157 - .../topp/THIRDPARTY/third_party_tests.cmake | 106 - src/topp/AssayGeneratorMetabo.cpp | 513 +- src/topp/AssayGeneratorMetaboSirius.cpp | 358 + src/topp/SiriusAdapter.cpp | 302 - src/topp/SiriusExport.cpp | 137 + src/topp/executables.cmake | 3 +- tools/spellcheck/correct_words.txt | 2 +- 143 files changed, 57302 insertions(+), 29176 deletions(-) delete mode 100644 src/openms/include/OpenMS/ANALYSIS/ID/SiriusAdapterAlgorithm.h create mode 100644 src/openms/include/OpenMS/ANALYSIS/ID/SiriusExportAlgorithm.h delete mode 100644 src/openms/include/OpenMS/FORMAT/DATAACCESS/CsiFingerIdMzTabWriter.h delete mode 100644 src/openms/include/OpenMS/FORMAT/DATAACCESS/SiriusMzTabWriter.h delete mode 100644 src/openms/source/ANALYSIS/ID/SiriusAdapterAlgorithm.cpp create mode 100644 src/openms/source/ANALYSIS/ID/SiriusExportAlgorithm.cpp delete mode 100644 src/openms/source/FORMAT/DATAACCESS/CsiFingerIdMzTabWriter.cpp delete mode 100644 src/openms/source/FORMAT/DATAACCESS/SiriusMzTabWriter.cpp delete mode 100644 src/pyOpenMS/pxds/CsiAdapterHit.pxd delete mode 100644 src/pyOpenMS/pxds/CsiAdapterIdentification.pxd delete mode 100644 src/pyOpenMS/pxds/CsiAdapterRun.pxd delete mode 100644 src/pyOpenMS/pxds/CsiFingerIdMzTabWriter.pxd delete mode 100644 src/pyOpenMS/pxds/SiriusAdapterAlgorithm.pxd delete mode 100644 src/pyOpenMS/pxds/SiriusAdapterHit.pxd delete mode 100644 src/pyOpenMS/pxds/SiriusAdapterIdentification.pxd delete mode 100644 src/pyOpenMS/pxds/SiriusAdapterRun.pxd create mode 100644 src/pyOpenMS/pxds/SiriusExportAlgorithm.pxd delete mode 100644 src/pyOpenMS/pxds/SiriusMzTabWriter.pxd delete mode 100644 src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/decoys/C10H12N3O3PS2_[M+H]+.tsv create mode 100644 src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/decoys/C15H17ClN4_[M+H]+.tsv delete mode 100644 src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/spectra/C10H12N3O3PS2_[M+H]+.tsv create mode 100644 src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/spectra/C15H17ClN4_[M+H]+.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/.format create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/.version create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/compound.config create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/compound.info create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/decoys/C16H25NO2_[M+Na]+.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/formula_candidates.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C10H27N3O4S_[M+H3N+H]+.info create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C11H27N4O2_[M+K]+.info create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C12H24N5OP_[M+H]+.info create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C12H28N2O2P_[M+Na]+.info create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C13H29NO2S_[M+Na]+.info create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C14H19N7_[M+H]+.info create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C14H23N4O_[M+Na]+.info create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C16H21N4O_[M+H]+.info create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C16H25NO2_[M+Na]+.info create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C8H25N6O3S_[M+H]+.info create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C9H26N4O4P_[M+H]+.info create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C10H27N3O4S_[M+H3N+H]+.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C11H27N4O2_[M+K]+.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C12H24N5OP_[M+H]+.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C12H28N2O2P_[M+Na]+.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C13H29NO2S_[M+Na]+.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C14H19N7_[M+H]+.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C14H23N4O_[M+Na]+.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C16H21N4O_[M+H]+.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C16H25NO2_[M+Na]+.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C8H25N6O3S_[M+H]+.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C9H26N4O4P_[M+H]+.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectrum.ms create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C10H27N3O4S_[M+H3N+H]+.json create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C11H27N4O2_[M+K]+.json create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C12H24N5OP_[M+H]+.json create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C12H28N2O2P_[M+Na]+.json create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C13H29NO2S_[M+Na]+.json create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C14H19N7_[M+H]+.json create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C14H23N4O_[M+Na]+.json create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C16H21N4O_[M+H]+.json create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C16H25NO2_[M+Na]+.json create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C8H25N6O3S_[M+H]+.json create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C9H26N4O4P_[M+H]+.json create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/compound.config create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/compound.info create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/decoys/C15H17ClN4_[M+H]+.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/formula_candidates.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/scores/C15H17ClN4_[M+H]+.info create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/spectra/C15H17ClN4_[M+H]+.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/spectrum.ms create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/trees/C15H17ClN4_[M+H]+.json create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/compound.config create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/compound.info create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/formula_candidates.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/scores/C13H22NO3PS_[M+Na]+.info create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/spectra/C13H22NO3PS_[M+Na]+.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/spectrum.ms create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/trees/C13H22NO3PS_[M+Na]+.json create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/canopus_formula_summary.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/formula_identifications.tsv create mode 100644 src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/report.mztab create mode 100644 src/tests/topp/AssayGeneratorMetaboSirius_output_1.tsv create mode 100644 src/tests/topp/AssayGeneratorMetaboSirius_output_2.tsv create mode 100644 src/tests/topp/AssayGeneratorMetaboSirius_output_3.tsv rename src/tests/topp/{THIRDPARTY/SiriusAdapter_3_input.featureXML => SiriusExport_1_input.featureXML} (99%) rename src/tests/topp/{THIRDPARTY/SiriusAdapter_3_input.mzML => SiriusExport_1_input.mzML} (99%) rename src/tests/topp/{THIRDPARTY/SiriusAdapter_5_output.ms => SiriusExport_1_output.ms} (91%) create mode 100644 src/tests/topp/SiriusExport_2_output.ms create mode 100644 src/tests/topp/SiriusExport_2_output_compoundinfo.tsv create mode 100644 src/tests/topp/SiriusExport_3_output.ms create mode 100644 src/tests/topp/SiriusExport_3_output_compoundinfo.tsv delete mode 100644 src/tests/topp/THIRDPARTY/SiriusAdapter_10_output.mzTab delete mode 100644 src/tests/topp/THIRDPARTY/SiriusAdapter_1_ann_out.mzML delete mode 100644 src/tests/topp/THIRDPARTY/SiriusAdapter_1_input.mzML delete mode 100644 src/tests/topp/THIRDPARTY/SiriusAdapter_1_output.mzTab delete mode 100644 src/tests/topp/THIRDPARTY/SiriusAdapter_2_feat_ann_out.mzML delete mode 100644 src/tests/topp/THIRDPARTY/SiriusAdapter_2_input.featureXML delete mode 100644 src/tests/topp/THIRDPARTY/SiriusAdapter_2_input.mzML delete mode 100644 src/tests/topp/THIRDPARTY/SiriusAdapter_2_output.mzTab delete mode 100644 src/tests/topp/THIRDPARTY/SiriusAdapter_3_feat_only_ann_out.mzML delete mode 100644 src/tests/topp/THIRDPARTY/SiriusAdapter_3_output.mzTab delete mode 100644 src/tests/topp/THIRDPARTY/SiriusAdapter_4_foutput.mzTab delete mode 100644 src/tests/topp/THIRDPARTY/SiriusAdapter_4_input.featureXML delete mode 100644 src/tests/topp/THIRDPARTY/SiriusAdapter_4_input.mzML delete mode 100644 src/tests/topp/THIRDPARTY/SiriusAdapter_6_output.ms delete mode 100644 src/tests/topp/THIRDPARTY/SiriusAdapter_7_output.mzTab delete mode 100644 src/tests/topp/THIRDPARTY/SiriusAdapter_8_output.mzTab delete mode 100644 src/tests/topp/THIRDPARTY/SiriusAdapter_9_output.mzTab create mode 100644 src/topp/AssayGeneratorMetaboSirius.cpp delete mode 100644 src/topp/SiriusAdapter.cpp create mode 100644 src/topp/SiriusExport.cpp diff --git a/CHANGELOG b/CHANGELOG index 9f0c67ea306..b4b26e57612 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -18,8 +18,11 @@ PR - Pull Request (on GitHub), i.e. integration of a new feature or bugfix What's new: - Breaking change: Rename of parameters for FeatureFinderCentroided (debug->advanced), and PeakPickerWavelet/TOFCalibration (optimization -> optimization:type) (#7154) + Library: - Extend FileHandler to support load and store operations for our major datastructures (spectra, features, identifications, etc.). Replaced file type specific code with the more generic FileHandler calls to decouple the IO code from other parts of the library. +- SiriusAdapter reworked to SiriusExport: Instead of running SIRIUS directly, this reworked tool takes multiple mzML and feautureXML (optional) files exporting a single SIRIUS .ms input file as well as an input table with compound info from features for the new AssayGeneratorMetaboSirius tool. (#7234) +- Splitting AssayGeneratorMetabo into two tools: In line with the changes to SiriusExport this tool has been split into two separate workflows. AssayGeneratorMetabo generates an assay library from mzML and feautreXML files using an heuristic approach picking the highest intensity MS2 peaks (like before). AssayGeneratorMetaboSirius takes an existing SIRIUS project directory as input to generate an assay library based on fragmentation trees. (#7234) - better documentation for all SpectraFilter... tools (#7183) Fixes: @@ -469,7 +472,7 @@ New tools: - OpenPepXL -- Tool for protein-protein cross-linking identification using labeled linkers (UTIL) - OpenPepXLLF -- Tool for protein-protein cross linking with label-free linkers (UTIL) - PSMFeatureExtractor -- Computes extra features for each input PSM (UTIL) - - SiriusAdapter -- Tool for metabolite identification using single and tandem mass spectrometry (UTIL) + - SiriusExport -- Tool for metabolite identification using single and tandem mass spectrometry (UTIL) - XFDR -- Calculates false discovery rate estimates on protein-protein-crosslink identifications (UTIL) Deprecated and removed tools: diff --git a/CMakeLists.txt b/CMakeLists.txt index 50567c8fc3f..818c955b2ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -249,15 +249,6 @@ if(CLANG_TIME_TRACE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftime-trace") endif() -#------------------------------------------------------------------------------ -# Enable SIRIUS_test (SiriusAdapter/AssayGeneratorMetabo) -#------------------------------------------------------------------------------ -option(ENABLE_SIRIUS_TEST "Enable test for SIRIUS (SiriusAdapter)" OFF) - -#------------------------------------------------------------------------------ -# Enable CSI:FingerID_test (SiriusAdapter) -#------------------------------------------------------------------------------ -option(ENABLE_FINGERID_TEST "Enable test for CSI:FingerID (SiriusAdapter)" OFF) #------------------------------------------------------------------------------ # Enable Coverage diff --git a/cmake/knime_package_support.cmake b/cmake/knime_package_support.cmake index cb330e1ea0a..d01a6e09752 100644 --- a/cmake/knime_package_support.cmake +++ b/cmake/knime_package_support.cmake @@ -202,7 +202,6 @@ set(THIRDPARTY_ADAPTERS "CometAdapter" "PercolatorAdapter" "MSFraggerAdapter" - "SiriusAdapter" "NovorAdapter" ) diff --git a/doc/doxygen/public/TOPP.doxygen b/doc/doxygen/public/TOPP.doxygen index f5d53149fb4..a79ba4918c6 100755 --- a/doc/doxygen/public/TOPP.doxygen +++ b/doc/doxygen/public/TOPP.doxygen @@ -152,6 +152,7 @@ Targeted Experiments and OpenSWATH - @subpage TOPP_AssayGeneratorMetabo - Generates an assay library using DDA data (Metabolomics). + - @subpage TOPP_AssayGeneratorMetaboSirius - Generates an assay library using SIRIUS project directory (Metabolomics). - @subpage TOPP_ClusterMassTracesByPrecursor - Identifies precursor mass traces and tries to correlate them with fragment ion mass traces in SWATH maps. - @subpage TOPP_MRMMapper - MRMMapper maps measured chromatograms (mzML) and the transitions used (TraML). - @subpage TOPP_MRMPairFinder - Evaluates labeled pair ratios on MRM features. @@ -192,7 +193,7 @@ Metabolite Identification - @subpage TOPP_AccurateMassSearch - Finds potential HMDB IDs within the given mass error window. - @subpage TOPP_MetaboliteSpectralMatcher - Identifies small molecules from tandem MS spectra. - - @subpage TOPP_SiriusAdapter - De novo metabolite identification. + - @subpage TOPP_SiriusExport - Export for Sirius de novo metabolite identification. RNA - @subpage TOPP_NucleicAcidSearchEngine - Search MzML files for oligonucleotides and their modifications. diff --git a/doc/doxygen/public/developer_tutorial.doxygen b/doc/doxygen/public/developer_tutorial.doxygen index 41b9ff716b6..03b8f2d8ab3 100644 --- a/doc/doxygen/public/developer_tutorial.doxygen +++ b/doc/doxygen/public/developer_tutorial.doxygen @@ -210,7 +210,7 @@ The extensible %OpenMS library implements common mass spectrometric data process - Accurate mass search: - Tool AccurateMassSearch - De novo identification: - - Tool SiriusAdapter + - Tool SiriusExport
        - General: @@ -273,7 +273,7 @@ Within the ANALYSIS folder, you can find several important tools
        -For the sake of completeness you will find a short list of the THIRDPARTY tools, which are integrated via wrappers into the %OpenMS framework (usually called -Adapter e.g. SiriusAdapter) +For the sake of completeness you will find a short list of the THIRDPARTY tools, which are integrated via wrappers into the %OpenMS framework (usually called -Adapter e.g. CometAdapter) Wrapper to third-party tools: - Search Engines (MSGFPLUS, XTandem, Comet) diff --git a/src/openms/include/OpenMS/ANALYSIS/ID/SiriusAdapterAlgorithm.h b/src/openms/include/OpenMS/ANALYSIS/ID/SiriusAdapterAlgorithm.h deleted file mode 100644 index 242b3054130..00000000000 --- a/src/openms/include/OpenMS/ANALYSIS/ID/SiriusAdapterAlgorithm.h +++ /dev/null @@ -1,306 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Oliver Alka $ -// $Authors: Oliver Alka, Lukas Zimmermann $ -// -------------------------------------------------------------------------- - -#pragma once - -#include - -#include - -#include -#include -#include - -using namespace std; - -namespace OpenMS -{ - class FeatureMap; - class File; - class KDTreeFeatureMaps; - - class OPENMS_DLLAPI SiriusAdapterAlgorithm : public DefaultParamHandler - { - public: - /// default constructor - SiriusAdapterAlgorithm(); - - /* - * Accessors for Preprocessing Parameters - */ - - bool isFeatureOnly() const { return preprocessing.getValue("feature_only").toBool(); } - UInt getFilterByNumMassTraces() const { return preprocessing.getValue("filter_by_num_masstraces"); } - double getPrecursorMzTolerance() const { return preprocessing.getValue("precursor_mz_tolerance"); } - double getPrecursorRtTolerance() const { return preprocessing.getValue("precursor_rt_tolerance"); } - bool precursorMzToleranceUnitIsPPM() const { return preprocessing.getValue("precursor_mz_tolerance_unit") == "ppm"; } - bool isNoMasstraceInfoIsotopePattern() const { return preprocessing.getValue("no_masstrace_info_isotope_pattern").toBool(); } - int getIsotopePatternIterations() const { return preprocessing.getValue("isotope_pattern_iterations"); } - - /** - * @brief Accessors for Sirius Parameters - */ - - int getNumberOfSiriusCandidates() const - { - int number_of_candidates = sirius.getValue("candidates"); - // default for SiriusAdapter is -1 to not pass a value to command and use SIRIUS 5 default (10) - // therefore 10 needs to be returned in this case - if (number_of_candidates == -1) - { - return 10; - } - else - { - return number_of_candidates; - } - } - - /** - * @brief Updates all parameters that already exist in this DefaultParamHandler - * with the values provided by the input param object. - * - * @param param The Param object supplying updated parameter values. Keys that exist in the param - * parameter, but not in this DefaultParamHander, are ignored. - */ - void updateExistingParameter(const Param ¶m); - - /** - * @brief Checks whether this DefaultParamHandler has a ParamEntry with the provided name. - * @param name The name of the ParamEntry that should be checked for its existence in this DefaultParamHandler - * @return Whether this DefaultParamHandler has an ParamEntry for the provided name. - */ - bool hasFullNameParameter(const String &name) const; - - /// Struct for temporary folder structure - class OPENMS_DLLAPI SiriusTemporaryFileSystemObjects - { - public: - - /// Construct temporary folder structure for SIRIUS (SiriusTemporaryFileSystemObjects) - SiriusTemporaryFileSystemObjects(int debug_level); - - /// Destructor of SiriusTemporaryFileSystemObjects based on debug level - ~SiriusTemporaryFileSystemObjects(); - - const String& getTmpDir() const; - const String& getTmpOutDir() const; - const String& getTmpMsFile() const; - - private: - int debug_level_; - - String tmp_dir_; - String tmp_ms_file_; - String tmp_out_dir_; - }; - - /** - @brief Checks if the provided String points to a valid SIRIUS executable, otherwise tries - to select the executable from the environment - - @return Path to SIRIUS executable - - @param executable Path to the potential executable - */ - static String determineSiriusExecutable(String& executable); - - /** - - @brief Sort function using the extracted scan_index from the sirius workspace file path - - @param[in,out] subdirs Vector of sirius workspace paths which is sorted based on the scan_index - */ - static void sortSiriusWorkspacePathsByScanIndex(std::vector& subdirs); - - - /** - @brief Preprocessing needed for SIRIUS - - Filter number of masstraces and perform feature mapping. - - @param featureinfo Path to featureXML - @param spectra Input of MSExperiment with spectra information - @param fm_info Emtpy - stores FeatureMaps and KDTreeMaps internally - @param feature_mapping Mapping of MS2 spectra to features - */ - void preprocessingSirius(const String& featureinfo, - const MSExperiment& spectra, - FeatureMapping::FeatureMappingInfo& fm_info, - FeatureMapping::FeatureToMs2Indices& feature_mapping) const; - - /** - @brief logs number of features and spectra used - - Prints the number of features and spectra used (OPENMS_LOG_INFO) - - @param featureinfo Path to featureXML - @param feature_mapping FeatureToMs2Indices with feature mapping - @param spectra Input of MSExperiment with spectra information - */ - void logFeatureSpectraNumber(const String& featureinfo, - const FeatureMapping::FeatureToMs2Indices& feature_mapping, - const MSExperiment& spectra) const; - - /** - @brief Log in to Sirius with personal user account (required in Sirius >= 5). - - @param executable ... - @param email User account E-Mail. - @param password User account password. - */ - void logInSiriusAccount(String& executable, const String& email, const String& password) const; - - /** - @brief Call SIRIUS with QProcess - - @param tmp_ms_file path to temporary .ms file - @param tmp_out_dir path to temporary output folder - @param executable path to executable - @param out_csifingerid path to CSI:FingerID output (can be empty). - @param decoy_generation Add 'passatutto' to command line call - - @return Vector with paths to a compound - */ - const vector callSiriusQProcess(const String& tmp_ms_file, - const String& tmp_out_dir, - String& executable, - const String& out_csifingerid, - const bool decoy_generation) const; - - private: - class ParameterModifier - { - const String openms_param_name; - SiriusAdapterAlgorithm *enclose; - - public: - explicit ParameterModifier(const String ¶m_name, SiriusAdapterAlgorithm *enclose) : - openms_param_name(param_name), enclose(enclose) {} - - void withValidStrings(initializer_list choices) - { - enclose->defaults_.setValidStrings(openms_param_name, choices); - } - - void withMinInt(int value) - { - enclose->defaults_.setMinInt(openms_param_name, value); - } - }; - - class ParameterSection - { - // Maps the OpenMS Parameter Names to the one for Sirius - unordered_map openms_to_sirius; - - String toFullParameter(const String ¶m_name) const - { - String result(param_name); - result.substitute('-', '_'); - return sectionName() + ":" + result; - } - - protected: - ParameterModifier parameter( - const String ¶meter_name, - const ParamValue &default_value, - const String ¶meter_description); - void flag( - const String ¶meter_name, - const String ¶meter_description); - - explicit ParameterSection(SiriusAdapterAlgorithm* enclose): enclose(enclose) {} - - virtual void parameters() = 0; - virtual String sectionName() const = 0; - - SiriusAdapterAlgorithm *enclose; - - public: - virtual ~ParameterSection() = default; - - DataValue getValue(const String ¶m_name) const - { - return enclose->param_.getValue(toFullParameter(param_name)); - } - - QStringList getCommandLine() const - { - QStringList result; - for (const auto &pair : openms_to_sirius) - { - DataValue value = enclose->param_.getValue(pair.first); - DataValue default_value = enclose->defaults_.getValue(pair.first); - if (!value.isEmpty() && value != default_value) - { - String string_value = value.toString(true); - if (string_value == "true") - { - result.push_back(String("--" + pair.second).toQString()); - } - else if (string_value != "false") - { - result.push_back(String("--" + pair.second + "=" + string_value).toQString()); - } - }; - } - return result; - } - }; - - using SiriusSubtool = ParameterSection; - - class Preprocessing : public ParameterSection - { - String sectionName() const override { return "preprocessing"; } - public: - explicit Preprocessing(SiriusAdapterAlgorithm *enclose) : ParameterSection(enclose) {} - void parameters() override; - }; - - class Project final : public SiriusSubtool - { - String sectionName() const override { return "project"; } - public: - explicit Project(SiriusAdapterAlgorithm *enclose) : ParameterSection(enclose) {} - void parameters() override; - }; - - class Sirius final : public SiriusSubtool - { - String sectionName() const override { return "sirius"; } - public: - explicit Sirius(SiriusAdapterAlgorithm *enclose) : ParameterSection(enclose) {} - void parameters() override; - }; - - class Fingerid final : public SiriusSubtool - { - String sectionName() const override { return "fingerid"; } - public: - explicit Fingerid(SiriusAdapterAlgorithm *enclose) : ParameterSection(enclose) {} - void parameters() override; - }; - - class Passatutto final : public SiriusSubtool - { - String sectionName() const override { return "passatutto"; } - public: - explicit Passatutto(SiriusAdapterAlgorithm *enclose) : ParameterSection(enclose) {} - void parameters() override; - }; - - Preprocessing preprocessing; - Project project; - Sirius sirius; - Fingerid fingerid; - Passatutto passatutto; - - }; -} // namespace OpenMS diff --git a/src/openms/include/OpenMS/ANALYSIS/ID/SiriusExportAlgorithm.h b/src/openms/include/OpenMS/ANALYSIS/ID/SiriusExportAlgorithm.h new file mode 100644 index 00000000000..1ac0e7331af --- /dev/null +++ b/src/openms/include/OpenMS/ANALYSIS/ID/SiriusExportAlgorithm.h @@ -0,0 +1,81 @@ +// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin +// SPDX-License-Identifier: BSD-3-Clause +// +// -------------------------------------------------------------------------- +// $Maintainer: Oliver Alka, Axel Walter $ +// $Authors: Oliver Alka, Lukas Zimmermann $ +// -------------------------------------------------------------------------- + +#pragma once + +#include + +#include + +#include + +using namespace std; + +namespace OpenMS +{ + class OPENMS_DLLAPI SiriusExportAlgorithm : public DefaultParamHandler + { + public: + /// default constructor + SiriusExportAlgorithm(); + + // accessor for preprocessing parameters + bool isFeatureOnly() const { return param_.getValue("feature_only").toBool(); } + UInt getFilterByNumMassTraces() const { return param_.getValue("filter_by_num_masstraces"); } + double getPrecursorMzTolerance() const { return param_.getValue("precursor_mz_tolerance"); } + double getPrecursorRtTolerance() const { return param_.getValue("precursor_rt_tolerance"); } + bool precursorMzToleranceUnitIsPPM() const { return param_.getValue("precursor_mz_tolerance_unit") == "ppm"; } + bool isNoMasstraceInfoIsotopePattern() const { return param_.getValue("no_masstrace_info_isotope_pattern").toBool(); } + int getIsotopePatternIterations() const { return param_.getValue("isotope_pattern_iterations"); } + + /** + @brief Preprocessing needed for SIRIUS and AssayGeneratorMetabo + + Filter number of masstraces and perform feature mapping. + + @param featureinfo Path to featureXML + @param spectra Input of MSExperiment with spectra information + @param feature_mapping_info Emtpy - stores FeatureMaps and KDTreeMaps internally + @param feature_ms2_indices Empty FeatureToMs2Indices + */ + void preprocessing(const String& featureinfo, + const MSExperiment& spectra, + FeatureMapping::FeatureMappingInfo& feature_mapping_info, + FeatureMapping::FeatureToMs2Indices& feature_ms2_indices) const; + + /** + @brief logs number of features and spectra used + + Prints the number of features and spectra used (OPENMS_LOG_INFO) + + @param featureinfo Path to featureXML + @param feature_ms2_indices FeatureToMs2Indices with feature mapping + @param spectra Input of MSExperiment with spectra information + */ + void logFeatureSpectraNumber(const String& featureinfo, + const FeatureMapping::FeatureToMs2Indices& feature_ms2_indices, + const MSExperiment& spectra) const; + + /** + @brief exports SIRIUS .ms file + + Runs SiriusExport with mzML and featureXML (optional) files as input. + Generates a SIRIUS .ms file and compound info table (optional). + + @param mzML_files List with paths to mzML files + @param featureXML_files List with paths to featureXML files + @param out_ms Output file name for SIRIUS .ms file + @param out_compoundinfo Output file name for tsv file with compound info + */ + void run(const StringList& mzML_files, + const StringList& featureXML_files, + const String& out_ms, + const String& out_compoundinfo) const; + + }; +} // namespace OpenMS diff --git a/src/openms/include/OpenMS/ANALYSIS/ID/SiriusMSConverter.h b/src/openms/include/OpenMS/ANALYSIS/ID/SiriusMSConverter.h index 64540c0d963..b3e0b44eb42 100644 --- a/src/openms/include/OpenMS/ANALYSIS/ID/SiriusMSConverter.h +++ b/src/openms/include/OpenMS/ANALYSIS/ID/SiriusMSConverter.h @@ -2,7 +2,7 @@ // SPDX-License-Identifier: BSD-3-Clause // // -------------------------------------------------------------------------- -// $Maintainer: Oliver Alka $ +// $Maintainer: Oliver Alka, Axel Walter $ // $Authors: Oliver Alka $ // -------------------------------------------------------------------------- @@ -56,36 +56,46 @@ namespace OpenMS String m_ids_id; ///< concatenated list of native ids and identifier for multiple possible identification via AMS ("|" separator) used for mapping of compounds and the annotated spectrum. std::vector scan_indices; ///< index of the associated spectra std::vector specrefs; ///< spectra reference for mztab-m + int file_index; ///< source file index > }; /** - @brief Internal structure used in @ref TOPP_SiriusAdapter that is used + @brief Internal structure used in @ref TOPP_SiriusExport that is used for the conversion of a MzMlFile to an internal format. @ingroup Analysis_ID - Store .ms file. - Comments (see CompoundInfo) are written to SIRIUS .ms file and additionally stores in CompoundInfo struct. + Write content of one mzML/featureXML(optional) file pair to SIRIUS .ms file ofstream. + Comments (see CompoundInfo) are written to SIRIUS .ms file and additionally stored in CompoundInfo struct. If adduct information for a spectrum is missing, no adduct information is added. In this case, SIRIUS assumes default adducts for the respective spectrum. - - @param spectra: Peakmap from input mzml. - @param msfile: Writes .ms file from sirius. + + @param spectra: Peakmap from input mzML. + @param os: Write output for .ms file to ofstream. @param feature_mapping: Adducts and features (index). @param feature_only: Only use features. @param isotope_pattern_iterations: At which depth to stop isotope_pattern extraction (if possible). - @param no_mt_info Should isotope pattern be extracted (if not in feature)? - @param[out] v_cmpinfo: Vector of CompoundInfo. + @param no_masstrace_info_isotope_pattern: bool if isotope pattern should be extracted (if not in feature) + @param v_cmpinfo: Vector of CompoundInfo. + @param file_index: file index (to differentiate entries derived from different mzML files and resolve ambiguities) */ static void store(const MSExperiment& spectra, - const OpenMS::String& msfile, + std::ofstream& os, const FeatureMapping::FeatureToMs2Indices& feature_mapping, const bool& feature_only, const int& isotope_pattern_iterations, - const bool no_mt_info, - std::vector& v_cmpinfo); + const bool no_masstrace_info_isotope_pattern, + std::vector& v_cmpinfo, + const size_t& file_index); + /** + @brief Store CompoundInfo objects in tsv file format + @param v_cmpinfo: Vector with CompoundInfo objects + @param filename: Filename for tsv file + */ + static void saveFeatureCompoundInfoAsTSV(const std::vector& v_cmpinfo, + const std::string& filename); protected: /** @@ -110,6 +120,7 @@ namespace OpenMS @param count_assume_mono: count number of features where mono charge was assumed @param count_no_ms1: count number of compounds without a valid ms1 spectrum @param v_cmpinfo: vector of CompoundInfo + @param file_index: file index (to differentiate entries derived from different mzML files and resolve ambiguities) */ static void writeMsFile_(std::ofstream& os, @@ -130,10 +141,8 @@ namespace OpenMS int& count_skipped_spectra, int& count_assume_mono, int& count_no_ms1, - std::vector& v_cmpinfo); - - - + std::vector& v_cmpinfo, + const size_t& file_index); /** @brief Find highest intensity peak near target mz to test if within a margin of error @@ -165,4 +174,4 @@ namespace OpenMS }; -} // namespace OpenMS +} // namespace OpenMS \ No newline at end of file diff --git a/src/openms/include/OpenMS/ANALYSIS/ID/sources.cmake b/src/openms/include/OpenMS/ANALYSIS/ID/sources.cmake index 0a62c965a29..080c8b74eeb 100644 --- a/src/openms/include/OpenMS/ANALYSIS/ID/sources.cmake +++ b/src/openms/include/OpenMS/ANALYSIS/ID/sources.cmake @@ -42,7 +42,7 @@ PrecursorPurity.h ProtonDistributionModel.h PScore.h SimpleSearchEngineAlgorithm.h -SiriusAdapterAlgorithm.h +SiriusExportAlgorithm.h SiriusMSConverter.h ) diff --git a/src/openms/include/OpenMS/ANALYSIS/TARGETED/MetaboTargetedAssay.h b/src/openms/include/OpenMS/ANALYSIS/TARGETED/MetaboTargetedAssay.h index a4571785c51..2260b775927 100644 --- a/src/openms/include/OpenMS/ANALYSIS/TARGETED/MetaboTargetedAssay.h +++ b/src/openms/include/OpenMS/ANALYSIS/TARGETED/MetaboTargetedAssay.h @@ -129,15 +129,13 @@ namespace OpenMS @param max_fragment_mz Maximum m/z a fragment ion has to have to be considered as a transition @param use_exact_mass Boolean if exact mass should be used as peak mass for annotated fragments @param exclude_ms2_precursor Boolean to exclude MS2 precursor from MetaboTargetedAssay - @param file_counter Count if multiple files are used. */ static std::vector extractMetaboTargetedAssayFragmentAnnotation(const std::vector< CompoundTargetDecoyPair >& v_cmp_spec, const double& transition_threshold, const double& min_fragment_mz, const double& max_fragment_mz, const bool& use_exact_mass, - const bool& exclude_ms2_precursor, - const unsigned int& file_counter); + const bool& exclude_ms2_precursor); /** @brief Pair compound information (SiriusMSFile) with the annotated target and decoy spectrum from SIRIUS/Passatutto @@ -150,9 +148,6 @@ namespace OpenMS */ static std::vector< MetaboTargetedAssay::CompoundTargetDecoyPair > pairCompoundWithAnnotatedTDSpectraPairs(const std::vector& v_cmpinfo, const std::vector& annotated_spectra); - static std::vector< MetaboTargetedAssay::CompoundSpectrumPair > pairCompoundWithAnnotatedSpectra(const std::vector& v_cmpinfo, - const std::vector& annotated_spectra); - /** @brief Perform feature linking to build ambiguity groups based on the target and decoy position in the vector of MetaboTargetedAssays diff --git a/src/openms/include/OpenMS/ANALYSIS/TARGETED/MetaboTargetedTargetDecoy.h b/src/openms/include/OpenMS/ANALYSIS/TARGETED/MetaboTargetedTargetDecoy.h index 4b316e9c62a..bb389b250e2 100644 --- a/src/openms/include/OpenMS/ANALYSIS/TARGETED/MetaboTargetedTargetDecoy.h +++ b/src/openms/include/OpenMS/ANALYSIS/TARGETED/MetaboTargetedTargetDecoy.h @@ -52,9 +52,10 @@ namespace OpenMS @param t_exp TransitionExperiment holds compound and transition information @param mappings map of identifier to target and decoy masses @param mass_to_add (e.g. CH2) - + @param mz_tol m/z tolerarance for target and decoy transition masses to be considered overlapping + @param mz_tol_unit m/z tolerance unit ("ppm" or "Da") */ - static void resolveOverlappingTargetDecoyMassesByIndividualMassShift(TargetedExperiment& t_exp, std::vector& mappings, const double& mass_to_add); + static void resolveOverlappingTargetDecoyMassesByDecoyMassShift(TargetedExperiment& t_exp, std::vector& mappings, const double& mass_to_add, const double& mz_tol, const String& mz_tol_unit); /** @brief Generate a decoy for targets where fragmentation tree re-rooting was not possible, by adding a specifiable mass to the target fragments. diff --git a/src/openms/include/OpenMS/CONCEPT/Constants.h b/src/openms/include/OpenMS/CONCEPT/Constants.h index 8068c773c13..6de70027aa3 100644 --- a/src/openms/include/OpenMS/CONCEPT/Constants.h +++ b/src/openms/include/OpenMS/CONCEPT/Constants.h @@ -422,8 +422,7 @@ namespace OpenMS */ inline const std::string OPENPEPXL_BETA_PEPEV_END = "BetaPepEv:end"; - /** @name User parameters in/from Sirius annotated mzMLs - * E.g., when running SiriusAdapter with annotation output + /** @name User parameters in spectra which have been annotated from subdirectories in SIRIUS workspace */ ///@{ @@ -515,7 +514,7 @@ namespace OpenMS */ inline const std::string DC_CHARGE_ADDUCTS = "dc_charge_adducts"; - /** User parameter name for the number of mass traces in a feature. (Required for SiriusAdapter) + /** User parameter name for the number of mass traces in a feature. (Required for SiriusExport) String */ inline const std::string NUM_OF_MASSTRACES = "num_of_masstraces"; diff --git a/src/openms/include/OpenMS/FORMAT/CsvFile.h b/src/openms/include/OpenMS/FORMAT/CsvFile.h index 4c06e995515..cce2bd94805 100644 --- a/src/openms/include/OpenMS/FORMAT/CsvFile.h +++ b/src/openms/include/OpenMS/FORMAT/CsvFile.h @@ -86,7 +86,7 @@ namespace OpenMS @return returns false if the given row could not be separated into items */ - bool getRow(Size row, StringList& list); + bool getRow(Size row, StringList& list) const; /** @brief Returns the number of rows that were loaded from the file. diff --git a/src/openms/include/OpenMS/FORMAT/DATAACCESS/CsiFingerIdMzTabWriter.h b/src/openms/include/OpenMS/FORMAT/DATAACCESS/CsiFingerIdMzTabWriter.h deleted file mode 100644 index 9fcc5644e4e..00000000000 --- a/src/openms/include/OpenMS/FORMAT/DATAACCESS/CsiFingerIdMzTabWriter.h +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Oliver Alka $ -// $Authors: Oliver Alka $ -// -------------------------------------------------------------------------- - -#pragma once - -#include - -namespace OpenMS -{ - class OPENMS_DLLAPI CsiFingerIdMzTabWriter - { - public: - - /** - @brief Internal structure used in @ref TOPP_SiriusAdapter that is used - for the conversion of the Csi:FingerID output to an mzTab. - - CsiAdapterHit: - inchikey2D (String) - inchi (String) - rank (int) - Rank of the identification for a compound (spectrum) calculated by CSI:FingerID - molecular_formula (String) - sumformula - score (int) - Score of the identification for a compound (spectrum) calculated by CSI:FingerID - name (String) - smiles (String) - pubchemids (vector) - PubChemID as reference - links (vector) - Links to the database - - CsiAdapterIdentification: - scan_index (int) - Index of the spectrum used for identification - scan_number (int) - NativeId of the spectrum used for identification - feature_id (String) - FeatureId (if spectrum was assigned to a feature) - hits (vector) - - CsiAdapterRun: - identifications (vector) - - */ - - class CsiAdapterHit - { - public: - OpenMS::String inchikey2D; - OpenMS::String inchi; - unsigned int rank = 0; - unsigned int formula_rank = 0; - OpenMS::String adduct; - OpenMS::String molecular_formula; - double score = 0.; - OpenMS::String name; - OpenMS::String smiles; - OpenMS::String xlogp; - OpenMS::String dbflags; - std::vector pubchemids; - std::vector links; - - }; - - class CsiAdapterIdentification - { - public: - double mz = 0.; - double rt = 0.; - OpenMS::StringList native_ids; - int scan_index = -1; - int scan_number = -1; - OpenMS::String feature_id; - std::vector hits; - }; - - class CsiAdapterRun - { - public: - std::vector identifications; - }; - - /** - @brief Conversion of CSI:FingerID output to mzTab - - Output of CSI:FingerID is one directory per spectrum/compound - @param sirius_output_paths: Path to output directories of Sirius - @param original_input_mzml: Path to original input mzml of SiriusAdapter - @param top_n_hits: Top n entries for each compound written to the result file - @param result Result written to mzTab - */ - static void read(const std::vector& sirius_output_paths, - const String& original_input_mzml, - const Size& top_n_hits, - MzTab& result); - - }; -} diff --git a/src/openms/include/OpenMS/FORMAT/DATAACCESS/SiriusFragmentAnnotation.h b/src/openms/include/OpenMS/FORMAT/DATAACCESS/SiriusFragmentAnnotation.h index c74b6a39bc1..5620262182b 100644 --- a/src/openms/include/OpenMS/FORMAT/DATAACCESS/SiriusFragmentAnnotation.h +++ b/src/openms/include/OpenMS/FORMAT/DATAACCESS/SiriusFragmentAnnotation.h @@ -8,6 +8,7 @@ #pragma once +#include #include namespace OpenMS @@ -42,11 +43,10 @@ namespace OpenMS @param sirius_workspace_subdirs Vector of paths to SIRIUS subdirectories. @param score_threshold Only use spectra over a certain score threshold (0-1) @param use_exact_mass Option to use exact mass instead of peak mz in MSSpectrum. + @param decoy_generation Extract decoy spectra from SIRIUS subdirectories. */ static std::vector extractAndResolveSiriusAnnotations(const std::vector& sirius_workspace_subdirs, double score_threshold, - bool use_exact_mass); - static std::vector extractSiriusAnnotationsTgtOnly(const std::vector& sirius_workspace_subdirs, double score_threshold, bool use_exact_mass, bool resolve); - + bool use_exact_mass, bool decoy_generation); /** @brief extractSiriusFragmentAnnotationMapping @@ -81,6 +81,11 @@ namespace OpenMS */ static std::vector extractAnnotationsFromSiriusFile(const String& path_to_sirius_workspace, Size max_rank = 1, bool decoy = false, bool use_exact_mass = false); + /** + @brief Extract columnname and index based in SIRIUS entries + */ + static std::map< std::string, Size > extract_columnname_to_columnindex(const CsvFile& csvfile); + protected: /** @brief extractConcatNativeIDsFromSiriusMS @@ -114,6 +119,7 @@ namespace OpenMS */ static OpenMS::String extractFeatureIDFromSiriusMS_(const String& path_to_sirius_workspace); + /** @brief extractCompoundRankingAndFilename Extract compound ranking and filename (./formula_candidates.tsv). diff --git a/src/openms/include/OpenMS/FORMAT/DATAACCESS/SiriusMzTabWriter.h b/src/openms/include/OpenMS/FORMAT/DATAACCESS/SiriusMzTabWriter.h deleted file mode 100644 index 8db41d6e514..00000000000 --- a/src/openms/include/OpenMS/FORMAT/DATAACCESS/SiriusMzTabWriter.h +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Oliver Alka $ -// $Authors: Oliver Alka $ -// -------------------------------------------------------------------------- - -#pragma once - -#include -#include - -namespace OpenMS -{ - class OPENMS_DLLAPI SiriusMzTabWriter - { - public: - - /** - @brief Internal structure used in @ref TOPP_SiriusAdapter that is used - for the conversion of the sirius output to an mzTab. - @ingroup Analysis_ID - - SiriusAdapterHit: - formula (String) - Sumformula - adduct (String) - Assigned adduct - precursor_formula (String) - Sumformula of the precursor (can be the same as formula) - rank (int) - Rank of the possible sumformula for a compound (spectrum) calculated by Sirius - rank_score (double) - Ranking score - iso_score (double) - Isotope pattern score - tree_score (double) - Fragmentation pattern score - sirius_score (double) - Overall score of the possible sumformula for a compound (spectrum) calculated by Sirius - explainedpeaks (int) - Number of explained peaks - explainedintensity (double) - Relative amount of explained intensity - - SiriusAdapterIdentification: - scan_index (int) - Index of the spectrum used - scan_number (int) - NativeId of the spectrum used - feature_id (String) - FeatureId (if spectrum was assigned to a feature) - hits (vector) - - SiriusAdapterRun: - identifications (vector) - - Store a specific @param number of lines from sirius output - @return mzTab - */ - - class SiriusAdapterHit - { - public: - OpenMS::String formula; - OpenMS::String adduct; - OpenMS::String precursor_formula; - int rank = 0; - double iso_score = 0.0; - double tree_score = 0.0; - double sirius_score = 0.0; - int explainedpeaks = 0; - double explainedintensity = 0.0; - double median_mass_error_fragment_peaks_ppm = 0.0; - double median_absolute_mass_error_fragment_peaks_ppm = 0.0; - double mass_error_precursor_ppm = 0.0; - }; - - class SiriusAdapterIdentification - { - public: - double mz = 0.; - double rt = 0.; - OpenMS::StringList native_ids; - int scan_index = -1; - int scan_number = -1; - OpenMS::String feature_id; - std::vector hits; - }; - - class SiriusAdapterRun - { - public: - std::vector identifications; - }; - - class SiriusSpectrumMSInfo - { - public: - StringList ext_n_id; // multiple possible MS2 spectra - double ext_mz = 0.0; - double ext_rt = 0.0; - }; - - /** - @brief Extract scan_index from filepath - */ - static int extractScanIndex(const String& path); - - /** - @brief Extract scan_number from filepath - */ - static int extractScanNumber(const String& path); - - /** - @brief Extract feature_id from filepath - */ - static String extractFeatureId(const String& path); - - /** - @brief Extract columnname and index based in SIRIUS entries - */ - static std::map< std::string, Size > extract_columnname_to_columnindex(CsvFile& csvfile); - - /** - @brief Extract mz, rt of the precursor and the nativeID of the corresponding MS2 spectra in the spectrum.ms file - */ - static SiriusSpectrumMSInfo extractSpectrumMSInfo(const String& single_sirius_path); - - /** - @brief Conversion of sirius output to mzTab - - Output of Sirius is one directory per spectrum/compound - - @param sirius_output_paths: Path to output directories of Sirius - @param original_input_mzml: Path to mzml input of SiriusAdapter - @param top_n_hits: Top n entries for each compound written to the result file - @param result mzTab result - */ - static void read(const std::vector& sirius_output_paths, - const String& original_input_mzml, - const Size& top_n_hits, - MzTab& result); - - }; - - namespace SiriusVersion - { - /// SIRIUS version - inline const std::string CURRENT_VERSION = "5.6.3"; - } - -} - diff --git a/src/openms/include/OpenMS/FORMAT/DATAACCESS/sources.cmake b/src/openms/include/OpenMS/FORMAT/DATAACCESS/sources.cmake index 2a0b2a9ddd7..bf277c2f9bd 100644 --- a/src/openms/include/OpenMS/FORMAT/DATAACCESS/sources.cmake +++ b/src/openms/include/OpenMS/FORMAT/DATAACCESS/sources.cmake @@ -3,7 +3,6 @@ set(directory include/OpenMS/FORMAT/DATAACCESS) ### list all header files of the directory here set(sources_list_h - CsiFingerIdMzTabWriter.h MSDataAggregatingConsumer.h MSDataCachedConsumer.h MSDataChainingConsumer.h @@ -13,7 +12,6 @@ set(sources_list_h MSDataWritingConsumer.h NoopMSDataConsumer.h SiriusFragmentAnnotation.h - SiriusMzTabWriter.h SwathFileConsumer.h ) diff --git a/src/openms/source/ANALYSIS/ID/SiriusAdapterAlgorithm.cpp b/src/openms/source/ANALYSIS/ID/SiriusAdapterAlgorithm.cpp deleted file mode 100644 index 7b7183d4acd..00000000000 --- a/src/openms/source/ANALYSIS/ID/SiriusAdapterAlgorithm.cpp +++ /dev/null @@ -1,656 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Oliver Alka $ -// $Authors: Oliver Alka, Lukas Zimmermann $ -// -------------------------------------------------------------------------- - -#include // must be first, otherwise Q_FOREACH macro will wreak havoc - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -namespace OpenMS -{ - // ################### - // Set subtool parameters - // ################### - - using ProjectName = String; - using SiriusName = String; - using FingeridName = String; - using PassatuttoName = String; - using OpenMSName = String; - using DefaultValue = ParamValue; - using Description = String; - - SiriusAdapterAlgorithm::SiriusAdapterAlgorithm() : - DefaultParamHandler("SiriusAdapterAlgorithm"), - preprocessing(Preprocessing(this)), - project(Project(this)), - sirius(Sirius(this)), - fingerid(Fingerid(this)), - passatutto(Passatutto(this)) - { - // Defines the Parameters for preprocessing and SIRIUS subtools - preprocessing.parameters(); - project.parameters(); - sirius.parameters(); - fingerid.parameters(); - passatutto.parameters(); - - defaults_.setValue("read_sirius_stdout", "false", "Read and print the standard output and error of the Sirius executable, even if it succeeds.", {"advanced"}); - defaults_.setValidStrings("read_sirius_stdout",{"true","false"}); - - defaultsToParam_(); - } - - void SiriusAdapterAlgorithm::Preprocessing::parameters() - { - parameter( - OpenMSName("filter_by_num_masstraces"), - DefaultValue(1), - Description("Number of mass traces each feature has to have to be included. " - "To use this parameter, setting the feature_only flag is necessary") - ).withMinInt(1); - - parameter( - OpenMSName("precursor_mz_tolerance"), - DefaultValue(10.0), - Description("Tolerance window for precursor selection (Feature selection in regard to the precursor)") - ); - - parameter( - OpenMSName("precursor_mz_tolerance_unit"), - DefaultValue("ppm"), - Description("Unit of the precursor_mz_tolerance") - ).withValidStrings({"Da", "ppm"}); - - parameter( - OpenMSName("precursor_rt_tolerance"), - DefaultValue(5.0), - Description("Tolerance window (left and right) for precursor selection [seconds]") - ); - - parameter( - OpenMSName("isotope_pattern_iterations"), - DefaultValue(3), - Description("Number of iterations that should be performed to extract the C13 isotope pattern. " - "If no peak is found (C13 distance) the function will abort. " - "Be careful with noisy data - since this can lead to wrong isotope patterns") - ); - - flag( - OpenMSName("feature_only"), - Description("Uses the feature information from in_featureinfo to reduce the search space to MS2 " - "associated with a feature") - ); - - flag( - OpenMSName("no_masstrace_info_isotope_pattern"), - Description("Use this flag if the masstrace information from a feature should be discarded " - "and the isotope_pattern_iterations should be used instead") - ); - } - - void SiriusAdapterAlgorithm::Project::parameters() - { - parameter( - ProjectName("maxmz"), - DefaultValue(-1), - Description("Just consider compounds with a precursor mz lower or equal\n" - "this maximum mz. All other compounds in the input file\n" - "are ignored.") - ); - - parameter( - ProjectName("processors"), - DefaultValue(1), - Description("Number of cpu cores to use. If not specified SIRIUS uses all available cores.") - ); - - parameter( - ProjectName("loglevel"), - DefaultValue(""), - Description("Set logging level of the Jobs SIRIUS will execute.\n" - "Valid values: SEVERE, WARNING, INFO, FINER, ALL\n" - "Default: WARNING") - ); - - flag( - ProjectName("ignore-formula"), - Description("Ignore given molecular formula in internal .ms format, while processing.") - ); - - flag( - ProjectName("q"), - Description("Suppress shell output") - ); - } - - void SiriusAdapterAlgorithm::Sirius::parameters() // original sirius 5.6.1 parameters as defaults, except for timeouts - { - parameter( - SiriusName("ppm-max"), - DefaultValue(10.0), - Description("Maximum allowed mass deviation in ppm for decomposing masses [ppm].") - ); - - parameter( - SiriusName("ppm-max-ms2"), - DefaultValue(10.0), - Description("Maximum allowed mass deviation in ppm for decomposing masses in MS2 [ppm]." - "If not specified, the same value as for the MS1 is used. ") - ); - - parameter( - SiriusName("tree-timeout"), - DefaultValue(100), // original default = 0 - Description("Time out in seconds per fragmentation tree computations. 0 for an infinite amount of time") - ).withMinInt(0); - - parameter( - SiriusName("compound-timeout"), - DefaultValue(100), // original default = 0 - Description("Maximal computation time in seconds for a single compound. 0 for an infinite amount of time.") - ).withMinInt(0); - - flag( - SiriusName("no-recalibration"), - Description("Disable recalibration of input spectra") - ); - - parameter( - SiriusName("profile"), - DefaultValue("default"), - Description("Name of the configuration profile") - ).withValidStrings({"default", "qtof", "orbitrap", "fticr"}); - - parameter( - SiriusName("formulas"), - DefaultValue(""), - Description("Specify the neutral molecular formula of the measured " - "compound to compute its tree or a list of candidate " - "formulas the method should discriminate. Omit this " - "option if you want to consider all possible molecular formulas") - ); - - parameter( - SiriusName("ions-enforced"), - DefaultValue(""), - Description("the iontype/adduct of the MS/MS data. Example: [M+H]+, " - "[M-H]-, [M+Cl]-, [M+Na]+, [M]+. You can also provide a comma separated list of adducts") - ); - - parameter( - SiriusName("candidates"), - DefaultValue(10), - Description("The number of formula candidates in the SIRIUS output") - ).withMinInt(0); - - parameter( - SiriusName("candidates-per-ion"), - DefaultValue(1), - Description("Minimum number of candidates in the output for each " - "ionization. Set to force output of results for each " - "possible ionization, even if not part of highest " - "ranked results.") - ); - - parameter( - SiriusName("elements-considered"), - DefaultValue("SBrClBSe"), - Description("Set the allowed elements for rare element detection. " - "Write SBrClBSe to allow the elements S,Br,Cl,B and Se.")); - - parameter( - SiriusName("elements-enforced"), - DefaultValue("CHNOP"), - Description("Enforce elements for molecular formula determination. " - "Write CHNOPSCl to allow the elements C, H, N, O, P, S " - "and Cl. Add numbers in brackets to restrict the " - "minimal and maximal allowed occurrence of these " - "elements: CHNOP[5]S[8]Cl[1-2]. When one number is " - "given then it is interpreted as upper bound.") - ); - - flag( - SiriusName("no-isotope-score"), - Description("Disable isotope pattern score.") - ); - - flag( - SiriusName("no-isotope-filter"), - Description("Disable molecular formula filter. When filtering is enabled, molecular formulas are " - "excluded if their theoretical isotope pattern does not match the theoretical one, even if " - "their MS/MS pattern has high score.") - ); - - parameter( - SiriusName("ions-considered"), - DefaultValue("[M+H]+,[M+K]+,[M+Na]+,[M+H-H2O]+,[M+H-H4O2]+,[M+NH4]+,[M-H]-,[M+Cl]-,[M-H2O-H]-,[M+Br]-"), - Description("the iontype/adduct of the MS/MS data. " - "Example: [M+H]+, [M-H]-, [M+Cl]-, [M+Na]+, [M]+. " - "You can also provide a comma separated list of adducts.") - ); - - parameter( - SiriusName("db"), - DefaultValue("none"), - Description("Search formulas in the Union of the given " - "databases db-name1,db-name2,db-name3. If no database is given all possible " - "molecular formulas will be respected (no database " - "is used). " - "Example: possible DBs: ALL,BIO,PUBCHEM,MESH,HMDB," - "KNAPSACK,CHEBI,PUBMED,KEGG,HSDB,MACONDA,METACYC," - "GNPS,ZINCBIO,UNDP,YMDB,PLANTCYC,NORMAN,ADDITIONAL," - "PUBCHEMANNOTATIONBIO,PUBCHEMANNOTATIONDRUG," - "PUBCHEMANNOTATIONSAFETYANDTOXIC," - "PUBCHEMANNOTATIONFOOD,KEGGMINE,ECOCYCMINE," - "YMDBMINE") - ); - - parameter( - SiriusName("ions-enforced"), - DefaultValue(""), - Description("The iontype/adduct of the MS/MS data. Example: [M+H]+, \n" - "[M-H]-, [M+Cl]-, [M+Na]+, [M]+. You can also provide a \n" - "comma separated list of adducts.") - ); - - parameter( - SiriusName("solver"), - DefaultValue("CLP"), - Description("For GUROBI and CPLEX environment variables need to be configured. \n" - "(see SIRIUS manual: https://boecker-lab.github.io/docs.sirius.github.io/install/).") - ); - } - - void SiriusAdapterAlgorithm::Fingerid::parameters() - { - parameter( - FingeridName("db"), - DefaultValue(""), // default = BIO - Description("Search structures in the Union of the given " - "databases db-name1,db-name2,db-name3. If no database is given all possible " - "molecular formulas will be respected (no database " - "is used). " - "Example: possible DBs: ALL,BIO,PUBCHEM,MESH,HMDB," - "KNAPSACK,CHEBI,PUBMED,KEGG,HSDB,MACONDA,METACYC," - "GNPS,ZINCBIO,UNDP,YMDB,PLANTCYC,NORMAN,ADDITIONAL," - "PUBCHEMANNOTATIONBIO,PUBCHEMANNOTATIONDRUG," - "PUBCHEMANNOTATIONSAFETYANDTOXIC," - "PUBCHEMANNOTATIONFOOD,KEGGMINE,ECOCYCMINE," - "YMDBMINE") - ); - } - - void SiriusAdapterAlgorithm::Passatutto::parameters() - { - } - - void SiriusAdapterAlgorithm::updateExistingParameter(const OpenMS::Param ¶m) - { - for (auto it = param.begin(); it != param.end(); ++it) - { - const std::string name = it.getName(); - if (hasFullNameParameter(name)) - { - vector tags(it->tags.begin(), it->tags.end()); - param_.setValue(name, it->value, it->description, tags); - } - } - } - - bool SiriusAdapterAlgorithm::hasFullNameParameter(const OpenMS::String &name) const - { - for (auto it = param_.begin(); it != param_.end(); ++it) - { - if (it.getName() == name) - { - return true; - } - } - return false; - } - - String SiriusAdapterAlgorithm::determineSiriusExecutable(String& executable) - { - // if executable was not provided - if (executable.empty()) - { - const char* sirius_env_var = std::getenv("SIRIUS_PATH"); // returns nullptr if not found - if (sirius_env_var == nullptr) - { - throw Exception::InvalidValue(__FILE__, - __LINE__, - OPENMS_PRETTY_FUNCTION, - "FATAL: Executable of SIRIUS could not be found. Please either use SIRIUS_PATH env variable, add the Sirius directory to our PATH or provide the executable with -sirius_executable", - ""); - } - const std::string sirius_path(sirius_env_var); - executable = sirius_path; - } - String exe = QFileInfo(executable.toQString()).canonicalFilePath().toStdString(); - return exe; - } - - SiriusAdapterAlgorithm::SiriusTemporaryFileSystemObjects::SiriusTemporaryFileSystemObjects(int debug_level) - { - QString base_dir = File::getTempDirectory().toQString(); - tmp_dir_ = String(QDir(base_dir).filePath(File::getUniqueName().toQString())); - tmp_ms_file_ = QDir(base_dir).filePath((File::getUniqueName() + ".ms").toQString()); - tmp_out_dir_ = QDir(tmp_dir_.toQString()).filePath("sirius_out"); - debug_level_ = debug_level; - } - - SiriusAdapterAlgorithm::SiriusTemporaryFileSystemObjects::~SiriusTemporaryFileSystemObjects() - { - constexpr int debug_threshold = 9; - - // clean tmp directory if debug level < debug threshold - if (debug_level_ >= debug_threshold) - { - OPENMS_LOG_DEBUG << "Keeping temporary files in directory " << tmp_dir_ << " and msfile at this location "<< tmp_ms_file_ << ". Set debug level lower than " << debug_threshold << " to remove them." << std::endl; - } - else - { - if (!tmp_dir_.empty()) - { - OPENMS_LOG_DEBUG << "Deleting temporary directory " << tmp_dir_ << ". Set debug level to " << debug_threshold << " or higher to keep it." << std::endl; - File::removeDir(tmp_dir_.toQString()); - } - if (!tmp_ms_file_.empty()) - { - OPENMS_LOG_DEBUG << "Deleting temporary msfile " << tmp_ms_file_ << ". Set debug level to " << debug_threshold << " or higher to keep it." << std::endl; - File::remove(tmp_ms_file_); - } - } - } - - // ################ - // Algorithm - // ################ - - const String& SiriusAdapterAlgorithm::SiriusTemporaryFileSystemObjects::getTmpDir() const - { - return tmp_dir_; - } - - const String& SiriusAdapterAlgorithm::SiriusTemporaryFileSystemObjects::getTmpOutDir() const - { - return tmp_out_dir_; - } - - const String& SiriusAdapterAlgorithm::SiriusTemporaryFileSystemObjects::getTmpMsFile() const - { - return tmp_ms_file_; - } - - class OPENMS_DLLAPI SiriusWorkspaceIndex - { - public: - int array_index, scan_index; - - SiriusWorkspaceIndex(int array_index, int scan_index) : array_index {array_index}, scan_index {scan_index} {} - }; - - void SiriusAdapterAlgorithm::sortSiriusWorkspacePathsByScanIndex(std::vector& subdirs) - { - std::vector sorted_subdirs; - std::vector indices; - - for (size_t i = 0; i < subdirs.size(); i++) - { - indices.emplace_back(i, SiriusMzTabWriter::extractScanIndex(subdirs[i])); - } - - std::sort(indices.begin(), - indices.end(), - [](const SiriusWorkspaceIndex& i, const SiriusWorkspaceIndex& j) { return i.scan_index < j.scan_index; } ); - - sorted_subdirs.reserve(indices.size()); - for (const auto& index : indices) - { - sorted_subdirs.emplace_back(std::move(subdirs[index.array_index])); - } - - sorted_subdirs.swap(subdirs); - } - - void SiriusAdapterAlgorithm::preprocessingSirius(const String& featureinfo, - const MSExperiment& spectra, - FeatureMapping::FeatureMappingInfo& fm_info, - FeatureMapping::FeatureToMs2Indices& feature_mapping) const - { - // if fileparameter is given and should be not empty - if (!featureinfo.empty()) - { - if (File::exists(featureinfo) && !File::empty(featureinfo)) - { - // read featureXML - FeatureMap feature_map; - FileHandler().loadFeatures(featureinfo, feature_map); - - UInt num_masstrace_filter = getFilterByNumMassTraces(); - double precursor_mz_tol = getPrecursorMzTolerance(); - double precursor_rt_tol = getPrecursorRtTolerance(); - - if (num_masstrace_filter != 1 && !isFeatureOnly()) - { - num_masstrace_filter = 1; - OPENMS_LOG_WARN << "Parameter: filter_by_num_masstraces, was set to 1 to retain the adduct information for all MS2 spectra, if available. Masstrace filtering only makes sense in combination with feature_only." << std::endl; - } - - // filter feature by number of masstraces - auto map_it = remove_if(feature_map.begin(), feature_map.end(), - [&num_masstrace_filter](const Feature &feat) -> bool - { - unsigned int n_masstraces = feat.getMetaValue(Constants::UserParam::NUM_OF_MASSTRACES); - return n_masstraces < num_masstrace_filter; - }); - feature_map.erase(map_it, feature_map.end()); - - fm_info.feature_maps.push_back(feature_map); - fm_info.kd_tree.addMaps(fm_info.feature_maps); // KDTree references into feature_map - - // mapping of MS2 spectra to features - feature_mapping = FeatureMapping::assignMS2IndexToFeature(spectra, - fm_info, - precursor_mz_tol, - precursor_rt_tol, - precursorMzToleranceUnitIsPPM()); - } - else - { - throw OpenMS::Exception::FileEmpty(__FILE__, - __LINE__, - __FUNCTION__, - "Error: FeatureXML was empty, please provide a valid file."); - } - } - } - - void SiriusAdapterAlgorithm::logFeatureSpectraNumber(const String& featureinfo, - const FeatureMapping::FeatureToMs2Indices& feature_mapping, - const MSExperiment& spectra) const - { - // number of features to be processed - if (isFeatureOnly() && !featureinfo.empty()) - { - OPENMS_LOG_INFO << "Number of features to be processed: " << feature_mapping.assignedMS2.size() << std::endl; - } - else if (!featureinfo.empty()) - { - OPENMS_LOG_INFO << "Number of features to be processed: " << feature_mapping.assignedMS2.size() << std::endl; - OPENMS_LOG_INFO << "Number of additional MS2 spectra to be processed: " << feature_mapping.unassignedMS2.size() << std::endl; - } - else - { - long count_ms2 = count_if(spectra.begin(), spectra.end(), - [](const MSSpectrum &spectrum) { return spectrum.getMSLevel() == 2; }); - - OPENMS_LOG_INFO << "Number of MS2 spectra to be processed: " << count_ms2 << std::endl; - } - } - - // ################ - // Algorithm - // ################ - - void SiriusAdapterAlgorithm::logInSiriusAccount(String& executable, const String& email, const String& password) const - { - // sirius login --email=email --password=password - QString executable_qstring = SiriusAdapterAlgorithm::determineSiriusExecutable(executable).toQString(); - QStringList command_line{"login", String("--email="+email).toQString(), String("--password="+password).toQString()}; - - // start QProcess with sirius login command - QProcess qp; - qp.start(executable_qstring, command_line); - - // print executed command as info - std::stringstream ss; - ss << "Executing command: " << executable_qstring.toStdString(); - for (const QString& it : command_line) - { - ss << " " << it.toStdString(); - } - OPENMS_LOG_INFO << ss.str() << std::endl; - - // wait until process finished - qp.waitForFinished(-1); - - // always print process stdout (info) and stderror (warning) - const QString sirius_stdout(qp.readAllStandardOutput()); - const QString sirius_stderr(qp.readAllStandardError()); - OPENMS_LOG_INFO << String(sirius_stdout) << std::endl; - OPENMS_LOG_WARN << String(sirius_stderr) << std::endl; - - qp.close(); - } - - // tmp_msfile (store), all parameters, out_dir (tmpstructure) - const std::vector SiriusAdapterAlgorithm::callSiriusQProcess(const String& tmp_ms_file, - const String& tmp_out_dir, - String& executable, - const String& out_csifingerid, - const bool decoy_generation) const - - { - // get the command line parameters from all the subtools - QStringList project_params = project.getCommandLine(); - QStringList sirius_params = sirius.getCommandLine(); - QStringList fingerid_params = fingerid.getCommandLine(); - - const bool run_csifingerid = !out_csifingerid.empty(); - const bool run_passatutto = decoy_generation; - - // structure of the command line passed to NightSky (Sirius 4.X+) - // Add noCite and instead make sure the main citations are registered in our TOPP tool. - // Most of the time the user does not see the direct Sirius output anyway - QStringList command_line = QStringList("--noCite") + project_params + QStringList({"--input", tmp_ms_file.toQString(), "--project", tmp_out_dir.toQString(), "--no-compression", "sirius"}) + sirius_params; - - if (run_passatutto) - { - command_line << "passatutto"; - } - - if (run_csifingerid) - { - command_line << "fingerprint" << "structure" << fingerid_params; - } - - command_line << "write-summaries"; - - // the actual process - QProcess qp; - QString executable_qstring = SiriusAdapterAlgorithm::determineSiriusExecutable(executable).toQString(); - qp.start(executable_qstring, command_line); // does automatic escaping etc... start - std::stringstream ss; - - ss << "Executing command: " << executable_qstring.toStdString(); - for (const QString& it : command_line) - { - ss << " " << it.toStdString(); - } - OPENMS_LOG_WARN << ss.str() << std::endl; - - const bool success = qp.waitForFinished(-1); - - if (!success || qp.exitStatus() != 0 || qp.exitCode() != 0) - { - OPENMS_LOG_WARN << "FATAL: External invocation of Sirius failed. Standard output and error were:" << std::endl; - const QString sirius_stdout(qp.readAllStandardOutput()); - const QString sirius_stderr(qp.readAllStandardError()); - OPENMS_LOG_WARN << String(sirius_stdout) << std::endl; - OPENMS_LOG_WARN << String(sirius_stderr) << std::endl; - OPENMS_LOG_WARN << String(qp.exitCode()) << std::endl; - qp.close(); - - throw Exception::InvalidValue(__FILE__, - __LINE__, - OPENMS_PRETTY_FUNCTION, - "FATAL: SIRIUS could not be executed!", - ""); - } - - if (param_.getValue("read_sirius_stdout") == "true") - { - OPENMS_LOG_WARN << "Standard output and error of SIRIUS were:" << std::endl; - const QString sirius_stdout(qp.readAllStandardOutput()); - const QString sirius_stderr(qp.readAllStandardError()); - OPENMS_LOG_WARN << String(sirius_stdout) << std::endl; - OPENMS_LOG_WARN << String(sirius_stderr) << std::endl; - } - qp.close(); - - //extract path to subfolders (sirius internal folder structure) - std::vector subdirs; - QDirIterator it(tmp_out_dir.toQString(), QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::NoIteratorFlags); - while (it.hasNext()) - { - subdirs.emplace_back(it.next()); - } - return subdirs; - } - - // ################ - // Parameter handling - // ################ - - SiriusAdapterAlgorithm::ParameterModifier SiriusAdapterAlgorithm::ParameterSection::parameter( - const String ¶meter_name, - const ParamValue &default_value, - const String ¶meter_description) - { - const String full_parameter = toFullParameter(parameter_name); - openms_to_sirius[full_parameter] = parameter_name; - enclose->defaults_.setValue(full_parameter, default_value, parameter_description); - return ParameterModifier(full_parameter, enclose); - } - - void SiriusAdapterAlgorithm::ParameterSection::flag( - const OpenMS::String ¶meter_name, - const OpenMS::String ¶meter_description) - { - parameter(parameter_name, DefaultValue("false"), parameter_description) - .withValidStrings({"true", "false"}); - } -} // namespace OpenMS - -/// @endcond diff --git a/src/openms/source/ANALYSIS/ID/SiriusExportAlgorithm.cpp b/src/openms/source/ANALYSIS/ID/SiriusExportAlgorithm.cpp new file mode 100644 index 00000000000..1fdf996a0b4 --- /dev/null +++ b/src/openms/source/ANALYSIS/ID/SiriusExportAlgorithm.cpp @@ -0,0 +1,178 @@ +// Copyright (c) 2002-2023, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin +// SPDX-License-Identifier: BSD-3-Clause +// +// -------------------------------------------------------------------------- +// $Maintainer: Oliver Alka, Axel Walter $ +// $Authors: Oliver Alka, Lukas Zimmermann $ +// -------------------------------------------------------------------------- + +#include // must be first, otherwise Q_FOREACH macro will wreak havoc + +#include +#include + +#include + +namespace OpenMS +{ + SiriusExportAlgorithm::SiriusExportAlgorithm() : + DefaultParamHandler("SiriusExportAlgorithm") + { + defaults_.setValue("filter_by_num_masstraces", 1, "Number of mass traces each feature has to have to be included. To use this parameter, setting the feature_only flag is necessary"); + defaults_.setMinInt("filter_by_num_masstraces", 1); + + defaults_.setValue("precursor_mz_tolerance", 10.0, "Tolerance window for precursor selection (Feature selection in regard to the precursor)"); + + defaults_.setValue("precursor_mz_tolerance_unit", "ppm", "Unit of the preprocessing_precursor_mz_tolerance"); + defaults_.setValidStrings("precursor_mz_tolerance_unit", {"ppm","Da"}); + + defaults_.setValue("precursor_rt_tolerance", 5.0, "Tolerance window (left and right) for precursor selection [seconds]"); + + defaults_.setValue("isotope_pattern_iterations", 3, "Number of iterations that should be performed to extract the C13 isotope pattern. If no peak is found (C13 distance) the function will abort. Be careful with noisy data - since this can lead to wrong isotope patterns"); + + defaults_.setValue("feature_only", "false", "Uses the feature information from in_featureinfo to reduce the search space to MS2 associated with a feature"); + defaults_.setValidStrings("feature_only", {"false","true"}); + + defaults_.setValue("no_masstrace_info_isotope_pattern", "false", "Set to true if the masstrace information from a feature should be discarded and the isotope_pattern_iterations should be used instead"); + defaults_.setValidStrings("no_masstrace_info_isotope_pattern", {"false","true"}); + defaultsToParam_(); + } + + // ################ + // Algorithm + // ################ + void SiriusExportAlgorithm::preprocessing(const String& featureXML_path, + const MSExperiment& spectra, + FeatureMapping::FeatureMappingInfo& feature_mapping_info, + FeatureMapping::FeatureToMs2Indices& feature_ms2_indices) const +{ + // if fileparameter is given and should be not empty + if (!featureXML_path.empty()) + { + Size preprocessing_filter_by_num_masstraces = getFilterByNumMassTraces(); + if (File::exists(featureXML_path) && !File::empty(featureXML_path)) + { + // read featureXML + FeatureMap feature_map; + FileHandler().loadFeatures(featureXML_path, feature_map); + + if (preprocessing_filter_by_num_masstraces != 1 && !isFeatureOnly()) + { + preprocessing_filter_by_num_masstraces = 1; + OPENMS_LOG_WARN << "Parameter: preprocessing_filter_by_num_masstraces, was set to 1 to retain the adduct information for all MS2 spectra, if available. Masstrace filtering only makes sense in combination with feature_only." << std::endl; + } + + // filter feature by number of masstraces + auto map_it = remove_if(feature_map.begin(), feature_map.end(), + [&preprocessing_filter_by_num_masstraces](const Feature &feat) -> bool + { + unsigned int n_masstraces = feat.getMetaValue(Constants::UserParam::NUM_OF_MASSTRACES); + return n_masstraces < preprocessing_filter_by_num_masstraces; + }); + feature_map.erase(map_it, feature_map.end()); + + feature_mapping_info.feature_maps.push_back(feature_map); + feature_mapping_info.kd_tree.addMaps(feature_mapping_info.feature_maps); // KDTree references into feature_map + + // mapping of MS2 spectra to features + feature_ms2_indices = FeatureMapping::assignMS2IndexToFeature(spectra, + feature_mapping_info, + getPrecursorMzTolerance(), + getPrecursorRtTolerance(), + precursorMzToleranceUnitIsPPM()); + } + else + { + throw OpenMS::Exception::FileEmpty(__FILE__, + __LINE__, + __FUNCTION__, + "Error: FeatureXML was empty, please provide a valid file."); + } + } + } + + + void SiriusExportAlgorithm::logFeatureSpectraNumber(const String& featureXML_path, + const FeatureMapping::FeatureToMs2Indices& feature_ms2_indices, + const MSExperiment& spectra) const + { + // number of features to be processed + if (isFeatureOnly() && !featureXML_path.empty()) + { + OPENMS_LOG_INFO << "Number of features to be processed: " << feature_ms2_indices.assignedMS2.size() << std::endl; + } + else if (!featureXML_path.empty()) + { + OPENMS_LOG_INFO << "Number of features to be processed: " << feature_ms2_indices.assignedMS2.size() << std::endl; + OPENMS_LOG_INFO << "Number of additional MS2 spectra to be processed: " << feature_ms2_indices.unassignedMS2.size() << std::endl; + } + else + { + long count_ms2 = count_if(spectra.begin(), spectra.end(), + [](const MSSpectrum &spectrum) { return spectrum.getMSLevel() == 2; }); + + OPENMS_LOG_INFO << "Number of MS2 spectra to be processed: " << count_ms2 << std::endl; + } + } + + void SiriusExportAlgorithm::run(const StringList& mzML_files, + const StringList& featureXML_files, + const String& out_ms, + const String& out_compoundinfo) const + { + // loop over all spectra in all files and write data to ofstream + ofstream os; + + // create temporary input file (.ms) + os.open(out_ms); + if (!os) + { + throw Exception::UnableToCreateFile(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, out_ms); + } + os.precision(12); + + std::vector v_cmpinfo; // To store compound information for all files + for (size_t i = 0; i < mzML_files.size(); ++i) + { + // load experiment + MSExperiment spectra; + FileHandler().loadExperiment(mzML_files[i], spectra, {FileTypes::MZML}); + + // run masstrace filter and feature mapping + FeatureMapping::FeatureMappingInfo feature_mapping_info; + FeatureMapping::FeatureToMs2Indices feature_ms2_indices; + + // check if 'featureXML_files' is empty and pass an empty string if it is + String feature_info_to_pass = featureXML_files.empty() ? "" : featureXML_files[i]; + SiriusExportAlgorithm::preprocessing(feature_info_to_pass, + spectra, + feature_mapping_info, + feature_ms2_indices); + + // returns Log of feature and/or spectra number + SiriusExportAlgorithm::logFeatureSpectraNumber(feature_info_to_pass, feature_ms2_indices, spectra); + + // temporary vector to store compound information for the current file + std::vector temp_cmpinfo; + SiriusMSFile::store(spectra, + os, + feature_ms2_indices, + isFeatureOnly(), + getIsotopePatternIterations(), + isNoMasstraceInfoIsotopePattern(), + temp_cmpinfo, + i); + // Append the compound information of the current file to the overall vector + v_cmpinfo.insert(v_cmpinfo.end(), temp_cmpinfo.begin(), temp_cmpinfo.end()); + } + + os.close(); + + if (!out_compoundinfo.empty()) + { + SiriusMSFile::saveFeatureCompoundInfoAsTSV(v_cmpinfo, out_compoundinfo); + } + } +} // namespace OpenMS + +/// @endcond diff --git a/src/openms/source/ANALYSIS/ID/SiriusMSConverter.cpp b/src/openms/source/ANALYSIS/ID/SiriusMSConverter.cpp index 50cbdca7997..d56b2556e3d 100644 --- a/src/openms/source/ANALYSIS/ID/SiriusMSConverter.cpp +++ b/src/openms/source/ANALYSIS/ID/SiriusMSConverter.cpp @@ -2,19 +2,16 @@ // SPDX-License-Identifier: BSD-3-Clause // // -------------------------------------------------------------------------- -// $Maintainer: Oliver Alka $ +// $Maintainer: Oliver Alka, Axel Walter $ // $Authors: Oliver Alka $ // -------------------------------------------------------------------------- #include -#include #include #include #include #include #include -#include -#include using namespace OpenMS; using namespace std; @@ -111,7 +108,8 @@ namespace OpenMS int& count_skipped_spectra, int& count_assume_mono, int& count_no_ms1, - std::vector& v_cmpinfo) + std::vector& v_cmpinfo, + const size_t& file_index) { // if multiple identifications present for one MS1 and MS2 use all of them and // let SIRIUS sort it out using fragment annotation @@ -120,6 +118,8 @@ namespace OpenMS if (v_description.size() > 1) { writecompound = true; } // write the same "entry" for each possible hit (different: description, adduct, sumformula) SiriusMSFile::CompoundInfo cmpinfo; + cmpinfo.file_index = file_index; + for (const size_t& ind : ms2_spectra_index) { // construct compound info structure @@ -228,7 +228,7 @@ namespace OpenMS std::string des_wo_space = v_description[k]; des_wo_space.erase(std::remove_if(des_wo_space.begin(), des_wo_space.end(), ::isspace), des_wo_space.end()); - String query_id = "_" + String(feature_id) + + String query_id = String(file_index) + "_" + String(feature_id) + String("-" + String(scan_number) + "-") + String("-" + String(ind) + "--") + String(des_wo_space); @@ -399,17 +399,23 @@ namespace OpenMS } cmpinfo.native_ids_id = ListUtils::concatenate(cmpinfo.native_ids, "|"); cmpinfo.m_ids_id = ListUtils::concatenate(cmpinfo.m_ids, "|"); - v_cmpinfo.push_back(std::move(cmpinfo)); + + // add cmpinfo if derived from a feature (feature_id > 0) + if (feature_id > 0) + { + v_cmpinfo.push_back(std::move(cmpinfo)); + } } } void SiriusMSFile::store(const MSExperiment& spectra, - const OpenMS::String& msfile, + std::ofstream& os, const FeatureMapping::FeatureToMs2Indices& feature_mapping, const bool& feature_only, const int& isotope_pattern_iterations, const bool no_masstrace_info_isotope_pattern, - std::vector& v_cmpinfo) + std::vector& v_cmpinfo, + const size_t& file_index) { const std::map>& assigned_ms2 = feature_mapping.assignedMS2; const vector & unassigned_ms2 = feature_mapping.unassignedMS2; @@ -440,17 +446,6 @@ namespace OpenMS throw OpenMS::Exception::IllegalArgument(__FILE__, __LINE__, __FUNCTION__, "Error: Profile data provided but centroided spectra are needed. Please use PeakPicker to convert the spectra."); } - // loop over all spectra in file and write data to ofstream - ofstream os; - - // create temporary input file (.ms) - os.open(msfile.c_str()); - if (!os) - { - throw Exception::UnableToCreateFile(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, msfile); - } - os.precision(12); - AccessionInfo ainfo; // sourcefile @@ -617,7 +612,8 @@ namespace OpenMS count_skipped_spectra, count_assume_mono, count_no_ms1, - v_cmpinfo); + v_cmpinfo, + file_index); } } @@ -652,7 +648,8 @@ namespace OpenMS count_skipped_spectra, count_assume_mono, count_no_ms1, - v_cmpinfo); + v_cmpinfo, + file_index); } // no feature information was provided @@ -702,17 +699,52 @@ namespace OpenMS count_skipped_spectra, count_assume_mono, count_no_ms1, - v_cmpinfo); + v_cmpinfo, + file_index); } - os.close(); - OPENMS_LOG_WARN << "No MS1 spectrum for this precursor. Occurred " << count_no_ms1 << " times." << endl; OPENMS_LOG_WARN << count_skipped_spectra << " spectra were skipped due to precursor charge below -1 and above +1." << endl; OPENMS_LOG_WARN << "Mono charge assumed and set to charge 1 with respect to current polarity " << count_assume_mono << " times."<< endl; OPENMS_LOG_WARN << count_skipped_features << " features were skipped due to feature charge below -1 and above +1." << endl; } + + void SiriusMSFile::saveFeatureCompoundInfoAsTSV(const std::vector& v_cmpinfo, + const std::string& filename) { + std::ofstream file(filename); + + // Check if the file is open + if (!file.is_open()) { + throw std::runtime_error("Unable to open file: " + filename); + } + + // Write the header line + file << "cmp\tfile_index\tpmass\tpint_mono\trt\tfmz\tfid\tformula\tcharge\tionization\tdes\tspecref_format\tsource_file\tsource_format\tnative_ids_id\tm_ids_id\n"; + + // Iterate over the vector and write each object's attributes + for (const auto& info : v_cmpinfo) + { + file << info.cmp << "\t" + << info.file_index << "\t" + << info.pmass << "\t" + << info.pint_mono << "\t" + << info.rt << "\t" + << info.fmz << "\t" + << info.fid << "\t" + << info.formula << "\t" + << info.charge << "\t" + << info.ionization << "\t" + << info.des << "\t" + << info.specref_format << "\t" + << info.source_file << "\t" + << info.source_format << "\t" + << info.native_ids_id << "\t" + << info.m_ids_id << "\n"; + } + + file.close(); + } } // namespace OpenMS /// @endcond diff --git a/src/openms/source/ANALYSIS/ID/sources.cmake b/src/openms/source/ANALYSIS/ID/sources.cmake index ea60c074b76..9a0c36781ed 100644 --- a/src/openms/source/ANALYSIS/ID/sources.cmake +++ b/src/openms/source/ANALYSIS/ID/sources.cmake @@ -42,7 +42,7 @@ PrecursorPurity.cpp ProtonDistributionModel.cpp PScore.cpp SimpleSearchEngineAlgorithm.cpp -SiriusAdapterAlgorithm.cpp +SiriusExportAlgorithm.cpp SiriusMSConverter.cpp ) diff --git a/src/openms/source/ANALYSIS/TARGETED/MetaboTargetedAssay.cpp b/src/openms/source/ANALYSIS/TARGETED/MetaboTargetedAssay.cpp index 66c4cae560d..68286611479 100644 --- a/src/openms/source/ANALYSIS/TARGETED/MetaboTargetedAssay.cpp +++ b/src/openms/source/ANALYSIS/TARGETED/MetaboTargetedAssay.cpp @@ -39,7 +39,7 @@ namespace OpenMS { adduct_suffix = "1" + adduct_suffix; } - else + else if (adduct_suffix != "1-" && adduct_suffix != "1+") { OpenMS_Log_warn << "The adduct had the suffix '" << adduct_suffix << "', but only singly positive or singly negative charged adducts are supported." << std::endl; } @@ -424,8 +424,7 @@ namespace OpenMS const double& min_fragment_mz, const double& max_fragment_mz, const bool& use_exact_mass, - const bool& exclude_ms2_precursor, - const unsigned int& file_counter) + const bool& exclude_ms2_precursor) { int entry_counter = 0; // counts each entry - to ensure the same count for targets, decoys from the same sirius workspace vector v_mta; @@ -536,14 +535,13 @@ namespace OpenMS v_cmp_rt = {cmp_rt}; cmp.rts = {v_cmp_rt}; cmp.setChargeState(charge); - String identifier_suffix = adduct + "_" + int(feature_rt) + "_" + file_counter; + String identifier_suffix = adduct + "_" + int(feature_rt) + "_" + csp.compound_info.file_index; if (description == "UNKNOWN") { description = String(description + "_" + entry_counter); } // compoundID has to be unique over all the files - // file_counter unique per file // feature_rt if the same ID was detected twice at different retention times in the same file if (decoy == 0) { @@ -657,7 +655,7 @@ namespace OpenMS mta.molecular_formula = sumformula; mta.compound_rt = feature_rt; - mta.compound_file = file_counter; + mta.compound_file = csp.compound_info.file_index; mta.potential_cmp = cmp; mta.potential_rmts = v_rmt; @@ -690,24 +688,6 @@ namespace OpenMS return v_cmp_spec; } - // method to pair compound information (SiriusMSFile) with the annotated target spectrum from Sirius based on the m_id (unique identifier) - std::vector< MetaboTargetedAssay::CompoundSpectrumPair > MetaboTargetedAssay::pairCompoundWithAnnotatedSpectra(const std::vector& v_cmpinfo, - const std::vector& annotated_spectra) - { - vector< MetaboTargetedAssay::CompoundSpectrumPair > v_cmp_spec; - for (const auto& cmp : v_cmpinfo) - { - for (const auto& spectrum : annotated_spectra) - { - if (cmp.m_ids_id == spectrum.getName()) // the m_id is saved at MSSpectrum level as its name - { - v_cmp_spec.emplace_back(cmp, spectrum); - } - } - } - return v_cmp_spec; - } - std::unordered_map< UInt64 , vector > MetaboTargetedAssay::buildAmbiguityGroup(const vector& v_mta,const double& ar_mz_tol, const double& ar_rt_tol, const String& ar_mz_tol_unit_res, size_t in_files_size) { String decoy_suffix = "_decoy"; diff --git a/src/openms/source/ANALYSIS/TARGETED/MetaboTargetedTargetDecoy.cpp b/src/openms/source/ANALYSIS/TARGETED/MetaboTargetedTargetDecoy.cpp index 244bbf4bbb3..1ff05e50ddc 100644 --- a/src/openms/source/ANALYSIS/TARGETED/MetaboTargetedTargetDecoy.cpp +++ b/src/openms/source/ANALYSIS/TARGETED/MetaboTargetedTargetDecoy.cpp @@ -74,68 +74,66 @@ namespace OpenMS return mappings; } - void MetaboTargetedTargetDecoy::resolveOverlappingTargetDecoyMassesByIndividualMassShift(TargetedExperiment& t_exp, std::vector& mappings, const double& mass_to_add) + void MetaboTargetedTargetDecoy::resolveOverlappingTargetDecoyMassesByDecoyMassShift(TargetedExperiment& t_exp, std::vector& mappings, const double& mass_to_add, const double& mz_tol, const String& mz_tol_unit) { - // compare targets and decoy masses - for (auto &it : mappings) - { - std::vector intersection; - std::vector replace_intersection; - std::vector target_product_masses = it.target_product_masses; - std::vector decoy_product_masses = it.decoy_product_masses; - std::sort(target_product_masses.begin(), target_product_masses.end()); - std::sort(decoy_product_masses.begin(), decoy_product_masses.end()); - - std::set_intersection(target_product_masses.begin(), - target_product_masses.end(), - decoy_product_masses.begin(), - decoy_product_masses.end(), - std::back_inserter(intersection)); - - if (!intersection.empty()) - { - std::transform(intersection.begin(), - intersection.end(), - std::back_inserter(replace_intersection), - [mass_to_add](double d) -> double { return d + mass_to_add; }); - - for (Size i = 0; i < replace_intersection.size(); ++i) - { - std::replace(it.decoy_product_masses.begin(), - it.decoy_product_masses.end(), - intersection[i], - replace_intersection[i]); + // Define a map to hold compound references and their corresponding sets of decoy m/z values. + std::map> match_compound_refs_decoy_mz; + + // Iterate over each mapping in the provided mappings list. + for (const auto& map : mappings) { + // Create a set to store m/z values that match the criterion. + std::set matched; + + // Iterate over each decoy m/z value in the current mapping. + for (double decoy_mz : map.decoy_product_masses) { + // Compare each decoy m/z value with each target m/z value. + for (double target_mz : map.target_product_masses) { + // Calculate the difference between decoy and target m/z values. + // The calculation differs based on whether the tolerance is in ppm or Da. + double difference = (mz_tol_unit == "ppm") ? + std::abs(decoy_mz - target_mz) / target_mz * 1e6 : + std::abs(decoy_mz - target_mz); + + // If the difference is small than mz_tol, the masses are too similar. + if (difference <= mz_tol) { + // Add the decoy m/z to the matched set. + matched.insert(decoy_mz); + break; // Move to the next decoy m/z value after finding a match. + } + } } - } + + // Associate the set of matched decoy m/z values with the compound reference in the map. + match_compound_refs_decoy_mz[map.decoy_compound_ref] = std::move(matched); } - std::map > TransitionsMap = MetaboTargetedTargetDecoy::constructTransitionsMap_(t_exp); + // Prepare a new vector to store updated ReactionMonitoringTransition objects. + std::vector v_rmt_new; + v_rmt_new.reserve(t_exp.getTransitions().size()); // Reserve space to optimize memory allocation. - // resolve mappings and add to current TargetedExperiment - std::vector transitions; + // Iterate over each transition in the experiment. + for (const auto& tr : t_exp.getTransitions()) { + // Look for the current transition's compound reference in the map. + auto found = match_compound_refs_decoy_mz.find(tr.getCompoundRef()); - for (const auto& it: mappings) - { - if (!it.target_compound_ref.empty()) - { - std::vector target_transitions = TransitionsMap[it.target_compound_ref]; - transitions.insert(transitions.end(), target_transitions.begin(), target_transitions.end()); - } - if (!it.decoy_compound_ref.empty()) - { - std::vector current_decoy_transitions = TransitionsMap[it.decoy_compound_ref]; - if (it.decoy_product_masses.size() == current_decoy_transitions.size()) - { - for (size_t i = 0; i < it.decoy_product_masses.size(); ++i) - { - ReactionMonitoringTransition tr = current_decoy_transitions[i]; // old - tr.setProductMZ(it.decoy_product_masses[i]); // new - transitions.push_back(tr); - } + // Check if the compound reference is found and if the product m/z matches any in the set. + if (found != match_compound_refs_decoy_mz.end() && found->second.count(tr.getProductMZ()) > 0) { + // Create a new transition object based on the current transition. + ReactionMonitoringTransition new_tr = tr; + + // Modify the product m/z of the new transition. + new_tr.setProductMZ(tr.getProductMZ() + mass_to_add); + + // Add the updated transition to the new vector. + v_rmt_new.push_back(std::move(new_tr)); + } else { + // If no match is found, add the original transition to the new vector. + v_rmt_new.push_back(tr); } - } } - t_exp.setTransitions(transitions); + + // Update the experiment's transitions with the new vector of updated transitions. + t_exp.setTransitions(std::move(v_rmt_new)); } void MetaboTargetedTargetDecoy::generateMissingDecoysByMassShift(TargetedExperiment& t_exp, std::vector& mappings, const double& mass_to_add) diff --git a/src/openms/source/APPLICATIONS/ToolHandler.cpp b/src/openms/source/APPLICATIONS/ToolHandler.cpp index 166d893e78f..c89f9d7f164 100644 --- a/src/openms/source/APPLICATIONS/ToolHandler.cpp +++ b/src/openms/source/APPLICATIONS/ToolHandler.cpp @@ -46,6 +46,7 @@ namespace OpenMS tools_map["AccurateMassSearch"] = Internal::ToolDescription("AccurateMassSearch", cat_ID_MTX); tools_map["AssayGeneratorMetabo"] = Internal::ToolDescription("AssayGeneratorMetabo", cat_targeted); + tools_map["AssayGeneratorMetaboSirius"] = Internal::ToolDescription("AssayGeneratorMetaboSirius", cat_targeted); tools_map["BaselineFilter"] = Internal::ToolDescription("BaselineFilter", cat_signal_proc_smooth_normalize); tools_map["ClusterMassTraces"] = Internal::ToolDescription("ClusterMassTraces", cat_misc); tools_map["ClusterMassTracesByPrecursor"] = Internal::ToolDescription("ClusterMassTracesByPrecursor", cat_targeted); @@ -175,7 +176,7 @@ namespace OpenMS tools_map["SemanticValidator"] = Internal::ToolDescription("SemanticValidator", cat_dev); tools_map["SequenceCoverageCalculator"] = Internal::ToolDescription("SequenceCoverageCalculator", cat_ID_proc); tools_map["SimpleSearchEngine"] = Internal::ToolDescription("SimpleSearchEngine", cat_ID_search); - tools_map["SiriusAdapter"] = Internal::ToolDescription("SiriusAdapter", cat_ID_MTX); + tools_map["SiriusExport"] = Internal::ToolDescription("SiriusExport", cat_ID_MTX); tools_map["SpecLibCreator"] = Internal::ToolDescription("SpecLibCreator", cat_ID_proc); tools_map["SpecLibSearcher"] = Internal::ToolDescription("SpecLibSearcher", cat_ID_search); tools_map["SpectraFilterBernNorm"] = Internal::ToolDescription("SpectraFilterBernNorm", cat_signal_proc_smooth_normalize); diff --git a/src/openms/source/FORMAT/CsvFile.cpp b/src/openms/source/FORMAT/CsvFile.cpp index 0002689a8bd..4f27119be1f 100644 --- a/src/openms/source/FORMAT/CsvFile.cpp +++ b/src/openms/source/FORMAT/CsvFile.cpp @@ -59,7 +59,7 @@ namespace OpenMS buffer_.clear(); } - bool CsvFile::getRow(Size row, StringList& list) + bool CsvFile::getRow(Size row, StringList& list) const { // it is assumed that the value to be cast won't be so large to overflow an ulong int if (static_cast(row) > static_cast(TextFile::buffer_.size()) - 1) diff --git a/src/openms/source/FORMAT/DATAACCESS/CsiFingerIdMzTabWriter.cpp b/src/openms/source/FORMAT/DATAACCESS/CsiFingerIdMzTabWriter.cpp deleted file mode 100644 index 4540a72710c..00000000000 --- a/src/openms/source/FORMAT/DATAACCESS/CsiFingerIdMzTabWriter.cpp +++ /dev/null @@ -1,192 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Oliver Alka $ -// $Authors: Oliver Alka, Timo Sachsenberg $ -// -------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace OpenMS; -using namespace std; - -void CsiFingerIdMzTabWriter::read(const std::vector& sirius_output_paths, - const String& original_input_mzml, - const Size& top_n_hits, - MzTab& result) -{ - - CsiFingerIdMzTabWriter::CsiAdapterRun csi_result; - - for (const auto& it : sirius_output_paths) - { - // extract mz, rt of the precursor and the nativeID of the corresponding MS2 spectra in the spectrum.ms file - SiriusMzTabWriter::SiriusSpectrumMSInfo info = SiriusMzTabWriter::extractSpectrumMSInfo(it); - - const std::string pathtocsicsv = it + "/structure_candidates.tsv"; - - ifstream file(pathtocsicsv); - - if (file) - { - CsvFile compounds(pathtocsicsv, '\t'); - const UInt rowcount = compounds.rowCount(); - - if (rowcount > 1) - { - // correction if the rowcount is smaller than the number of hits used as parameter - // rowcount-1 because the csv header will be skipped in the loop later on. - int header = 1; - const UInt top_n_hits_cor = (top_n_hits >= rowcount) ? rowcount-header : top_n_hits; - - // fill identification structure containing all candidate hits for a single spectrum - CsiFingerIdMzTabWriter::CsiAdapterIdentification csi_id{}; - - // extract scan_index from path - OpenMS::String str = File::path(pathtocsicsv); - int scan_index = SiriusMzTabWriter::extractScanIndex(str); - - // extract scan_number from string - int scan_number = SiriusMzTabWriter::extractScanNumber(str); - - // extract feature_id from string - String feature_id = SiriusMzTabWriter::extractFeatureId(str); - - // extract column name and index from header - std::map< std::string, Size > columnname_to_columnindex = SiriusMzTabWriter::extract_columnname_to_columnindex(compounds); - - // j = 1 because of .csv file format (header) - for (Size j = 1; j <= top_n_hits_cor; ++j) - { - StringList sl; - compounds.getRow(j, sl); - CsiFingerIdMzTabWriter::CsiAdapterHit csi_hit; - csi_hit.inchikey2D = sl[columnname_to_columnindex.at("InChIkey2D")]; - csi_hit.inchi = sl[columnname_to_columnindex.at("InChI")]; - csi_hit.molecular_formula = sl[columnname_to_columnindex.at("molecularFormula")]; - csi_hit.rank = sl[columnname_to_columnindex.at("rank")].toInt(); - csi_hit.formula_rank = sl[columnname_to_columnindex.at("formulaRank")].toInt(); - csi_hit.adduct = sl[columnname_to_columnindex.at("adduct")]; - csi_hit.score = sl[columnname_to_columnindex.at("CSI:FingerIDScore")].toDouble(); - csi_hit.name = sl[columnname_to_columnindex.at("name")]; - csi_hit.smiles = sl[columnname_to_columnindex.at("smiles")]; - csi_hit.xlogp = sl[columnname_to_columnindex.at("xlogp")]; - csi_hit.dbflags = sl[columnname_to_columnindex.at("dbflags")]; - sl[columnname_to_columnindex.at("pubchemids")].split(';', csi_hit.pubchemids); - sl[columnname_to_columnindex.at("links")].split(';', csi_hit.links); - - csi_id.hits.push_back(csi_hit); - } - - csi_id.mz = info.ext_mz; - csi_id.rt = info.ext_rt; - csi_id.native_ids = info.ext_n_id; - csi_id.scan_index = scan_index; - csi_id.scan_number = scan_number; - csi_id.feature_id = feature_id; - csi_result.identifications.push_back(csi_id); - - // write metadata to mzTab file - MzTabFile mztab_out; - MzTabMetaData md; - MzTabMSRunMetaData md_run; - md_run.location = MzTabString(original_input_mzml); - md.ms_run[1] = md_run; - md.description = MzTabString("CSI:FingerID-" + SiriusVersion::CURRENT_VERSION); - - //needed for header generation (score) - std::map smallmolecule_search_engine_score; - smallmolecule_search_engine_score[1].setName("CSI:FingerIDScore"); - md.smallmolecule_search_engine_score = smallmolecule_search_engine_score; - result.setMetaData(md); - - // write results to mzTab file - MzTabSmallMoleculeSectionRows smsd; - for (Size i = 0; i < csi_result.identifications.size(); ++i) - { - const CsiFingerIdMzTabWriter::CsiAdapterIdentification &id = csi_result.identifications[i]; - for (Size j = 0; j < id.hits.size(); ++j) - { - const CsiFingerIdMzTabWriter::CsiAdapterHit &hit = id.hits[j]; - MzTabSmallMoleculeSectionRow smsr; - - map engine_score; - engine_score[1] = MzTabDouble(hit.score); - smsr.best_search_engine_score = engine_score; - - smsr.chemical_formula = MzTabString(hit.molecular_formula); - smsr.description = MzTabString(hit.name); - std::vector pubchemids; - for (Size k = 0; k < hit.pubchemids.size(); ++k) - { - pubchemids.emplace_back(MzTabString(hit.pubchemids[k])); - } - smsr.identifier.set(pubchemids); - smsr.inchi_key = MzTabString(hit.inchikey2D); - smsr.smiles = MzTabString(hit.smiles); - std::vector < MzTabString > links; - MzTabStringList m_links; - m_links.setSeparator('|'); - for (Size k = 0; k < hit.links.size(); ++k) - { - links.emplace_back(MzTabString(hit.links[k])); - } - m_links.set(links); - - smsr.exp_mass_to_charge = MzTabDouble(id.mz); - - vector v_rt; - MzTabDoubleList rt_list; - v_rt.emplace_back(id.rt); - rt_list.set(v_rt); - smsr.retention_time = rt_list; - - MzTabOptionalColumnEntry rank = make_pair("opt_global_rank", MzTabString(hit.rank)); - MzTabOptionalColumnEntry formula_rank = make_pair("opt_global_formulaRank", MzTabString(hit.formula_rank)); - MzTabOptionalColumnEntry compoundId = make_pair("opt_global_compoundId", MzTabString(id.scan_index)); - MzTabOptionalColumnEntry compoundScanNumber = make_pair("opt_global_compoundScanNumber", MzTabString(id.scan_number)); - MzTabOptionalColumnEntry featureId = make_pair("opt_global_featureId", MzTabString(id.feature_id)); - MzTabOptionalColumnEntry adduct = make_pair("opt_global_adduct", MzTabString(hit.adduct)); - MzTabOptionalColumnEntry xlogp = make_pair("opt_global_rank", MzTabString(hit.xlogp)); - MzTabOptionalColumnEntry dblinks = make_pair("opt_global_dblinks", MzTabString(m_links.toCellString())); - MzTabOptionalColumnEntry dbflags = make_pair("opt_global_dbflags", MzTabString(hit.dbflags)); - - vector m_native_ids; - MzTabStringList ml_native_ids; - ml_native_ids.setSeparator('|'); - for (auto& element : id.native_ids) - { - m_native_ids.emplace_back(MzTabString(element)); - } - ml_native_ids.set(m_native_ids); - - MzTabOptionalColumnEntry native_ids = make_pair("opt_global_native_id", MzTabString(ml_native_ids.toCellString())); - - smsr.opt_.push_back(rank); - smsr.opt_.push_back(compoundId); - smsr.opt_.push_back(compoundScanNumber); - smsr.opt_.push_back(featureId); - smsr.opt_.push_back(native_ids); - smsr.opt_.push_back(adduct); - smsr.opt_.push_back(xlogp); - smsr.opt_.push_back(dblinks); - smsr.opt_.push_back(dbflags); - smsd.push_back(smsr); - } - } - result.setSmallMoleculeSectionRows(smsd); - } - } - file.close(); - } -} - -/// @endcond diff --git a/src/openms/source/FORMAT/DATAACCESS/SiriusFragmentAnnotation.cpp b/src/openms/source/FORMAT/DATAACCESS/SiriusFragmentAnnotation.cpp index c4f13510038..d077c58cd5f 100644 --- a/src/openms/source/FORMAT/DATAACCESS/SiriusFragmentAnnotation.cpp +++ b/src/openms/source/FORMAT/DATAACCESS/SiriusFragmentAnnotation.cpp @@ -2,12 +2,11 @@ // SPDX-License-Identifier: BSD-3-Clause // // -------------------------------------------------------------------------- -// $Maintainer: Oliver Alka $ +// $Maintainer: Oliver Alka, Axel Walter $ // $Authors: Oliver Alka $ // -------------------------------------------------------------------------- #include -#include #include #include #include @@ -18,73 +17,8 @@ using namespace std; namespace OpenMS { - - std::vector SiriusFragmentAnnotation::extractSiriusAnnotationsTgtOnly - (const std::vector& sirius_workspace_subdirs, double score_threshold, bool use_exact_mass, bool resolve = true) - { - Size max_rank = 10000; // this should be enough for any search - if (resolve) max_rank = 1; - std::unordered_map native_ids_annotated_spectra; - std::vector annotated_spectra; - double score = 0.0; - // There is one subdir for every candidate that we pass to Sirius - // Currently it is not possible to run Sirius with multiple candidates, see https://github.com/OpenMS/OpenMS/issues/5882 - for (const auto& subdir : sirius_workspace_subdirs) - { - std::vector best_annotated_spectra = extractAnnotationsFromSiriusFile(subdir, max_rank, false, use_exact_mass); - - if (!resolve) annotated_spectra.reserve(sirius_workspace_subdirs.size()); - - for (auto& spectrum : best_annotated_spectra) - { - score = double(spectrum.getMetaValue(Constants::UserParam::SIRIUS_SCORE)); - // only use spectra over a certain score threshold (0-1) - if (score >= score_threshold) - { - if (resolve) - { - // resolve multiple use of the same concatenated native ids based on the sirius score (used for multiple features/identifications) - unordered_map::iterator it; - it = native_ids_annotated_spectra.find(spectrum.getNativeID()); - if (it != native_ids_annotated_spectra.end()) - { - if (score >= double(it->second.getMetaValue(Constants::UserParam::SIRIUS_SCORE))) - { - it->second = spectrum; - } - } - else - { - native_ids_annotated_spectra.insert(make_pair(spectrum.getNativeID(), spectrum)); - } - } - else - { - annotated_spectra.push_back(std::move(spectrum)); - } - } - } - } - - if (resolve) - { - // convert temporary map to vector - annotated_spectra.reserve(native_ids_annotated_spectra.size()); - for (auto& id_spec : native_ids_annotated_spectra) - { - annotated_spectra.emplace_back(std::move(id_spec.second)); - } - } - else - { - annotated_spectra.shrink_to_fit(); - } - - return annotated_spectra; - } - std::vector SiriusFragmentAnnotation::extractAndResolveSiriusAnnotations( - const std::vector& sirius_workspace_subdirs, double score_threshold, bool use_exact_mass) + const std::vector& sirius_workspace_subdirs, double score_threshold, bool use_exact_mass, bool decoy_generation) { std::map native_ids_annotated_spectra; std::vector annotated_spectra; @@ -102,8 +36,16 @@ namespace OpenMS // max_rank 1 will get the best. best_annotated_spectrum = extractAnnotationsFromSiriusFile(subdir, 1, false, use_exact_mass)[0]; } - - ann_spec_tmp = extractAnnotationsFromSiriusFile(subdir, 1, true, use_exact_mass); + + // extract decoy spectra only if decoy generation is set, else clear target specs from vector + if (decoy_generation) + { + ann_spec_tmp = extractAnnotationsFromSiriusFile(subdir, 1, true, use_exact_mass); + } + else + { + ann_spec_tmp.clear(); + } // if no spectrum can be extracted we add an empty spectrum // to the TD pair for backwards compatibility with AssayGeneratorMetabo MSSpectrum annotated_decoy_for_best_tgt = MSSpectrum(); @@ -234,7 +176,7 @@ namespace OpenMS } else if (spectrum_ms_file.eof()) { - OPENMS_LOG_WARN << "No SiriusAdapter m_id was found - please check your input mzML. " << std::endl; + OPENMS_LOG_WARN << "No SiriusExport m_id was found - please check your input mzML. " << std::endl; break; } } @@ -244,6 +186,20 @@ namespace OpenMS return ext_m_id; } + std::map< std::string, Size > SiriusFragmentAnnotation::extract_columnname_to_columnindex(const CsvFile& csvfile) + { + StringList header_row; + std::map< std::string, Size > columnname_to_columnindex; + csvfile.getRow(0, header_row); + + for (size_t i = 0; i < header_row.size(); i++) + { + columnname_to_columnindex.insert(make_pair(header_row[i], i)); + } + + return columnname_to_columnindex; + }; + // provides a mapping of rank and the file it belongs to since this is not encoded in the directory structure/filename std::map< Size, String > SiriusFragmentAnnotation::extractCompoundRankingAndFilename_(const String& path_to_sirius_workspace) { @@ -257,7 +213,7 @@ namespace OpenMS CsvFile candidates(sirius_formula_candidates, '\t'); const UInt rowcount = candidates.rowCount(); - std::map< std::string, Size > columnname_to_columnindex = SiriusMzTabWriter::extract_columnname_to_columnindex(candidates); + std::map< std::string, Size > columnname_to_columnindex = SiriusFragmentAnnotation::extract_columnname_to_columnindex(candidates); // i starts at 1, due to header for (size_t i = 1; i < rowcount; i++) @@ -266,7 +222,7 @@ namespace OpenMS candidates.getRow(i, sl); String adduct = sl[columnname_to_columnindex.at("adduct")]; adduct.erase(std::remove_if(adduct.begin(), adduct.end(), ::isspace), adduct.end()); - rank_filename.emplace(std::make_pair(sl[columnname_to_columnindex.at("rank")].toInt(), + rank_filename.emplace(std::make_pair(sl[columnname_to_columnindex.at("formulaRank")].toInt(), String(sl[columnname_to_columnindex.at("molecularFormula")] + "_" + adduct + ".tsv"))); } } @@ -290,14 +246,14 @@ namespace OpenMS CsvFile candidates(sirius_formula_candidates, '\t'); const UInt rowcount = candidates.rowCount(); - std::map< std::string, Size > columnname_to_columnindex = SiriusMzTabWriter::extract_columnname_to_columnindex(candidates); + std::map< std::string, Size > columnname_to_columnindex = SiriusFragmentAnnotation::extract_columnname_to_columnindex(candidates); // i starts at 1, due to header for (size_t i = 1; i < rowcount; i++) { StringList sl; candidates.getRow(i, sl); - rank_score.emplace(std::make_pair(sl[columnname_to_columnindex.at("rank")].toInt(), + rank_score.emplace(std::make_pair(sl[columnname_to_columnindex.at("formulaRank")].toInt(), sl[columnname_to_columnindex.at("explainedIntensity")].toDouble())); } } diff --git a/src/openms/source/FORMAT/DATAACCESS/SiriusMzTabWriter.cpp b/src/openms/source/FORMAT/DATAACCESS/SiriusMzTabWriter.cpp deleted file mode 100644 index 178f7e2ec97..00000000000 --- a/src/openms/source/FORMAT/DATAACCESS/SiriusMzTabWriter.cpp +++ /dev/null @@ -1,262 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Oliver Alka $ -// $Authors: Oliver Alka, Timo Sachsenberg $ -// -------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include -#include - -using namespace OpenMS; -using namespace std; - -int SiriusMzTabWriter::extractScanIndex(const String& path) -{ - boost::regex regexp_ind(R"(--(?\d+)--)"); - return SpectrumLookup::extractScanNumber(path, regexp_ind, false); -} - -int SiriusMzTabWriter::extractScanNumber(const String& path) -{ - boost::regex regexp(R"(-(?\d+)--)"); - return SpectrumLookup::extractScanNumber(path, regexp, false); -} - -String SiriusMzTabWriter::extractFeatureId(const String& path) -{ - boost::smatch match; - String feature_id; - boost::regex regexp_feature(R"(_(?\d+)-)"); - bool found = boost::regex_search(path, match, regexp_feature); - if (found && match["SCAN"].matched) - { - feature_id = "id_" + match["SCAN"].str(); - } - if (feature_id.empty() || feature_id == "id_0") - { - feature_id = "null"; - } - return feature_id; -} - -std::map< std::string, Size > SiriusMzTabWriter::extract_columnname_to_columnindex(CsvFile& csvfile) -{ - StringList header_row; - std::map< std::string, Size > columnname_to_columnindex; - csvfile.getRow(0, header_row); - - for (size_t i = 0; i < header_row.size(); i++) - { - columnname_to_columnindex.insert(make_pair(header_row[i], i)); - } - - return columnname_to_columnindex; -}; - -SiriusMzTabWriter::SiriusSpectrumMSInfo SiriusMzTabWriter::extractSpectrumMSInfo(const String& single_sirius_path) -{ - SiriusSpectrumMSInfo info; - // extract mz, rt of the precursor and the nativeID of the corresponding MS2 spectra in the spectrum.ms file - const String sirius_spectrum_ms = single_sirius_path + "/spectrum.ms"; - ifstream spectrum_ms_file(sirius_spectrum_ms); - if (spectrum_ms_file) - { - const String n_id_prefix = "##n_id"; - const String rt_prefix = ">rt"; - const String pmass_prefix = ">parentmass"; - String line; - while (getline(spectrum_ms_file, line)) - { - if (line.hasPrefix(pmass_prefix)) - { - info.ext_mz = String(line.erase(line.find(pmass_prefix), pmass_prefix.size())).toDouble(); - } - else if (line.hasPrefix(rt_prefix)) - { - line = line.erase(line.find("s"), 1); // >rt 418.39399999998s - remove unit "s" - info.ext_rt = String(line.erase(line.find(rt_prefix), rt_prefix.size())).toDouble(); - } - else if (line.hasPrefix(n_id_prefix)) - { - info.ext_n_id.emplace_back(line.erase(line.find(n_id_prefix), n_id_prefix.size())); - } - } - spectrum_ms_file.close(); - return info; - } - else - { - throw Exception::FileNotFound(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, sirius_spectrum_ms); - } -}; - -void SiriusMzTabWriter::read(const std::vector& sirius_output_paths, - const String& original_input_mzml, - const Size& top_n_hits, - MzTab& result) -{ - SiriusMzTabWriter::SiriusAdapterRun sirius_result; - - for (const auto& it : sirius_output_paths) - { - SiriusSpectrumMSInfo info = SiriusMzTabWriter::extractSpectrumMSInfo(it); - - // extract data from formula_candidates.csv - const std::string pathtosiriuscsv = it + "/formula_candidates.tsv"; - - ifstream file(pathtosiriuscsv); - if (file) - { - CsvFile compounds(pathtosiriuscsv, '\t'); - const UInt rowcount = compounds.rowCount(); - - if (rowcount > 1) - { - // correction if the rowcount is smaller than the number of hits used as parameter - // rowcount-1 because the csv header will be skipped in the loop later on. - int header = 1; - const UInt top_n_hits_cor = (top_n_hits >= rowcount) ? rowcount-header : top_n_hits; - - // fill identification structure containing all candidate hits for a single spectrum - SiriusMzTabWriter::SiriusAdapterIdentification sirius_id; - - // extract scan_number from path - OpenMS::String str = File::path(pathtosiriuscsv); - int scan_index = SiriusMzTabWriter::extractScanIndex(str); - - // extract scan_number from string - int scan_number = SiriusMzTabWriter::extractScanNumber(str); - - // extract feature_id from string - String feature_id = SiriusMzTabWriter::extractFeatureId(str); - - std::map< std::string, Size > columnname_to_columnindex = SiriusMzTabWriter::extract_columnname_to_columnindex(compounds); - - // formula adduct precursorFormula rank rankingScore IsotopeScore TreeScore siriusScore explainedPeaks explainedIntensity - // j = 1 because of .csv file format (header) - for (Size j = 1; j <= top_n_hits_cor; ++j) - { - StringList sl; - compounds.getRow(j, sl); - SiriusMzTabWriter::SiriusAdapterHit sirius_hit; - - // maybe should check columnname instead? - // rank molecularFormula adduct precursorFormula rankingScore TreeIsotope_Score Tree_Score Isotope_Score explainedPeaks explainedIntensity - // parse single candidate hit - sirius_hit.formula = sl[columnname_to_columnindex.at("molecularFormula")]; - sirius_hit.adduct = sl[columnname_to_columnindex.at("adduct")]; - sirius_hit.precursor_formula = sl[columnname_to_columnindex.at("precursorFormula")]; - sirius_hit.rank = sl[columnname_to_columnindex.at("rank")].toInt(); - sirius_hit.iso_score = sl[columnname_to_columnindex.at("IsotopeScore")].toDouble(); - sirius_hit.tree_score = sl[columnname_to_columnindex.at("TreeScore")].toDouble(); - sirius_hit.sirius_score = sl[columnname_to_columnindex.at("SiriusScore")].toDouble(); - sirius_hit.explainedpeaks = sl[columnname_to_columnindex.at("numExplainedPeaks")].toInt(); - sirius_hit.explainedintensity = sl[columnname_to_columnindex.at("explainedIntensity")].toDouble(); - sirius_hit.median_mass_error_fragment_peaks_ppm = sl[columnname_to_columnindex.at("medianMassErrorFragmentPeaks(ppm)")].toDouble(); - sirius_hit.median_absolute_mass_error_fragment_peaks_ppm = sl[columnname_to_columnindex.at("medianAbsoluteMassErrorFragmentPeaks(ppm)")].toDouble(); - sirius_hit.mass_error_precursor_ppm = sl[columnname_to_columnindex.at("massErrorPrecursor(ppm)")].toDouble(); - - sirius_id.hits.push_back(sirius_hit); - } - - sirius_id.mz = info.ext_mz; - sirius_id.rt = info.ext_rt; - sirius_id.native_ids = info.ext_n_id; - sirius_id.scan_index = scan_index; - sirius_id.scan_number = scan_number; - sirius_id.feature_id = feature_id; - sirius_result.identifications.push_back(sirius_id); - - // write metadata to mzTab file - MzTabMetaData md; - MzTabMSRunMetaData md_run; - md_run.location = MzTabString(original_input_mzml); - md.ms_run[1] = md_run; - md.description = MzTabString("Sirius-" + SiriusVersion::CURRENT_VERSION); - - //needed for header generation (score) - std::map smallmolecule_search_engine_score; - smallmolecule_search_engine_score[1].setName("SiriusScore"); - smallmolecule_search_engine_score[2].setName("TreeScore"); - smallmolecule_search_engine_score[3].setName("IsotopeScore"); - md.smallmolecule_search_engine_score = smallmolecule_search_engine_score; - result.setMetaData(md); - - // write results to mzTab file - MzTabSmallMoleculeSectionRows smsd; - for (Size i = 0; i < sirius_result.identifications.size(); ++i) - { - const SiriusMzTabWriter::SiriusAdapterIdentification &id = sirius_result.identifications[i]; - for (Size j = 0; j < id.hits.size(); ++j) - { - const SiriusMzTabWriter::SiriusAdapterHit &hit = id.hits[j]; - MzTabSmallMoleculeSectionRow smsr; - - map engine_score; - engine_score[1] = MzTabDouble(hit.sirius_score); - engine_score[2] = MzTabDouble(hit.tree_score); - engine_score[3] = MzTabDouble(hit.iso_score); - smsr.best_search_engine_score = engine_score; - - smsr.chemical_formula = MzTabString(hit.formula); - smsr.exp_mass_to_charge = MzTabDouble(id.mz); - - vector v_rt; - MzTabDoubleList rt_list; - v_rt.emplace_back(id.rt); - rt_list.set(v_rt); - smsr.retention_time = rt_list; - - MzTabOptionalColumnEntry adduct = make_pair("opt_global_adduct", MzTabString(hit.adduct)); - MzTabOptionalColumnEntry precursor_formula = make_pair("opt_gobal_precursorFormula", MzTabString(hit.precursor_formula)); - MzTabOptionalColumnEntry rank = make_pair("opt_global_rank", MzTabString(hit.rank)); - MzTabOptionalColumnEntry explainedPeaks = make_pair("opt_global_explainedPeaks", MzTabString(hit.explainedpeaks)); - MzTabOptionalColumnEntry explainedIntensity = make_pair("opt_global_explainedIntensity", MzTabString(hit.explainedintensity)); - MzTabOptionalColumnEntry median_mass_error_fragment_peaks = make_pair("opt_global_median_mass_error_fragment_peaks_ppm", MzTabString(hit.median_mass_error_fragment_peaks_ppm)); - MzTabOptionalColumnEntry median_absolute_mass_error_fragment_peaks = make_pair("opt_global_median_absolute_mass_error_fragment_peaks_ppm", MzTabString(hit.median_absolute_mass_error_fragment_peaks_ppm)); - MzTabOptionalColumnEntry mass_error_precursor = make_pair("opt_global_mass_error_precursor_ppm", MzTabString(hit.mass_error_precursor_ppm)); - MzTabOptionalColumnEntry compoundId = make_pair("opt_global_compoundId", MzTabString(id.scan_index)); - MzTabOptionalColumnEntry compoundScanNumber = make_pair("opt_global_compoundScanNumber", MzTabString(id.scan_number)); - MzTabOptionalColumnEntry featureId = make_pair("opt_global_featureId", MzTabString(id.feature_id)); - - vector m_native_ids; - MzTabStringList ml_native_ids; - ml_native_ids.setSeparator('|'); - for (auto& element : id.native_ids) - { - m_native_ids.emplace_back(MzTabString(element)); - } - ml_native_ids.set(m_native_ids); - - MzTabOptionalColumnEntry native_ids = make_pair("opt_global_native_id", MzTabString(ml_native_ids.toCellString())); - - smsr.opt_.push_back(adduct); - smsr.opt_.push_back(precursor_formula); - smsr.opt_.push_back(rank); - smsr.opt_.push_back(explainedPeaks); - smsr.opt_.push_back(explainedIntensity); - smsr.opt_.push_back(median_mass_error_fragment_peaks); - smsr.opt_.push_back(median_absolute_mass_error_fragment_peaks); - smsr.opt_.push_back(mass_error_precursor); - smsr.opt_.push_back(compoundId); - smsr.opt_.push_back(compoundScanNumber); - smsr.opt_.push_back(featureId); - smsr.opt_.push_back(native_ids); - smsd.push_back(smsr); - } - } - result.setSmallMoleculeSectionRows(smsd); - } - file.close(); - } - } -} // namespace OpenMS - -/// @endcond diff --git a/src/openms/source/FORMAT/DATAACCESS/sources.cmake b/src/openms/source/FORMAT/DATAACCESS/sources.cmake index 8944e623bfa..02dd9d1d726 100644 --- a/src/openms/source/FORMAT/DATAACCESS/sources.cmake +++ b/src/openms/source/FORMAT/DATAACCESS/sources.cmake @@ -3,7 +3,6 @@ set(directory source/FORMAT/DATAACCESS) ### list all filenames of the directory here set(sources_list - CsiFingerIdMzTabWriter.cpp MSDataWritingConsumer.cpp MSDataTransformingConsumer.cpp MSDataAggregatingConsumer.cpp @@ -15,7 +14,6 @@ set(sources_list MSDataWritingConsumer.cpp NoopMSDataConsumer.cpp SiriusFragmentAnnotation.cpp - SiriusMzTabWriter.cpp SwathFileConsumer.cpp ) diff --git a/src/pyOpenMS/pxds/CsiAdapterHit.pxd b/src/pyOpenMS/pxds/CsiAdapterHit.pxd deleted file mode 100644 index 439167ec750..00000000000 --- a/src/pyOpenMS/pxds/CsiAdapterHit.pxd +++ /dev/null @@ -1,23 +0,0 @@ -from Types cimport * -from String cimport String - -cdef extern from "" namespace "OpenMS::CsiFingerIdMzTabWriter": - - cdef cppclass CsiAdapterHit "OpenMS::CsiFingerIdMzTabWriter::CsiAdapterHit": - - CsiAdapterHit() except + nogil - CsiAdapterHit(CsiAdapterHit &) except + nogil # compiler - - String inchikey2D - String inchi - unsigned int rank - unsigned int formula_rank - String adduct - String molecular_formula - double score - String name - String smiles - String xlogp - String dbflags - libcpp_vector[ String ] pubchemids - libcpp_vector[ String ] links diff --git a/src/pyOpenMS/pxds/CsiAdapterIdentification.pxd b/src/pyOpenMS/pxds/CsiAdapterIdentification.pxd deleted file mode 100644 index ce42b584896..00000000000 --- a/src/pyOpenMS/pxds/CsiAdapterIdentification.pxd +++ /dev/null @@ -1,20 +0,0 @@ -from Types cimport * -from CsiAdapterHit cimport * -from String cimport * -from StringList cimport * -from libcpp.vector cimport vector as libcpp_vector - - -cdef extern from "" namespace "OpenMS::CsiFingerIdMzTabWriter": - - cdef cppclass CsiAdapterIdentification "OpenMS::CsiFingerIdMzTabWriter::CsiAdapterIdentification": - CsiAdapterIdentification() except + nogil - CsiAdapterIdentification(CsiAdapterIdentification& ) except + nogil # compiler - - double mz - double rt - StringList native_ids - int scan_index - int scan_number - String feature_id - libcpp_vector[CsiAdapterHit] hits diff --git a/src/pyOpenMS/pxds/CsiAdapterRun.pxd b/src/pyOpenMS/pxds/CsiAdapterRun.pxd deleted file mode 100644 index 4bc3b405813..00000000000 --- a/src/pyOpenMS/pxds/CsiAdapterRun.pxd +++ /dev/null @@ -1,9 +0,0 @@ -from Types cimport * -from CsiAdapterIdentification cimport CsiAdapterIdentification - -cdef extern from "" namespace "OpenMS::CsiFingerIdMzTabWriter": - - cdef cppclass CsiAdapterRun "OpenMS::CsiFingerIdMzTabWriter::CsiAdapterRun": - CsiAdapterRun() except + nogil - CsiAdapterRun(CsiAdapterRun &) except + nogil # compiler - libcpp_vector[CsiAdapterIdentification] identifications diff --git a/src/pyOpenMS/pxds/CsiFingerIdMzTabWriter.pxd b/src/pyOpenMS/pxds/CsiFingerIdMzTabWriter.pxd deleted file mode 100644 index 32187ef2fa1..00000000000 --- a/src/pyOpenMS/pxds/CsiFingerIdMzTabWriter.pxd +++ /dev/null @@ -1,19 +0,0 @@ -from Types cimport * -from String cimport * -from MzTab cimport * -from libcpp.vector cimport vector as libcpp_vector - -cdef extern from "" namespace "OpenMS": - - cdef cppclass CsiFingerIdMzTabWriter "OpenMS::CsiFingerIdMzTabWriter": - CsiFingerIdMzTabWriter() except + nogil - CsiFingerIdMzTabWriter(CsiFingerIdMzTabWriter &) except + nogil # compiler - -# wrap static method: -cdef extern from "" namespace "OpenMS::CsiFingerIdMzTabWriter": - - void read(libcpp_vector[ String ]& sirius_output_paths, - const String& original_input_mzml, - Size top_n_hits, - MzTab& result) except + nogil # wrap-attach:CsiFingerIdMzTabWriter - diff --git a/src/pyOpenMS/pxds/MetaboTargetedAssay.pxd b/src/pyOpenMS/pxds/MetaboTargetedAssay.pxd index 5b9e9e10ae5..c0c96b1de04 100644 --- a/src/pyOpenMS/pxds/MetaboTargetedAssay.pxd +++ b/src/pyOpenMS/pxds/MetaboTargetedAssay.pxd @@ -37,7 +37,6 @@ cdef extern from "" namespace "O # :param max_fragment_mz: Maximum m/z a fragment ion has to have to be considered as a transition # :param method_consensus_spectrum: Boolean to use consensus spectrum method # :param exclude_ms2_precursor: Boolean to exclude MS2 precursor from MetaboTargetedAssay - # :param file_counter: Count if multiple files are used # :return: Vector of MetaboTargetedAssay libcpp_vector[ MetaboTargetedAssay ] extractMetaboTargetedAssayFragmentAnnotation(libcpp_vector[ MetaboTargetedAssay_CompoundTargetDecoyPair ]& v_cmp_spec, @@ -45,8 +44,7 @@ cdef extern from "" namespace "O double& min_fragment_mz, double& max_fragment_mz, bool& use_exact_mass, - bool& exclude_ms2_precursor, - unsigned int& file_counter) except + nogil + bool& exclude_ms2_precursor) except + nogil # wrap-doc: # Extract a vector of MetaboTargetedAssays using fragment # diff --git a/src/pyOpenMS/pxds/MetaboTargetedTargetDecoy.pxd b/src/pyOpenMS/pxds/MetaboTargetedTargetDecoy.pxd index 01fec5388a1..45279465b53 100644 --- a/src/pyOpenMS/pxds/MetaboTargetedTargetDecoy.pxd +++ b/src/pyOpenMS/pxds/MetaboTargetedTargetDecoy.pxd @@ -16,7 +16,7 @@ cdef extern from "" namesp # # :param t_exp: TransitionExperiment holds compound and transition information used for the mapping - void resolveOverlappingTargetDecoyMassesByIndividualMassShift(TargetedExperiment& t_exp, libcpp_vector[ MetaboTargetedTargetDecoy_MetaboTargetDecoyMassMapping ]& mappings, double& mass_to_add) except + nogil + void resolveOverlappingTargetDecoyMassesByDecoyMassShift(TargetedExperiment& t_exp, libcpp_vector[ MetaboTargetedTargetDecoy_MetaboTargetDecoyMassMapping ]& mappings, double& mass_to_add, double& mz_tol, String& mz_tol_unit) except + nogil # wrap-doc: # Resolves overlapping target and decoy transition masses by adding a specifiable mass (e.g. CH2) to the overlapping decoy fragment # @@ -24,6 +24,8 @@ cdef extern from "" namesp # :param t_exp: TransitionExperiment holds compound and transition information # :param mappings: Map of identifier to target and decoy masses # :param mass_to_add: (e.g. CH2) + # :param mz_tol: m/z tolerarance for target and decoy transition masses to be considered overlapping + # :param mz_tol_unit: m/z tolerance unit void generateMissingDecoysByMassShift(TargetedExperiment& t_exp, libcpp_vector[ MetaboTargetedTargetDecoy_MetaboTargetDecoyMassMapping ]& mappings, double& mass_to_add) except + nogil # wrap-doc: diff --git a/src/pyOpenMS/pxds/SiriusAdapterAlgorithm.pxd b/src/pyOpenMS/pxds/SiriusAdapterAlgorithm.pxd deleted file mode 100644 index 4b5b553cdcd..00000000000 --- a/src/pyOpenMS/pxds/SiriusAdapterAlgorithm.pxd +++ /dev/null @@ -1,100 +0,0 @@ -from Types cimport * -from String cimport * -from FeatureMap cimport * -from MSExperiment cimport * -from FeatureMapping cimport * -from KDTreeFeatureMaps cimport * -from libcpp.vector cimport vector as libcpp_vector -from libcpp.pair cimport pair as libcpp_pair - -from DefaultParamHandler cimport * - -cdef extern from "" namespace "OpenMS": - - cdef cppclass SiriusAdapterAlgorithm(DefaultParamHandler): - # wrap-inherits: - # DefaultParamHandler - - SiriusAdapterAlgorithm() except + nogil - SiriusAdapterAlgorithm(SiriusAdapterAlgorithm &) except + nogil # compiler - - bool isFeatureOnly() except + nogil - UInt getFilterByNumMassTraces() except + nogil - double getPrecursorMzTolerance() except + nogil - double getPrecursorRtTolerance() except + nogil - bool precursorMzToleranceUnitIsPPM() except + nogil - bool isNoMasstraceInfoIsotopePattern() except + nogil - int getIsotopePatternIterations() except + nogil - int getNumberOfSiriusCandidates() except + nogil - - String determineSiriusExecutable(String & executable) except + nogil - # wrap-doc: - # Checks if the provided String points to a valid SIRIUS executable, otherwise tries - # to select the executable from the environment - # - # :param executable: Path to the potential executable - # :returns: Path to SIRIUS executable - - void preprocessingSirius(const String& featureinfo, - MSExperiment& spectra, - FeatureMapping_FeatureMappingInfo& fm_info, - FeatureMapping_FeatureToMs2Indices& feature_mapping) except + nogil - # wrap-doc: - # Preprocessing needed for SIRIUS - # - # Filter number of masstraces and perform feature mapping - # - # :param featureinfo: Path to featureXML - # :param spectra: Input of MSExperiment with spectra information - # :param fm_info: Emtpy - stores FeatureMaps and KDTreeMaps internally - # :param feature_mapping: Empty FeatureToMs2Indices - - void logFeatureSpectraNumber(const String& featureinfo, - FeatureMapping_FeatureToMs2Indices& feature_mapping, - MSExperiment& spectra) except + nogil - # wrap-doc: - # Logs number of features and spectra used - # - # Prints the number of features and spectra used (OPENMS_LOG_INFO) - # - # :param featureinfo: Path to featureXML - # :param feature_mapping: FeatureToMs2Indices with feature mapping - # :param spectra: Input of MSExperiment with spectra information - - void logInSiriusAccount(String& executable, - const String& email, - const String& password) except + nogil - # wrap-doc: - # Log in to SIRIUS using your personal account - # - # :param executable: Path to executable. - # :param email: User account E-Mail. - # :param password: User account password. - - libcpp_vector[String] callSiriusQProcess(const String& tmp_ms_file, - const String& tmp_out_dir, - String& executable, - const String& out_csifingerid, - bool decoy_generation) except + nogil - # wrap-doc: - # Call SIRIUS with QProcess - # - # :param tmp_ms_file: Path to temporary .ms file - # :param tmp_out_dir: Path to temporary output folder - # :param executable: Path to executable - # :param out_csifingerid: Path to CSI:FingerID output (can be empty) - -cdef extern from "" namespace "OpenMS::SiriusAdapterAlgorithm": - - cdef cppclass SiriusTemporaryFileSystemObjects "OpenMS::SiriusAdapterAlgorithm::SiriusTemporaryFileSystemObjects": - SiriusTemporaryFileSystemObjects(int debug_level) except + nogil - SiriusTemporaryFileSystemObjects(SiriusTemporaryFileSystemObjects &) except + nogil # compiler - - String getTmpDir() except + nogil - String getTmpOutDir() except + nogil - String getTmpMsFile() except + nogil - -# wrap static method: -cdef extern from "" namespace "OpenMS::SiriusAdapterAlgorithm": - - void sortSiriusWorkspacePathsByScanIndex(libcpp_vector[ String ]& subdirs) except + nogil # wrap-attach:SiriusAdapterAlgorithm diff --git a/src/pyOpenMS/pxds/SiriusAdapterHit.pxd b/src/pyOpenMS/pxds/SiriusAdapterHit.pxd deleted file mode 100644 index bbac90e96e0..00000000000 --- a/src/pyOpenMS/pxds/SiriusAdapterHit.pxd +++ /dev/null @@ -1,21 +0,0 @@ -from Types cimport * -from String cimport * - -cdef extern from "" namespace "OpenMS::SiriusMzTabWriter": - - cdef cppclass SiriusAdapterHit "OpenMS::SiriusMzTabWriter::SiriusAdapterHit": - SiriusAdapterHit() except + nogil - SiriusAdapterHit(SiriusAdapterHit &) except + nogil # compiler - - String formula - String adduct - String precursor_formula - int rank - double iso_score - double tree_score - double sirius_score - int explainedpeaks - double explainedintensity - double median_mass_error_fragment_peaks_ppm - double median_absolute_mass_error_fragment_peaks_ppm - double mass_error_precursor_ppm diff --git a/src/pyOpenMS/pxds/SiriusAdapterIdentification.pxd b/src/pyOpenMS/pxds/SiriusAdapterIdentification.pxd deleted file mode 100644 index 01292d4b2aa..00000000000 --- a/src/pyOpenMS/pxds/SiriusAdapterIdentification.pxd +++ /dev/null @@ -1,19 +0,0 @@ -from Types cimport * -from SiriusAdapterHit cimport * -from String cimport * -from StringList cimport * -from libcpp.vector cimport vector as libcpp_vector - -cdef extern from "" namespace "OpenMS::SiriusMzTabWriter": - - cdef cppclass SiriusAdapterIdentification "OpenMS::SiriusMzTabWriter::SiriusAdapterIdentification": - SiriusAdapterIdentification() except + nogil - SiriusAdapterIdentification(SiriusAdapterIdentification &) except + nogil # compiler - - double mz - double rt - StringList native_ids - int scan_index - int scan_number - String feature_id - libcpp_vector[ SiriusAdapterHit ] hits diff --git a/src/pyOpenMS/pxds/SiriusAdapterRun.pxd b/src/pyOpenMS/pxds/SiriusAdapterRun.pxd deleted file mode 100644 index a848d822aa0..00000000000 --- a/src/pyOpenMS/pxds/SiriusAdapterRun.pxd +++ /dev/null @@ -1,10 +0,0 @@ -from Types cimport * -from SiriusAdapterIdentification cimport SiriusAdapterIdentification - -cdef extern from "" namespace "OpenMS::SiriusMzTabWriter": - - cdef cppclass SiriusAdapterRun "OpenMS::SiriusMzTabWriter::SiriusAdapterRun": - SiriusAdapterRun() except + nogil - SiriusAdapterRun(SiriusAdapterRun &) except + nogil # compiler - - libcpp_vector[SiriusAdapterIdentification] identifications diff --git a/src/pyOpenMS/pxds/SiriusExportAlgorithm.pxd b/src/pyOpenMS/pxds/SiriusExportAlgorithm.pxd new file mode 100644 index 00000000000..666de050b10 --- /dev/null +++ b/src/pyOpenMS/pxds/SiriusExportAlgorithm.pxd @@ -0,0 +1,68 @@ +from Types cimport * +from String cimport * +from FeatureMap cimport * +from MSExperiment cimport * +from FeatureMapping cimport * +from KDTreeFeatureMaps cimport * +from libcpp.vector cimport vector as libcpp_vector +from libcpp.pair cimport pair as libcpp_pair + +from DefaultParamHandler cimport * + +cdef extern from "" namespace "OpenMS": + + cdef cppclass SiriusExportAlgorithm(DefaultParamHandler): + # wrap-inherits: + # DefaultParamHandler + + SiriusExportAlgorithm() except + nogil + SiriusExportAlgorithm(SiriusExportAlgorithm &) except + nogil # compiler + + bool isFeatureOnly() except + nogil + UInt getFilterByNumMassTraces() except + nogil + double getPrecursorMzTolerance() except + nogil + double getPrecursorRtTolerance() except + nogil + bool precursorMzToleranceUnitIsPPM() except + nogil + bool isNoMasstraceInfoIsotopePattern() except + nogil + int getIsotopePatternIterations() except + nogil + + void preprocessing(const String& featureXML_path, + MSExperiment& spectra, + FeatureMapping_FeatureMappingInfo& feature_mapping_info, + FeatureMapping_FeatureToMs2Indices& feature_ms2_indices) except + nogil + # wrap-doc: + # Preprocessing needed for SIRIUS + # + # Filter number of masstraces and perform feature mapping + # + # :param featureXML_path: Path to featureXML + # :param spectra: Input of MSExperiment with spectra information + # :param feature_mapping_info: Emtpy - stores FeatureMaps and KDTreeMaps internally + # :param feature_ms2_indices: Empty FeatureToMs2Indices + + void logFeatureSpectraNumber(const String& featureXML_path, + FeatureMapping_FeatureToMs2Indices& feature_ms2_indices, + MSExperiment& spectra) except + nogil + # wrap-doc: + # Logs number of features and spectra used + # + # Prints the number of features and spectra used (OPENMS_LOG_INFO) + # + # :param featureXML_path: Path to featureXML + # :param feature_ms2_indices: FeatureToMs2Indices with feature mapping + # :param spectra: Input of MSExperiment with spectra information + + void run(const StringList& mzML_files, + const StringList& featureXML_files, + const String& out_ms, + const String& out_compoundinfo) except + nogil + + # wrap-doc: + # Runs SiriusExport with mzML and featureXML (optional) files as input. + # + # Generates a SIRIUS .ms file and compound info table (optional). + # + # :param mzML_files: List with paths to mzML files + # :param featureXML_files: List with paths to featureXML files + # :param out_ms: Output file name for SIRIUS .ms file + # :param out_compoundinfo: Output file name for tsv file with compound info \ No newline at end of file diff --git a/src/pyOpenMS/pxds/SiriusFragmentAnnotation.pxd b/src/pyOpenMS/pxds/SiriusFragmentAnnotation.pxd index efd96058645..514f3237b45 100644 --- a/src/pyOpenMS/pxds/SiriusFragmentAnnotation.pxd +++ b/src/pyOpenMS/pxds/SiriusFragmentAnnotation.pxd @@ -1,6 +1,7 @@ from Types cimport * from String cimport * from MSSpectrum cimport * +from CsvFile cimport * cdef extern from "" namespace "OpenMS": @@ -13,15 +14,12 @@ cdef extern from "" namespa String& path_to_sirius_workspace, Size max_rank, bool decoy, - bool use_exact_mass) except + nogil - libcpp_vector[MSSpectrum] extractSiriusAnnotationsTgtOnly( - libcpp_vector[String]& sirius_workspace_subdirs, - double score_threshold, - bool use_exact_mass, - bool resolve) except + nogil + bool use_exact_mass) except + nogil libcpp_vector[ SiriusFragmentAnnotation_SiriusTargetDecoySpectra ] extractAndResolveSiriusAnnotations(libcpp_vector[ String ]& sirius_workspace_subdirs, double score_threshold, - bool use_exact_mass) except + nogil + bool use_exact_mass, + bool decoy_generation) except + nogil + libcpp_map[ libcpp_string, Size ] extract_columnname_to_columnindex(CsvFile& csvfile) except + nogil cdef cppclass SiriusFragmentAnnotation_SiriusTargetDecoySpectra "OpenMS::SiriusFragmentAnnotation::SiriusTargetDecoySpectra": diff --git a/src/pyOpenMS/pxds/SiriusMSFile.pxd b/src/pyOpenMS/pxds/SiriusMSFile.pxd index bebaabacfd1..8a1676b07bd 100644 --- a/src/pyOpenMS/pxds/SiriusMSFile.pxd +++ b/src/pyOpenMS/pxds/SiriusMSFile.pxd @@ -16,14 +16,3 @@ cdef extern from "" namespace "OpenMS": cdef cppclass SiriusMSFile_AccessionInfo "OpenMS::SiriusMSFile::AccessionInfo": SiriusMSFile_AccessionInfo() except + nogil SiriusMSFile_AccessionInfo(SiriusMSFile_AccessionInfo &) except + nogil # compiler - -cdef extern from "" namespace "OpenMS::SiriusMSFile": - - # wrap static method: - void store(MSExperiment& spectra, - const String& msfile, - FeatureMapping_FeatureToMs2Indices& feature_mapping, - bool feature_only, - int isotope_pattern_iterations, - bool no_mt_info, - libcpp_vector[ SiriusMSFile_CompoundInfo ]& v_cmpinfo) except + nogil # wrap-attach:SiriusMSFile diff --git a/src/pyOpenMS/pxds/SiriusMzTabWriter.pxd b/src/pyOpenMS/pxds/SiriusMzTabWriter.pxd deleted file mode 100644 index 5a003e1920d..00000000000 --- a/src/pyOpenMS/pxds/SiriusMzTabWriter.pxd +++ /dev/null @@ -1,38 +0,0 @@ -from Types cimport * -from libcpp.vector cimport vector as libcpp_vector -from libcpp.string cimport string as libcpp_string -from libcpp.map cimport map as libcpp_map -from String cimport * -from StringList cimport * -from MzTab cimport * -from CsvFile cimport * - -cdef extern from "" namespace "OpenMS": - - cdef cppclass SiriusMzTabWriter: - SiriusMzTabWriter() except + nogil - SiriusMzTabWriter(SiriusMzTabWriter &) except + nogil # compiler - - cdef cppclass SiriusMzTabWriter_SiriusSpectrumMSInfo "OpenMS::SiriusMzTabWriter::SiriusSpectrumMSInfo": - - SiriusMzTabWriter_SiriusSpectrumMSInfo() except + nogil - SiriusMzTabWriter_SiriusSpectrumMSInfo(SiriusMzTabWriter_SiriusSpectrumMSInfo &) except + nogil # compiler - - StringList ext_n_id - double ext_mz - double ext_rt - -# wrap static method: -cdef extern from "" namespace "OpenMS::SiriusMzTabWriter": - - int extractScanIndex(const String& path) except + nogil # wrap-attach:SiriusMzTabWriter - int extractScanNumber(const String& path) except + nogil # wrap-attach:SiriusMzTabWriter - String extractFeatureId(const String& path) except + nogil # wrap-attach:SiriusMzTabWriter - libcpp_map[ libcpp_string, Size ] extract_columnname_to_columnindex(CsvFile& csvfile) except + nogil # wrap-attach:SiriusMzTabWriter - - SiriusMzTabWriter_SiriusSpectrumMSInfo extractSpectrumMSInfo(const String& single_sirius_path) except + nogil # wrap-attach:SiriusMzTabWriter - - void read(libcpp_vector[ String ]& sirius_output_paths, - const String& original_input_mzml, - Size top_n_hits, - MzTab& result) except + nogil # wrap-attach:SiriusMzTabWriter diff --git a/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/decoys/C10H12N3O3PS2_[M+H]+.tsv b/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/decoys/C10H12N3O3PS2_[M+H]+.tsv deleted file mode 100644 index 640bfa30ed8..00000000000 --- a/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/decoys/C10H12N3O3PS2_[M+H]+.tsv +++ /dev/null @@ -1,17 +0,0 @@ -mz rel.intensity formula ionization -46.994998 0.71 CH2S [M + H]+ -62.015101 100.00 C5H [M + H]+ -63.010350 9.36 C4N [M + H]+ -63.970867 5.87 O2P [M + H]+ -87.010350 3.96 C6N [M + H]+ -89.026001 30.29 C6H2N [M + H]+ -90.010016 30.48 C6HO [M + H]+ -109.958588 53.42 CH2O2PS [M + H]+ -117.020915 58.05 C7H2NO [M + H]+ -121.982398 2.05 C2H4NOPS [M + H]+ -124.982063 0.80 C2H5O2PS [M + H]+ -136.969487 1.61 C2H3NO2PS [M + H]+ -151.992963 5.97 C3H6NO2PS [M + H]+ -182.993283 1.52 C8H6OS2 [M + H]+ -302.989571 0.54 C9H9N3O3PS2 [M + H]+ -318.013046 1.52 C10H12N3O3PS2 [M + H]+ diff --git a/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/decoys/C15H17ClN4_[M+H]+.tsv b/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/decoys/C15H17ClN4_[M+H]+.tsv new file mode 100644 index 00000000000..a7f1f6eee74 --- /dev/null +++ b/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/decoys/C15H17ClN4_[M+H]+.tsv @@ -0,0 +1,23 @@ +mz rel.intensity formula ionization +53.013424 100.00 C2N2 [M + H]+ +158.071274 1.18 C9H7N3 [M + H]+ +168.032301 0.54 C7H6ClN3 [M + H]+ +184.086924 0.77 C11H9N3 [M + H]+ +185.094749 1.11 C11H10N3 [M + H]+ +194.047951 63.51 C9H8ClN3 [M + H]+ +199.097823 1.32 C11H10N4 [M + H]+ +206.047951 0.91 C10H8ClN3 [M + H]+ +212.105648 0.67 C12H11N4 [M + H]+ +218.047951 1.33 C11H8ClN3 [M + H]+ +219.043200 1.45 C10H7ClN4 [M + H]+ +220.063601 15.12 C11H10ClN3 [M + H]+ +220.088754 1.91 C13H14ClN [M + H]+ +222.102574 0.86 C14H11N3 [M + H]+ +233.058850 5.26 C11H9ClN4 [M + H]+ +235.074500 1.55 C11H11ClN4 [M + H]+ +244.063601 0.86 C13H10ClN3 [M + H]+ +247.074500 3.10 C12H11ClN4 [M + H]+ +261.090151 0.57 C13H13ClN4 [M + H]+ +262.110552 0.70 C14H16ClN3 [M + H]+ +272.094902 0.85 C15H14ClN3 [M + H]+ +289.121451 1.91 C15H17ClN4 [M + H]+ diff --git a/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/formula_candidates.tsv b/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/formula_candidates.tsv index 7a0c2cfa77c..5ccf613b595 100644 --- a/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/formula_candidates.tsv +++ b/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/formula_candidates.tsv @@ -1,2 +1,2 @@ -rank molecularFormula adduct precursorFormula TreeIsotope_Score Tree_Score Isotope_Score explainedPeaks explainedIntensity -1 C10H12N3O3PS2 [M + H]+ C10H12N3O3PS2 52.705458229508025 52.705458229508025 0.0 16 0.9823827156040691 +formulaRank molecularFormula adduct precursorFormula SiriusScore TreeScore IsotopeScore numExplainedPeaks explainedIntensity medianMassErrorFragmentPeaks(ppm) medianAbsoluteMassErrorFragmentPeaks(ppm) massErrorPrecursor(ppm) lipidClass +1 C15H17ClN4 [M + H]+ C15H17ClN4 39.34241769057247 36.691010794465846 2.6514068961066233 22 0.9685426989556167 -4.462674100188872 4.8724686384496785 4.02875003592188 diff --git a/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/spectra/C10H12N3O3PS2_[M+H]+.tsv b/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/spectra/C10H12N3O3PS2_[M+H]+.tsv deleted file mode 100644 index 71af11bc83f..00000000000 --- a/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/spectra/C10H12N3O3PS2_[M+H]+.tsv +++ /dev/null @@ -1,17 +0,0 @@ -mz intensity rel.intensity exactmass formula ionization -51.023137 713.15 9.36 51.022927 C4H2 [M + H]+ -62.017416 60.00 0.71 62.018473 C2H5S [M + H]+ -75.022594 90.00 0.80 75.022927 C6H2 [M + H]+ -77.038719 7559.67 100.00 77.038577 C6H4 [M + H]+ -78.994535 491.01 5.87 78.994342 CH3O2P [M + H]+ -102.033725 301.61 3.96 102.033826 C7H3N [M + H]+ -104.049321 2561.37 30.29 104.049476 C7H5N [M + H]+ -105.033096 2149.88 30.48 105.033491 C7H4O [M + H]+ -124.982587 3771.00 53.42 124.982063 C2H5O2PS [M + H]+ -132.044269 4731.00 58.05 132.044390 C8H5NO [M + H]+ -137.006359 180.00 2.05 137.005873 C3H7NOPS [M + H]+ -151.991870 135.00 1.61 151.992963 C3H6NO2PS [M + H]+ -167.017809 504.00 5.97 167.016438 C4H9NO2PS [M + H]+ -167.970809 90.00 0.54 167.969808 C7H3OS2 [M + H]+ -182.994147 135.00 1.52 182.993283 C8H6OS2 [M + H]+ -318.012863 0.00 0.00 318.013046 C10H12N3O3PS2 [M + H]+ diff --git a/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/spectra/C15H17ClN4_[M+H]+.tsv b/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/spectra/C15H17ClN4_[M+H]+.tsv new file mode 100644 index 00000000000..f4fdf313527 --- /dev/null +++ b/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/spectra/C15H17ClN4_[M+H]+.tsv @@ -0,0 +1,23 @@ +mz intensity rel.intensity exactmass formula ionization +70.040098 24218.53 100.00 70.039974 C2H3N3 [M + H]+ +89.037322 315.00 1.18 89.038577 C7H4 [M + H]+ +98.999966 135.00 0.54 98.999604 C5H3Cl [M + H]+ +115.054570 213.74 0.77 115.054227 C9H6 [M + H]+ +116.061561 270.00 1.11 116.062052 C9H7 [M + H]+ +125.014308 14773.00 63.51 125.015254 C7H5Cl [M + H]+ +130.064515 366.00 1.32 130.065126 C9H7N [M + H]+ +137.014279 249.00 0.91 137.015254 C8H5Cl [M + H]+ +143.072762 168.12 0.67 143.072951 C10H8N [M + H]+ +149.013989 299.00 1.33 149.015254 C9H5Cl [M + H]+ +150.010826 309.00 1.45 150.010503 C8H4ClN [M + H]+ +151.029903 3468.00 15.12 151.030904 C9H7Cl [M + H]+ +153.069565 225.00 0.86 153.069877 C12H8 [M + H]+ +164.024417 1260.00 5.26 164.026153 C9H6ClN [M + H]+ +166.041504 358.00 1.55 166.041803 C9H8ClN [M + H]+ +175.031788 270.00 0.86 175.030904 C11H7Cl [M + H]+ +178.040558 739.00 3.10 178.041803 C10H8ClN [M + H]+ +192.055368 195.00 0.57 192.057453 C11H10ClN [M + H]+ +193.076440 180.00 0.70 193.077855 C12H13Cl [M + H]+ +203.062236 251.00 0.85 203.062204 C13H11Cl [M + H]+ +220.087015 542.00 1.91 220.088754 C13H14ClN [M + H]+ +289.122615 827.00 2.92 289.121451 C15H17ClN4 [M + H]+ diff --git a/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/spectrum.ms b/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/spectrum.ms index f628d3273b1..e20891c8445 100644 --- a/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/spectrum.ms +++ b/src/tests/class_tests/openms/data/SiriusFragmentAnnotation_test/spectrum.ms @@ -1,562 +1,692 @@ ->compound _5585685219772452827-657005-Guthion4 ->formula C10H12N3O3PS2 ->parentmass 318.012862565976 +>compound 0_5053681185761206615-676004--121--Myclobutanil +>formula C15H17ClN4 +>parentmass 289.122615478838 >ionization [M + H]+ >instrumentation Unknown (LCMS) ->source file:/private/var/folders/t7/x82jn_jd09vc_hlq_sqs2jlw0000gn/T/20200504_151338_Olivers-MBP.fritz.box_66126_2.ms +>source file:///home/axel/dev/OpenMS/src/tests/topp/SiriusExport_2_output.ms >quality UNKNOWN ->rt 431.86600000002s +>rt 448.02799999998s >ms1merged -##fid 5585685219772452827 -##fmz 318.012862565976377 -##des Guthion +##fid 5053681185761206615 +##fmz 289.122615478837758 +##des Myclobutanil ##specref_format [MS, MS:1000770, WIFF nativeID format] ##source format [MS, MS:1000562, ABI WIFF format,] -318.012862565976 47593.13228635615 +289.122615478838 1356806.543650602 +290.123323995928 168319.5386947108 +291.117964046924 433903.2521391701 +292.12026079967 99781.63453909254 >ms1peaks -52.005865355475 2936.356689453125 -53.013723515258 15168.8681640625 -53.850400239168 1357.829345703125 -54.009447090145 347607.15625 -55.006110218286 6238.44189453125 -55.011508541956 7268.9580078125 -55.054636618089 2136.0 -55.934309116073 6532.552734375 -56.942275933353 2612.8740234375 -59.04962215863 56011.4296875 -60.044524012498 9000.79296875 -61.039481839151 1786.074829101562 -63.997449394256 3736.1650390625 -64.005109595772 4712.666015625 -68.011792039005 26707.251953125 -68.99370247755 13633.01953125 -69.008646447254 1441.886596679688 -69.044733608562 13552.908203125 -69.494666168807 1088.0 -72.044289477019 1134.0 -72.936653378507 2379.292724609375 -73.064314657279 1947.0 -76.486410468336 2230.0 -77.038532396207 1590.778686523438 -79.021074679723 14557.21484375 -80.049121781728 13038.990234375 -81.93738430988 9136.173828125 -82.996771559276 9647.291015625 -87.044032478393 1164.202392578125 -87.055030197874 1937.880737304688 -89.506480817586 1633.0 -90.489144644798 1823.0 -91.053978578614 1481.0 -95.952653475183 2798.568603515625 -97.968242662562 7804.67626953125 -100.075124666224 1357.0 -102.091023963336 2105.0 -109.943015773476 1849.49267578125 -113.963173340819 2146.0 -114.091149027124 11434.439453125 -118.085562888545 7126.60205078125 -122.095450971812 3351.0 -122.963406396921 11429.5927734375 -123.091816714399 1461.405029296875 -123.962989553704 1162.0 -132.04385813701 23466.287109375 -133.04731226113 2601.019775390625 -136.020979409517 1763.0 -136.111376584671 1338.0 -141.09063153129 1452.329956054688 -141.112250777587 1933.171752929688 -141.957805111647 16272.5205078125 -142.960130525273 1091.785766601562 -147.09088971337 2561.0 -149.022860382613 8952.703125 -149.043461527452 2074.399169921875 -151.096439801801 2539.81591796875 -151.11120914375 2693.475830078125 -155.070028482861 1787.522338867188 -155.10537570316 1554.431030273438 -155.973268704769 4467.0 -158.002234575261 1123.1806640625 -158.153819790011 15565.5439453125 -159.13683057629 1251.366088867188 -159.15692935081 1638.817993164062 -159.968015589745 1144.587158203125 -160.050107538005 10862.0 -161.095753069011 1987.528442382812 -163.130314304873 1321.613403320312 -164.142207413101 1344.506469726562 -170.096003050047 2831.750244140625 -170.116393016687 1241.047485351562 -170.969308188165 1467.0 -171.138824143644 1976.4716796875 -172.132816514555 1070.0 -172.169354072833 1126.623413085938 -173.080592066342 7150.67333984375 -174.127101054123 1093.0 -174.991572624579 1115.259887695312 -175.117966507653 1382.41357421875 -177.053956263481 3086.0 -178.158743604693 1737.946655273438 -179.106488149861 2092.017333984375 -182.961571664514 1566.125366210938 -182.982955367691 1389.804321289062 -186.221312636852 2310 -194.116506735598 3012.14208984375 -195.1219835686 1971.532348632812 -198.184492106186 2254.0 -199.168659259112 1074.472778320312 -200.20054460705 1265.0 -209.152957718499 1444.0 -215.126858142678 1195.0 -217.107186196782 24662.302734375 -218.110233972313 2772.0 -219.095202240315 3180.013427734375 -219.137164883586 1444.293090820312 -224.128646207474 1167.206176757812 -228.19636918932 1732.199340820312 -235.170060948981 1264.53857421875 -236.167946332224 2704.449462890625 -239.089160494599 5259.0 -240.068219796793 1277.48486328125 -240.091769691182 1359.958740234375 -242.284200605489 1137.0 -246.863294404574 3891.0 -249.184938071857 1294.47412109375 -250.177914710678 1312.0 -250.999736865556 2366.0 -251.185303455126 1195.0 -252.996845199048 1725.0 -260.98083113567 9681.0 -262.976934337234 1074.0 -267.172286092444 1268.487426757812 -279.093453473919 1954.0 -281.051187832394 1373.0 -287.889696989575 1142.0 -318.012975056617 4878.0 -327.008528574617 3507.0 -329.005288792022 3151.0 -339.995536258518 21188.0 -340.998304727292 3403.0 -341.991615450972 1965.0 -351.928765172494 2752.0 -353.9258636375 1287.0 -355.970345025132 1233.272216796875 -363.071463720139 4333.0 -371.315937786641 1386.0 -379.93451732672 2414.0 -381.93276558448 1355.0 -430.887891579421 1170.0 -445.119501835711 2373.0 -503.857852657168 1208.0 -505.853144541362 5379.0 -506.85440693393 1813.0 -522.880381915172 2380.0 -523.873038712107 1344.0 -529.890971881918 1718.0 -536.164830382665 5050.0 -537.165530578391 2568.0 -538.164082153377 1889.0 -542.91979154793 1233.0 -544.340309842267 1260.0 -544.91674096605 1184.0 -546.914239791284 3795.0 -547.91282202567 1609.0 -563.944002995814 1077.2587890625 -610.183402350979 1851.0 -611.184706508494 1107.0 -696.940078237106 1408.0 +52.005351813457 2501.610107421875 +53.013412581284 13134.5205078125 +53.850226225992 1302.909057617188 +54.009140063564 338983.65625 +55.006042248338 6435.41259765625 +55.011148435189 6609.39404296875 +55.054172395822 1772.104248046875 +55.934029229957 5757.919921875 +56.941868288709 2705.908203125 +59.049392394217 65787.7578125 +60.04419739655 9389.001953125 +61.039698624921 1629.770751953125 +63.997582420249 4596.09619140625 +64.004915539546 4860.728515625 +68.011405901665 27484.29296875 +68.993238795734 11816.1728515625 +69.044514210085 12151.7626953125 +72.936346245282 1770.0 +73.063844648998 1632.810180664062 +76.485866327556 2207.0 +79.020638014668 15456.1591796875 +80.048700307132 11716.7060546875 +81.936658440041 8339.158203125 +82.995849176432 8191.0 +87.054215388379 1432.329345703125 +89.50580663687 1376.0 +90.488666027165 1798.0 +95.952211902793 2472.0 +97.967974119285 6640.0 +100.0745588278 1418.0 +102.090063528932 1768.0 +109.942148206295 1646.0 +113.96281092092 1728.0009765625 +114.090265101894 9843.087890625 +118.085166173822 5466.14697265625 +122.095082275611 3591.515380859375 +122.962671452755 9919.435546875 +123.090603383338 1818.105346679688 +130.157985838236 1433.0 +136.020144210415 1305.642211914062 +141.111768954054 1381.647338867188 +141.957291332652 13999.958984375 +147.090365251433 2315.56494140625 +149.021998403294 4169.404296875 +151.095653127576 2632.1923828125 +151.109600618565 2638.50390625 +155.06904919199 1400.58837890625 +155.10522171537 1306.244873046875 +155.972774632456 3955.750244140625 +158.152847157321 10190.6318359375 +161.094883274868 1469.0 +164.993233307885 1413.0 +170.0947568042 2692.873779296875 +173.07909618349 5464.607421875 +174.990754641374 1338.0 +175.120920396226 1335.489135742188 +178.157288006504 1567.557739257812 +179.104881581157 1856.0 +182.960071822982 1596.667236328125 +186.016812097735 3128.0 +194.115183195725 3037.01904296875 +195.105676043577 1846.959228515625 +195.121034909827 2138.53466796875 +198.183715433637 1614.0 +201.983396783946 6476.0 +217.007534943089 16000.083984375 +217.105603079 12722.193359375 +218.010461830348 1723.0 +218.108916975941 1918.0 +219.094207015885 1394.0 +234.033666185649 17919.0 +235.036061869219 1699.0 +239.087710708037 2715.0 +245.038087259231 3705.0 +246.860587751512 3017.0 +250.998652800198 2461.0 +252.996040050118 1751.0 +262.065226573716 31878.271484375 +263.067812997194 3540.0 +264.062744585962 1732.0 +276.080875651007 47441.0 +277.083729023421 6202.904296875 +278.078049070253 2909.8056640625 +279.092264164105 2269.0 +281.049607531965 1759.0 +284.16370925301 5971.3173828125 +285.167422523505 1450.9375 +289.120547785899 45105.26171875 +290.122834000335 8899.0 +291.11814896433 16223.0 +292.119468760172 3916.748291015625 +303.104211105075 4272.90087890625 +303.190626643079 3701.817626953125 +304.121038021889 1154982.0 +304.680120827865 1361.469604492188 +304.720450396369 1578.193115234375 +304.756696628278 1464.1357421875 +304.826755934771 1415.802856445312 +304.888295222133 4211.7490234375 +304.975939340234 6444.7470703125 +305.112954471951 109660.9765625 +306.110248734555 72833.0 +307.111946842557 10169.5791015625 +307.247397220322 1757.839477539062 +310.1202124831 5088.0 +320.107070842572 7286.0 +321.109817317563 1634.396606445312 +321.134008500327 1645.504272460938 +326.094135509242 51581.21484375 +327.006663634739 3305.2880859375 +327.096918826684 8025.06396484375 +328.09087936356 3401.237060546875 +329.002848029289 3721.0 +330.204815446188 11820.9521484375 +331.208232327135 2889.0 +342.067980362905 3189.39501953125 +349.169296376205 25098.0 +350.172883605486 4323.0 +351.167291455015 1724.0 +372.149200119315 2817.47705078125 +404.03600410036 11013.0 +405.038241871311 2224.6796875 +424.359699824875 1469.0 +445.117347283461 1962.204711914062 +500.274802921042 11554.1630859375 +501.277725760601 3400.0 +502.28653995658 1910.0 +505.85089556432 2188.0 +536.162361057972 4668.0 +537.163239801382 2428.0 +538.161608472883 1869.0 +544.336387601713 1598.0 +546.911505452596 1493.0 +549.965979448424 1640.0 +592.225456903764 1675.0 +607.216655018496 74091.0 +608.219193446659 23449.0 +609.2158525552 11438.5283203125 +610.208425679746 4454.0 +611.188234775837 1805.798706054688 +612.220726308427 4082.0 +613.22450541899 34075.0 +614.227906702716 11171.0 +615.225014693998 5343.0 +623.210784148654 2510.0 +629.198405169302 68640.0 +630.201595235063 21340.328125 +631.198284234777 10581.0 +632.198298853566 2483.0 +707.140261218123 1384.0 >ms1peaks -52.005717667707 2536.876953125 -53.013645918459 13517.7197265625 -53.851091408425 1440.814208984375 -54.009479564739 340518.46875 -55.006713705873 6189.19580078125 -55.011648330739 5775.9189453125 -55.054395080163 1937.021850585938 -55.934309790351 6216.4873046875 -56.049851096555 1422.552856445312 -56.942103151176 2497.94580078125 -59.049782018324 63557.1875 -60.044617957556 9127.33203125 -61.039564209817 1916.918579101562 -63.998058629288 4341.63134765625 -64.005180932598 4902.9072265625 -68.011727932833 27051.19140625 -68.994002789359 13611.51171875 -69.034264524552 2235.96240234375 -69.044867744672 14147.763671875 -72.936875253829 3080.5009765625 -73.064425531348 1778.78125 -76.486297547963 2075.0 -77.038265451054 5099.8818359375 -79.021270792779 14303.7861328125 -80.049179511142 11132.4833984375 -81.937187525733 8269.017578125 -82.996616277972 9058.6044921875 -87.055191552618 1226.265625 -89.506723502083 2138.0 -90.489274059111 1883.0 -91.053872057085 1250.0 -95.952563443877 2416.9072265625 -97.968351278732 7414.0 -102.091075578098 2124.0 -104.049176798538 2869.822265625 -105.032824057535 2268.30224609375 -109.942659719793 1552.50341796875 -113.963028919819 2876.3134765625 -114.091047730204 9707.0 -118.085960022478 6202.34375 -122.095829000463 3354.874755859375 -122.963603572159 10189.080078125 -123.09199022384 1658.215576171875 -123.962908276753 1264.0 -124.961981387844 1248.617553710938 -124.981468335431 3929.697021484375 -132.044195947098 93934.0703125 -133.046929709006 8774.4619140625 -136.020849942089 1733.0 -136.111849813683 1360.0 -139.963062553447 1109.337646484375 -141.09035858921 1395.717041015625 -141.112852312471 1316.060180664062 -141.957905703603 16856.453125 -142.959660117555 1253.947509765625 -147.09075864945 2468.09130859375 -149.023008191796 6552.861328125 -150.054483884674 1381.87939453125 -151.09625877362 2499.016357421875 -151.110632987131 2703.097412109375 -153.126579038194 1175.0 -155.069775153959 1603.251586914062 -155.105765884478 1708.284912109375 -155.973825500886 4965.0 -158.002736417151 1095.759399414062 -158.153601610996 15319.201171875 -159.156377711765 1693.013305664062 -160.050203671116 29808.1875 -161.053148014827 2780.099853515625 -161.095739798824 1801.900268554688 -164.143136174419 1163.970947265625 -167.016142798795 1938.0 -170.095669159809 2557.841796875 -170.11680388581 1136.247192382812 -170.969513731195 5351.0 -171.138682297569 3310.690673828125 -172.133498266589 1186.970092773438 -172.168816609007 1753.0 -173.079889235839 8137.4248046875 -174.127584523158 1118.0 -177.05339875975 2010.0 -178.158757601913 1500.6982421875 -179.105540802675 2172.2626953125 -182.961283063703 1745.384643554688 -186.221178069795 1622.0 -194.116354222571 3003.0 -195.10216072194 1637.390014648438 -195.121964321705 2114.30712890625 -198.185094857026 2154.0 -209.152949152955 1423.597534179688 -217.106757414349 22820.37109375 -218.109717212262 2365.71533203125 -219.095322856019 2839.912353515625 -224.127859164514 1268.0 -228.195125596876 1796.750244140625 -235.168738541554 1153.106201171875 -236.167125665018 2147.822998046875 -239.089167868946 3697.0 -242.283752097581 1331.0 -246.862020032552 3643.0 -249.184726675759 1740.0 -250.176839865775 1269.149047851562 -251.000052262976 1835.0 -251.185199846439 1143.344848632812 -252.99700073552 1613.0 -253.915053857069 3181.0 -260.98052093694 34136.08984375 -261.983107472769 3914.0 -262.975908361642 3711.0 -267.171176133304 1190.0 -279.094069923914 2218.0 -281.050366742298 1525.0 -304.299335403967 1178.0 -318.012807082281 13905.0 -319.015812641865 1771.0 -320.009779889072 1411.312622070312 -324.021497063862 2274.0 -327.00830348735 3194.0 -329.005675073912 3118.0 -339.995324080662 63593.0 -340.998247708453 9047.66015625 -341.991464705082 6892.0 -351.928380615899 5009.0 -353.925994810456 2303.0 -355.968410053379 3129.565673828125 -363.070877703428 10529.0 -364.073137490148 1819.0 -379.934530374708 4270.0 -381.931407641533 2153.0 -445.120046493581 2353.0 -503.859909772363 1436.0 -505.853063220538 5926.0 -506.854048759295 1904.0 -519.139384687535 1126.0 -522.8803687661 2806.0 -523.877736811317 1418.0 -529.888748439098 1722.0 -536.165143915241 4925.0 -537.165086990853 2707.0 -538.162296228146 1762.0 -542.921174254561 1132.0 -543.918003709155 1152.0 -546.91488699549 3416.0 -547.91221944751 1693.0 -563.943181698806 1223.378784179688 -610.18432293802 2314.0 -611.18429620634 1322.0 -657.001817843383 1409.0 -696.940437510992 3603.0 -698.940217154744 2331.0 +52.005397076818 2734.410888671875 +52.018107045505 1336.588989257812 +53.013261826329 14264.3037109375 +54.009079203842 328540.5625 +55.005732946798 6038.43408203125 +55.011210209049 5773.4833984375 +55.054089450492 1883.920532226562 +55.93393335135 5941.79931640625 +56.049311183158 2529.91064453125 +56.941559341288 2177.7314453125 +59.049288422008 55833.33203125 +60.044400478994 9188.86328125 +61.039483771618 1336.615844726562 +63.99776908929 4226.59521484375 +64.004652574785 4312.662109375 +67.028420902367 1685.13232421875 +68.011303574981 26639.857421875 +68.993400384347 11132.4560546875 +69.044245603619 12842.1396484375 +72.936451870693 2092.43896484375 +73.064343001052 2004.0 +76.485626827097 1932.002563476562 +79.020705537221 15479.7822265625 +80.048746552992 12934.6494140625 +81.936560826315 7849.1748046875 +82.996236710322 7697.5703125 +87.043649221397 1392.278564453125 +87.054161695388 1495.958618164062 +89.506032483299 1554.0 +90.488774891048 1551.744018554688 +91.052857733317 1701.434936523438 +95.951953010697 2094.0 +97.967766546756 6595.5302734375 +109.942695624537 1327.0 +113.961956344849 1877.0 +114.090202311915 11113.38671875 +118.085079269697 5461.0 +122.095332793077 3096.0 +122.962788239519 9551.916015625 +123.089923877343 1592.0 +130.158267685481 1374.0 +136.020500147191 1906.4296875 +141.089705751127 1398.031372070312 +141.111419699029 1374.918823242188 +141.935031405798 2215.52880859375 +141.957114961469 13636.359375 +147.090410388658 2596.0 +149.021734118264 3900.0 +149.0422250444 1717.679077148438 +151.095530836015 2392.175048828125 +151.109345923165 2675.036376953125 +155.069217138005 1392.010375976562 +155.972851416164 3798.715576171875 +158.152680730278 10054.0 +161.095473046681 1550.0 +164.142407569715 1467.709594726562 +170.094842381476 2189.80517578125 +173.079740417554 5427.904296875 +178.157986956425 1455.0 +179.105560744514 1912.301391601562 +182.96069817628 2000.407470703125 +186.016618789428 1896.0 +186.220115257894 1974.0 +194.116069304698 2583.0 +195.12120780654 1998.3037109375 +198.184395565259 1695.0 +201.982853397927 4906.0 +217.00704585203 12703.0 +217.105649597883 13317.7265625 +218.109378650956 2113.98193359375 +219.093923189224 1382.400756835938 +234.033511361987 14162.0 +235.036774500644 1342.0 +239.08726666962 2910.0 +242.282551973761 1561.0 +245.038675382516 2489.0 +246.861414583855 2664.0 +250.998716978816 2090.0 +262.065290180852 23768.0 +263.068197519244 2928.0 +276.081065166232 35016.0 +277.08420013176 4404.0 +278.078513434024 2183.0 +279.092009717775 2217.0 +281.049184165914 1367.0 +284.16336041232 3532.0 +289.121282596047 297520.0 +290.123339528492 48851.796875 +291.118124278084 95531.0 +292.120251426315 17101.046875 +293.12318758226 1858.0654296875 +303.10401477558 2693.449951171875 +303.190353825641 2785.50244140625 +304.119856155362 954170.0 +304.858461688543 1629.946044921875 +304.974182520147 7187.60791015625 +305.110635941863 61549.015625 +306.110453215668 55678.07421875 +307.111643085162 7091.70068359375 +310.120007901196 5493.85400390625 +320.106626078784 4025.0 +326.094632546811 51218.67578125 +327.006414911949 2851.898193359375 +327.096265128312 8263.4248046875 +328.091406924071 3217.697509765625 +329.003058211528 3429.933349609375 +330.205471949815 7747.0 +331.207754653901 1796.0 +342.06742675164 3267.0 +349.169395269431 21267.0 +350.172679880257 4154.27197265625 +351.168393055602 1571.0 +372.0987395627 1670.002075195312 +372.148644610713 2317.465087890625 +389.045115150928 4473.0 +391.043177396698 1663.0 +404.036316278299 7850.0 +405.03999791327 1931.0 +424.359886173771 1591.0 +445.117801993639 2038.0 +500.275651903375 13340.0 +501.278433801524 4082.0 +502.285907017338 2013.566040039062 +505.851095535466 2281.0 +536.163686089478 4281.0 +537.165279310098 2275.0 +538.161599212928 1446.0 +542.322146689605 2319.23583984375 +544.33668100172 2203.0 +546.913546060949 1480.0 +549.965890540792 1571.7275390625 +592.225728725342 6278.0 +593.2291918198 2109.0 +594.222911870749 2943.70703125 +607.216789747777 46858.0 +608.219527953593 15482.0 +609.215333724431 7397.0 +610.196851071075 3575.0 +611.184731787601 1662.0 +612.221188935026 2560.0 +613.225065362361 23067.0 +614.226835965539 7388.0 +615.223918934987 3328.0 +623.150116137773 1311.609985351562 +623.211673074874 1404.509399414062 +629.198822367023 49161.0 +630.201975789631 15060.724609375 +631.197108322666 7602.10302734375 +632.19918227597 1787.0 +707.142781768806 1359.0 >ms1peaks -50.015030688094 1631.0 -52.005691836328 2833.837890625 -53.01367835205 13820.6455078125 -53.850930804944 1372.676147460938 -54.009488813193 341215.375 -55.006244952468 6363.8583984375 -55.011195314574 6663.78662109375 -55.054435589179 2093.444580078125 -55.934214796378 6443.96630859375 -56.04941863771 1614.372314453125 -56.942077131072 2603.345458984375 -59.049684010496 67068.6796875 -60.04467460026 8507.357421875 -61.039576232541 1618.78759765625 -63.997953270808 4540.6123046875 -64.004984885183 4765.146484375 -68.011730125352 26984.06640625 -68.993758540617 13250.0654296875 -69.044639818678 13453.1142578125 -72.936865747985 3009.785888671875 -73.06448744272 1926.0 -76.486106736487 2394.0 -77.012975210189 1331.0 -77.038245950909 6864.013671875 -79.021170250218 14954.513671875 -80.0490554879 12273.78125 -81.937167726085 8605.7216796875 -82.99658125927 9547.8955078125 -87.054493611252 1308.586669921875 -89.506388403917 1579.0 -90.489379547455 1879.0 -91.053817827625 1210.0 -95.952611673257 2421.652587890625 -97.968325410624 7844.62890625 -100.075376789744 1408.0 -102.09094041085 1712.0 -104.048827681379 4021.0 -105.032851808396 3043.7021484375 -109.943040230612 1524.0 -113.96274361115 2300.809326171875 -114.091086475065 10732.537109375 -118.085604757949 6375.12939453125 -122.095612538633 3453.34619140625 -122.963478886657 10149.138671875 -123.091154033496 1907.152587890625 -123.962085557178 1291.0 -124.96403285696 1524.723510742188 -124.981293760905 5573.30078125 -132.044243365317 129513.453125 -133.047275934233 12024.171875 -136.021338396786 1596.0 -136.111611313675 1179.0 -141.090513006913 1389.292724609375 -141.112565247916 1247.203857421875 -141.957978845995 16325.5 -147.090945866648 2556.685302734375 -149.023028218992 6399.154296875 -150.054262184195 1568.0 -151.096430884077 2664.400390625 -151.11101194016 2835.027587890625 -155.069438117684 1871.94482421875 -155.105960083325 1401.0 -155.973753152622 4288.0 -158.153627071218 14384.0 -159.156473714741 1627.7529296875 -160.050487288307 38915.0 -161.053611692746 4466.9423828125 -161.095700587134 1743.057495117188 -164.142944501592 1256.052368164062 -167.015735366166 2785.089599609375 -170.09615154372 2652.023193359375 -170.116409887737 1324.37646484375 -170.968993556255 7076.0 -171.13767114481 4912.31201171875 -172.136045264128 1371.0 -173.079830429233 8581.9287109375 -174.991306236853 1198.0 -177.054219725911 1769.0 -178.157947155736 1498.908447265625 -179.106050750592 1934.090454101562 -182.960933723657 1780.0615234375 -182.991388549794 1244.30908203125 -186.221152079128 2287.0 -194.116900036921 2752.0 -195.121615177487 1919.471069335938 -198.18441255994 2140.0 -200.200455656322 1296.55419921875 -209.153704347399 1590.0 -212.888258624179 1535.0 -217.106944592366 24346.0 -218.110517718319 2646.0 -219.095540028475 2644.006591796875 -228.19609714019 1527.811645507812 -236.167749124378 1677.0 -239.089312381813 3327.0 -242.284215148787 1201.0 -246.862288406064 3365.0 -249.184532839914 1860.293334960938 -251.001107206325 2362.0 -252.997444701878 1876.0 -253.916335213075 4093.0 -260.980865788213 46877.0 -261.983931158765 5301.0 -262.976772362746 4418.0 -267.172661485943 1410.0 -277.199859444074 2417.590087890625 -279.093448238935 1888.450561523438 -281.051163936397 1557.0 -292.121170689402 15731.0 -293.123945781771 2615.0 -294.118820607873 4859.0 -295.12182147643 1186.0 -318.013460543863 19020.0 -319.016226586969 2819.0 -320.010792812476 1745.0 -324.021120495162 2522.0 -327.007928037291 3314.07763671875 -329.005428091932 3187.0 -331.002680981835 1140.2294921875 -335.040406311528 1228.0 -339.995783079981 73785.0 -340.998517552508 10283.0 -341.99208904745 7216.0 -351.928943475892 4368.0 -353.92651925668 2362.0 -355.969819970535 3512.076416015625 -363.071778928522 11698.970703125 -364.073181575102 1981.0 -371.31552539996 1354.0 -379.934529706961 4095.88330078125 -381.932716463007 2062.0 -445.119746997025 2474.0 -446.119291863183 1145.0 -505.853826516954 4858.0 -506.855308046231 1451.0 -519.13933040428 1166.703979492188 -522.880837958116 1970.0 -523.871380297922 1372.0 -529.891671811182 1342.0 -536.165890644769 5714.0 -537.166372879728 2646.0 -538.163391669663 2155.0 -544.339624971493 1155.0 -546.91403937314 3234.0 -547.912958504845 1306.0 -610.184280095073 1860.0 -611.183517202231 1239.0 -657.000223829242 1834.0 -696.940499292838 3022.0 -698.938485246113 2250.0 +52.005617027968 2841.486083984375 +53.013411271366 13567.8837890625 +54.009125331887 341665.8125 +55.005857415052 5900.7900390625 +55.011242701615 6013.953125 +55.054093292119 2035.055908203125 +55.933978586076 5672.33837890625 +56.049467099919 1695.441040039062 +56.94178230893 2173.33740234375 +59.049339198083 62878.703125 +60.044404001763 9862.6142578125 +61.039435521241 1719.998779296875 +63.997664239141 3450.59716796875 +64.005081384586 3958.136474609375 +68.011443914678 27040.419921875 +68.993714467215 12520.46484375 +69.007373071731 1388.10791015625 +69.044312866744 13073.23046875 +72.93642300411 2084.0 +73.063871079142 1705.0 +76.485830845774 2577.0 +79.020684296263 13782.1328125 +80.048779775419 11186.9970703125 +81.936674853257 8327.65625 +82.996269546702 8040.20166015625 +89.506005127285 1468.281982421875 +90.489095167913 1675.0 +95.951948147015 2520.51513671875 +97.967758472339 6678.626953125 +102.090788355145 2027.477661132812 +113.962336972098 2071.0 +114.090407289761 9387.833984375 +118.085129231385 6116.0 +122.09563813811 3776.03076171875 +122.962814871209 10117.1689453125 +123.09071509347 1657.50146484375 +136.020905158615 1394.424438476562 +140.067586645329 1617.045654296875 +141.112054526426 1383.640991210938 +141.93570970262 1911.949829101562 +141.957347460629 13581.779296875 +147.090339739564 2374.998291015625 +149.022576244489 3994.022705078125 +151.095387083973 2392.279052734375 +151.109293023596 2750.11474609375 +155.06969917273 1332.009765625 +155.972973853574 3810.662841796875 +158.152617650358 10434.0 +159.15482186858 1369.0 +161.095811541558 1615.0 +170.09478689383 2397.4794921875 +170.116223095026 1563.12939453125 +173.079809386205 6290.7470703125 +178.157999558146 1344.694458007812 +179.105474980732 1898.194946289062 +182.961052201833 2004.073364257812 +186.220351226598 1623.0 +193.157127136625 1493.4091796875 +194.115785614334 2955.0 +195.120763129781 1823.166137695312 +198.184413101409 2214.0 +201.984090601891 2436.0 +217.007207589124 6332.41943359375 +217.105727151964 16770.736328125 +218.108791440056 2512.0 +234.033555067529 7474.0 +239.08784770299 2936.0 +242.2830768363 1598.0 +245.03911035763 1466.0 +246.860750264023 2469.0 +249.183092518468 1366.967651367188 +250.999128212314 2641.0 +252.995944883436 1376.0 +262.065576474895 11528.0 +263.068397905954 1693.0 +276.080823895982 18533.0 +277.084470217057 2604.24365234375 +279.093578782719 2100.0 +281.049703566301 1340.0 +284.163284328388 2755.0 +288.245192514905 2240.408203125 +289.124028104405 571675.0 +289.974079344843 2398.387451171875 +290.020293351816 2510.57177734375 +290.12300483356 37005.6328125 +291.118405903154 172664.0625 +292.12044024798 30711.75 +293.123309031099 2511.0 +303.10399927149 1878.0 +303.190085777343 1857.193237304688 +304.115683834546 552400.0 +304.984847835069 1705.556396484375 +305.107785187759 57481.2109375 +306.110327480189 29213.0 +307.11238432698 4304.0 +310.120384968947 4593.26953125 +311.105475064582 1824.0 +320.107323506761 2737.0 +326.09481066741 41008.0 +327.006437528123 3347.260986328125 +327.09645563603 6753.96142578125 +328.092188803708 2930.0 +329.003747738298 3355.0 +330.205009985617 6046.36767578125 +331.208059597585 1436.0 +342.068061155461 2814.0 +349.1700609529 13874.0 +350.172621024257 2607.730712890625 +372.148688883306 1405.186401367188 +389.044748240917 7650.0 +390.04749755921 1913.0 +391.042419990568 2801.0 +392.068522384462 2797.0 +394.066194691334 1609.439208984375 +404.03664725 3756.0 +424.362220661973 1680.073608398438 +445.118239809427 2256.0 +457.032674519482 1580.0 +468.387534165811 1625.361328125 +487.228056299732 1735.0 +500.275588301319 14065.0 +501.278629401665 3579.0 +502.286881001175 2107.0 +505.851399270242 2207.88427734375 +531.255889309595 1828.0 +536.162574795725 4348.0 +537.164900413678 2412.0 +538.160905924694 1840.207275390625 +542.321702796647 4110.07568359375 +543.325936834084 1425.0 +544.336609702317 2008.0 +546.912855890436 1498.0 +592.225267665071 7023.0 +593.153130472392 2079.229736328125 +593.228621623492 2593.85986328125 +594.223736830213 3021.337890625 +607.216353924445 19371.0 +608.21987654802 6018.0 +609.216035675932 2735.843994140625 +610.184990477 2845.0 +612.185596819648 1643.0 +613.224838309655 6730.89697265625 +614.227226894726 2411.0 +629.198664613593 14632.0 +630.201165251457 4128.0 +631.197724705928 2446.0 +639.156464406238 1485.0 +641.154235888014 1515.855590820312 +654.147541437576 1594.0 +692.150340948486 1581.0 >ms2peaks -##specref ms_run[1]:sample=1 period=1 cycle=657 experiment=5 -##n_id sample=1 period=1 cycle=657 experiment=5 -##scan 4 -##m_id sample=1 period=1 cycle=657 experiment=5_0 -51.024411650566 166.0 -77.038595873029 3035.0 -78.994852705761 195.0 -102.033579338103 169.0 -104.050175822373 488.0 -105.032352182141 910.895751953125 -124.981761234611 1563.0 -130.038666860551 105.0 -132.043763332558 1142.0 -167.019219324624 150.0 +##specref ms_run[1]:sample=1 period=1 cycle=676 experiment=4 +##scan 121 +##n_id sample=1 period=1 cycle=676 experiment=4 +##m_id Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=4_0 +70.039827273652 5131.529296875 +82.041077772907 30.0 +82.066941721068 30.0 +83.048162364624 30.0 +89.038123713717 30.0 +98.998128961124 45.0 +99.005937159691 45.0 +116.057773265737 45.0 +116.068964884923 45.0 +125.014210234006 2627.0 +128.869373457499 30.0 +129.050864049931 30.0 +129.066487998016 43.279674530029 +130.062932087251 75.0 +130.074324678654 75.0 +131.069149811718 90.0 +137.012353655287 30.0 +143.074736350629 45.0 +143.085702367776 45.0 +149.013720936376 75.0 +150.009016679015 90.0 +151.029635761105 960.0 +153.071034687141 30.0 +164.027845684388 225.0 +166.040731347006 75.0 +167.084665955303 45.0 +168.094844704597 30.0 +173.861021388832 75.0 +178.040593736165 180.0 +191.04991567702 45.0 +203.057899363272 45.0 +220.08807292582 120.0 +289.119266976743 135.0 >ms2peaks -##specref ms_run[1]:sample=1 period=1 cycle=658 experiment=6 -##n_id sample=1 period=1 cycle=658 experiment=6 -##scan 14 -##m_id sample=1 period=1 cycle=658 experiment=6_0 -50.014691789931 30.0 -50.024594232484 15.0 -51.023487773864 693.36083984375 -55.057307673128 13.0 -62.0174161448 60.0 -62.022558150102 60.0 -75.021910544523 45.0 -76.969400380676 13.0 -77.038719402888 7559.6708984375 -77.35876699224 13.0 -77.908647248588 30.0 -77.91640978654 30.0 -78.032820819888 30.0 -78.994535162676 491.007476806641 -92.024213095291 30.0 -93.009414078685 30.0 -101.731414730929 13.0 -102.033724528028 301.612030029297 -103.740436291946 30.0 -104.049620996277 2037.0 -105.033096287295 2149.8779296875 -109.009378682469 13.0 -110.990785884171 13.0 -124.609786162675 45.0 -124.982586564713 3771.0 -130.038871325813 312.0 -132.044466950146 3875.0 -132.737736847345 13.0 -133.059399526787 30.0 -134.515630815072 13.0 -135.045638388353 30.0 -137.006358531913 180.0 -151.992732393118 135.0 -167.017809464954 504.0 -167.97523906975 30.0 -168.014364521589 15.0 -182.994146815153 135.0 +##specref ms_run[1]:sample=1 period=1 cycle=677 experiment=5 +##scan 131 +##n_id sample=1 period=1 cycle=677 experiment=5 +##m_id Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=677 experiment=5_0 +55.054639659329 105.0 +55.060017620298 92.68334197998 +56.049823597015 30.0 +57.069035771002 30.0 +65.037770341976 30.0 +69.832588352285 45.0 +70.039908024674 17805.998046875 +70.065015706368 30.0 +70.282524899395 30.0 +70.655650228794 30.0 +70.662690104158 30.0 +70.671685449976 30.0 +70.680369758222 30.0 +71.073891359706 30.0 +80.047874421886 45.0 +81.071842605128 75.0 +82.039226093295 45.0 +82.068250865158 45.0 +83.046676696339 105.0 +89.037423472355 210.0 +90.046133682594 75.0 +95.071588708154 60.0 +98.999966313572 135.0 +103.050438931432 30.0 +115.05516672796 150.0 +116.06252226169 210.0 +122.999173332647 45.0 +124.644051017099 60.0 +124.994916353506 582.297302246094 +125.014371187472 12549.0 +125.378378046066 30.0 +125.39053167682 30.0 +128.046903884584 225.0 +129.05537365472 75.0 +129.064357675053 60.0 +130.062595084552 180.0 +131.075918885468 60.0 +131.089262432243 60.0 +137.014910793247 150.0 +139.029843740401 105.0 +139.049300450331 47.856365203857 +143.072761538143 168.118270874023 +143.089863992705 96.726943969727 +149.013988771638 299.0 +150.010736302066 285.0 +151.030302067974 2704.0 +152.065539738869 30.0 +153.069429336803 150.0 +157.100583676525 45.0 +158.108303191611 30.0 +162.029804830888 30.0 +163.016613439026 30.0 +163.027865460821 30.0 +164.025164845834 997.0 +165.032309967876 230.13996887207 +165.048285398527 267.0 +165.068235719394 71.195930480957 +166.041158820976 300.0 +167.084364530618 120.0 +168.091368874638 180.0 +169.091421834386 45.0 +170.096865844811 90.0 +175.029690206742 135.0 +177.033157268884 30.0 +178.041386504653 543.0 +184.113505217082 75.0 +185.131013174733 45.0 +188.038417071829 30.0 +191.051083107779 30.0 +192.056950923082 75.0 +193.074112586304 150.0 +203.062235811985 251.0 +220.086936658481 240.0 +289.118902482462 413.0 >ms2peaks -##specref ms_run[1]:sample=1 period=1 cycle=659 experiment=7 -##n_id sample=1 period=1 cycle=659 experiment=7 -##scan 24 -##m_id sample=1 period=1 cycle=659 experiment=7_0 -50.011945356227 45.0 -50.016256671506 49.487056732178 -50.022471395276 30.022994995117 -51.023137253924 713.147644042969 -62.018117926456 60.0 -75.022593594554 90.0 -77.038765619679 6198.34619140625 -78.994159655565 300.0 -95.049659419828 45.0 -102.032654025566 195.0 -104.049320764675 2561.366455078125 -104.71761104349 45.0 -105.033125946638 2057.04736328125 -105.0586640101 164.415649414062 -124.98206987935 3636.0 -130.03888329577 336.0 -132.04426880522 4731.0 -137.00503129507 165.0 -151.991870480462 135.0 -167.017216144522 349.0 -167.97080906871 90.0 -170.968502602363 45.0 -170.979804540922 45.0 -182.992849568269 120.0 +##specref ms_run[1]:sample=1 period=1 cycle=678 experiment=3 +##scan 138 +##n_id sample=1 period=1 cycle=678 experiment=3 +##m_id Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=678 experiment=3_0 +55.05427043422 105.0 +56.052257730119 45.0 +57.069642685298 75.0 +57.076278365435 58.515125274658 +58.064669437897 30.0 +58.069671200743 30.0 +69.831821936433 120.0 +70.040097536413 24218.52734375 +70.062801316593 31.250431060791 +70.429050963972 30.0 +70.438704107352 30.0 +70.574152845601 53.442497253418 +71.040963389931 30.0 +71.331546496348 45.0 +71.547711411837 30.0 +71.554731582869 30.0 +81.069977524059 75.0 +82.040024877605 180.0 +82.064998747631 45.0 +82.071892633579 45.0 +83.046815904048 150.0 +89.037322041009 315.0 +93.058395230178 30.0 +94.065823923167 15.0 +95.073128971584 30.0 +98.998707139648 75.0 +115.038697637289 93.372489929199 +115.054570314383 213.739791870117 +116.061560571436 270.0 +122.996698381028 60.0 +123.007612454196 60.0 +123.995047593998 30.0 +124.002911191956 30.0 +125.014307674051 14773.0 +125.381473665944 30.0 +125.393966225912 30.0 +125.593372072822 30.0 +125.599867839373 30.0 +126.051609264641 30.0 +126.059603286955 30.0 +127.054832877589 45.0 +128.048017316181 180.0 +129.07207623044 45.0 +129.857221738296 30.0 +129.870016169563 30.0 +130.064515161974 366.0 +131.073613293583 60.0 +137.014278524345 249.0 +139.030165806979 60.0 +143.060465185927 75.0 +143.07401284668 104.308815002441 +143.089076083416 75.0 +144.077234015868 30.0 +149.015246811528 255.0 +150.010825556181 309.0 +150.598024297069 30.0 +150.607575019774 30.0 +151.029903267346 3468.0 +152.066634976325 75.0 +153.048272599038 48.395233154297 +153.069565327336 225.0 +156.056088009549 27.453353881836 +156.078507049206 90.0 +158.105667049362 30.0 +158.1156938966 30.0 +163.028234418456 150.0 +163.04907477486 101.341789245605 +164.024417450344 1260.0 +164.048222951239 223.749069213867 +165.033343347864 300.0 +165.07168912024 100.887588500977 +166.041504194847 358.0 +167.083021637505 120.0 +168.092033871908 180.0 +168.126067348571 15.0 +170.097096768962 45.0 +175.031788442407 270.0 +177.045702469556 45.0 +178.040557800332 739.0 +179.064601892177 45.0 +184.112879145243 75.0 +185.120289107757 30.0 +188.038359439527 30.0 +191.046836106019 45.0 +192.055368291335 195.0 +193.076440167615 180.0 +203.062460725867 150.0 +205.065521702945 45.0 +218.068791434007 45.0 +220.087014664115 542.0 +289.122158220479 827.0 diff --git a/src/tests/class_tests/openms/source/SiriusFragmentAnnotation_test.cpp b/src/tests/class_tests/openms/source/SiriusFragmentAnnotation_test.cpp index fc7a48b782c..a01c53edf82 100644 --- a/src/tests/class_tests/openms/source/SiriusFragmentAnnotation_test.cpp +++ b/src/tests/class_tests/openms/source/SiriusFragmentAnnotation_test.cpp @@ -49,16 +49,16 @@ START_SECTION(static void extractSiriusFragmentAnnotationMapping(const String& p String test_path = OPENMS_GET_TEST_DATA_PATH("SiriusFragmentAnnotation_test"); MSSpectrum annotated_msspectrum = SiriusFragmentAnnotation::extractAnnotationsFromSiriusFile(test_path, 1, false, false)[0]; - TEST_STRING_SIMILAR(annotated_msspectrum.getNativeID(), "sample=1 period=1 cycle=657 experiment=5|sample=1 period=1 cycle=658 experiment=6|sample=1 period=1 cycle=659 experiment=7"); + TEST_STRING_SIMILAR(annotated_msspectrum.getNativeID(), "sample=1 period=1 cycle=676 experiment=4|sample=1 period=1 cycle=677 experiment=5|sample=1 period=1 cycle=678 experiment=3"); TEST_EQUAL(annotated_msspectrum.getMSLevel(), 2); TEST_EQUAL(annotated_msspectrum.empty(), false); - TEST_REAL_SIMILAR(annotated_msspectrum[0].getMZ(), 51.023137); + TEST_REAL_SIMILAR(annotated_msspectrum[0].getMZ(), 70.040098); TEST_STRING_SIMILAR(annotated_msspectrum.getMetaValue("peak_mz"), "mz"); TEST_STRING_SIMILAR(annotated_msspectrum.getFloatDataArrays()[0].getName(), "exact_mass"); - TEST_REAL_SIMILAR(annotated_msspectrum.getFloatDataArrays()[0][0], 51.022927); - TEST_STRING_SIMILAR(annotated_msspectrum.getStringDataArrays()[0][0], "C4H2"); - TEST_STRING_SIMILAR(annotated_msspectrum.getMetaValue("annotated_sumformula"), "C10H12N3O3PS2"); + TEST_REAL_SIMILAR(annotated_msspectrum.getFloatDataArrays()[0][0], 70.040098); + TEST_STRING_SIMILAR(annotated_msspectrum.getStringDataArrays()[0][0], "C2H3N3"); + TEST_STRING_SIMILAR(annotated_msspectrum.getMetaValue("annotated_sumformula"), "C15H17ClN4"); TEST_STRING_SIMILAR(annotated_msspectrum.getMetaValue("annotated_adduct"), "[M+H]+"); TEST_REAL_SIMILAR(annotated_msspectrum.getMetaValue("decoy"), 0); } @@ -70,16 +70,16 @@ START_SECTION(static void extractSiriusFragmentAnnotationMapping(const String& p String test_path = OPENMS_GET_TEST_DATA_PATH("SiriusFragmentAnnotation_test"); MSSpectrum annotated_msspectrum = SiriusFragmentAnnotation::extractAnnotationsFromSiriusFile(test_path, 1, false, true)[0]; - TEST_STRING_SIMILAR(annotated_msspectrum.getNativeID(), "sample=1 period=1 cycle=657 experiment=5|sample=1 period=1 cycle=658 experiment=6|sample=1 period=1 cycle=659 experiment=7"); + TEST_STRING_SIMILAR(annotated_msspectrum.getNativeID(), "sample=1 period=1 cycle=676 experiment=4|sample=1 period=1 cycle=677 experiment=5|sample=1 period=1 cycle=678 experiment=3"); TEST_EQUAL(annotated_msspectrum.getMSLevel(), 2); TEST_EQUAL(annotated_msspectrum.empty(), false); - TEST_REAL_SIMILAR(annotated_msspectrum[0].getMZ(), 51.022927) + TEST_REAL_SIMILAR(annotated_msspectrum[0].getMZ(), 70.040098) TEST_STRING_SIMILAR(annotated_msspectrum.getMetaValue("peak_mz"), "exact_mass"); TEST_STRING_SIMILAR(annotated_msspectrum.getFloatDataArrays()[0].getName(), "mz"); - TEST_REAL_SIMILAR(annotated_msspectrum.getFloatDataArrays()[0][0], 51.023137); - TEST_STRING_SIMILAR(annotated_msspectrum.getStringDataArrays()[0][0], "C4H2"); - TEST_STRING_SIMILAR(annotated_msspectrum.getMetaValue("annotated_sumformula"), "C10H12N3O3PS2"); + TEST_REAL_SIMILAR(annotated_msspectrum.getFloatDataArrays()[0][0], 70.040098); + TEST_STRING_SIMILAR(annotated_msspectrum.getStringDataArrays()[0][0], "C2H3N3"); + TEST_STRING_SIMILAR(annotated_msspectrum.getMetaValue("annotated_sumformula"), "C15H17ClN4"); TEST_STRING_SIMILAR(annotated_msspectrum.getMetaValue("annotated_adduct"), "[M+H]+"); TEST_REAL_SIMILAR(annotated_msspectrum.getMetaValue("decoy"), 0); } @@ -91,22 +91,19 @@ START_SECTION(static void extractSiriusDecoyAnnotationMapping(const String& path String test_path = OPENMS_GET_TEST_DATA_PATH("SiriusFragmentAnnotation_test"); MSSpectrum decoy_msspectrum = SiriusFragmentAnnotation::extractAnnotationsFromSiriusFile(test_path, 1, true, false)[0]; - TEST_STRING_SIMILAR(decoy_msspectrum.getNativeID(), "sample=1 period=1 cycle=657 experiment=5|sample=1 period=1 cycle=658 experiment=6|sample=1 period=1 cycle=659 experiment=7"); + TEST_STRING_SIMILAR(decoy_msspectrum.getNativeID(), "sample=1 period=1 cycle=676 experiment=4|sample=1 period=1 cycle=677 experiment=5|sample=1 period=1 cycle=678 experiment=3"); TEST_EQUAL(decoy_msspectrum.getMSLevel(), 2); TEST_EQUAL(decoy_msspectrum.empty(), false); - TEST_REAL_SIMILAR(decoy_msspectrum[0].getMZ(), 46.994998); + TEST_REAL_SIMILAR(decoy_msspectrum[0].getMZ(), 53.013424); TEST_STRING_SIMILAR(decoy_msspectrum.getMetaValue("peak_mz"), "mz"); - TEST_STRING_SIMILAR(decoy_msspectrum.getStringDataArrays()[0][0], "CH2S"); - TEST_STRING_SIMILAR(decoy_msspectrum.getMetaValue("annotated_sumformula"), "C10H12N3O3PS2"); + TEST_STRING_SIMILAR(decoy_msspectrum.getStringDataArrays()[0][0], "C2N2"); + TEST_STRING_SIMILAR(decoy_msspectrum.getMetaValue("annotated_sumformula"), "C15H17ClN4"); TEST_STRING_SIMILAR(decoy_msspectrum.getMetaValue("annotated_adduct"), "[M+H]+"); TEST_REAL_SIMILAR(decoy_msspectrum.getMetaValue("decoy"), 1); } END_SECTION -// TODO: extractAndResolveSiriusAnnotations -// vector annotated_spectra = SiriusFragmentAnnotation::extractAndResolveSiriusAnnotations(subdirs, score_threshold, use_exact_mass); - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// END_TEST diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/.format b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/.format new file mode 100644 index 00000000000..c933dabcf2f --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/.format @@ -0,0 +1 @@ +%source_%name \ No newline at end of file diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/.version b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/.version new file mode 100644 index 00000000000..699d122cba4 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/.version @@ -0,0 +1 @@ +siriusVersion 5.8.5 diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/compound.config b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/compound.config new file mode 100644 index 00000000000..7f8f23a49b3 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/compound.config @@ -0,0 +1,199 @@ +# Allows the USER to Specify the ScoreType that is used to rank the list of Molecular Formula +# Identifications +# before CSI:FingerID predictions are calculated. Auto means that this ScoreType is +# automatically set depending on the executed workflow. +FormulaResultRankingScore=AUTO +PrintCitations=True +RecomputeResults=False +# Maximum number of candidate molecular formulas (fragmentation trees computed by SIRIUS) +# per compound which are considered by ZODIAC. +# This is the threshold used for all compounds with mz below 300 m/z and is used to interpolate the +# number of candidates for larger compounds. +# If lower than 0, all available candidates are considered. +ZodiacNumberOfConsideredCandidatesAt300Mz=10 +# As default ZODIAC runs a 2-step approach. First running 'good quality compounds' only, and +# afterwards including the remaining. +ZodiacRunInTwoSteps=true +# Ratio of candidate molecular formulas (fragmentation trees computed by SIRIUS) per +# compound which are forced for each ionization to be considered by ZODIAC. +# This depends on the number of candidates ZODIAC considers. E.g. if 50 candidates are +# considered and a ratio of 0.2 is set, at least 10 candidates per ionization will be +# considered, which might increase the number of candidates above 50. +ZodiacRatioOfConsideredCandidatesPerIonization=0.2 +# cluster compounds before running ZODIAC +ZodiacClusterCompounds=false +# Maximum number of candidate molecular formulas (fragmentation trees computed by SIRIUS) +# per compound which are considered by ZODIAC. +# This is the threshold used for all compounds with mz above 800 m/z and is used to interpolate the +# number of candidates for smaller compounds. +# If lower than 0, all available candidates are considered. +ZodiacNumberOfConsideredCandidatesAt800Mz=50 +MotifDbFile=none +StructurePredictors=CSI_FINGERID +# Candidates matching the lipid class estimated by El Gordo will be tagged. +# The lipid class will only be available if El Gordo predicts that the MS/MS is a lipid spectrum. +# If this parameter is set to 'false' El Gordo will still be executed and e.g. improve the +# fragmentation +# tree, but the matching candidates will not be tagged as lipid class. +InjectElGordoCompounds=True +NumberOfStructureCandidates=10000 +FormulaSearchDB=none +StructureSearchDB=BIO +# Specifies if the list of Molecular Formula Identifications is filtered by a soft threshold +# (calculateThreshold) before CSI:FingerID predictions are calculated. +FormulaResultThreshold=true +MedianNoiseIntensity=0.015 +# This configuration holds a set of user given formulas to be used as candidates for SIRIUS +# Note: This set might be merged with other sources like formulas from databases +# Set of Molecular Formulas to be used as candidates for molecular formula estimation with +# SIRIUS +CandidateFormulas=, +# Keywords that can be assigned to a input spectrum to judge its quality. Available keywords +# are: Good, LowIntensity, NoMS1Peak, FewPeaks, Chimeric, NotMonoisotopicPeak, +# PoorlyExplained +CompoundQuality=UNKNOWN +# An adduct switch is a switch of the ionization mode within a spectrum, e.g. an ion replaces an +# sodium adduct +# with a protonation during fragmentation. Such adduct switches heavily increase the +# complexity of the +# analysis, but for certain adducts they might happen regularly. Adduct switches are written +# in the +# form {@literal a -> b, a -> c, d -> c} where a, b, c, and d are adducts and {@literal a -> b} denotes an +# allowed switch from +# a to b within the MS/MS spectrum. +PossibleAdductSwitches=[M+Na]+:[M+H]+,[M+K]+:[M+H]+,[M+Cl]-:[M-H]- +IsotopeMs2Settings=IGNORE +# use this parameter if you want to force to report at least +# numberOfResultsToKeepPerIonization results per ionization. +# if le 0, this parameter will have no effect and just the top +# numberOfResultsToKeep results will be reported. +NumberOfCandidatesPerIon=1 +# Enable/Disable the hypothesen driven recalibration of MS/MS spectra +# Must be either 'ALLOWED' or FORBIDDEN' +ForbidRecalibration=ALLOWED +NumberOfCandidates=10 +# Configuration profile to store instrument specific algorithm properties. +# Some of the default profiles are: 'qtof', 'orbitrap', 'fticr'. +AlgorithmProfile=default +NoiseThresholdSettings.intensityThreshold = 0.005 +NoiseThresholdSettings.maximalNumberOfPeaks = 60 +NoiseThresholdSettings.basePeak = NOT_PRECURSOR +NoiseThresholdSettings.absoluteThreshold = 0 + +# Mass accuracy setting for MS1 spectra. Mass accuracies are always written as "X ppm (Y Da)" +# with X and Y +# are numerical values. The ppm is a relative measure (parts per million), Da is an absolute +# measure. For each mass, the +# maximum of relative and absolute is used. +MS1MassDeviation.allowedMassDeviation = 10.0 ppm +MS1MassDeviation.standardMassDeviation = 10.0 ppm +MS1MassDeviation.massDifferenceDeviation = 5.0 ppm + +# Mass accuracy setting for MS2 spectra. Mass Accuracies are always written as "X ppm (Y Da)" +# with X and Y +# are numerical values. The ppm is a relative measure (parts per million), Da is an absolute +# measure. For each mass, the +# maximum of relative and absolute is used. +MS2MassDeviation.allowedMassDeviation = 10.0 ppm +MS2MassDeviation.standardMassDeviation = 10.0 ppm + +# Describes how to deal with Adducts: +# Pos Examples: +# [M+H]+,[M]+,[M+K]+,[M+Na]+,[M+H-H2O]+,[M+Na2-H]+,[M+2K-H]+,[M+NH4]+,[M+H3O]+,[M+MeOH+H]+,[M+ACN+H]+,[M+2ACN+H]+,[M+IPA+H]+,[M+ACN+Na]+,[M+DMSO+H]+ +# Neg Examples: +# [M-H]-,[M]-,[M+K-2H]-,[M+Cl]-,[M-H2O-H]-,[M+Na-2H]-,M+FA-H]-,[M+Br]-,[M+HAc-H]-,[M+TFA-H]-,[M+ACN-H]- +# Enforced ion modes that are always considered. +AdductSettings.enforced = , +# Detectable ion modes which are only considered if there is an indication in the MS1 scan (e.g. +# correct mass delta). +AdductSettings.detectable = [M+H]+,[M+K]+,[M+Na]+,[M+H-H2O]+,[M+H-H4O2]+,[M+NH4]+,[M-H]-,[M+Cl]-,[M-H2O-H]-,[M+Br]- +# Fallback ion modes which are considered if the auto detection did not find any indication for +# an ion mode. +AdductSettings.fallback = [M+H]+,[M-H]-,[M+Na]+,[M+K]+ + +# These configurations hold the information how to autodetect elements based on the given +# formula constraints. +# Note: If the compound is already assigned to a specific molecular formula, this annotation is +# ignored. +# Enforced elements are always considered +FormulaSettings.enforced = C,H,N,O,P +# Detectable elements are added to the chemical alphabet, if there are indications for them +# (e.g. in isotope pattern) +FormulaSettings.detectable = S,Br,Cl,B,Se +# Fallback elements are used, if the auto-detection fails (e.g. no isotope pattern available) +FormulaSettings.fallback = S + +# This configurations define how to deal with isotope patterns in MS1. +# When filtering is enabled, molecular formulas are excluded if their theoretical isotope +# pattern does not match +# the theoretical one, even if their MS/MS pattern has high score. +IsotopeSettings.filter = True +# multiplier for the isotope score. Set to 0 to disable isotope scoring. Otherwise, the score +# from isotope +# pattern analysis is multiplied with this coefficient. Set to a value larger than one if your +# isotope +# pattern data is of much better quality than your MS/MS data. +IsotopeSettings.multiplier = 1 + +# This configurations define a timeout for the tree computation. As the underlying problem is +# NP-hard, it might take +# forever to compute trees for very challenging (e.g. large mass) compounds. Setting an time +# constraint allow the program +# to continue with other instances and just skip the challenging ones. +# Note that, due to multithreading, this time constraints are not absolutely accurate. +# Set the maximum number of seconds for computing a single compound. Set to 0 to disable the time +# constraint. +Timeout.secondsPerInstance = 0 +# Set the maximum number of seconds for a single molecular formula check. Set to 0 to disable the +# time constraint +Timeout.secondsPerTree = 0 +# Ignore isotope peaks below this intensity. +# This value should reflect the smallest relative intensive which is still above noise level. +# Obviously, this is hard to judge without having absolute values. Keeping this value around 1 +# percent is +# fine for most settings. Set it to smaller values if you trust your small intensities. +ms1.minimalIntensityToConsider = 0.01 +# The average absolute deviation between theoretical and measured intensity of isotope +# peaks. +# Do not change this parameter without a good reason! +ms1.absoluteIntensityError = 0.02 +# The average relative deviation between theoretical and measured intensity of isotope +# peaks. +# Do not change this parameter without a good reason! +ms1.relativeIntensityError = 0.08 +# Set minimum m/z to enable heuristic preprocessing. The heuristic will be used to initially +# rank the formula candidates. The Top (NumberOfCandidates) candidates will then be +# computed exactly by solving the ILP. +UseHeuristic.mzToUseHeuristic = 300 +# Set minimum m/z to only use heuristic tree computation. No exact tree computation (ILP) will +# be performed for this compounds. +UseHeuristic.mzToUseHeuristicOnly = 650 + +# Defines the proportion of edges of the complete network which will be ignored. +ZodiacEdgeFilterThresholds.thresholdFilter = 0.95 +# Minimum number of candidates per compound which are forced to have at least +# [minLocalConnections] connections to other compounds. +# E.g. 2 candidates per compound must have at least 10 connections to other compounds +ZodiacEdgeFilterThresholds.minLocalCandidates = 1 +# Minimum number of connections per candidate which are forced for at least +# [minLocalCandidates] candidates to other compounds. +# E.g. 2 candidates per compound must have at least 10 connections to other compounds +ZodiacEdgeFilterThresholds.minLocalConnections = 10 + +# Number of epochs to run the Gibbs sampling. When multiple Markov chains are computed, all +# chains' iterations sum up to this value. +ZodiacEpochs.iterations = 20000 +# Number of epochs considered as 'burn-in period'. +# Samples from the beginning of a Markov chain do not accurately represent the desired +# distribution of candidates and are not used to estimate the ZODIAC score. +ZodiacEpochs.burnInPeriod = 2000 +# Number of separate Gibbs sampling runs. +ZodiacEpochs.numberOfMarkovChains = 10 + +# Lambda used in the scoring function of spectral library hits. The higher this value the higher +# are librar hits weighted in ZODIAC scoring. +ZodiacLibraryScoring.lambda = 1000 +# Spectral library hits must have at least this cosine or higher to be considered in scoring. +# Value must be in [0,1]. +ZodiacLibraryScoring.minCosine = 0.5 + diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/compound.info b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/compound.info new file mode 100644 index 00000000000..fa8101d45bd --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/compound.info @@ -0,0 +1,7 @@ +index 1 +name SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN +ionMass 286.179028092823 +ionType [M + ?]+ +detectedAdducts MS1_PREPROCESSOR:{} +rt 438.351:NaN,NaN +rankingScoreType sirius.scores.SiriusScore diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/decoys/C16H25NO2_[M+Na]+.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/decoys/C16H25NO2_[M+Na]+.tsv new file mode 100644 index 00000000000..fda05f73ef9 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/decoys/C16H25NO2_[M+Na]+.tsv @@ -0,0 +1,14 @@ +mz rel.intensity formula ionization +166.083849 3.55 C7H13NO2 [M + Na]+ +173.132477 1.33 C13H16 [M + H]+ +175.148127 1.11 C13H18 [M + H]+ +176.143376 5.54 C12H17N [M + H]+ +190.135217 1.33 C13H17O [M + H]+ +215.140636 1.33 C13H20O [M + Na]+ +225.161371 0.44 C15H22 [M + Na]+ +218.153941 100.00 C14H19NO [M + H]+ +243.135551 0.89 C14H20O2 [M + Na]+ +258.182835 1.55 C15H25NO [M + Na]+ +260.162100 60.06 C14H23NO2 [M + Na]+ +269.151201 0.66 C16H22O2 [M + Na]+ +286.177750 3.55 C16H25NO2 [M + Na]+ diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/formula_candidates.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/formula_candidates.tsv new file mode 100644 index 00000000000..9dde75f3c7d --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/formula_candidates.tsv @@ -0,0 +1,12 @@ +formulaRank molecularFormula adduct precursorFormula SiriusScore TreeScore IsotopeScore numExplainedPeaks explainedIntensity medianMassErrorFragmentPeaks(ppm) medianAbsoluteMassErrorFragmentPeaks(ppm) massErrorPrecursor(ppm) lipidClass +1 C16H25NO2 [M + Na]+ C16H25NO2 37.77674634435295 37.77674634435295 0.0 13 0.8419395465994967 -3.076517427408221 4.831274574031946 4.466968600002982 +2 C13H29NO2S [M + Na]+ C13H29NO2S 32.115714161167894 32.115714161167894 0.0 13 0.8419395465994967 -3.2480292487052242 5.06931156233155 -7.312818418257181 +3 C9H26N4O4P [M + H]+ C9H26N4O4P 31.07856598980353 31.07856598980353 0.0 15 0.8555835432409744 6.775762087912526 9.031754526785704 9.031754526785704 +4 C16H21N4O [M + H]+ C16H21N4O 29.782763777963467 29.782763777963467 0.0 12 0.840890008396306 -2.9114404683027493 7.834133147089885 0.7524965540025428 +5 C8H25N6O3S [M + H]+ C8H25N6O3S 29.53930686216235 29.53930686216235 0.0 16 0.8660789252728803 3.930389675187392 7.723524449767405 3.029504776342838 +6 C12H28N2O2P [M + Na]+ C12H28N2O2P 28.46024676574528 28.46024676574528 0.0 13 0.8419395465994967 -3.076517427408221 4.831274574031946 3.3811937195723 +7 C14H23N4O [M + Na]+ C14H23N4O 27.7140043522479 27.7140043522479 0.0 14 0.5726280436607896 6.228311376125477 7.053239167168478 9.15873098719097 +8 C12H24N5OP [M + H]+ C12H24N5OP 27.288452476896214 27.288452476896214 0.0 12 0.840890008396306 -3.4543279085180902 7.834133147089885 -0.33327832642813954 +9 C14H19N7 [M + H]+ C14H19N7 26.481754552968567 26.481754552968567 0.0 10 0.8261964735516377 4.9502930681817485 4.9502930681817485 5.4442589411905296 +10 C10H24N2O4S [M + H3N + H]+ C10H27N3O4S 25.765791775415323 25.765791775415323 0.0 12 0.840890008396306 3.983899833764388 8.117086602306683 -1.662257611043777 +11 C11H27N4O2 [M + K]+ C11H27N4O2 20.87735868535779 20.87735868535779 0.0 12 0.840890008396306 -2.1149361780912024 8.265767927296457 8.627077773474678 diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C10H27N3O4S_[M+H3N+H]+.info b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C10H27N3O4S_[M+H3N+H]+.info new file mode 100644 index 00000000000..72ea39e1714 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C10H27N3O4S_[M+H3N+H]+.info @@ -0,0 +1,3 @@ +sirius.scores.IsotopeScore 0.0 +sirius.scores.TreeScore 25.765791775415323 +sirius.scores.SiriusScore 25.765791775415323 diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C11H27N4O2_[M+K]+.info b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C11H27N4O2_[M+K]+.info new file mode 100644 index 00000000000..43df63757b1 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C11H27N4O2_[M+K]+.info @@ -0,0 +1,3 @@ +sirius.scores.IsotopeScore 0.0 +sirius.scores.TreeScore 20.87735868535779 +sirius.scores.SiriusScore 20.87735868535779 diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C12H24N5OP_[M+H]+.info b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C12H24N5OP_[M+H]+.info new file mode 100644 index 00000000000..ffb7b405a6c --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C12H24N5OP_[M+H]+.info @@ -0,0 +1,3 @@ +sirius.scores.IsotopeScore 0.0 +sirius.scores.TreeScore 27.288452476896214 +sirius.scores.SiriusScore 27.288452476896214 diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C12H28N2O2P_[M+Na]+.info b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C12H28N2O2P_[M+Na]+.info new file mode 100644 index 00000000000..44665d1a9a4 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C12H28N2O2P_[M+Na]+.info @@ -0,0 +1,3 @@ +sirius.scores.IsotopeScore 0.0 +sirius.scores.TreeScore 28.46024676574528 +sirius.scores.SiriusScore 28.46024676574528 diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C13H29NO2S_[M+Na]+.info b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C13H29NO2S_[M+Na]+.info new file mode 100644 index 00000000000..0f8979623de --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C13H29NO2S_[M+Na]+.info @@ -0,0 +1,3 @@ +sirius.scores.IsotopeScore 0.0 +sirius.scores.TreeScore 32.115714161167894 +sirius.scores.SiriusScore 32.115714161167894 diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C14H19N7_[M+H]+.info b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C14H19N7_[M+H]+.info new file mode 100644 index 00000000000..614ee236554 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C14H19N7_[M+H]+.info @@ -0,0 +1,3 @@ +sirius.scores.IsotopeScore 0.0 +sirius.scores.TreeScore 26.481754552968567 +sirius.scores.SiriusScore 26.481754552968567 diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C14H23N4O_[M+Na]+.info b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C14H23N4O_[M+Na]+.info new file mode 100644 index 00000000000..5d85bc5c7a0 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C14H23N4O_[M+Na]+.info @@ -0,0 +1,3 @@ +sirius.scores.IsotopeScore 0.0 +sirius.scores.TreeScore 27.7140043522479 +sirius.scores.SiriusScore 27.7140043522479 diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C16H21N4O_[M+H]+.info b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C16H21N4O_[M+H]+.info new file mode 100644 index 00000000000..67007c638f1 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C16H21N4O_[M+H]+.info @@ -0,0 +1,3 @@ +sirius.scores.IsotopeScore 0.0 +sirius.scores.TreeScore 29.782763777963467 +sirius.scores.SiriusScore 29.782763777963467 diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C16H25NO2_[M+Na]+.info b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C16H25NO2_[M+Na]+.info new file mode 100644 index 00000000000..d002e2528f6 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C16H25NO2_[M+Na]+.info @@ -0,0 +1,3 @@ +sirius.scores.IsotopeScore 0.0 +sirius.scores.TreeScore 37.77674634435295 +sirius.scores.SiriusScore 37.77674634435295 diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C8H25N6O3S_[M+H]+.info b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C8H25N6O3S_[M+H]+.info new file mode 100644 index 00000000000..3bb7aab0b99 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C8H25N6O3S_[M+H]+.info @@ -0,0 +1,3 @@ +sirius.scores.IsotopeScore 0.0 +sirius.scores.TreeScore 29.53930686216235 +sirius.scores.SiriusScore 29.53930686216235 diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C9H26N4O4P_[M+H]+.info b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C9H26N4O4P_[M+H]+.info new file mode 100644 index 00000000000..2374dc061fc --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/scores/C9H26N4O4P_[M+H]+.info @@ -0,0 +1,3 @@ +sirius.scores.IsotopeScore 0.0 +sirius.scores.TreeScore 31.07856598980353 +sirius.scores.SiriusScore 31.07856598980353 diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C10H27N3O4S_[M+H3N+H]+.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C10H27N3O4S_[M+H3N+H]+.tsv new file mode 100644 index 00000000000..994be7d2336 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C10H27N3O4S_[M+H3N+H]+.tsv @@ -0,0 +1,13 @@ +mz intensity rel.intensity exactmass formula ionization implicitAdduct +53.045206 30.00 1.33 53.047130 H3O2 [M + H]+ H3N +56.049919 60.00 5.54 56.049476 C3H2 [M + H]+ H3N +79.063804 30.00 1.33 79.062780 C2H5O2 [M + H]+ H3N +98.059279 958.00 100.00 98.060040 C5H4O [M + H]+ H3N +85.028411 35.00 1.55 85.028406 C4H4O2 [M + H]+ +95.045082 30.00 1.33 95.045119 CH6N2O3 [M + H]+ +105.067130 10.00 0.44 105.065854 C3H8N2O2 [M + H]+ +138.088468 35.00 1.55 138.087318 C3H8N2O3 [M + H]+ H3N +123.041272 20.00 0.89 123.040033 C2H6N2O4 [M + H]+ +140.069591 561.00 60.06 140.070605 C7H6O2 [M + H]+ H3N +166.083820 60.00 3.55 166.082232 C4H8N2O4 [M + H]+ H3N +286.179028 135.00 13.30 286.179504 C10H24N2O4S [M + H]+ H3N diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C11H27N4O2_[M+K]+.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C11H27N4O2_[M+K]+.tsv new file mode 100644 index 00000000000..44af3cb7cdd --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C11H27N4O2_[M+K]+.tsv @@ -0,0 +1,13 @@ +mz intensity rel.intensity exactmass formula ionization +53.038833 30.00 1.33 53.038577 C4H4 [M + H]+ +55.054506 25.00 1.11 55.054227 C4H6 [M + H]+ +56.049919 60.00 5.54 56.049476 C3H5N [M + H]+ +70.039929 30.00 1.33 70.041316 C4H5O [M + H]+ +85.028411 35.00 1.55 85.027063 C2H2N3O [M + H]+ +98.059279 958.00 100.00 98.060040 C5H7NO [M + H]+ +123.041272 20.00 0.89 123.042713 C5H4N3O [M + H]+ +138.088468 35.00 1.55 138.089998 C6H9N4 [M + H]+ +140.069591 561.00 60.06 140.069262 C5H7N4O [M + H]+ +149.056693 15.00 0.66 149.058363 C7H6N3O [M + H]+ +166.083820 60.00 3.55 166.084912 C7H9N4O [M + H]+ +286.179028 135.00 13.30 286.176559 C11H27N4O2 [M + K]+ diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C12H24N5OP_[M+H]+.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C12H24N5OP_[M+H]+.tsv new file mode 100644 index 00000000000..6ecb348410e --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C12H24N5OP_[M+H]+.tsv @@ -0,0 +1,13 @@ +mz intensity rel.intensity exactmass formula ionization +53.038833 30.00 1.33 53.038577 C4H4 [M + H]+ +55.054506 25.00 1.11 55.054227 C4H6 [M + H]+ +56.049919 60.00 5.54 56.049476 C3H5N [M + H]+ +70.039929 30.00 1.33 70.041316 C4H5O [M + H]+ +85.028411 35.00 1.55 85.027063 C2H2N3O [M + H]+ +98.059279 958.00 100.00 98.060040 C5H7NO [M + H]+ +123.041272 20.00 0.89 123.042713 C5H4N3O [M + H]+ +138.088468 35.00 1.55 138.089998 C6H9N4 [M + H]+ +140.069591 561.00 60.06 140.069262 C5H7N4O [M + H]+ +149.056693 15.00 0.66 149.058363 C7H6N3O [M + H]+ +166.083820 60.00 3.55 166.084912 C7H9N4O [M + H]+ +286.179028 135.00 13.30 286.179123 C12H24N5OP [M + H]+ diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C12H28N2O2P_[M+Na]+.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C12H28N2O2P_[M+Na]+.tsv new file mode 100644 index 00000000000..a80c26e1ee0 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C12H28N2O2P_[M+Na]+.tsv @@ -0,0 +1,14 @@ +mz intensity rel.intensity exactmass formula ionization +53.038833 30.00 1.33 53.038577 C4H4 [M + H]+ +55.054506 25.00 1.11 55.054227 C4H6 [M + H]+ +56.049919 60.00 5.54 56.049476 C3H5N [M + H]+ +70.039929 30.00 1.33 70.041316 C4H5O [M + H]+ +95.045082 30.00 1.33 95.046736 C4H8O [M + Na]+ +105.067130 10.00 0.44 105.067471 C6H10 [M + Na]+ +98.059279 958.00 100.00 98.060040 C5H7NO [M + H]+ +123.041272 20.00 0.89 123.041650 C5H8O2 [M + Na]+ +138.088468 35.00 1.55 138.088935 C6H13NO [M + Na]+ +140.069591 561.00 60.06 140.068199 C5H11NO2 [M + Na]+ +149.056693 15.00 0.66 149.057300 C7H10O2 [M + Na]+ +166.083820 60.00 3.55 166.083849 C7H13NO2 [M + Na]+ +286.179028 135.00 13.30 286.178060 C12H28N2O2P [M + Na]+ diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C13H29NO2S_[M+Na]+.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C13H29NO2S_[M+Na]+.tsv new file mode 100644 index 00000000000..0412f2ddcd7 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C13H29NO2S_[M+Na]+.tsv @@ -0,0 +1,14 @@ +mz intensity rel.intensity exactmass formula ionization +53.038833 30.00 1.33 53.038577 C4H4 [M + H]+ +55.054506 25.00 1.11 55.054227 C4H6 [M + H]+ +56.049919 60.00 5.54 56.049476 C3H5N [M + H]+ +70.039929 30.00 1.33 70.041316 C4H5O [M + H]+ +95.045082 30.00 1.33 95.046736 C4H8O [M + Na]+ +105.067130 10.00 0.44 105.067471 C6H10 [M + Na]+ +98.059279 958.00 100.00 98.060040 C5H7NO [M + H]+ +123.041272 20.00 0.89 123.041650 C5H8O2 [M + Na]+ +138.088468 35.00 1.55 138.088935 C6H13NO [M + Na]+ +140.069591 561.00 60.06 140.068199 C5H11NO2 [M + Na]+ +149.056693 15.00 0.66 149.057300 C7H10O2 [M + Na]+ +166.083820 60.00 3.55 166.083849 C7H13NO2 [M + Na]+ +286.179028 135.00 13.30 286.181121 C13H29NO2S [M + Na]+ diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C14H19N7_[M+H]+.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C14H19N7_[M+H]+.tsv new file mode 100644 index 00000000000..ec2d959b0d6 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C14H19N7_[M+H]+.tsv @@ -0,0 +1,11 @@ +mz intensity rel.intensity exactmass formula ionization +53.038833 30.00 1.33 53.038577 C4H4 [M + H]+ +55.054506 25.00 1.11 55.054227 C4H6 [M + H]+ +56.049919 60.00 5.54 56.049476 C3H5N [M + H]+ +70.039929 30.00 1.33 70.039974 C2H3N3 [M + H]+ +98.059279 958.00 100.00 98.058698 C3H5N4 [M + H]+ +123.041272 20.00 0.89 123.041371 C3H2N6 [M + H]+ +140.069591 561.00 60.06 140.067920 C3H5N7 [M + H]+ +149.056693 15.00 0.66 149.057021 C5H4N6 [M + H]+ +166.083820 60.00 3.55 166.083570 C5H7N7 [M + H]+ +286.179028 135.00 13.30 286.177470 C14H19N7 [M + H]+ diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C14H23N4O_[M+Na]+.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C14H23N4O_[M+Na]+.tsv new file mode 100644 index 00000000000..433e9732445 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C14H23N4O_[M+Na]+.tsv @@ -0,0 +1,15 @@ +mz intensity rel.intensity exactmass formula ionization +70.039929 30.00 1.33 70.038911 C2H7O [M + Na]+ +53.038833 30.00 1.33 53.038577 C4H4 [M + H]+ +55.054506 25.00 1.11 55.054227 C4H6 [M + H]+ +56.049919 60.00 5.54 56.049476 C3H5N [M + H]+ +95.045082 30.00 1.33 95.045393 C2H6N3 [M + Na]+ +105.067130 10.00 0.44 105.067471 C6H10 [M + Na]+ +98.059279 958.00 100.00 98.060040 C5H7NO [M + H]+ +123.041272 20.00 0.89 123.040308 C3H6N3O [M + Na]+ +133.100243 59.00 2.62 133.098771 C8H14 [M + Na]+ +138.088468 35.00 1.55 138.087592 C4H11N4 [M + Na]+ +149.056693 15.00 0.66 149.055958 C5H8N3O [M + Na]+ +166.083820 60.00 3.55 166.082507 C5H11N4O [M + Na]+ +184.123372 13.00 0.58 184.122246 C12H17 [M + Na]+ +286.179028 135.00 13.30 286.176407 C14H23N4O [M + Na]+ diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C16H21N4O_[M+H]+.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C16H21N4O_[M+H]+.tsv new file mode 100644 index 00000000000..5acb1b44714 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C16H21N4O_[M+H]+.tsv @@ -0,0 +1,13 @@ +mz intensity rel.intensity exactmass formula ionization +53.038833 30.00 1.33 53.038577 C4H4 [M + H]+ +55.054506 25.00 1.11 55.054227 C4H6 [M + H]+ +56.049919 60.00 5.54 56.049476 C3H5N [M + H]+ +70.039929 30.00 1.33 70.041316 C4H5O [M + H]+ +85.028411 35.00 1.55 85.027063 C2H2N3O [M + H]+ +98.059279 958.00 100.00 98.060040 C5H7NO [M + H]+ +123.041272 20.00 0.89 123.042713 C5H4N3O [M + H]+ +138.088468 35.00 1.55 138.089998 C6H9N4 [M + H]+ +140.069591 561.00 60.06 140.069262 C5H7N4O [M + H]+ +149.056693 15.00 0.66 149.058363 C7H6N3O [M + H]+ +166.083820 60.00 3.55 166.084912 C7H9N4O [M + H]+ +286.179028 135.00 13.30 286.178813 C16H21N4O [M + H]+ diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C16H25NO2_[M+Na]+.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C16H25NO2_[M+Na]+.tsv new file mode 100644 index 00000000000..01f16ec8e71 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C16H25NO2_[M+Na]+.tsv @@ -0,0 +1,14 @@ +mz intensity rel.intensity exactmass formula ionization +53.038833 30.00 1.33 53.038577 C4H4 [M + H]+ +55.054506 25.00 1.11 55.054227 C4H6 [M + H]+ +56.049919 60.00 5.54 56.049476 C3H5N [M + H]+ +70.039929 30.00 1.33 70.041316 C4H5O [M + H]+ +95.045082 30.00 1.33 95.046736 C4H8O [M + Na]+ +105.067130 10.00 0.44 105.067471 C6H10 [M + Na]+ +98.059279 958.00 100.00 98.060040 C5H7NO [M + H]+ +123.041272 20.00 0.89 123.041650 C5H8O2 [M + Na]+ +138.088468 35.00 1.55 138.088935 C6H13NO [M + Na]+ +140.069591 561.00 60.06 140.068199 C5H11NO2 [M + Na]+ +149.056693 15.00 0.66 149.057300 C7H10O2 [M + Na]+ +166.083820 60.00 3.55 166.083849 C7H13NO2 [M + Na]+ +286.179028 135.00 13.30 286.177750 C16H25NO2 [M + Na]+ diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C8H25N6O3S_[M+H]+.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C8H25N6O3S_[M+H]+.tsv new file mode 100644 index 00000000000..d3271ea378b --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C8H25N6O3S_[M+H]+.tsv @@ -0,0 +1,17 @@ +mz intensity rel.intensity exactmass formula ionization +53.038833 30.00 1.33 53.038577 C4H4 [M + H]+ +55.054506 25.00 1.11 55.054227 C4H6 [M + H]+ +56.049919 60.00 5.54 56.049476 C3H5N [M + H]+ +70.039929 30.00 1.33 70.041316 C4H5O [M + H]+ +81.036251 30.00 1.33 81.036862 C2H8OS [M + H]+ +85.028411 35.00 1.55 85.027063 C2H2N3O [M + H]+ +98.059279 958.00 100.00 98.058698 C3H5N4 [M + H]+ +105.067130 10.00 0.44 105.065854 C3H8N2O2 [M + H]+ +123.041272 20.00 0.89 123.042713 C5H4N3O [M + H]+ +123.048287 30.00 2.22 123.047427 C4H10O2S [M + H]+ +138.088468 35.00 1.55 138.089998 C6H9N4 [M + H]+ +140.069591 561.00 60.06 140.069262 C5H7N4O [M + H]+ +149.056693 15.00 0.66 149.058363 C7H6N3O [M + H]+ +166.083820 60.00 3.55 166.084912 C7H9N4O [M + H]+ +179.086353 30.00 1.33 179.084875 C6H14N2O2S [M + H]+ +286.179028 135.00 13.30 286.178161 C8H25N6O3S [M + H]+ diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C9H26N4O4P_[M+H]+.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C9H26N4O4P_[M+H]+.tsv new file mode 100644 index 00000000000..fb284e0cdb3 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectra/C9H26N4O4P_[M+H]+.tsv @@ -0,0 +1,16 @@ +mz intensity rel.intensity exactmass formula ionization +53.038833 30.00 1.33 53.038577 C4H4 [M + H]+ +53.045206 30.00 1.33 53.047130 H6NO2 [M + H]+ +55.054506 25.00 1.11 55.054227 C4H6 [M + H]+ +56.049919 60.00 5.54 56.049476 C3H5N [M + H]+ +79.063804 30.00 1.33 79.062780 C2H8NO2 [M + H]+ +85.028411 35.00 1.55 85.028717 H7NO2P [M + H]+ +95.045082 30.00 1.33 95.045119 CH6N2O3 [M + H]+ +98.059279 958.00 100.00 98.060351 CH10N2OP [M + H]+ +105.067130 10.00 0.44 105.065854 C3H8N2O2 [M + H]+ +123.041272 20.00 0.89 123.040033 C2H6N2O4 [M + H]+ +138.088468 35.00 1.55 138.087318 C3H11N3O3 [M + H]+ +140.069591 561.00 60.06 140.070916 C3H12N2O2P [M + H]+ +149.056693 15.00 0.66 149.055683 C4H8N2O4 [M + H]+ +166.083820 60.00 3.55 166.082232 C4H11N3O4 [M + H]+ +286.179028 135.00 13.30 286.176443 C9H26N4O4P [M + H]+ diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectrum.ms b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectrum.ms new file mode 100644 index 00000000000..eaad10c5495 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/spectrum.ms @@ -0,0 +1,538 @@ +>compound 0_10333458062711546021-664003--57--UNKNOWN +>parentmass 286.179028092823 +>ionization [M + ?]+ +>instrumentation Unknown (LCMS) +>source file:///home/axel/dev/OpenMS/src/tests/topp/SiriusExport_2_output.ms +>quality UNKNOWN +>rt 438.351s + +>ms1merged +##fid 10333458062711546021 +##fmz 286.179028092822705 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source format [MS, MS:1000562, ABI WIFF format,] +286.179028092823 67049.21901024424 + +>ms1peaks +52.005453969998 2626.72314453125 +53.013597312446 12728.5537109375 +53.850414409821 1250.853881835938 +54.009329210909 348334.9375 +55.006062122532 5392.66845703125 +55.011342055713 6236.11181640625 +55.054021350211 1869.2734375 +55.93428637444 6315.56396484375 +56.941831842622 2597.011962890625 +59.049520241177 68985.5625 +60.044238693811 9277.4111328125 +60.051306561624 7152.46337890625 +61.039638104919 1556.488891601562 +63.997844257749 4543.38671875 +64.004868648059 4706.5009765625 +68.011536869512 28038.3359375 +68.993647464953 12595.1962890625 +69.04451564507 12865.3759765625 +72.936647087938 2567.0 +73.064121365067 1769.92578125 +76.486182586418 2785.3779296875 +79.020888115541 15628.5712890625 +80.049060365715 12153.072265625 +81.936978966817 8495.0 +82.996309100211 9038.6689453125 +87.043494139885 1178.19091796875 +87.05431917233 1546.054443359375 +89.506956806916 1559.0 +90.488703688296 1817.0 +91.053777911785 1528.745483398438 +95.952341177386 2260.7412109375 +97.968210936145 7024.0 +98.983399057372 5034.8876953125 +100.075304888654 1243.0 +102.090957068479 1525.0 +109.943109012828 1320.9287109375 +113.962992754591 2498.0 +114.090728474154 10512.6171875 +118.085470631803 6601.4580078125 +122.095607083049 3712.7216796875 +122.962888411087 10607.5009765625 +123.091509718457 1686.104614257812 +132.043186178558 2464.123291015625 +136.020620151667 1645.0 +140.0671647866 1314.0 +141.089863109573 1272.67529296875 +141.111890586678 1562.626220703125 +141.957557081223 15988.39453125 +147.090173997086 2431.0 +149.022336160605 4523.34912109375 +149.043636850784 1223.066040039062 +151.095789721496 2301.788818359375 +151.111113393103 2538.584228515625 +155.069111807472 1549.374267578125 +155.105759874764 1515.979370117188 +155.973112787773 4487.0 +158.153378740203 12758.58984375 +159.156448385204 1328.413452148438 +161.095542076597 1436.0 +164.14201835883 1273.736083984375 +170.095175686942 2849.232421875 +171.138207188731 2555.0 +172.133475837479 1266.057739257812 +173.079557051502 6304.22509765625 +174.991247355031 15122.0 +176.988586706089 4881.0 +178.158242399689 1403.950073242188 +179.105412805866 3814.716552734375 +182.960601426951 1842.280639648438 +182.982966835265 1410.150146484375 +186.220883153188 1802.0 +194.115976643286 3119.0 +195.102214753451 1498.0576171875 +195.120897037407 1858.993774414062 +198.184171488074 2116.0 +217.106332787106 21497.787109375 +218.109128733639 2613.0 +219.095226750847 2102.304443359375 +224.127626531368 1175.0 +228.195317705032 1672.133422851562 +239.088374855672 3685.309814453125 +242.28318531079 1468.0 +246.860952738993 3049.0 +249.183720846634 1286.295654296875 +250.177140311956 1205.756591796875 +250.999832075601 32001.0 +252.002106420824 2157.0 +252.996924958467 20204.0 +253.999797691244 1411.0 +254.993496356863 3401.0 +279.092906188567 2036.0 +286.179288894577 8400.0 +287.181689656808 1994.078002929688 +287.217541902151 1349.643310546875 +291.235948805059 1485.048828125 +292.122314491142 439122.0 +292.983059595137 1438.03466796875 +293.122671084767 47692.13671875 +294.118451514065 133013.5625 +295.120454982262 22502.744140625 +296.12260798439 2357.932373046875 +313.039105768504 33266.0 +314.042149111497 5168.0 +315.036268416268 21007.2421875 +316.038403197349 3302.0 +317.033014483539 3862.0 +321.22705792137 1381.0 +327.007877449001 47611.56640625 +328.011115186819 4973.0 +329.004794999861 46547.0 +330.008005603352 4737.0 +331.001868162022 15538.0 +332.004876313775 1480.0 +333.003299668985 2744.07177734375 +335.018886982057 3585.0 +337.016084576435 2205.0 +339.994390073568 1754.0 +348.988792788967 6573.0 +350.986916484867 6721.0 +352.984603835989 2083.0 +354.041095041215 1340.092163085938 +356.039619641072 1269.081298828125 +372.065048824891 6209.5869140625 +374.062468004687 6086.0 +376.05914822959 1968.0 +392.045330940334 2193.0 +395.067648242738 2230.0 +397.066134815272 1581.0 +426.930515343123 1306.0 +426.976513054277 1169.811889648438 +428.927149366436 1298.0 +430.88664035001 1403.0 +445.11891390093 2269.0 +491.969645058197 1379.0 +505.851389825487 3789.0 +522.878326149515 1800.0 +536.163456762234 4427.0 +537.165324404735 2206.0 +538.161529742511 1590.843383789062 +544.337468455008 1195.0 +546.914116937371 2559.0 +547.911876414748 1196.0 +610.180850219782 2080.0 +611.182328195703 1214.0 +645.154717656738 8484.0 +646.158700037782 2782.0 +647.152980374288 9942.0 +648.155555240546 3294.0 +649.150621117204 4284.0 +650.1527099554 1200.0 + +>ms1peaks +52.005349834334 2531.576904296875 +52.017818445883 1415.950317382812 +53.013312992683 14436.3916015625 +53.85025651417 1311.865234375 +54.009237809188 346906.65625 +55.005700977113 5493.92431640625 +55.011578128004 6377.6845703125 +55.053978874167 1984.071533203125 +55.93399913398 6168.7666015625 +56.049511919157 2977.76220703125 +56.942056567735 2284.77685546875 +59.049350876787 53629.328125 +60.044322757483 8600.1640625 +61.039156449004 1644.316650390625 +63.99750818887 3394.98291015625 +64.005057234464 4259.6796875 +67.029035810216 2293.846923828125 +68.011280581573 27100.8359375 +68.993371510951 13738.876953125 +69.007497995886 1441.296142578125 +69.044403084909 13070.419921875 +72.936195718172 2643.0 +73.063931102643 1919.621459960938 +76.486167754556 1986.0 +79.020619039319 14111.75390625 +80.048823728166 11369.2158203125 +81.936905757296 8703.630859375 +82.996214707689 8986.6513671875 +87.054271044459 1595.093627929688 +89.505822079267 1760.0 +90.488874903389 1822.018798828125 +91.053163445835 1300.61083984375 +95.9523313459 2696.0 +97.967781752031 7299.724609375 +98.982987677469 4854.5224609375 +102.09029086708 1906.0 +109.942394870381 1583.0 +113.962086127466 2074.0 +114.090395399108 10058.849609375 +118.084999014032 6547.7587890625 +122.095088721755 3711.12451171875 +122.962603857586 10794.16796875 +123.090649527845 1803.942016601562 +123.961855384374 1203.0 +130.157739418261 1256.0 +136.020039379796 2083.0 +136.110849290905 1530.0 +141.089744053815 1237.175415039062 +141.111592847426 1371.69677734375 +141.957218960001 15367.2275390625 +147.090011968413 2463.0 +149.021828990169 4784.99560546875 +149.041466762922 2472.640625 +151.095944798794 2940.50830078125 +151.109341918543 3165.085693359375 +155.069344508958 1582.135864257812 +155.105135879836 1693.281616210938 +155.972287468254 4554.34033203125 +158.152759351824 13585.107421875 +159.156196357366 1465.92138671875 +159.967851357038 1225.276977539062 +161.095405694183 1641.0 +164.14161512709 1478.434814453125 +170.094609622 2457.6884765625 +171.141467030026 1915.0 +173.079379445344 6273.8388671875 +174.990844938283 15688.865234375 +176.987639364551 5360.52587890625 +177.052467267277 1475.0 +178.157540067017 1547.0 +179.105091602082 3287.998779296875 +182.959873591311 1986.81787109375 +186.220399692631 1658.0 +194.115345005627 3116.0 +195.120929712058 1968.662841796875 +198.184276303297 2015.0 +217.10597761005 20924.755859375 +218.108820705353 2495.792236328125 +219.094022022929 1823.679443359375 +228.194066029155 1666.038696289062 +239.087872978056 3722.0 +242.28242381947 1362.0 +246.860857987495 3450.0 +249.182928857496 1266.0 +250.177066939258 1504.335083007812 +250.999117678898 32221.0 +252.001781095835 2314.0 +252.995932699016 21462.0 +253.998953923887 1371.0 +254.99303375674 3403.0 +267.170032496706 1345.0 +279.092268016151 1928.0 +281.050459546987 1487.0 +286.178655880094 23309.20703125 +287.182133845414 5196.47119140625 +291.235317712341 1559.882568359375 +292.121093988068 399090.0 +292.98266390846 1255.68212890625 +293.023857907805 1542.28759765625 +293.121921829592 49425.3359375 +294.117639052994 123150.9296875 +295.119583284786 21162.34765625 +296.122453171108 2024.725219726562 +304.297977116061 1205.098876953125 +311.183844763032 2282.70361328125 +313.038450493324 32210.287109375 +314.041319280533 5035.671875 +315.035461346507 21071.0 +316.038196392607 3544.0 +317.032926032719 3656.0 +327.007662782866 46713.0 +328.00975395292 4731.13134765625 +329.00414172793 46254.0 +330.006788270317 4440.0 +331.000792355787 15238.0 +332.003743171067 1635.0 +333.001048030235 2840.54736328125 +335.018066518429 3857.0 +337.016490283319 2257.0 +348.988206068721 7382.0 +350.985085465325 7259.0 +352.983081816715 2462.0 +354.04109270199 1411.0 +358.095358680256 1344.0 +372.064528986026 6467.4951171875 +374.061053722203 5695.0 +376.059656060961 2211.0 +392.044067632616 2143.0 +395.066337210837 2288.0 +397.06535202634 1841.0 +428.895605409648 1348.684326171875 +428.9278597963 1412.0 +445.117454275133 2106.0 +491.967681975778 1277.0 +505.85090845577 4139.74755859375 +522.876740252438 1800.0 +536.161867901498 4607.0 +537.162257475039 2465.0 +538.160527239899 1695.0 +544.3364378563 1324.164184570312 +546.911854407175 2375.0 +547.911013918907 1216.0 +610.179211400596 2165.0 +611.181197363117 1284.0 +645.15389276048 7294.0 +646.156182811867 3135.0 +647.151735773867 8987.490234375 +648.154489817139 3184.0 +649.150180493474 3821.59130859375 +650.151352616891 1194.0 + +>ms1peaks +52.00554636841 2670.973876953125 +53.013447667176 13442.6962890625 +53.850235753676 1356.916015625 +54.009375548499 346132.0 +55.006052234178 5908.220703125 +55.011327139628 6618.6650390625 +55.054273818991 1724.201538085938 +55.934183438349 6089.1953125 +56.942085448242 2338.52294921875 +59.049497543886 62260.1953125 +60.044496762287 9351.7353515625 +61.039589911785 1691.005004882812 +63.997480072658 3643.092529296875 +64.00507351026 4229.73828125 +68.011506505752 28323.26953125 +68.993585810696 12464.4453125 +69.04464085294 13649.212890625 +72.044186043856 1148.0 +72.936480336335 2359.262451171875 +73.064260321862 1642.10302734375 +76.486297311909 2289.460693359375 +79.020766274604 15897.3828125 +80.048988150704 12209.904296875 +81.936792921049 8371.669921875 +82.996095650262 8043.11328125 +87.04383465373 1276.883422851562 +87.054214175865 1482.59814453125 +89.506458664277 1777.830322265625 +90.489196475802 1663.0 +91.05375523593 1541.526000976562 +95.952402869893 2400.645751953125 +97.967886882016 8001.9873046875 +98.983532889025 3424.810302734375 +100.074677767759 1304.0 +102.090242730316 1329.0 +109.942679982849 1398.0 +113.96269076886 1941.0 +114.090409984344 11174.9423828125 +118.085207229958 6292.0 +122.095068185146 3153.0 +122.962957192644 10933.0 +123.089979550376 1737.604248046875 +123.962216545241 1382.0 +130.157851054625 1368.0 +136.020636426938 1627.06298828125 +136.111496039851 1223.0 +140.067223364828 1192.0 +141.090663513328 1291.584838867188 +141.111904002369 1407.591674804688 +141.935850183021 1558.355590820312 +141.957535804851 16602.31640625 +147.090073371469 2918.0 +149.02224215734 5058.01123046875 +149.041140009202 2281.293701171875 +151.094511933196 2771.192138671875 +151.109513517514 3017.586181640625 +155.069293446605 1572.56640625 +155.105166988042 1682.863525390625 +155.972752865047 4956.0 +158.095291106412 1175.110473632812 +158.152897422617 13347.4541015625 +159.140146486584 1221.760620117188 +159.156626899127 1511.809692382812 +159.968130743445 1344.0 +161.095301376904 1939.0 +164.142147914813 1352.608276367188 +170.095211316489 2555.052490234375 +171.142065868167 1688.7470703125 +173.079666684779 7435.07080078125 +174.99087633145 12561.8759765625 +176.988228889313 4082.0 +178.157451442432 1671.7890625 +179.082574741649 1161.343872070312 +179.105464745461 2033.503295898438 +182.960688200025 1872.628540039062 +186.220236378822 1627.0 +194.115587597029 3414.43115234375 +195.1025219361 1940.187622070312 +195.12115396471 2419.52587890625 +198.184119642186 2274.0 +217.106221715984 24680.2578125 +218.109389146592 2768.0 +219.094928896725 1923.877807617188 +224.12573778853 1308.718017578125 +228.194389849522 1662.646850585938 +239.088555805042 4654.19384765625 +242.282289579657 1282.0 +246.861651699246 3614.0 +249.183697918794 1626.163208007812 +250.176302167701 1384.0 +250.99915901332 25559.16796875 +252.002213377038 1651.423461914062 +252.996445325154 16054.0 +253.999379477884 1131.0 +254.993447206468 2772.603271484375 +267.171432346745 1267.0 +279.091928399145 1791.0 +281.049474584863 1227.866455078125 +286.179096453069 25739.439453125 +287.182281594319 5585.33349609375 +292.120716590068 202371.0 +293.123166487022 34628.8203125 +294.117931210581 66532.0 +295.120340194058 11307.2236328125 +296.123175528233 1139.0 +304.298333326187 1345.0 +311.184016131023 2112.0 +313.038042743243 19603.21484375 +314.041307564911 3224.0 +315.035568487358 12179.0 +316.038573054615 2028.0 +317.032999093534 2260.0 +327.007882393116 37742.55859375 +328.009892511372 3601.0 +329.004296620889 35070.0 +330.007896864877 3743.0 +331.001397377526 12099.0 +332.004304811118 1147.0 +333.002267631798 2076.0 +335.01777065022 2313.0 +337.017035297896 1211.0 +348.98871515987 5698.0 +350.985988216636 6014.0 +352.98222744772 1887.0 +371.314800126809 1304.0 +372.064251479626 5075.02734375 +374.061938971072 4867.0 +376.058486261926 1592.0 +392.043742286078 1216.0 +395.068502390905 1429.0 +397.065868843467 1348.0 +428.893525922553 1400.224853515625 +428.927664629947 1466.814208984375 +430.886759376928 1323.849609375 +445.118824286635 2200.0 +505.851799123756 3631.0 +522.879142647299 1843.0 +529.887839543416 1136.832397460938 +536.163692934414 5222.0 +537.164127390652 2657.0 +538.162454710439 1796.178100585938 +544.339301230729 1413.667114257812 +546.912450246131 2510.0 +610.18154256263 2042.0 +611.181371312242 1400.0 +645.154552081192 5333.0 +646.158693354263 1778.0 +647.153270969225 6082.12939453125 +648.155656988395 2289.0 +649.150637720064 2324.0 + +>ms2peaks +##specref ms_run[1]:sample=1 period=1 cycle=664 experiment=3 +##scan 57 +##n_id sample=1 period=1 cycle=664 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=3_0 +51.938122634847 13.0 +56.049507786248 45.0 +98.060380513671 369.0 +123.04828715679 30.0 +126.875862655178 13.0 +138.097784854251 60.0 +140.072452948764 270.0 +170.852966884469 45.0 +170.866613065551 45.0 +184.123371965665 13.0 +269.157141111623 30.0 +269.174210692919 30.0 +286.179738267349 60.0 + +>ms2peaks +##specref ms_run[1]:sample=1 period=1 cycle=665 experiment=5 +##scan 68 +##n_id sample=1 period=1 cycle=665 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=665 experiment=5_0 +51.937914215879 30.0 +53.038832825255 30.0 +53.045206203438 30.0 +56.049918656323 60.0 +70.039929361435 30.0 +79.05676970651 30.0 +79.063803665589 30.0 +81.036251104807 30.0 +95.045081818956 30.0 +98.059564237847 929.0 +133.104347649114 30.0 +138.093679048566 30.0 +140.069724401264 524.0 +166.083820296277 60.0 +170.866129800466 45.0 +179.086353477601 30.0 +269.148315487256 30.0 +286.177025513197 135.0 + +>ms2peaks +##specref ms_run[1]:sample=1 period=1 cycle=666 experiment=3 +##scan 75 +##n_id sample=1 period=1 cycle=666 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=666 experiment=3_0 +55.054505732533 25.0 +55.060116779446 15.0 +56.048448506258 20.0 +85.028411205925 35.0 +98.059278982655 958.0 +105.06712975898 10.0 +123.041271657474 20.0 +123.051095128888 20.0 +126.876822431871 10.0 +133.100243079469 59.0 +138.08846790169 35.0 +140.069590830035 561.0 +145.101270946048 20.0 +149.056693160781 15.0 +166.087482254599 20.0 +286.178204102612 105.0 +286.21327753122 60.716449737549 + diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C10H27N3O4S_[M+H3N+H]+.json b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C10H27N3O4S_[M+H3N+H]+.json new file mode 100644 index 00000000000..f9b5b64ce82 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C10H27N3O4S_[M+H3N+H]+.json @@ -0,0 +1,697 @@ +{ + "molecularFormula" : "C10H24N2O4S", + "root" : "C10H24N2O4S", + "annotations" : { + "precursorIonType" : "[M + H3N + H]+", + "numberOfUnconsideredCandidates" : 21, + "lowestConsideredCandidateScore" : 31.877358685357798, + "recalibration" : { + "separate" : [ "none", "1.0x", "1.0x" ], + "merged" : "0.9999917649375867x + 2.1751848083795267E-4" + }, + "treeType" : "neutralized", + "nodeBoost" : 2.0, + "statistics" : { + "explainedIntensity" : 0.840890008396306, + "explainedIntensityOfExplainablePeaks" : 0.9150296939241664, + "ratioOfExplainedPeaks" : 0.33333333333333337 + } + }, + "fragments" : [ { + "id" : 0, + "molecularFormula" : "C10H24N2O4S", + "ion" : "[M + H]+", + "massDeviation" : "-1.662257611043777 ppm (-4.7570326756840586E-4 m/z)", + "recalibratedMassDeviation" : "-1.662257611043777 ppm (-4.7570326756840586E-4 m/z)", + "score" : -1.4471298053699595, + "scores" : { + "Chemical Prior" : 0.3038955345357771, + "MS-Isotopes" : 0.0, + "CommonRootLoss" : 0.0, + "Mass Deviation" : -0.14158742747163627, + "CarbohydrogenCompound" : 0.0, + "motif-search" : 0.0, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "BeautificationScorer" : -0.0, + "ImplicitAdductPeakScore" : 0.0, + "IntrinsicallyChargedScorer" : 0.0, + "StrangeElementRootScorer" : -1.6094379124341003 + }, + "hasImplicitAdduct" : { + "adductFormula" : "H3N" + }, + "relativeIntensity" : 0.13297872340425532, + "mz" : 286.179028092823, + "recalibratedMass" : 286.179028092823, + "peaks" : [ { + "intensity" : 135.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 286.177025513197 + }, { + "intensity" : 105.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 286.178204102612 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 286.179738267349 + } ], + "isotopes" : { + "score" : -9.81517413459004, + "mz" : [ 286.179028092823 ], + "relInt" : [ 1.0 ] + } + }, { + "id" : 1, + "molecularFormula" : "C4H8N2O4", + "ion" : "[M + H]+", + "massDeviation" : "9.561510468791653 ppm (0.001588012186459764 m/z)", + "recalibratedMassDeviation" : "9.561510468791653 ppm (0.001588012186459764 m/z)", + "score" : 4.931190274959666, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.425260994680946, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.33916179703723004, + "ClippedPeakIsNoiseScorer" : 1.2449493017241469, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 2.272340170879235 + }, + "hasImplicitAdduct" : { + "score" : 2.272340170879235, + "adductFormula" : "H3N", + "relativeIntensity" : 0.006648936170212766, + "mz" : 149.056693160781, + "recalibratedMass" : 149.056693160781, + "peaks" : [ { + "intensity" : 15.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 149.056693160781 + } ] + }, + "relativeIntensity" : 0.03546099290780142, + "mz" : 166.083820296277, + "recalibratedMass" : 166.083820296277, + "peaks" : [ { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 166.083820296277 + }, { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 166.087482254599 + } ] + }, { + "id" : 2, + "molecularFormula" : "C7H6O2", + "ion" : "[M + H]+", + "massDeviation" : "-7.240329964051787 ppm (-0.0010141500555391758 m/z)", + "recalibratedMassDeviation" : "-7.240329964051787 ppm (-0.0010141500555391758 m/z)", + "score" : 5.517748465865325, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.24542802800605243, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5993040916996499, + "ClippedPeakIsNoiseScorer" : 3.663872402171727, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + }, + "hasImplicitAdduct" : { + "adductFormula" : "H3N" + }, + "relativeIntensity" : 0.6006205673758865, + "mz" : 140.069590830035, + "recalibratedMass" : 140.069590830035, + "peaks" : [ { + "intensity" : 561.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 140.069590830035 + }, { + "intensity" : 524.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 140.069724401264 + }, { + "intensity" : 270.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 140.072452948764 + } ] + }, { + "id" : 3, + "molecularFormula" : "C2H6N2O4", + "ion" : "[M + H]+", + "massDeviation" : "10.065999536359788 ppm (0.001238533383457252 m/z)", + "recalibratedMassDeviation" : "10.065999536359788 ppm (0.001238533383457252 m/z)", + "score" : 2.563428586242395, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.3120525173935285, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.76958728342526, + "ClippedPeakIsNoiseScorer" : 0.6058938202106641, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + }, + "relativeIntensity" : 0.008865248226950355, + "mz" : 123.041271657474, + "recalibratedMass" : 123.041271657474, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 123.041271657474 + } ] + }, { + "id" : 4, + "molecularFormula" : "C3H8N2O3", + "ion" : "[M + H]+", + "massDeviation" : "8.329715123495133 ppm (0.0011502375994609793 m/z)", + "recalibratedMassDeviation" : "8.329715123495133 ppm (0.0011502375994609793 m/z)", + "score" : 2.685650061451246, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.28527812353666043, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.6191153209831, + "ClippedPeakIsNoiseScorer" : 0.8518128640048066, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + }, + "hasImplicitAdduct" : { + "adductFormula" : "H3N" + }, + "relativeIntensity" : 0.01551418439716312, + "mz" : 138.08846790169, + "recalibratedMass" : 138.08846790169, + "peaks" : [ { + "intensity" : 35.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 138.08846790169 + } ] + }, { + "id" : 5, + "molecularFormula" : "C3H8N2O2", + "ion" : "[M + H]+", + "massDeviation" : "12.142816620135408 ppm (0.001275810889467266 m/z)", + "recalibratedMassDeviation" : "12.142816620135408 ppm (0.001275810889467266 m/z)", + "score" : 2.4425328620394944, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.3235754738389774, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.9493287024102, + "ClippedPeakIsNoiseScorer" : 0.31677963346827187, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + }, + "relativeIntensity" : 0.004432624113475178, + "mz" : 105.06712975898, + "recalibratedMass" : 105.06712975898, + "peaks" : [ { + "intensity" : 10.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 105.06712975898 + } ] + }, { + "id" : 6, + "molecularFormula" : "CH6N2O3", + "ion" : "[M + H]+", + "massDeviation" : "-0.3859761476327683 ppm (-3.6685134531921904E-5 m/z)", + "recalibratedMassDeviation" : "-0.3859761476327683 ppm (-3.6685134531921904E-5 m/z)", + "score" : 3.324911570594359, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.007371285107327513, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.0495491818104399, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + }, + "relativeIntensity" : 0.013297872340425532, + "mz" : 95.045081818956, + "recalibratedMass" : 95.045081818956, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 95.045081818956 + } ] + }, { + "id" : 7, + "molecularFormula" : "C4H4O2", + "ion" : "[M + H]+", + "massDeviation" : "0.06334158641054131 ppm (5.385834455751137E-6 m/z)", + "recalibratedMassDeviation" : "0.06334158641054131 ppm (5.385834455751137E-6 m/z)", + "score" : 3.5004532788907463, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.0010754730548102676, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.14971588794075, + "ClippedPeakIsNoiseScorer" : 0.8518128640048066, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + }, + "relativeIntensity" : 0.01551418439716312, + "mz" : 85.028411205925, + "recalibratedMass" : 85.028411205925, + "peaks" : [ { + "intensity" : 35.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 85.028411205925 + } ] + }, { + "id" : 8, + "molecularFormula" : "C5H4O", + "ion" : "[M + H]+", + "massDeviation" : "-7.763808213061534 ppm (-7.613134355324291E-4 m/z)", + "recalibratedMassDeviation" : "-7.763808213061534 ppm (-7.613134355324291E-4 m/z)", + "score" : 13.731016600214899, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.1758735604456145, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.01940721017345, + "ClippedPeakIsNoiseScorer" : 11.387482950487064, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + }, + "hasImplicitAdduct" : { + "adductFormula" : "H3N" + }, + "relativeIntensity" : 1.0, + "mz" : 98.059278982655, + "recalibratedMass" : 98.059278982655, + "peaks" : [ { + "intensity" : 958.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 98.059278982655 + }, { + "intensity" : 929.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 98.059564237847 + }, { + "intensity" : 369.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 98.060380513671 + } ] + }, { + "id" : 9, + "molecularFormula" : "C2H5O2", + "ion" : "[M + H]+", + "massDeviation" : "12.947992014139288 ppm (0.001023717498469523 m/z)", + "recalibratedMassDeviation" : "12.947992014139288 ppm (0.001023717498469523 m/z)", + "score" : 3.2439217282071207, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.2481739090282355, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.20936196334411, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + }, + "hasImplicitAdduct" : { + "adductFormula" : "H3N" + }, + "relativeIntensity" : 0.013297872340425532, + "mz" : 79.063803665589, + "recalibratedMass" : 79.063803665589, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 79.063803665589 + } ] + }, { + "id" : 10, + "molecularFormula" : "C3H2", + "ion" : "[M + H]+", + "massDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "recalibratedMassDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "score" : 4.321746919219734, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.09637633526184135, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.43950081343677, + "ClippedPeakIsNoiseScorer" : 1.4786224410448057, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + }, + "hasImplicitAdduct" : { + "adductFormula" : "H3N" + }, + "relativeIntensity" : 0.05540780141843971, + "mz" : 56.049918656323, + "recalibratedMass" : 56.049918656323, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 56.048448506258 + }, { + "intensity" : 45.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 56.049507786248 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 56.049918656323 + } ] + }, { + "id" : 11, + "molecularFormula" : "H3O2", + "ion" : "[M + H]+", + "massDeviation" : "-36.264929297489886 ppm (-0.0019236806525384509 m/z)", + "recalibratedMassDeviation" : "-36.264929297489886 ppm (-0.0019236806525384509 m/z)", + "score" : 3.207152696243114, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.5451289156137523, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.46954793796562, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + }, + "hasImplicitAdduct" : { + "adductFormula" : "H3N" + }, + "relativeIntensity" : 0.013297872340425532, + "mz" : 53.045206203438, + "recalibratedMass" : 53.045206203438, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 53.045206203438 + } ] + } ], + "losses" : [ { + "source" : 0, + "target" : 1, + "molecularFormula" : "C6H16S", + "score" : -6.862279266283113, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.7535640460848674, + "Loss RDBE" : -2.1972245773362196, + "Mass Deviation" : -1.2283125590844104, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 0, + "target" : 2, + "molecularFormula" : "C3H18N2O2S", + "score" : -7.340073562768975, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -1.4916638350114937, + "Loss RDBE" : -2.995732273553991, + "Mass Deviation" : -0.16949937042587448, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 3, + "molecularFormula" : "C2H2", + "score" : 0.8976677060960859, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7807331247698537, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.09970717797341114, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + }, + "adductLoss" : { + "adduct" : "H3N", + "modifiedMolecularFormula" : "C2H2" + } + }, { + "source" : 1, + "target" : 4, + "molecularFormula" : "CO", + "score" : 1.1617927478991255, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8780805875717457, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.20658508697723843, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4786707051457979, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 5, + "molecularFormula" : "CO2", + "score" : -1.358756472994521, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.098012017797652, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.11763095215815493, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.3507640807928385, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + }, + "adductLoss" : { + "adduct" : "H3N", + "modifiedMolecularFormula" : "CO2" + } + }, { + "source" : 3, + "target" : 6, + "molecularFormula" : "CO", + "score" : 0.5692439340323783, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8781167754652612, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.7991700887375011, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4786707051457979, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 7, + "molecularFormula" : "C3H2", + "hasImplicitAdduct" : { + "adductFormula" : "H3N" + }, + "score" : -1.6790392830886869, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.9646274134986461, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.5889111584221933, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.06638208032396, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 8, + "molecularFormula" : "C2H2O", + "score" : -0.4979081454781588, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1055072936737664, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.11132529380710361, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -1.503716687503642, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 4, + "target" : 9, + "molecularFormula" : "CH3N2O", + "score" : -4.148649986277192, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8901712362287642, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.05305804573429617, + "Free Radical" : -2.2909585508352253, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 8, + "target" : 10, + "molecularFormula" : "C2H2O", + "score" : -1.1247967985789344, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1055093118884525, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.7382159651225652, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -1.503716687503642, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 9, + "target" : 11, + "molecularFormula" : "C2H2", + "score" : -1.8740323357008308, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7809094410052824, + "Loss RDBE" : 0.0, + "Mass Deviation" : -2.8715835360057564, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + } ] +} \ No newline at end of file diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C11H27N4O2_[M+K]+.json b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C11H27N4O2_[M+K]+.json new file mode 100644 index 00000000000..0515423cb67 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C11H27N4O2_[M+K]+.json @@ -0,0 +1,647 @@ +{ + "molecularFormula" : "C11H27N4O2", + "root" : "C11H27N4O2", + "annotations" : { + "precursorIonType" : "[M + K]+", + "nodeBoost" : 3.0, + "numberOfUnconsideredCandidates" : 21, + "lowestConsideredCandidateScore" : 31.877358685357798, + "statistics" : { + "explainedIntensity" : 0.840890008396306, + "explainedIntensityOfExplainablePeaks" : 0.9474929044465469, + "ratioOfExplainedPeaks" : 0.3333333333333333 + } + }, + "fragments" : [ { + "id" : 0, + "molecularFormula" : "C11H27N4O2", + "ion" : "[M + K]+", + "massDeviation" : "8.627077773474678 ppm (0.002468888732494179 m/z)", + "recalibratedMassDeviation" : "8.627077773474678 ppm (0.002468888732494179 m/z)", + "relativeIntensity" : 0.13297872340425532, + "mz" : 286.179028092823, + "recalibratedMass" : 286.179028092823, + "peaks" : [ { + "intensity" : 135.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 286.177025513197 + }, { + "intensity" : 105.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 286.178204102612 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 286.179738267349 + } ], + "score" : -15.55115197917369, + "scores" : { + "Chemical Prior" : 1.0, + "MS-Isotopes" : 0.0, + "CommonRootLoss" : 0.0, + "Mass Deviation" : -0.945981793185593, + "CarbohydrogenCompound" : 0.0, + "motif-search" : 0.0, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "BeautificationScorer" : -11.000000000000007, + "ImplicitAdductPeakScore" : 0.0, + "IntrinsicallyChargedScorer" : -4.605170185988091, + "StrangeElementRootScorer" : 0.0 + }, + "isotopes" : { + "score" : -12.087614111466648, + "mz" : [ 286.179028092823 ], + "relInt" : [ 1.0 ] + } + }, { + "id" : 1, + "molecularFormula" : "C7H9N4O", + "ion" : "[M + H]+", + "massDeviation" : "-6.575377490608041 ppm (-0.0010920638135303307 m/z)", + "recalibratedMassDeviation" : "-6.575377490608041 ppm (-0.0010920638135303307 m/z)", + "relativeIntensity" : 0.03546099290780142, + "mz" : 166.083820296277, + "recalibratedMass" : 166.083820296277, + "peaks" : [ { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 166.083820296277 + }, { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 166.087482254599 + } ], + "score" : 3.8160769925131928, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.26803410624818425, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.33916179703723004, + "ClippedPeakIsNoiseScorer" : 1.2449493017241469, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 2, + "molecularFormula" : "C7H6N3O", + "ion" : "[M + H]+", + "massDeviation" : "-11.204483838375484 ppm (-0.0016701033095216644 m/z)", + "recalibratedMassDeviation" : "-11.204483838375484 ppm (-0.0016701033095216644 m/z)", + "relativeIntensity" : 0.006648936170212766, + "mz" : 149.056693160781, + "recalibratedMass" : 149.056693160781, + "peaks" : [ { + "intensity" : 15.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 149.056693160781 + } ], + "score" : 3.039985808092882, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.4535557138315937, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5094330683921899, + "ClippedPeakIsNoiseScorer" : 0.4841084535322853, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 3, + "molecularFormula" : "C5H7N4O", + "ion" : "[M + H]+", + "massDeviation" : "2.3455051344256366 ppm (3.285339444687452E-4 m/z)", + "recalibratedMassDeviation" : "2.3455051344256366 ppm (3.285339444687452E-4 m/z)", + "relativeIntensity" : 0.6006205673758865, + "mz" : 140.069590830035, + "recalibratedMass" : 140.069590830035, + "peaks" : [ { + "intensity" : 561.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 140.069590830035 + }, { + "intensity" : 524.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 140.069724401264 + }, { + "intensity" : 270.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 140.072452948764 + } ], + "score" : 6.693270086004846, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.06990640786653102, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5993040916996499, + "ClippedPeakIsNoiseScorer" : 3.663872402171727, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 4, + "molecularFormula" : "C6H9N4", + "ion" : "[M + H]+", + "massDeviation" : "-11.07868328018717 ppm (-0.0015298384005291155 m/z)", + "recalibratedMassDeviation" : "-11.07868328018717 ppm (-0.0015298384005291155 m/z)", + "relativeIntensity" : 0.01551418439716312, + "mz" : 138.08846790169, + "recalibratedMass" : 138.08846790169, + "peaks" : [ { + "intensity" : 35.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 138.08846790169 + } ], + "score" : 3.5653226746126956, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.4056055103752111, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.6191153209831, + "ClippedPeakIsNoiseScorer" : 0.8518128640048066, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 5, + "molecularFormula" : "C5H4N3O", + "ion" : "[M + H]+", + "massDeviation" : "-11.715927486070303 ppm (-0.0014415426165328427 m/z)", + "recalibratedMassDeviation" : "-11.715927486070303 ppm (-0.0014415426165328427 m/z)", + "relativeIntensity" : 0.008865248226950355, + "mz" : 123.041271657474, + "recalibratedMass" : 123.041271657474, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 123.041271657474 + } ], + "score" : 3.4990858320912257, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.3763952715446977, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.76958728342526, + "ClippedPeakIsNoiseScorer" : 0.6058938202106641, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 6, + "molecularFormula" : "C5H7NO", + "ion" : "[M + H]+", + "massDeviation" : "-7.763808213061534 ppm (-7.613134355324291E-4 m/z)", + "recalibratedMassDeviation" : "-7.763808213061534 ppm (-7.613134355324291E-4 m/z)", + "relativeIntensity" : 1.0, + "mz" : 98.059278982655, + "recalibratedMass" : 98.059278982655, + "peaks" : [ { + "intensity" : 958.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 98.059278982655 + }, { + "intensity" : 929.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 98.059564237847 + }, { + "intensity" : 369.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 98.060380513671 + } ], + "score" : 14.731016600214899, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.1758735604456145, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.01940721017345, + "ClippedPeakIsNoiseScorer" : 11.387482950487064, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 7, + "molecularFormula" : "C2H2N3O", + "ion" : "[M + H]+", + "massDeviation" : "15.85434580447312 ppm (0.0013480698344636721 m/z)", + "recalibratedMassDeviation" : "15.85434580447312 ppm (0.0013480698344636721 m/z)", + "relativeIntensity" : 0.01551418439716312, + "mz" : 85.028411205925, + "recalibratedMass" : 85.028411205925, + "peaks" : [ { + "intensity" : 35.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 85.028411205925 + } ], + "score" : 4.155244192966554, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.3462845589790036, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.14971588794075, + "ClippedPeakIsNoiseScorer" : 0.8518128640048066, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 8, + "molecularFormula" : "C4H5O", + "ion" : "[M + H]+", + "massDeviation" : "-19.80114297917525 ppm (-0.001386870655537109 m/z)", + "recalibratedMassDeviation" : "-19.80114297917525 ppm (-0.001386870655537109 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 70.039929361435, + "recalibratedMass" : 70.039929361435, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 70.039929361435 + } ], + "score" : 4.464304735749953, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.240653, + "Mass Deviation" : -0.3586826445269436, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.2996007063856498, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 9, + "molecularFormula" : "C3H5N", + "ion" : "[M + H]+", + "massDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "recalibratedMassDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "relativeIntensity" : 0.05540780141843971, + "mz" : 56.049918656323, + "recalibratedMass" : 56.049918656323, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 56.048448506258 + }, { + "intensity" : 45.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 56.049507786248 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 56.049918656323 + } ], + "score" : 5.321746919219734, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.09637633526184135, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.43950081343677, + "ClippedPeakIsNoiseScorer" : 1.4786224410448057, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 10, + "molecularFormula" : "C4H6", + "ion" : "[M + H]+", + "massDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "recalibratedMassDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "relativeIntensity" : 0.011081560283687944, + "mz" : 55.054505732533, + "recalibratedMass" : 55.054505732533, + "peaks" : [ { + "intensity" : 25.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 55.054505732533 + } ], + "score" : 4.593033282124102, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.05881770900781395, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.4494549426746701, + "ClippedPeakIsNoiseScorer" : 0.7023960484572456, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 11, + "molecularFormula" : "C4H4", + "ion" : "[M + H]+", + "massDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "recalibratedMassDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 53.038832825255, + "recalibratedMass" : 53.038832825255, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 53.038832825255 + } ], + "score" : 4.698581673364512, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.05376367227418448, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.46961167174745, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + } ], + "losses" : [ { + "source" : 0, + "target" : 1, + "molecularFormula" : "C4H18O", + "score" : -11.863685384078487, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.7535640460848674, + "Loss RDBE" : -2.995732273553991, + "Mass Deviation" : -2.9002952646797224, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : -2.530915715982292, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 2, + "molecularFormula" : "H3N", + "score" : 0.023030392061025362, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.11909994533147827, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.28702698696382317, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4175307821975065, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 3, + "molecularFormula" : "C2H2", + "score" : 0.0665407853704082, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7806669298851281, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.9307679038143633, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 4, + "molecularFormula" : "CO", + "score" : 1.1617927478991255, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8780805875717457, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.20658508697723843, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4786707051457979, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 5, + "molecularFormula" : "C2H2", + "score" : 0.8976677060960859, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7807331247698537, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.09970717797341114, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 6, + "molecularFormula" : "C2H2N3", + "score" : -4.4448958742214275, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.6908572967856159, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.1499899942353829, + "Free Radical" : -2.2909585508352253, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 3, + "target" : 7, + "molecularFormula" : "C3H5N", + "score" : -1.6790392830886869, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.9646274134986461, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.5889111584221933, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.06638208032396, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 8, + "molecularFormula" : "C3HN3", + "score" : -2.3987777545815, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.4105587597292697, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.1261584305331548, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 9, + "molecularFormula" : "C2H2O", + "score" : -1.1247967985789344, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1055093118884525, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.7382159651225652, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -1.503716687503642, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 10, + "molecularFormula" : "CHNO", + "score" : -2.1857060900958376, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1025458594057662, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.605073865723989, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 10, + "target" : 11, + "molecularFormula" : "H2", + "score" : -0.60128857920489, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -13.382452509315037, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.009196414819379358, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 12.778733802770706, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + } ] +} \ No newline at end of file diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C12H24N5OP_[M+H]+.json b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C12H24N5OP_[M+H]+.json new file mode 100644 index 00000000000..b003a6f2840 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C12H24N5OP_[M+H]+.json @@ -0,0 +1,647 @@ +{ + "molecularFormula" : "C12H24N5OP", + "root" : "C12H24N5OP", + "annotations" : { + "precursorIonType" : "[M + H]+", + "nodeBoost" : 3.0, + "numberOfUnconsideredCandidates" : 21, + "lowestConsideredCandidateScore" : 31.877358685357798, + "statistics" : { + "explainedIntensity" : 0.840890008396306, + "explainedIntensityOfExplainablePeaks" : 0.9634439634439634, + "ratioOfExplainedPeaks" : 0.3333333333333333 + } + }, + "fragments" : [ { + "id" : 0, + "molecularFormula" : "C12H24N5OP", + "ion" : "[M + H]+", + "massDeviation" : "-0.33327832642813954 ppm (-9.537726754160758E-5 m/z)", + "recalibratedMassDeviation" : "-0.33327832642813954 ppm (-9.537726754160758E-5 m/z)", + "relativeIntensity" : 0.13297872340425532, + "mz" : 286.179028092823, + "recalibratedMass" : 286.179028092823, + "peaks" : [ { + "intensity" : 135.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 286.177025513197 + }, { + "intensity" : 105.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 286.178204102612 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 286.179738267349 + } ], + "score" : -14.632116849227224, + "scores" : { + "Chemical Prior" : 1.0, + "MS-Isotopes" : 0.0, + "CommonRootLoss" : 0.0, + "Mass Deviation" : -0.026946663239137202, + "CarbohydrogenCompound" : 0.0, + "motif-search" : 0.0, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : -2.995732273553991, + "BeautificationScorer" : -10.999999999999996, + "ImplicitAdductPeakScore" : 0.0, + "IntrinsicallyChargedScorer" : 0.0, + "StrangeElementRootScorer" : -1.6094379124341003 + }, + "isotopes" : { + "score" : -7.602594559538953, + "mz" : [ 286.179028092823 ], + "relInt" : [ 1.0 ] + } + }, { + "id" : 1, + "molecularFormula" : "C7H9N4O", + "ion" : "[M + H]+", + "massDeviation" : "-6.575377490608041 ppm (-0.0010920638135303307 m/z)", + "recalibratedMassDeviation" : "-6.575377490608041 ppm (-0.0010920638135303307 m/z)", + "relativeIntensity" : 0.03546099290780142, + "mz" : 166.083820296277, + "recalibratedMass" : 166.083820296277, + "peaks" : [ { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 166.083820296277 + }, { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 166.087482254599 + } ], + "score" : 3.8160769925131928, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.26803410624818425, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.33916179703723004, + "ClippedPeakIsNoiseScorer" : 1.2449493017241469, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 2, + "molecularFormula" : "C7H6N3O", + "ion" : "[M + H]+", + "massDeviation" : "-11.204483838375484 ppm (-0.0016701033095216644 m/z)", + "recalibratedMassDeviation" : "-11.204483838375484 ppm (-0.0016701033095216644 m/z)", + "relativeIntensity" : 0.006648936170212766, + "mz" : 149.056693160781, + "recalibratedMass" : 149.056693160781, + "peaks" : [ { + "intensity" : 15.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 149.056693160781 + } ], + "score" : 3.039985808092882, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.4535557138315937, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5094330683921899, + "ClippedPeakIsNoiseScorer" : 0.4841084535322853, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 3, + "molecularFormula" : "C5H7N4O", + "ion" : "[M + H]+", + "massDeviation" : "2.3455051344256366 ppm (3.285339444687452E-4 m/z)", + "recalibratedMassDeviation" : "2.3455051344256366 ppm (3.285339444687452E-4 m/z)", + "relativeIntensity" : 0.6006205673758865, + "mz" : 140.069590830035, + "recalibratedMass" : 140.069590830035, + "peaks" : [ { + "intensity" : 561.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 140.069590830035 + }, { + "intensity" : 524.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 140.069724401264 + }, { + "intensity" : 270.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 140.072452948764 + } ], + "score" : 6.693270086004846, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.06990640786653102, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5993040916996499, + "ClippedPeakIsNoiseScorer" : 3.663872402171727, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 4, + "molecularFormula" : "C6H9N4", + "ion" : "[M + H]+", + "massDeviation" : "-11.07868328018717 ppm (-0.0015298384005291155 m/z)", + "recalibratedMassDeviation" : "-11.07868328018717 ppm (-0.0015298384005291155 m/z)", + "relativeIntensity" : 0.01551418439716312, + "mz" : 138.08846790169, + "recalibratedMass" : 138.08846790169, + "peaks" : [ { + "intensity" : 35.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 138.08846790169 + } ], + "score" : 3.5653226746126956, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.4056055103752111, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.6191153209831, + "ClippedPeakIsNoiseScorer" : 0.8518128640048066, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 5, + "molecularFormula" : "C5H4N3O", + "ion" : "[M + H]+", + "massDeviation" : "-11.715927486070303 ppm (-0.0014415426165328427 m/z)", + "recalibratedMassDeviation" : "-11.715927486070303 ppm (-0.0014415426165328427 m/z)", + "relativeIntensity" : 0.008865248226950355, + "mz" : 123.041271657474, + "recalibratedMass" : 123.041271657474, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 123.041271657474 + } ], + "score" : 3.4990858320912257, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.3763952715446977, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.76958728342526, + "ClippedPeakIsNoiseScorer" : 0.6058938202106641, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 6, + "molecularFormula" : "C5H7NO", + "ion" : "[M + H]+", + "massDeviation" : "-7.763808213061534 ppm (-7.613134355324291E-4 m/z)", + "recalibratedMassDeviation" : "-7.763808213061534 ppm (-7.613134355324291E-4 m/z)", + "relativeIntensity" : 1.0, + "mz" : 98.059278982655, + "recalibratedMass" : 98.059278982655, + "peaks" : [ { + "intensity" : 958.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 98.059278982655 + }, { + "intensity" : 929.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 98.059564237847 + }, { + "intensity" : 369.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 98.060380513671 + } ], + "score" : 14.731016600214899, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.1758735604456145, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.01940721017345, + "ClippedPeakIsNoiseScorer" : 11.387482950487064, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 7, + "molecularFormula" : "C2H2N3O", + "ion" : "[M + H]+", + "massDeviation" : "15.85434580447312 ppm (0.0013480698344636721 m/z)", + "recalibratedMassDeviation" : "15.85434580447312 ppm (0.0013480698344636721 m/z)", + "relativeIntensity" : 0.01551418439716312, + "mz" : 85.028411205925, + "recalibratedMass" : 85.028411205925, + "peaks" : [ { + "intensity" : 35.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 85.028411205925 + } ], + "score" : 4.155244192966554, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.3462845589790036, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.14971588794075, + "ClippedPeakIsNoiseScorer" : 0.8518128640048066, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 8, + "molecularFormula" : "C4H5O", + "ion" : "[M + H]+", + "massDeviation" : "-19.80114297917525 ppm (-0.001386870655537109 m/z)", + "recalibratedMassDeviation" : "-19.80114297917525 ppm (-0.001386870655537109 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 70.039929361435, + "recalibratedMass" : 70.039929361435, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 70.039929361435 + } ], + "score" : 4.464304735749953, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.240653, + "Mass Deviation" : -0.3586826445269436, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.2996007063856498, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 9, + "molecularFormula" : "C3H5N", + "ion" : "[M + H]+", + "massDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "recalibratedMassDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "relativeIntensity" : 0.05540780141843971, + "mz" : 56.049918656323, + "recalibratedMass" : 56.049918656323, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 56.048448506258 + }, { + "intensity" : 45.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 56.049507786248 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 56.049918656323 + } ], + "score" : 5.321746919219734, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.09637633526184135, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.43950081343677, + "ClippedPeakIsNoiseScorer" : 1.4786224410448057, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 10, + "molecularFormula" : "C4H6", + "ion" : "[M + H]+", + "massDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "recalibratedMassDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "relativeIntensity" : 0.011081560283687944, + "mz" : 55.054505732533, + "recalibratedMass" : 55.054505732533, + "peaks" : [ { + "intensity" : 25.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 55.054505732533 + } ], + "score" : 4.593033282124102, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.05881770900781395, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.4494549426746701, + "ClippedPeakIsNoiseScorer" : 0.7023960484572456, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 11, + "molecularFormula" : "C4H4", + "ion" : "[M + H]+", + "massDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "recalibratedMassDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 53.038832825255, + "recalibratedMass" : 53.038832825255, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 53.038832825255 + } ], + "score" : 4.698581673364512, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.05376367227418448, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.46961167174745, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + } ], + "losses" : [ { + "source" : 0, + "target" : 1, + "molecularFormula" : "C5H15NP", + "score" : -6.371626722486521, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.7535640460848674, + "Loss RDBE" : -1.0986122886681098, + "Mass Deviation" : -0.4499779428360395, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : -1.3862943611198906, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 2, + "molecularFormula" : "H3N", + "score" : 0.023030392061025362, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.11909994533147827, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.28702698696382317, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4175307821975065, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 3, + "molecularFormula" : "C2H2", + "score" : 0.0665407853704082, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7806669298851281, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.9307679038143633, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 4, + "molecularFormula" : "CO", + "score" : 1.1617927478991255, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8780805875717457, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.20658508697723843, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4786707051457979, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 5, + "molecularFormula" : "C2H2", + "score" : 0.8976677060960859, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7807331247698537, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.09970717797341114, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 6, + "molecularFormula" : "C2H2N3", + "score" : -4.4448958742214275, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.6908572967856159, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.1499899942353829, + "Free Radical" : -2.2909585508352253, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 3, + "target" : 7, + "molecularFormula" : "C3H5N", + "score" : -1.6790392830886869, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.9646274134986461, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.5889111584221933, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.06638208032396, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 8, + "molecularFormula" : "C3HN3", + "score" : -2.3987777545815, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.4105587597292697, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.1261584305331548, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 9, + "molecularFormula" : "C2H2O", + "score" : -1.1247967985789344, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1055093118884525, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.7382159651225652, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -1.503716687503642, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 10, + "molecularFormula" : "CHNO", + "score" : -2.1857060900958376, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1025458594057662, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.605073865723989, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 10, + "target" : 11, + "molecularFormula" : "H2", + "score" : -0.60128857920489, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -13.382452509315037, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.009196414819379358, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 12.778733802770706, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + } ] +} \ No newline at end of file diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C12H28N2O2P_[M+Na]+.json b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C12H28N2O2P_[M+Na]+.json new file mode 100644 index 00000000000..6aa46d0c231 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C12H28N2O2P_[M+Na]+.json @@ -0,0 +1,697 @@ +{ + "molecularFormula" : "C12H28N2O2P", + "root" : "C12H28N2O2P", + "annotations" : { + "precursorIonType" : "[M + Na]+", + "nodeBoost" : 3.0, + "numberOfUnconsideredCandidates" : 21, + "lowestConsideredCandidateScore" : 31.877358685357798, + "statistics" : { + "explainedIntensity" : 0.8419395465994967, + "explainedIntensityOfExplainablePeaks" : 0.9419915453264445, + "ratioOfExplainedPeaks" : 0.36363636363636365 + } + }, + "fragments" : [ { + "id" : 0, + "molecularFormula" : "C12H28N2O2P", + "ion" : "[M + Na]+", + "massDeviation" : "3.3811937195723 ppm (9.676267324607579E-4 m/z)", + "recalibratedMassDeviation" : "3.3811937195723 ppm (9.676267324607579E-4 m/z)", + "relativeIntensity" : 0.13297872340425532, + "mz" : 286.179028092823, + "recalibratedMass" : 286.179028092823, + "peaks" : [ { + "intensity" : 135.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 286.177025513197 + }, { + "intensity" : 105.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 286.178204102612 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 286.179738267349 + } ], + "score" : -16.510105826198405, + "scores" : { + "Chemical Prior" : 1.0, + "MS-Isotopes" : 0.0, + "CommonRootLoss" : 0.0, + "Mass Deviation" : -0.3075131037253351, + "CarbohydrogenCompound" : 0.0, + "motif-search" : 0.0, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "BeautificationScorer" : -10.987984624050878, + "ImplicitAdductPeakScore" : 0.0, + "IntrinsicallyChargedScorer" : -4.605170185988091, + "StrangeElementRootScorer" : -1.6094379124341003 + }, + "isotopes" : { + "score" : -7.365420403417175, + "mz" : [ 286.179028092823 ], + "relInt" : [ 1.0 ] + } + }, { + "id" : 1, + "molecularFormula" : "C7H13NO2", + "ion" : "[M + Na]+", + "massDeviation" : "-0.17497076762881145 ppm (-2.905981352796516E-5 m/z)", + "recalibratedMassDeviation" : "-0.17497076762881145 ppm (-2.905981352796516E-5 m/z)", + "relativeIntensity" : 0.03546099290780142, + "mz" : 166.083820296277, + "recalibratedMass" : 166.083820296277, + "peaks" : [ { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 166.083820296277 + }, { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 166.087482254599 + } ], + "score" : 4.060834706548679, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.023276392212697998, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.33916179703723004, + "ClippedPeakIsNoiseScorer" : 1.2449493017241469, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 2, + "molecularFormula" : "C7H10O2", + "ion" : "[M + Na]+", + "massDeviation" : "-4.072942292262228 ppm (-6.070993095192989E-4 m/z)", + "recalibratedMassDeviation" : "-4.072942292262228 ppm (-6.070993095192989E-4 m/z)", + "relativeIntensity" : 0.006648936170212766, + "mz" : 149.056693160781, + "recalibratedMass" : 149.056693160781, + "peaks" : [ { + "intensity" : 15.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 149.056693160781 + } ], + "score" : 3.464532934945635, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.10724299999999998, + "Mass Deviation" : -0.13625158697884068, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5094330683921899, + "ClippedPeakIsNoiseScorer" : 0.4841084535322853, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 3, + "molecularFormula" : "C5H11NO2", + "ion" : "[M + Na]+", + "massDeviation" : "9.93461847232529 ppm (0.0013915379444711107 m/z)", + "recalibratedMassDeviation" : "9.93461847232529 ppm (0.0013915379444711107 m/z)", + "relativeIntensity" : 0.6006205673758865, + "mz" : 140.069590830035, + "recalibratedMass" : 140.069590830035, + "peaks" : [ { + "intensity" : 561.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 140.069590830035 + }, { + "intensity" : 524.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 140.069724401264 + }, { + "intensity" : 270.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 140.072452948764 + } ], + "score" : 6.402992863127164, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.3601836307442136, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5993040916996499, + "ClippedPeakIsNoiseScorer" : 3.663872402171727, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 4, + "molecularFormula" : "C6H13NO", + "ion" : "[M + Na]+", + "massDeviation" : "-3.3806907097233303 ppm (-4.6683440055517167E-4 m/z)", + "recalibratedMassDeviation" : "-3.3806907097233303 ppm (-4.6683440055517167E-4 m/z)", + "relativeIntensity" : 0.01551418439716312, + "mz" : 138.08846790169, + "recalibratedMass" : 138.08846790169, + "peaks" : [ { + "intensity" : 35.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 138.08846790169 + } ], + "score" : 3.868912909334309, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.1020152756535976, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.6191153209831, + "ClippedPeakIsNoiseScorer" : 0.8518128640048066, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 5, + "molecularFormula" : "C5H8O2", + "ion" : "[M + Na]+", + "massDeviation" : "-3.076517427408221 ppm (-3.78538616544688E-4 m/z)", + "recalibratedMassDeviation" : "-3.076517427408221 ppm (-3.78538616544688E-4 m/z)", + "relativeIntensity" : 0.008865248226950355, + "mz" : 123.041271657474, + "recalibratedMass" : 123.041271657474, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 123.041271657474 + } ], + "score" : 3.7941520746311537, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.08132902900476989, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.76958728342526, + "ClippedPeakIsNoiseScorer" : 0.6058938202106641, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 6, + "molecularFormula" : "C5H7NO", + "ion" : "[M + H]+", + "massDeviation" : "-7.763808213061534 ppm (-7.613134355324291E-4 m/z)", + "recalibratedMassDeviation" : "-7.763808213061534 ppm (-7.613134355324291E-4 m/z)", + "relativeIntensity" : 1.0, + "mz" : 98.059278982655, + "recalibratedMass" : 98.059278982655, + "peaks" : [ { + "intensity" : 958.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 98.059278982655 + }, { + "intensity" : 929.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 98.059564237847 + }, { + "intensity" : 369.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 98.060380513671 + } ], + "score" : 14.731016600214899, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.1758735604456145, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.01940721017345, + "ClippedPeakIsNoiseScorer" : 11.387482950487064, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 7, + "molecularFormula" : "C6H10", + "ion" : "[M + Na]+", + "massDeviation" : "-3.2480292487052242 ppm (-3.412611105346741E-4 m/z)", + "recalibratedMassDeviation" : "-3.2480292487052242 ppm (-3.412611105346741E-4 m/z)", + "relativeIntensity" : 0.004432624113475178, + "mz" : 105.06712975898, + "recalibratedMass" : 105.06712975898, + "peaks" : [ { + "intensity" : 10.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 105.06712975898 + } ], + "score" : 3.693314602564298, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.07279373331417366, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.9493287024102, + "ClippedPeakIsNoiseScorer" : 0.31677963346827187, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 8, + "molecularFormula" : "C4H8O", + "ion" : "[M + Na]+", + "massDeviation" : "-17.399712882398013 ppm (-0.001653757134533862 m/z)", + "recalibratedMassDeviation" : "-17.399712882398013 ppm (-0.001653757134533862 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 95.045081818956, + "recalibratedMass" : 95.045081818956, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 95.045081818956 + } ], + "score" : 4.252943985439368, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.4065270000000001, + "Mass Deviation" : -0.4858658702623185, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.0495491818104399, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 9, + "molecularFormula" : "C4H5O", + "ion" : "[M + H]+", + "massDeviation" : "-19.80114297917525 ppm (-0.001386870655537109 m/z)", + "recalibratedMassDeviation" : "-19.80114297917525 ppm (-0.001386870655537109 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 70.039929361435, + "recalibratedMass" : 70.039929361435, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 70.039929361435 + } ], + "score" : 4.399415171244475, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.240653, + "Mass Deviation" : -0.42357220903242193, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.2996007063856498, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 10, + "molecularFormula" : "C3H5N", + "ion" : "[M + H]+", + "massDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "recalibratedMassDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "relativeIntensity" : 0.05540780141843971, + "mz" : 56.049918656323, + "recalibratedMass" : 56.049918656323, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 56.048448506258 + }, { + "intensity" : 45.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 56.049507786248 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 56.049918656323 + } ], + "score" : 5.377171979189174, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.04095127529240153, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.43950081343677, + "ClippedPeakIsNoiseScorer" : 1.4786224410448057, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 11, + "molecularFormula" : "C4H6", + "ion" : "[M + H]+", + "massDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "recalibratedMassDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "relativeIntensity" : 0.011081560283687944, + "mz" : 55.054505732533, + "recalibratedMass" : 55.054505732533, + "peaks" : [ { + "intensity" : 25.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 55.054505732533 + } ], + "score" : 4.593033282124102, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.05881770900781395, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.4494549426746701, + "ClippedPeakIsNoiseScorer" : 0.7023960484572456, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 12, + "molecularFormula" : "C4H4", + "ion" : "[M + H]+", + "massDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "recalibratedMassDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 53.038832825255, + "recalibratedMass" : 53.038832825255, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 53.038832825255 + } ], + "score" : 4.752345345638696, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : 0.0, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.46961167174745, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + } ], + "losses" : [ { + "source" : 0, + "target" : 1, + "molecularFormula" : "C5H15NP", + "score" : -6.371626722486521, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.7535640460848674, + "Loss RDBE" : -1.0986122886681098, + "Mass Deviation" : -0.4499779428360395, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : -1.3862943611198906, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 2, + "molecularFormula" : "H3N", + "score" : 0.023030392061025362, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.11909994533147827, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.28702698696382317, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4175307821975065, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 3, + "molecularFormula" : "C2H2", + "score" : 0.0665407853704082, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7806669298851281, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.9307679038143633, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 4, + "molecularFormula" : "CO", + "score" : 1.161792747883552, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8780805875717457, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.20658508699281183, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4786707051457979, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 5, + "molecularFormula" : "C2H2", + "score" : 0.897667706102828, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7807331247698537, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.09970717796666911, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 6, + "molecularFormula" : "C2H6O", + "score" : -5.084984217961084, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.6908572967856159, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.3839205134302384, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.185674170842775, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : -3.217873372632506, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 7, + "molecularFormula" : "CO2", + "score" : -1.358756472987597, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.098012017797652, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.11763095215123089, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.3507640807928385, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 5, + "target" : 8, + "molecularFormula" : "CO", + "score" : 0.5692439340323783, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8781167754652612, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.7991700887375011, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4786707051457979, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 9, + "molecularFormula" : "CH2N", + "score" : -4.42257406720739, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8791160009376071, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.3159268913733358, + "Free Radical" : -2.2909585508352253, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 10, + "molecularFormula" : "C2H2O", + "score" : -1.1247967985789344, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1055093118884525, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.7382159651225652, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -1.503716687503642, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 11, + "molecularFormula" : "CHNO", + "score" : -2.1857060900958376, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1025458594057662, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.605073865723989, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 11, + "target" : 12, + "molecularFormula" : "H2", + "score" : -0.60128857920489, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -13.382452509315037, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.009196414819379358, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 12.778733802770706, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + } ] +} \ No newline at end of file diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C13H29NO2S_[M+Na]+.json b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C13H29NO2S_[M+Na]+.json new file mode 100644 index 00000000000..c49e0e1f5b5 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C13H29NO2S_[M+Na]+.json @@ -0,0 +1,697 @@ +{ + "molecularFormula" : "C13H29NO2S", + "root" : "C13H29NO2S", + "annotations" : { + "precursorIonType" : "[M + Na]+", + "nodeBoost" : 3.0, + "numberOfUnconsideredCandidates" : 21, + "lowestConsideredCandidateScore" : 31.877358685357798, + "statistics" : { + "explainedIntensity" : 0.8419395465994967, + "explainedIntensityOfExplainablePeaks" : 0.912005457025921, + "ratioOfExplainedPeaks" : 0.36363636363636365 + } + }, + "fragments" : [ { + "id" : 0, + "molecularFormula" : "C13H29NO2S", + "ion" : "[M + Na]+", + "massDeviation" : "-7.312818418257181 ppm (-0.002092775267556135 m/z)", + "recalibratedMassDeviation" : "-7.312818418257181 ppm (-0.002092775267556135 m/z)", + "relativeIntensity" : 0.13297872340425532, + "mz" : 286.179028092823, + "recalibratedMass" : 286.179028092823, + "peaks" : [ { + "intensity" : 135.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 286.177025513197 + }, { + "intensity" : 105.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 286.178204102612 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 286.179738267349 + } ], + "score" : -12.363985886979199, + "scores" : { + "Chemical Prior" : 1.0, + "MS-Isotopes" : 0.0, + "CommonRootLoss" : 0.0, + "Mass Deviation" : -0.766563350494217, + "CarbohydrogenCompound" : 0.0, + "motif-search" : 0.0, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "BeautificationScorer" : -10.987984624050881, + "ImplicitAdductPeakScore" : 0.0, + "IntrinsicallyChargedScorer" : 0.0, + "StrangeElementRootScorer" : -1.6094379124341003 + }, + "isotopes" : { + "score" : -11.623236672154428, + "mz" : [ 286.179028092823 ], + "relInt" : [ 1.0 ] + } + }, { + "id" : 1, + "molecularFormula" : "C7H13NO2", + "ion" : "[M + Na]+", + "massDeviation" : "-0.17497076762881145 ppm (-2.905981352796516E-5 m/z)", + "recalibratedMassDeviation" : "-0.17497076762881145 ppm (-2.905981352796516E-5 m/z)", + "relativeIntensity" : 0.03546099290780142, + "mz" : 166.083820296277, + "recalibratedMass" : 166.083820296277, + "peaks" : [ { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 166.083820296277 + }, { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 166.087482254599 + } ], + "score" : 4.060834706548679, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.023276392212697998, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.33916179703723004, + "ClippedPeakIsNoiseScorer" : 1.2449493017241469, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 2, + "molecularFormula" : "C7H10O2", + "ion" : "[M + Na]+", + "massDeviation" : "-4.072942292262228 ppm (-6.070993095192989E-4 m/z)", + "recalibratedMassDeviation" : "-4.072942292262228 ppm (-6.070993095192989E-4 m/z)", + "relativeIntensity" : 0.006648936170212766, + "mz" : 149.056693160781, + "recalibratedMass" : 149.056693160781, + "peaks" : [ { + "intensity" : 15.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 149.056693160781 + } ], + "score" : 3.464532934945635, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.10724299999999998, + "Mass Deviation" : -0.13625158697884068, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5094330683921899, + "ClippedPeakIsNoiseScorer" : 0.4841084535322853, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 3, + "molecularFormula" : "C5H11NO2", + "ion" : "[M + Na]+", + "massDeviation" : "9.93461847232529 ppm (0.0013915379444711107 m/z)", + "recalibratedMassDeviation" : "9.93461847232529 ppm (0.0013915379444711107 m/z)", + "relativeIntensity" : 0.6006205673758865, + "mz" : 140.069590830035, + "recalibratedMass" : 140.069590830035, + "peaks" : [ { + "intensity" : 561.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 140.069590830035 + }, { + "intensity" : 524.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 140.069724401264 + }, { + "intensity" : 270.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 140.072452948764 + } ], + "score" : 6.402992863127164, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.3601836307442136, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5993040916996499, + "ClippedPeakIsNoiseScorer" : 3.663872402171727, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 4, + "molecularFormula" : "C6H13NO", + "ion" : "[M + Na]+", + "massDeviation" : "-3.3806907097233303 ppm (-4.6683440055517167E-4 m/z)", + "recalibratedMassDeviation" : "-3.3806907097233303 ppm (-4.6683440055517167E-4 m/z)", + "relativeIntensity" : 0.01551418439716312, + "mz" : 138.08846790169, + "recalibratedMass" : 138.08846790169, + "peaks" : [ { + "intensity" : 35.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 138.08846790169 + } ], + "score" : 3.868912909334309, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.1020152756535976, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.6191153209831, + "ClippedPeakIsNoiseScorer" : 0.8518128640048066, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 5, + "molecularFormula" : "C5H8O2", + "ion" : "[M + Na]+", + "massDeviation" : "-3.076517427408221 ppm (-3.78538616544688E-4 m/z)", + "recalibratedMassDeviation" : "-3.076517427408221 ppm (-3.78538616544688E-4 m/z)", + "relativeIntensity" : 0.008865248226950355, + "mz" : 123.041271657474, + "recalibratedMass" : 123.041271657474, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 123.041271657474 + } ], + "score" : 3.7941520746311537, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.08132902900476989, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.76958728342526, + "ClippedPeakIsNoiseScorer" : 0.6058938202106641, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 6, + "molecularFormula" : "C5H7NO", + "ion" : "[M + H]+", + "massDeviation" : "-7.763808213061534 ppm (-7.613134355324291E-4 m/z)", + "recalibratedMassDeviation" : "-7.763808213061534 ppm (-7.613134355324291E-4 m/z)", + "relativeIntensity" : 1.0, + "mz" : 98.059278982655, + "recalibratedMass" : 98.059278982655, + "peaks" : [ { + "intensity" : 958.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 98.059278982655 + }, { + "intensity" : 929.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 98.059564237847 + }, { + "intensity" : 369.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 98.060380513671 + } ], + "score" : 14.731016600214899, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.1758735604456145, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.01940721017345, + "ClippedPeakIsNoiseScorer" : 11.387482950487064, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 7, + "molecularFormula" : "C6H10", + "ion" : "[M + Na]+", + "massDeviation" : "-3.2480292487052242 ppm (-3.412611105346741E-4 m/z)", + "recalibratedMassDeviation" : "-3.2480292487052242 ppm (-3.412611105346741E-4 m/z)", + "relativeIntensity" : 0.004432624113475178, + "mz" : 105.06712975898, + "recalibratedMass" : 105.06712975898, + "peaks" : [ { + "intensity" : 10.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 105.06712975898 + } ], + "score" : 3.693314602564298, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.07279373331417366, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.9493287024102, + "ClippedPeakIsNoiseScorer" : 0.31677963346827187, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 8, + "molecularFormula" : "C4H8O", + "ion" : "[M + Na]+", + "massDeviation" : "-17.399712882398013 ppm (-0.001653757134533862 m/z)", + "recalibratedMassDeviation" : "-17.399712882398013 ppm (-0.001653757134533862 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 95.045081818956, + "recalibratedMass" : 95.045081818956, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 95.045081818956 + } ], + "score" : 4.252943985439368, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.4065270000000001, + "Mass Deviation" : -0.4858658702623185, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.0495491818104399, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 9, + "molecularFormula" : "C4H5O", + "ion" : "[M + H]+", + "massDeviation" : "-19.80114297917525 ppm (-0.001386870655537109 m/z)", + "recalibratedMassDeviation" : "-19.80114297917525 ppm (-0.001386870655537109 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 70.039929361435, + "recalibratedMass" : 70.039929361435, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 70.039929361435 + } ], + "score" : 4.399415171244475, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.240653, + "Mass Deviation" : -0.42357220903242193, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.2996007063856498, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 10, + "molecularFormula" : "C3H5N", + "ion" : "[M + H]+", + "massDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "recalibratedMassDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "relativeIntensity" : 0.05540780141843971, + "mz" : 56.049918656323, + "recalibratedMass" : 56.049918656323, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 56.048448506258 + }, { + "intensity" : 45.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 56.049507786248 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 56.049918656323 + } ], + "score" : 5.377171979189174, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.04095127529240153, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.43950081343677, + "ClippedPeakIsNoiseScorer" : 1.4786224410448057, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 11, + "molecularFormula" : "C4H6", + "ion" : "[M + H]+", + "massDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "recalibratedMassDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "relativeIntensity" : 0.011081560283687944, + "mz" : 55.054505732533, + "recalibratedMass" : 55.054505732533, + "peaks" : [ { + "intensity" : 25.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 55.054505732533 + } ], + "score" : 4.593033282124102, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.05881770900781395, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.4494549426746701, + "ClippedPeakIsNoiseScorer" : 0.7023960484572456, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 12, + "molecularFormula" : "C4H4", + "ion" : "[M + H]+", + "massDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "recalibratedMassDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 53.038832825255, + "recalibratedMass" : 53.038832825255, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 53.038832825255 + } ], + "score" : 4.752345345638696, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : 0.0, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.46961167174745, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + } ], + "losses" : [ { + "source" : 0, + "target" : 1, + "molecularFormula" : "C6H16S", + "score" : -6.862279266283113, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.7535640460848674, + "Loss RDBE" : -2.1972245773362196, + "Mass Deviation" : -1.2283125590844104, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 2, + "molecularFormula" : "H3N", + "score" : 0.023030392061025362, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.11909994533147827, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.28702698696382317, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4175307821975065, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 3, + "molecularFormula" : "C2H2", + "score" : 0.0665407853704082, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7806669298851281, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.9307679038143633, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 4, + "molecularFormula" : "CO", + "score" : 1.161792747883552, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8780805875717457, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.20658508699281183, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4786707051457979, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 5, + "molecularFormula" : "C2H2", + "score" : 0.897667706102828, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7807331247698537, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.09970717796666911, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 6, + "molecularFormula" : "C2H6O", + "score" : -5.084984217961084, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.6908572967856159, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.3839205134302384, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.185674170842775, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : -3.217873372632506, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 7, + "molecularFormula" : "CO2", + "score" : -1.358756472987597, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.098012017797652, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.11763095215123089, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.3507640807928385, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 5, + "target" : 8, + "molecularFormula" : "CO", + "score" : 0.5692439340323783, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8781167754652612, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.7991700887375011, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4786707051457979, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 9, + "molecularFormula" : "CH2N", + "score" : -4.42257406720739, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8791160009376071, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.3159268913733358, + "Free Radical" : -2.2909585508352253, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 10, + "molecularFormula" : "C2H2O", + "score" : -1.1247967985789344, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1055093118884525, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.7382159651225652, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -1.503716687503642, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 11, + "molecularFormula" : "CHNO", + "score" : -2.1857060900958376, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1025458594057662, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.605073865723989, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 11, + "target" : 12, + "molecularFormula" : "H2", + "score" : -0.60128857920489, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -13.382452509315037, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.009196414819379358, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 12.778733802770706, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + } ] +} \ No newline at end of file diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C14H19N7_[M+H]+.json b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C14H19N7_[M+H]+.json new file mode 100644 index 00000000000..7b4b8fe737d --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C14H19N7_[M+H]+.json @@ -0,0 +1,547 @@ +{ + "molecularFormula" : "C14H19N7", + "root" : "C14H19N7", + "annotations" : { + "precursorIonType" : "[M + H]+", + "nodeBoost" : 3.0, + "numberOfUnconsideredCandidates" : 21, + "lowestConsideredCandidateScore" : 31.877358685357798, + "statistics" : { + "explainedIntensity" : 0.8261964735516377, + "explainedIntensityOfExplainablePeaks" : 0.9546446762066458, + "ratioOfExplainedPeaks" : 0.2727272727272727 + } + }, + "fragments" : [ { + "id" : 0, + "molecularFormula" : "C14H19N7", + "ion" : "[M + H]+", + "massDeviation" : "5.4442589411905296 ppm (0.0015580327324755672 m/z)", + "recalibratedMassDeviation" : "5.4442589411905296 ppm (0.0015580327324755672 m/z)", + "relativeIntensity" : 0.13297872340425532, + "mz" : 286.179028092823, + "recalibratedMass" : 286.179028092823, + "peaks" : [ { + "intensity" : 135.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 286.177025513197 + }, { + "intensity" : 105.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 286.178204102612 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 286.179738267349 + } ], + "score" : -8.394160301219388, + "scores" : { + "Chemical Prior" : 1.0, + "MS-Isotopes" : 0.0, + "CommonRootLoss" : 0.0, + "Mass Deviation" : -0.5341822263175484, + "CarbohydrogenCompound" : 0.0, + "motif-search" : 0.0, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "BeautificationScorer" : -8.85997807490184, + "ImplicitAdductPeakScore" : 0.0, + "IntrinsicallyChargedScorer" : 0.0, + "StrangeElementRootScorer" : 0.0 + }, + "isotopes" : { + "score" : -9.512962604764944, + "mz" : [ 286.179028092823 ], + "relInt" : [ 1.0 ] + } + }, { + "id" : 1, + "molecularFormula" : "C5H7N7", + "ion" : "[M + H]+", + "massDeviation" : "1.508998203620972 ppm (2.506201864775903E-4 m/z)", + "recalibratedMassDeviation" : "1.508998203620972 ppm (2.506201864775903E-4 m/z)", + "relativeIntensity" : 0.03546099290780142, + "mz" : 166.083820296277, + "recalibratedMass" : 166.083820296277, + "peaks" : [ { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 166.083820296277 + }, { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 166.087482254599 + } ], + "score" : 4.024709815972054, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.05940128278932259, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.33916179703723004, + "ClippedPeakIsNoiseScorer" : 1.2449493017241469, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 2, + "molecularFormula" : "C5H4N6", + "ion" : "[M + H]+", + "massDeviation" : "-2.1966092402209028 ppm (-3.2741930951374343E-4 m/z)", + "recalibratedMassDeviation" : "-2.1966092402209028 ppm (-3.2741930951374343E-4 m/z)", + "relativeIntensity" : 0.006648936170212766, + "mz" : 149.056693160781, + "recalibratedMass" : 149.056693160781, + "peaks" : [ { + "intensity" : 15.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 149.056693160781 + } ], + "score" : 3.4206409737759014, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.0729005481485745, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5094330683921899, + "ClippedPeakIsNoiseScorer" : 0.4841084535322853, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 3, + "molecularFormula" : "C3H5N7", + "ion" : "[M + H]+", + "massDeviation" : "11.931340232903061 ppm (0.0016712179444766662 m/z)", + "recalibratedMassDeviation" : "11.931340232903061 ppm (0.0016712179444766662 m/z)", + "relativeIntensity" : 0.6006205673758865, + "mz" : 140.069590830035, + "recalibratedMass" : 140.069590830035, + "peaks" : [ { + "intensity" : 561.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 140.069590830035 + }, { + "intensity" : 524.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 140.069724401264 + }, { + "intensity" : 270.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 140.072452948764 + } ], + "score" : 6.322510753133749, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.4406657407376281, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5993040916996499, + "ClippedPeakIsNoiseScorer" : 3.663872402171727, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 4, + "molecularFormula" : "C3H2N6", + "ion" : "[M + H]+", + "massDeviation" : "-0.803458995566448 ppm (-9.885861653913253E-5 m/z)", + "recalibratedMassDeviation" : "-0.803458995566448 ppm (-9.885861653913253E-5 m/z)", + "relativeIntensity" : 0.008865248226950355, + "mz" : 123.041271657474, + "recalibratedMass" : 123.041271657474, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 123.041271657474 + } ], + "score" : 3.837729501497298, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.03775160213862572, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.76958728342526, + "ClippedPeakIsNoiseScorer" : 0.6058938202106641, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 5, + "molecularFormula" : "C3H5N4", + "ion" : "[M + H]+", + "massDeviation" : "5.928766461543392 ppm (5.813705644754918E-4 m/z)", + "recalibratedMassDeviation" : "5.928766461543392 ppm (5.813705644754918E-4 m/z)", + "relativeIntensity" : 1.0, + "mz" : 98.059278982655, + "recalibratedMass" : 98.059278982655, + "peaks" : [ { + "intensity" : 958.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 98.059278982655 + }, { + "intensity" : 929.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 98.059564237847 + }, { + "intensity" : 369.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 98.060380513671 + } ], + "score" : 14.813334136453095, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.09355602420741703, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.01940721017345, + "ClippedPeakIsNoiseScorer" : 11.387482950487064, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 6, + "molecularFormula" : "C2H3N3", + "ion" : "[M + H]+", + "massDeviation" : "-0.6308780710095621 ppm (-4.41866555291881E-5 m/z)", + "recalibratedMassDeviation" : "-0.6308780710095621 ppm (-4.41866555291881E-5 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 70.039929361435, + "recalibratedMass" : 70.039929361435, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 70.039929361435 + } ], + "score" : 4.525708563465001, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.0566258168118962, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.2996007063856498, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 7, + "molecularFormula" : "C3H5N", + "ion" : "[M + H]+", + "massDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "recalibratedMassDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "relativeIntensity" : 0.05540780141843971, + "mz" : 56.049918656323, + "recalibratedMass" : 56.049918656323, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 56.048448506258 + }, { + "intensity" : 45.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 56.049507786248 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 56.049918656323 + } ], + "score" : 5.38076224070056, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.03736101378101638, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.43950081343677, + "ClippedPeakIsNoiseScorer" : 1.4786224410448057, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 8, + "molecularFormula" : "C4H6", + "ion" : "[M + H]+", + "massDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "recalibratedMassDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "relativeIntensity" : 0.011081560283687944, + "mz" : 55.054505732533, + "recalibratedMass" : 55.054505732533, + "peaks" : [ { + "intensity" : 25.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 55.054505732533 + } ], + "score" : 4.649028695348245, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.002822295783670884, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.4494549426746701, + "ClippedPeakIsNoiseScorer" : 0.7023960484572456, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 9, + "molecularFormula" : "C4H4", + "ion" : "[M + H]+", + "massDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "recalibratedMassDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 53.038832825255, + "recalibratedMass" : 53.038832825255, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 53.038832825255 + } ], + "score" : 4.749523049855026, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.002822295783670884, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.46961167174745, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + } ], + "losses" : [ { + "source" : 0, + "target" : 1, + "molecularFormula" : "C9H12", + "score" : -3.842403784005459, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.237454809655712, + "LossSizeScorer" : -0.7535640460848674, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.6431164637986884, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 2, + "molecularFormula" : "H3N", + "score" : 0.023030392061025362, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.11909994533147827, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.28702698696382317, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4175307821975065, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 3, + "molecularFormula" : "C2H2", + "score" : 0.0665407853704082, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7806669298851281, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.9307679038143633, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 4, + "molecularFormula" : "C2H2", + "score" : 0.897667706102828, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7807331247698537, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.09970717796666911, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 5, + "molecularFormula" : "C2H2N3", + "score" : -4.4448958742214275, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.6908572967856159, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.1499899942353829, + "Free Radical" : -2.2909585508352253, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 6, + "molecularFormula" : "C3HN3", + "score" : -2.3987777545815, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.4105587597292697, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.1261584305331548, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 7, + "molecularFormula" : "C2H2N6", + "score" : -3.221796910259109, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.4638907750652983, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.0747280514161958, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 8, + "molecularFormula" : "CHN7", + "score" : -3.1860869321766865, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.49257490855964203, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.010333939839429611, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 8, + "target" : 9, + "molecularFormula" : "H2", + "score" : -0.60128857920489, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -13.382452509315037, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.009196414819379358, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 12.778733802770706, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + } ] +} \ No newline at end of file diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C14H23N4O_[M+Na]+.json b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C14H23N4O_[M+Na]+.json new file mode 100644 index 00000000000..4334c1c1aeb --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C14H23N4O_[M+Na]+.json @@ -0,0 +1,737 @@ +{ + "molecularFormula" : "C14H23N4O", + "root" : "C14H23N4O", + "annotations" : { + "precursorIonType" : "[M + Na]+", + "nodeBoost" : 3.0, + "numberOfUnconsideredCandidates" : 21, + "lowestConsideredCandidateScore" : 31.877358685357798, + "statistics" : { + "explainedIntensity" : 0.5726280436607896, + "explainedIntensityOfExplainablePeaks" : 0.6452223273415328, + "ratioOfExplainedPeaks" : 0.3939393939393939 + } + }, + "fragments" : [ { + "id" : 0, + "molecularFormula" : "C14H23N4O", + "ion" : "[M + Na]+", + "massDeviation" : "9.15873098719097 ppm (0.0026210367324779327 m/z)", + "recalibratedMassDeviation" : "9.15873098719097 ppm (0.0026210367324779327 m/z)", + "relativeIntensity" : 0.13297872340425532, + "mz" : 286.179028092823, + "recalibratedMass" : 286.179028092823, + "peaks" : [ { + "intensity" : 135.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 286.177025513197 + }, { + "intensity" : 105.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 286.178204102612 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 286.179738267349 + } ], + "score" : -9.77089494601693, + "scores" : { + "Chemical Prior" : 1.0, + "MS-Isotopes" : 0.0, + "CommonRootLoss" : 0.0, + "Mass Deviation" : -1.0223919165825974, + "CarbohydrogenCompound" : 0.0, + "motif-search" : 0.0, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "BeautificationScorer" : -5.143332843446242, + "ImplicitAdductPeakScore" : 0.0, + "IntrinsicallyChargedScorer" : -4.605170185988091, + "StrangeElementRootScorer" : 0.0 + }, + "isotopes" : { + "score" : -9.483431698452994, + "mz" : [ 286.179028092823 ], + "relInt" : [ 1.0 ] + } + }, { + "id" : 1, + "molecularFormula" : "C12H17", + "ion" : "[M + Na]+", + "massDeviation" : "6.113952630975533 ppm (0.0011257215744535642 m/z)", + "recalibratedMassDeviation" : "6.113952630975533 ppm (0.0011257215744535642 m/z)", + "relativeIntensity" : 0.00576241134751773, + "mz" : 184.123371965665, + "recalibratedMass" : 184.123371965665, + "peaks" : [ { + "intensity" : 13.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 184.123371965665 + } ], + "score" : 3.3851765422841007, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.33936900000000003, + "Mass Deviation" : -0.03747498719726003, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.15876628034335005, + "ClippedPeakIsNoiseScorer" : 0.4245162491380101, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 2, + "molecularFormula" : "C5H11N4O", + "ion" : "[M + Na]+", + "massDeviation" : "7.909404926600201 ppm (0.0013136241864799558 m/z)", + "recalibratedMassDeviation" : "7.909404926600201 ppm (0.0013136241864799558 m/z)", + "relativeIntensity" : 0.03546099290780142, + "mz" : 166.083820296277, + "recalibratedMass" : 166.083820296277, + "peaks" : [ { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 166.083820296277 + }, { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 166.087482254599 + } ], + "score" : 4.0530231422721394, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.031087956489237897, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.33916179703723004, + "ClippedPeakIsNoiseScorer" : 1.2449493017241469, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 3, + "molecularFormula" : "C5H8N3O", + "ion" : "[M + Na]+", + "massDeviation" : "4.934932305892354 ppm (7.355846904886221E-4 m/z)", + "recalibratedMassDeviation" : "4.934932305892354 ppm (7.355846904886221E-4 m/z)", + "relativeIntensity" : 0.006648936170212766, + "mz" : 149.056693160781, + "recalibratedMass" : 149.056693160781, + "peaks" : [ { + "intensity" : 15.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 149.056693160781 + } ], + "score" : 3.432225996341686, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.06131552558278979, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5094330683921899, + "ClippedPeakIsNoiseScorer" : 0.4841084535322853, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 4, + "molecularFormula" : "C4H11N4", + "ion" : "[M + Na]+", + "massDeviation" : "6.342670121275422 ppm (8.758495994527493E-4 m/z)", + "recalibratedMassDeviation" : "6.342670121275422 ppm (8.758495994527493E-4 m/z)", + "relativeIntensity" : 0.01551418439716312, + "mz" : 138.08846790169, + "recalibratedMass" : 138.08846790169, + "peaks" : [ { + "intensity" : 35.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 138.08846790169 + } ], + "score" : 3.958382163759269, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.012546021228637403, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.6191153209831, + "ClippedPeakIsNoiseScorer" : 0.8518128640048066, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 5, + "molecularFormula" : "C8H14", + "ion" : "[M + Na]+", + "massDeviation" : "11.058818109074455 ppm (0.0014719313784894439 m/z)", + "recalibratedMassDeviation" : "11.058818109074455 ppm (0.0014719313784894439 m/z)", + "relativeIntensity" : 0.026152482269503546, + "mz" : 133.100243079469, + "recalibratedMass" : 133.100243079469, + "peaks" : [ { + "intensity" : 59.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 133.100243079469 + } ], + "score" : 4.192191100194527, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.12800475422185667, + "CarbohydrogenFragment" : 0.05612003376703556, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.6689975692053098, + "ClippedPeakIsNoiseScorer" : 1.0950782514440376, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 6, + "molecularFormula" : "C3H6N3O", + "ion" : "[M + Na]+", + "massDeviation" : "7.835951063211131 ppm (9.64145383463233E-4 m/z)", + "recalibratedMassDeviation" : "7.835951063211131 ppm (9.64145383463233E-4 m/z)", + "relativeIntensity" : 0.008865248226950355, + "mz" : 123.041271657474, + "recalibratedMass" : 123.041271657474, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 123.041271657474 + } ], + "score" : 3.8453373364434142, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.030143767192509524, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.76958728342526, + "ClippedPeakIsNoiseScorer" : 0.6058938202106641, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 7, + "molecularFormula" : "C5H7NO", + "ion" : "[M + H]+", + "massDeviation" : "-7.763808213061534 ppm (-7.613134355324291E-4 m/z)", + "recalibratedMassDeviation" : "-7.763808213061534 ppm (-7.613134355324291E-4 m/z)", + "relativeIntensity" : 1.0, + "mz" : 98.059278982655, + "recalibratedMass" : 98.059278982655, + "peaks" : [ { + "intensity" : 958.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 98.059278982655 + }, { + "intensity" : 929.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 98.059564237847 + }, { + "intensity" : 369.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 98.060380513671 + } ], + "score" : 14.550917755137094, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.35597240552341813, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.01940721017345, + "ClippedPeakIsNoiseScorer" : 11.387482950487064, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 8, + "molecularFormula" : "C6H10", + "ion" : "[M + Na]+", + "massDeviation" : "-3.2480292487052242 ppm (-3.412611105346741E-4 m/z)", + "recalibratedMassDeviation" : "-3.2480292487052242 ppm (-3.412611105346741E-4 m/z)", + "relativeIntensity" : 0.004432624113475178, + "mz" : 105.06712975898, + "recalibratedMass" : 105.06712975898, + "peaks" : [ { + "intensity" : 10.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 105.06712975898 + } ], + "score" : 3.520566546360465, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.24554178951800673, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.9493287024102, + "ClippedPeakIsNoiseScorer" : 0.31677963346827187, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 9, + "molecularFormula" : "C2H6N3", + "ion" : "[M + Na]+", + "massDeviation" : "-3.272900907515561 ppm (-3.1107313454015184E-4 m/z)", + "recalibratedMassDeviation" : "-3.272900907515561 ppm (-3.1107313454015184E-4 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 95.045081818956, + "recalibratedMass" : 95.045081818956, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 95.045081818956 + } ], + "score" : 4.117859455353925, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.21442340034776158, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.0495491818104399, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 10, + "molecularFormula" : "C3H5N", + "ion" : "[M + H]+", + "massDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "recalibratedMassDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "relativeIntensity" : 0.05540780141843971, + "mz" : 56.049918656323, + "recalibratedMass" : 56.049918656323, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 56.048448506258 + }, { + "intensity" : 45.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 56.049507786248 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 56.049918656323 + } ], + "score" : 5.384614177419786, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.03350907706178935, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.43950081343677, + "ClippedPeakIsNoiseScorer" : 1.4786224410448057, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 11, + "molecularFormula" : "C4H6", + "ion" : "[M + H]+", + "massDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "recalibratedMassDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "relativeIntensity" : 0.011081560283687944, + "mz" : 55.054505732533, + "recalibratedMass" : 55.054505732533, + "peaks" : [ { + "intensity" : 25.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 55.054505732533 + } ], + "score" : 4.650515478795383, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.0013355123365328327, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.4494549426746701, + "ClippedPeakIsNoiseScorer" : 0.7023960484572456, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 12, + "molecularFormula" : "C4H4", + "ion" : "[M + H]+", + "massDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "recalibratedMassDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 53.038832825255, + "recalibratedMass" : 53.038832825255, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 53.038832825255 + } ], + "score" : 4.752345345638696, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : 0.0, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.46961167174745, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 13, + "molecularFormula" : "C2H7O", + "ion" : "[M + Na]+", + "massDeviation" : "14.546236036325046 ppm (0.0010188173444589665 m/z)", + "recalibratedMassDeviation" : "14.546236036325046 ppm (0.0010188173444589665 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 70.039929361435, + "recalibratedMass" : 70.039929361435, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 70.039929361435 + } ], + "score" : 4.441264138357428, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.14107024191946865, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.2996007063856498, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + } ], + "losses" : [ { + "source" : 0, + "target" : 1, + "molecularFormula" : "C2H6N4O", + "score" : -3.8903957896828683, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.2342989254684822, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.9729187804367714, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 0, + "target" : 2, + "molecularFormula" : "C9H12", + "score" : -3.842403784005459, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.237454809655712, + "LossSizeScorer" : -0.7535640460848674, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.6431164637986884, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 3, + "molecularFormula" : "H3N", + "score" : 0.023030392061025362, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.11909994533147827, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.28702698696382317, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4175307821975065, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 4, + "molecularFormula" : "CO", + "score" : 1.161792747883552, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8780805875717457, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.20658508699281183, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4786707051457979, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 5, + "molecularFormula" : "C4H3", + "score" : -4.115946032837988, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.0277310149700378, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.15791387103636575, + "Free Radical" : -2.2909585508352253, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 3, + "target" : 6, + "molecularFormula" : "C2H2", + "score" : 0.897667706102828, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7807331247698537, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.09970717796666911, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 3, + "target" : 7, + "molecularFormula" : "HN2", + "score" : -8.680800826449678, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.0280891177306142, + "Loss RDBE" : 0.0, + "Mass Deviation" : -1.003393889482032, + "Free Radical" : -2.2909585508352253, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : -3.7197328779266003, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 5, + "target" : 8, + "molecularFormula" : "C2H4", + "score" : -1.5264736467732203, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8797084067983363, + "Loss RDBE" : 0.0, + "Mass Deviation" : -1.3310453204009591, + "Free Radical" : -0.09373397349900595, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -0.9814027596715915, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 9, + "molecularFormula" : "CO", + "score" : 0.5692439340199466, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8781167754652612, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.7991700887499328, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4786707051457979, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 7, + "target" : 10, + "molecularFormula" : "C2H2O", + "score" : -1.1247967985789344, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1055093118884525, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.7382159651225652, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -1.503716687503642, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 7, + "target" : 11, + "molecularFormula" : "CHNO", + "score" : -2.1857060900958376, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1025458594057662, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.605073865723989, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 11, + "target" : 12, + "molecularFormula" : "H2", + "score" : -0.60128857920489, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -13.382452509315037, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.009196414819379358, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 12.778733802770706, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 3, + "target" : 13, + "molecularFormula" : "C3HN3", + "score" : -2.3987777545744904, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.4105587597292697, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.12615843052614523, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + } ] +} \ No newline at end of file diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C16H21N4O_[M+H]+.json b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C16H21N4O_[M+H]+.json new file mode 100644 index 00000000000..2d4eb6148c4 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C16H21N4O_[M+H]+.json @@ -0,0 +1,647 @@ +{ + "molecularFormula" : "C16H21N4O", + "root" : "C16H21N4O", + "annotations" : { + "precursorIonType" : "[M + H]+", + "nodeBoost" : 3.0, + "numberOfUnconsideredCandidates" : 21, + "lowestConsideredCandidateScore" : 31.877358685357798, + "statistics" : { + "explainedIntensity" : 0.840890008396306, + "explainedIntensityOfExplainablePeaks" : 0.9634439634439634, + "ratioOfExplainedPeaks" : 0.3333333333333333 + } + }, + "fragments" : [ { + "id" : 0, + "molecularFormula" : "C16H21N4O", + "ion" : "[M + H]+", + "massDeviation" : "0.7524965540025428 ppm (2.153487324676462E-4 m/z)", + "recalibratedMassDeviation" : "0.7524965540025428 ppm (2.153487324676462E-4 m/z)", + "relativeIntensity" : 0.13297872340425532, + "mz" : 286.179028092823, + "recalibratedMass" : 286.179028092823, + "peaks" : [ { + "intensity" : 135.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 286.177025513197 + }, { + "intensity" : 105.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 286.178204102612 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 286.179738267349 + } ], + "score" : -14.667028486641037, + "scores" : { + "Chemical Prior" : 1.0, + "MS-Isotopes" : 0.0, + "CommonRootLoss" : 0.0, + "Mass Deviation" : -0.06185830065294675, + "CarbohydrogenCompound" : 0.0, + "motif-search" : 0.0, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "BeautificationScorer" : -11.0, + "ImplicitAdductPeakScore" : 0.0, + "IntrinsicallyChargedScorer" : -4.605170185988091, + "StrangeElementRootScorer" : 0.0 + }, + "isotopes" : { + "score" : -9.598720250482668, + "mz" : [ 286.179028092823 ], + "relInt" : [ 1.0 ] + } + }, { + "id" : 1, + "molecularFormula" : "C7H9N4O", + "ion" : "[M + H]+", + "massDeviation" : "-6.575377490608041 ppm (-0.0010920638135303307 m/z)", + "recalibratedMassDeviation" : "-6.575377490608041 ppm (-0.0010920638135303307 m/z)", + "relativeIntensity" : 0.03546099290780142, + "mz" : 166.083820296277, + "recalibratedMass" : 166.083820296277, + "peaks" : [ { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 166.083820296277 + }, { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 166.087482254599 + } ], + "score" : 3.8160769925131928, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.26803410624818425, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.33916179703723004, + "ClippedPeakIsNoiseScorer" : 1.2449493017241469, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 2, + "molecularFormula" : "C7H6N3O", + "ion" : "[M + H]+", + "massDeviation" : "-11.204483838375484 ppm (-0.0016701033095216644 m/z)", + "recalibratedMassDeviation" : "-11.204483838375484 ppm (-0.0016701033095216644 m/z)", + "relativeIntensity" : 0.006648936170212766, + "mz" : 149.056693160781, + "recalibratedMass" : 149.056693160781, + "peaks" : [ { + "intensity" : 15.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 149.056693160781 + } ], + "score" : 3.039985808092882, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.4535557138315937, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5094330683921899, + "ClippedPeakIsNoiseScorer" : 0.4841084535322853, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 3, + "molecularFormula" : "C5H7N4O", + "ion" : "[M + H]+", + "massDeviation" : "2.3455051344256366 ppm (3.285339444687452E-4 m/z)", + "recalibratedMassDeviation" : "2.3455051344256366 ppm (3.285339444687452E-4 m/z)", + "relativeIntensity" : 0.6006205673758865, + "mz" : 140.069590830035, + "recalibratedMass" : 140.069590830035, + "peaks" : [ { + "intensity" : 561.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 140.069590830035 + }, { + "intensity" : 524.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 140.069724401264 + }, { + "intensity" : 270.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 140.072452948764 + } ], + "score" : 6.693270086004846, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.06990640786653102, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5993040916996499, + "ClippedPeakIsNoiseScorer" : 3.663872402171727, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 4, + "molecularFormula" : "C6H9N4", + "ion" : "[M + H]+", + "massDeviation" : "-11.07868328018717 ppm (-0.0015298384005291155 m/z)", + "recalibratedMassDeviation" : "-11.07868328018717 ppm (-0.0015298384005291155 m/z)", + "relativeIntensity" : 0.01551418439716312, + "mz" : 138.08846790169, + "recalibratedMass" : 138.08846790169, + "peaks" : [ { + "intensity" : 35.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 138.08846790169 + } ], + "score" : 3.5653226746126956, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.4056055103752111, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.6191153209831, + "ClippedPeakIsNoiseScorer" : 0.8518128640048066, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 5, + "molecularFormula" : "C5H4N3O", + "ion" : "[M + H]+", + "massDeviation" : "-11.715927486070303 ppm (-0.0014415426165328427 m/z)", + "recalibratedMassDeviation" : "-11.715927486070303 ppm (-0.0014415426165328427 m/z)", + "relativeIntensity" : 0.008865248226950355, + "mz" : 123.041271657474, + "recalibratedMass" : 123.041271657474, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 123.041271657474 + } ], + "score" : 3.4990858320912257, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.3763952715446977, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.76958728342526, + "ClippedPeakIsNoiseScorer" : 0.6058938202106641, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 6, + "molecularFormula" : "C5H7NO", + "ion" : "[M + H]+", + "massDeviation" : "-7.763808213061534 ppm (-7.613134355324291E-4 m/z)", + "recalibratedMassDeviation" : "-7.763808213061534 ppm (-7.613134355324291E-4 m/z)", + "relativeIntensity" : 1.0, + "mz" : 98.059278982655, + "recalibratedMass" : 98.059278982655, + "peaks" : [ { + "intensity" : 958.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 98.059278982655 + }, { + "intensity" : 929.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 98.059564237847 + }, { + "intensity" : 369.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 98.060380513671 + } ], + "score" : 14.731016600214899, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.1758735604456145, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.01940721017345, + "ClippedPeakIsNoiseScorer" : 11.387482950487064, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 7, + "molecularFormula" : "C2H2N3O", + "ion" : "[M + H]+", + "massDeviation" : "15.85434580447312 ppm (0.0013480698344636721 m/z)", + "recalibratedMassDeviation" : "15.85434580447312 ppm (0.0013480698344636721 m/z)", + "relativeIntensity" : 0.01551418439716312, + "mz" : 85.028411205925, + "recalibratedMass" : 85.028411205925, + "peaks" : [ { + "intensity" : 35.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 85.028411205925 + } ], + "score" : 4.155244192966554, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.3462845589790036, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.14971588794075, + "ClippedPeakIsNoiseScorer" : 0.8518128640048066, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 8, + "molecularFormula" : "C4H5O", + "ion" : "[M + H]+", + "massDeviation" : "-19.80114297917525 ppm (-0.001386870655537109 m/z)", + "recalibratedMassDeviation" : "-19.80114297917525 ppm (-0.001386870655537109 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 70.039929361435, + "recalibratedMass" : 70.039929361435, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 70.039929361435 + } ], + "score" : 4.464304735749953, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.240653, + "Mass Deviation" : -0.3586826445269436, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.2996007063856498, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 9, + "molecularFormula" : "C3H5N", + "ion" : "[M + H]+", + "massDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "recalibratedMassDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "relativeIntensity" : 0.05540780141843971, + "mz" : 56.049918656323, + "recalibratedMass" : 56.049918656323, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 56.048448506258 + }, { + "intensity" : 45.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 56.049507786248 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 56.049918656323 + } ], + "score" : 5.321746919219734, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.09637633526184135, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.43950081343677, + "ClippedPeakIsNoiseScorer" : 1.4786224410448057, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 10, + "molecularFormula" : "C4H6", + "ion" : "[M + H]+", + "massDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "recalibratedMassDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "relativeIntensity" : 0.011081560283687944, + "mz" : 55.054505732533, + "recalibratedMass" : 55.054505732533, + "peaks" : [ { + "intensity" : 25.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 55.054505732533 + } ], + "score" : 4.593033282124102, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.05881770900781395, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.4494549426746701, + "ClippedPeakIsNoiseScorer" : 0.7023960484572456, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 11, + "molecularFormula" : "C4H4", + "ion" : "[M + H]+", + "massDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "recalibratedMassDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 53.038832825255, + "recalibratedMass" : 53.038832825255, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 53.038832825255 + } ], + "score" : 4.698581673364512, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.05376367227418448, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.46961167174745, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + } ], + "losses" : [ { + "source" : 0, + "target" : 1, + "molecularFormula" : "C9H12", + "score" : -3.842403784005459, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.237454809655712, + "LossSizeScorer" : -0.7535640460848674, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.6431164637986884, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 2, + "molecularFormula" : "H3N", + "score" : 0.023030392061025362, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.11909994533147827, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.28702698696382317, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4175307821975065, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 3, + "molecularFormula" : "C2H2", + "score" : 0.0665407853704082, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7806669298851281, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.9307679038143633, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 4, + "molecularFormula" : "CO", + "score" : 1.1617927478991255, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8780805875717457, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.20658508697723843, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4786707051457979, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 5, + "molecularFormula" : "C2H2", + "score" : 0.8976677060960859, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7807331247698537, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.09970717797341114, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 6, + "molecularFormula" : "C2H2N3", + "score" : -4.4448958742214275, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.6908572967856159, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.1499899942353829, + "Free Radical" : -2.2909585508352253, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 3, + "target" : 7, + "molecularFormula" : "C3H5N", + "score" : -1.6790392830886869, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.9646274134986461, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.5889111584221933, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.06638208032396, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 8, + "molecularFormula" : "C3HN3", + "score" : -2.3987777545815, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.4105587597292697, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.1261584305331548, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 9, + "molecularFormula" : "C2H2O", + "score" : -1.1247967985789344, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1055093118884525, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.7382159651225652, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -1.503716687503642, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 10, + "molecularFormula" : "CHNO", + "score" : -2.1857060900958376, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1025458594057662, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.605073865723989, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 10, + "target" : 11, + "molecularFormula" : "H2", + "score" : -0.60128857920489, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -13.382452509315037, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.009196414819379358, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 12.778733802770706, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + } ] +} \ No newline at end of file diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C16H25NO2_[M+Na]+.json b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C16H25NO2_[M+Na]+.json new file mode 100644 index 00000000000..05eef0433f7 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C16H25NO2_[M+Na]+.json @@ -0,0 +1,697 @@ +{ + "molecularFormula" : "C16H25NO2", + "root" : "C16H25NO2", + "annotations" : { + "precursorIonType" : "[M + Na]+", + "nodeBoost" : 3.0, + "numberOfUnconsideredCandidates" : 21, + "lowestConsideredCandidateScore" : 31.877358685357798, + "statistics" : { + "explainedIntensity" : 0.8419395465994967, + "explainedIntensityOfExplainablePeaks" : 0.9419915453264445, + "ratioOfExplainedPeaks" : 0.36363636363636365 + } + }, + "fragments" : [ { + "id" : 0, + "molecularFormula" : "C16H25NO2", + "ion" : "[M + Na]+", + "massDeviation" : "4.466968600002982 ppm (0.0012783527324700117 m/z)", + "recalibratedMassDeviation" : "4.466968600002982 ppm (0.0012783527324700117 m/z)", + "relativeIntensity" : 0.13297872340425532, + "mz" : 286.179028092823, + "recalibratedMass" : 286.179028092823, + "peaks" : [ { + "intensity" : 135.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 286.177025513197 + }, { + "intensity" : 105.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 286.178204102612 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 286.179738267349 + } ], + "score" : -10.41096124363026, + "scores" : { + "Chemical Prior" : 1.0, + "MS-Isotopes" : 0.0, + "CommonRootLoss" : 0.0, + "Mass Deviation" : -0.4229766195793851, + "CarbohydrogenCompound" : 0.0, + "motif-search" : 0.0, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "BeautificationScorer" : -10.987984624050874, + "ImplicitAdductPeakScore" : 0.0, + "IntrinsicallyChargedScorer" : 0.0, + "StrangeElementRootScorer" : 0.0 + }, + "isotopes" : { + "score" : -9.442097972832672, + "mz" : [ 286.179028092823 ], + "relInt" : [ 1.0 ] + } + }, { + "id" : 1, + "molecularFormula" : "C7H13NO2", + "ion" : "[M + Na]+", + "massDeviation" : "-0.17497076762881145 ppm (-2.905981352796516E-5 m/z)", + "recalibratedMassDeviation" : "-0.17497076762881145 ppm (-2.905981352796516E-5 m/z)", + "relativeIntensity" : 0.03546099290780142, + "mz" : 166.083820296277, + "recalibratedMass" : 166.083820296277, + "peaks" : [ { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 166.083820296277 + }, { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 166.087482254599 + } ], + "score" : 4.060834706548679, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.023276392212697998, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.33916179703723004, + "ClippedPeakIsNoiseScorer" : 1.2449493017241469, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 2, + "molecularFormula" : "C7H10O2", + "ion" : "[M + Na]+", + "massDeviation" : "-4.072942292262228 ppm (-6.070993095192989E-4 m/z)", + "recalibratedMassDeviation" : "-4.072942292262228 ppm (-6.070993095192989E-4 m/z)", + "relativeIntensity" : 0.006648936170212766, + "mz" : 149.056693160781, + "recalibratedMass" : 149.056693160781, + "peaks" : [ { + "intensity" : 15.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 149.056693160781 + } ], + "score" : 3.464532934945635, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.10724299999999998, + "Mass Deviation" : -0.13625158697884068, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5094330683921899, + "ClippedPeakIsNoiseScorer" : 0.4841084535322853, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 3, + "molecularFormula" : "C5H11NO2", + "ion" : "[M + Na]+", + "massDeviation" : "9.93461847232529 ppm (0.0013915379444711107 m/z)", + "recalibratedMassDeviation" : "9.93461847232529 ppm (0.0013915379444711107 m/z)", + "relativeIntensity" : 0.6006205673758865, + "mz" : 140.069590830035, + "recalibratedMass" : 140.069590830035, + "peaks" : [ { + "intensity" : 561.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 140.069590830035 + }, { + "intensity" : 524.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 140.069724401264 + }, { + "intensity" : 270.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 140.072452948764 + } ], + "score" : 6.402992863127164, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.3601836307442136, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5993040916996499, + "ClippedPeakIsNoiseScorer" : 3.663872402171727, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 4, + "molecularFormula" : "C6H13NO", + "ion" : "[M + Na]+", + "massDeviation" : "-3.3806907097233303 ppm (-4.6683440055517167E-4 m/z)", + "recalibratedMassDeviation" : "-3.3806907097233303 ppm (-4.6683440055517167E-4 m/z)", + "relativeIntensity" : 0.01551418439716312, + "mz" : 138.08846790169, + "recalibratedMass" : 138.08846790169, + "peaks" : [ { + "intensity" : 35.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 138.08846790169 + } ], + "score" : 3.868912909334309, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.1020152756535976, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.6191153209831, + "ClippedPeakIsNoiseScorer" : 0.8518128640048066, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 5, + "molecularFormula" : "C5H8O2", + "ion" : "[M + Na]+", + "massDeviation" : "-3.076517427408221 ppm (-3.78538616544688E-4 m/z)", + "recalibratedMassDeviation" : "-3.076517427408221 ppm (-3.78538616544688E-4 m/z)", + "relativeIntensity" : 0.008865248226950355, + "mz" : 123.041271657474, + "recalibratedMass" : 123.041271657474, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 123.041271657474 + } ], + "score" : 3.7941520746311537, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.08132902900476989, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.76958728342526, + "ClippedPeakIsNoiseScorer" : 0.6058938202106641, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 6, + "molecularFormula" : "C5H7NO", + "ion" : "[M + H]+", + "massDeviation" : "-7.763808213061534 ppm (-7.613134355324291E-4 m/z)", + "recalibratedMassDeviation" : "-7.763808213061534 ppm (-7.613134355324291E-4 m/z)", + "relativeIntensity" : 1.0, + "mz" : 98.059278982655, + "recalibratedMass" : 98.059278982655, + "peaks" : [ { + "intensity" : 958.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 98.059278982655 + }, { + "intensity" : 929.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 98.059564237847 + }, { + "intensity" : 369.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 98.060380513671 + } ], + "score" : 14.731016600214899, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.1758735604456145, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.01940721017345, + "ClippedPeakIsNoiseScorer" : 11.387482950487064, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 7, + "molecularFormula" : "C6H10", + "ion" : "[M + Na]+", + "massDeviation" : "-3.2480292487052242 ppm (-3.412611105346741E-4 m/z)", + "recalibratedMassDeviation" : "-3.2480292487052242 ppm (-3.412611105346741E-4 m/z)", + "relativeIntensity" : 0.004432624113475178, + "mz" : 105.06712975898, + "recalibratedMass" : 105.06712975898, + "peaks" : [ { + "intensity" : 10.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 105.06712975898 + } ], + "score" : 3.693314602564298, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.07279373331417366, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.9493287024102, + "ClippedPeakIsNoiseScorer" : 0.31677963346827187, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 8, + "molecularFormula" : "C4H8O", + "ion" : "[M + Na]+", + "massDeviation" : "-17.399712882398013 ppm (-0.001653757134533862 m/z)", + "recalibratedMassDeviation" : "-17.399712882398013 ppm (-0.001653757134533862 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 95.045081818956, + "recalibratedMass" : 95.045081818956, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 95.045081818956 + } ], + "score" : 4.252943985439368, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.4065270000000001, + "Mass Deviation" : -0.4858658702623185, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.0495491818104399, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 9, + "molecularFormula" : "C4H5O", + "ion" : "[M + H]+", + "massDeviation" : "-19.80114297917525 ppm (-0.001386870655537109 m/z)", + "recalibratedMassDeviation" : "-19.80114297917525 ppm (-0.001386870655537109 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 70.039929361435, + "recalibratedMass" : 70.039929361435, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 70.039929361435 + } ], + "score" : 4.399415171244475, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.240653, + "Mass Deviation" : -0.42357220903242193, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.2996007063856498, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 10, + "molecularFormula" : "C3H5N", + "ion" : "[M + H]+", + "massDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "recalibratedMassDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "relativeIntensity" : 0.05540780141843971, + "mz" : 56.049918656323, + "recalibratedMass" : 56.049918656323, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 56.048448506258 + }, { + "intensity" : 45.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 56.049507786248 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 56.049918656323 + } ], + "score" : 6.065304036747646, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.04095127529240153, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.43950081343677, + "ClippedPeakIsNoiseScorer" : 1.4786224410448057, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.6881320575584717, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 11, + "molecularFormula" : "C4H6", + "ion" : "[M + H]+", + "massDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "recalibratedMassDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "relativeIntensity" : 0.011081560283687944, + "mz" : 55.054505732533, + "recalibratedMass" : 55.054505732533, + "peaks" : [ { + "intensity" : 25.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 55.054505732533 + } ], + "score" : 4.593033282124102, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.05881770900781395, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.4494549426746701, + "ClippedPeakIsNoiseScorer" : 0.7023960484572456, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 12, + "molecularFormula" : "C4H4", + "ion" : "[M + H]+", + "massDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "recalibratedMassDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 53.038832825255, + "recalibratedMass" : 53.038832825255, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 53.038832825255 + } ], + "score" : 4.752345345638696, + "scores" : { + "TreeSizeScorer" : 2.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : 0.0, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.46961167174745, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + } ], + "losses" : [ { + "source" : 0, + "target" : 1, + "molecularFormula" : "C9H12", + "score" : -3.842403784005459, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.237454809655712, + "LossSizeScorer" : -0.7535640460848674, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.6431164637986884, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 2, + "molecularFormula" : "H3N", + "score" : 0.023030392061025362, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.11909994533147827, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.28702698696382317, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4175307821975065, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 3, + "molecularFormula" : "C2H2", + "score" : 0.0665407853704082, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7806669298851281, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.9307679038143633, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 4, + "molecularFormula" : "CO", + "score" : 1.161792747883552, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8780805875717457, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.20658508699281183, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4786707051457979, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 5, + "molecularFormula" : "C2H2", + "score" : 0.897667706102828, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7807331247698537, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.09970717796666911, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 6, + "molecularFormula" : "C2H6O", + "score" : -5.084984217961084, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.6908572967856159, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.3839205134302384, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.185674170842775, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : -3.217873372632506, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 7, + "molecularFormula" : "CO2", + "score" : -1.358756472987597, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.098012017797652, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.11763095215123089, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.3507640807928385, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 5, + "target" : 8, + "molecularFormula" : "CO", + "score" : 0.5692439340323783, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8781167754652612, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.7991700887375011, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4786707051457979, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 9, + "molecularFormula" : "CH2N", + "score" : -4.42257406720739, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8791160009376071, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.3159268913733358, + "Free Radical" : -2.2909585508352253, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 10, + "molecularFormula" : "C2H2O", + "score" : -1.1247967985789344, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1055093118884525, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.7382159651225652, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -1.503716687503642, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 11, + "molecularFormula" : "CHNO", + "score" : -2.1857060900958376, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1025458594057662, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.605073865723989, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 11, + "target" : 12, + "molecularFormula" : "H2", + "score" : -0.60128857920489, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -13.382452509315037, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.009196414819379358, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 12.778733802770706, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + } ] +} \ No newline at end of file diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C8H25N6O3S_[M+H]+.json b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C8H25N6O3S_[M+H]+.json new file mode 100644 index 00000000000..964bbb6e878 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C8H25N6O3S_[M+H]+.json @@ -0,0 +1,856 @@ +{ + "molecularFormula" : "C8H25N6O3S", + "root" : "C8H25N6O3S", + "annotations" : { + "precursorIonType" : "[M + H]+", + "nodeBoost" : 2.0, + "numberOfUnconsideredCandidates" : 21, + "lowestConsideredCandidateScore" : 31.877358685357798, + "statistics" : { + "explainedIntensity" : 0.8660789252728803, + "explainedIntensityOfExplainablePeaks" : 0.9487238445619685, + "ratioOfExplainedPeaks" : 0.45454545454545453 + }, + "recalibration" : { + "separate" : [ "none", "1.0x", "1.0x" ], + "merged" : "0.9999928746179206x + 1.1733926470469669E-4" + } + }, + "fragments" : [ { + "id" : 0, + "molecularFormula" : "C8H25N6O3S", + "ion" : "[M + H]+", + "massDeviation" : "3.029504776342838 ppm (8.669807324963585E-4 m/z)", + "recalibratedMassDeviation" : "3.029504776342838 ppm (8.669807324963585E-4 m/z)", + "relativeIntensity" : 0.13297872340425532, + "mz" : 286.179028092823, + "recalibratedMass" : 286.179028092823, + "peaks" : [ { + "intensity" : 135.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 286.177025513197 + }, { + "intensity" : 105.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 286.178204102612 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 286.179738267349 + } ], + "score" : -2.338023982882643, + "scores" : { + "Chemical Prior" : -0.45668233238088446, + "MS-Isotopes" : 0.0, + "CommonRootLoss" : 0.0, + "Mass Deviation" : -0.2719037380676583, + "CarbohydrogenCompound" : 0.0, + "motif-search" : 0.0, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "BeautificationScorer" : -0.0, + "ImplicitAdductPeakScore" : 0.0, + "IntrinsicallyChargedScorer" : 0.0, + "StrangeElementRootScorer" : -1.6094379124341003 + }, + "isotopes" : { + "score" : -9.21894374511125, + "mz" : [ 286.179028092823 ], + "relInt" : [ 1.0 ] + } + }, { + "id" : 1, + "molecularFormula" : "C6H14N2O2S", + "ion" : "[M + H]+", + "massDeviation" : "8.254886437495532 ppm (0.0014783375104627794 m/z)", + "recalibratedMassDeviation" : "8.254886437495532 ppm (0.0014783375104627794 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 179.086353477601, + "recalibratedMass" : 179.086353477601, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 179.086353477601 + } ], + "score" : 1.6979280247344417, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.3884769062726252, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.20913646522399, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : -0.4054652081081694, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 2, + "molecularFormula" : "C7H9N4O", + "ion" : "[M + H]+", + "massDeviation" : "-6.575377490608041 ppm (-0.0010920638135303307 m/z)", + "recalibratedMassDeviation" : "-6.575377490608041 ppm (-0.0010920638135303307 m/z)", + "relativeIntensity" : 0.03546099290780142, + "mz" : 166.083820296277, + "recalibratedMass" : 166.083820296277, + "peaks" : [ { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 166.083820296277 + }, { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 166.087482254599 + } ], + "score" : 2.8160769925131928, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.26803410624818425, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.33916179703723004, + "ClippedPeakIsNoiseScorer" : 1.2449493017241469, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 3, + "molecularFormula" : "C7H6N3O", + "ion" : "[M + H]+", + "massDeviation" : "-11.204483838375484 ppm (-0.0016701033095216644 m/z)", + "recalibratedMassDeviation" : "-11.204483838375484 ppm (-0.0016701033095216644 m/z)", + "relativeIntensity" : 0.006648936170212766, + "mz" : 149.056693160781, + "recalibratedMass" : 149.056693160781, + "peaks" : [ { + "intensity" : 15.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 149.056693160781 + } ], + "score" : 2.039985808092882, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.4535557138315937, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5094330683921899, + "ClippedPeakIsNoiseScorer" : 0.4841084535322853, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 4, + "molecularFormula" : "C5H7N4O", + "ion" : "[M + H]+", + "massDeviation" : "2.3455051344256366 ppm (3.285339444687452E-4 m/z)", + "recalibratedMassDeviation" : "2.3455051344256366 ppm (3.285339444687452E-4 m/z)", + "relativeIntensity" : 0.6006205673758865, + "mz" : 140.069590830035, + "recalibratedMass" : 140.069590830035, + "peaks" : [ { + "intensity" : 561.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 140.069590830035 + }, { + "intensity" : 524.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 140.069724401264 + }, { + "intensity" : 270.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 140.072452948764 + } ], + "score" : 5.693270086004846, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.06990640786653102, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5993040916996499, + "ClippedPeakIsNoiseScorer" : 3.663872402171727, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 5, + "molecularFormula" : "C6H9N4", + "ion" : "[M + H]+", + "massDeviation" : "-11.07868328018717 ppm (-0.0015298384005291155 m/z)", + "recalibratedMassDeviation" : "-11.07868328018717 ppm (-0.0015298384005291155 m/z)", + "relativeIntensity" : 0.01551418439716312, + "mz" : 138.08846790169, + "recalibratedMass" : 138.08846790169, + "peaks" : [ { + "intensity" : 35.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 138.08846790169 + } ], + "score" : 2.5653226746126956, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.4056055103752111, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.6191153209831, + "ClippedPeakIsNoiseScorer" : 0.8518128640048066, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 6, + "molecularFormula" : "C4H10O2S", + "ion" : "[M + H]+", + "massDeviation" : "6.990302094680382 ppm (8.601446994589423E-4 m/z)", + "recalibratedMassDeviation" : "0.8185284647313631 ppm (1.0071790396182223E-4 m/z)", + "relativeIntensity" : 0.022163120567375887, + "mz" : 123.04828715679, + "recalibratedMass" : 123.0475277299945, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 123.04828715679 + }, { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 123.051095128888 + } ], + "score" : 2.8598227490784294, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.020496240759608746, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.7695171284321001, + "ClippedPeakIsNoiseScorer" : 1.0162670695141076, + "StrangeElementFragmentScorer" : -0.4054652081081694, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 7, + "molecularFormula" : "C5H4N3O", + "ion" : "[M + H]+", + "massDeviation" : "-11.715927486070303 ppm (-0.0014415426165328427 m/z)", + "recalibratedMassDeviation" : "-11.715927486070303 ppm (-0.0014415426165328427 m/z)", + "relativeIntensity" : 0.008865248226950355, + "mz" : 123.041271657474, + "recalibratedMass" : 123.041271657474, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 123.041271657474 + } ], + "score" : 2.4990858320912257, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.3763952715446977, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.76958728342526, + "ClippedPeakIsNoiseScorer" : 0.6058938202106641, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 8, + "molecularFormula" : "C3H8N2O2", + "ion" : "[M + H]+", + "massDeviation" : "12.142816620135408 ppm (0.001275810889467266 m/z)", + "recalibratedMassDeviation" : "12.142816620135408 ppm (0.001275810889467266 m/z)", + "relativeIntensity" : 0.004432624113475178, + "mz" : 105.06712975898, + "recalibratedMass" : 105.06712975898, + "peaks" : [ { + "intensity" : 10.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 105.06712975898 + } ], + "score" : 2.4425328620394944, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.3235754738389774, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.9493287024102, + "ClippedPeakIsNoiseScorer" : 0.31677963346827187, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 9, + "molecularFormula" : "C3H5N4", + "ion" : "[M + H]+", + "massDeviation" : "5.928766461543392 ppm (5.813705644754918E-4 m/z)", + "recalibratedMassDeviation" : "5.928766461543392 ppm (5.813705644754918E-4 m/z)", + "relativeIntensity" : 1.0, + "mz" : 98.059278982655, + "recalibratedMass" : 98.059278982655, + "peaks" : [ { + "intensity" : 958.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 98.059278982655 + }, { + "intensity" : 929.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 98.059564237847 + }, { + "intensity" : 369.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 98.060380513671 + } ], + "score" : 13.777046055266409, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.12984410539410465, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.01940721017345, + "ClippedPeakIsNoiseScorer" : 11.387482950487064, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 10, + "molecularFormula" : "C2H2N3O", + "ion" : "[M + H]+", + "massDeviation" : "15.85434580447312 ppm (0.0013480698344636721 m/z)", + "recalibratedMassDeviation" : "15.85434580447312 ppm (0.0013480698344636721 m/z)", + "relativeIntensity" : 0.01551418439716312, + "mz" : 85.028411205925, + "recalibratedMass" : 85.028411205925, + "peaks" : [ { + "intensity" : 35.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 85.028411205925 + } ], + "score" : 3.1552441929665527, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.3462845589790036, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.14971588794075, + "ClippedPeakIsNoiseScorer" : 0.8518128640048066, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 11, + "molecularFormula" : "C2H8OS", + "ion" : "[M + H]+", + "massDeviation" : "-7.542590818416575 ppm (-6.112232835420173E-4 m/z)", + "recalibratedMassDeviation" : "-7.542590818416575 ppm (-6.112232835420173E-4 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 81.036251104807, + "recalibratedMass" : 81.036251104807, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 81.036251104807 + } ], + "score" : 3.3350871800866555, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.13728398275652057, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.18963748895193, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 12, + "molecularFormula" : "C4H5O", + "ion" : "[M + H]+", + "massDeviation" : "-19.80114297917525 ppm (-0.001386870655537109 m/z)", + "recalibratedMassDeviation" : "-19.80114297917525 ppm (-0.001386870655537109 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 70.039929361435, + "recalibratedMass" : 70.039929361435, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 70.039929361435 + } ], + "score" : 3.464304735749953, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.240653, + "Mass Deviation" : -0.3586826445269436, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.2996007063856498, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 13, + "molecularFormula" : "C3H5N", + "ion" : "[M + H]+", + "massDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "recalibratedMassDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "relativeIntensity" : 0.05540780141843971, + "mz" : 56.049918656323, + "recalibratedMass" : 56.049918656323, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 56.048448506258 + }, { + "intensity" : 45.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 56.049507786248 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 56.049918656323 + } ], + "score" : 4.321746919219734, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.09637633526184135, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.43950081343677, + "ClippedPeakIsNoiseScorer" : 1.4786224410448057, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 14, + "molecularFormula" : "C4H6", + "ion" : "[M + H]+", + "massDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "recalibratedMassDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "relativeIntensity" : 0.011081560283687944, + "mz" : 55.054505732533, + "recalibratedMass" : 55.054505732533, + "peaks" : [ { + "intensity" : 25.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 55.054505732533 + } ], + "score" : 3.5930332821241016, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.05881770900781395, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.4494549426746701, + "ClippedPeakIsNoiseScorer" : 0.7023960484572456, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 15, + "molecularFormula" : "C4H4", + "ion" : "[M + H]+", + "massDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "recalibratedMassDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 53.038832825255, + "recalibratedMass" : 53.038832825255, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 53.038832825255 + } ], + "score" : 3.698581673364512, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.05376367227418448, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.46961167174745, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + } ], + "losses" : [ { + "source" : 0, + "target" : 1, + "molecularFormula" : "C2H11N4O", + "score" : -4.443687472416394, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.37915919272349274, + "Loss RDBE" : -1.0986122886681098, + "Mass Deviation" : -0.28273790724717707, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 0, + "target" : 2, + "molecularFormula" : "CH16N2O2S", + "score" : -7.569769338128809, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.7535640460848674, + "Loss RDBE" : -2.995732273553991, + "Mass Deviation" : -1.1372949347123367, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 3, + "molecularFormula" : "H3N", + "score" : 0.023030392061025362, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.11909994533147827, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.28702698696382317, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4175307821975065, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 4, + "molecularFormula" : "C2H2", + "score" : 0.0665407853704082, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7806669298851281, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.9307679038143633, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 5, + "molecularFormula" : "CO", + "score" : 1.1617927478991255, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8780805875717457, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.20658508697723843, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4786707051457979, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 6, + "molecularFormula" : "C2H4N2", + "score" : -2.0475786125455544, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.9469920628068724, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.3113925915748117, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 3, + "target" : 7, + "molecularFormula" : "C2H2", + "score" : 0.8976677060960859, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7807331247698537, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.09970717797341114, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 8, + "molecularFormula" : "C3H6S", + "score" : -1.4472441793078359, + "scores" : { + "StrangeElementLossScorer" : 0.6931471805599453, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.5416475046673179, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.08747139406644583, + "Free Radical" : -0.09373397349900595, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.5008334969696473, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 4, + "target" : 9, + "molecularFormula" : "C2H2O", + "score" : -0.4979081454781588, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1055072936737664, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.11132529380710361, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -1.503716687503642, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 4, + "target" : 10, + "molecularFormula" : "C3H5N", + "score" : -1.6790392830886869, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.9646274134986461, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.5889111584221933, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.06638208032396, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 11, + "molecularFormula" : "C2H2O", + "score" : -1.3654051395471214, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1055036324995529, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.9788186267018525, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -1.503716687503642, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 3, + "target" : 12, + "molecularFormula" : "C3HN3", + "score" : -2.3987777545815, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.4105587597292697, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.1261584305331548, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 8, + "target" : 13, + "molecularFormula" : "H3NO2", + "score" : -2.081460959614616, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.0536804372021136, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.4519633130391151, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 14, + "molecularFormula" : "C2H8N2O2S", + "score" : -4.098610390413211, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.8665260319038497, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.5489062747317462, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 14, + "target" : 15, + "molecularFormula" : "H2", + "score" : -0.60128857920489, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -13.382452509315037, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.009196414819379358, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 12.778733802770706, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + } ] +} \ No newline at end of file diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C9H26N4O4P_[M+H]+.json b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C9H26N4O4P_[M+H]+.json new file mode 100644 index 00000000000..5c2cc02d723 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/trees/C9H26N4O4P_[M+H]+.json @@ -0,0 +1,801 @@ +{ + "molecularFormula" : "C9H26N4O4P", + "root" : "C9H26N4O4P", + "annotations" : { + "precursorIonType" : "[M + H]+", + "nodeBoost" : 2.0, + "numberOfUnconsideredCandidates" : 21, + "lowestConsideredCandidateScore" : 31.877358685357798, + "statistics" : { + "explainedIntensity" : 0.8555835432409744, + "explainedIntensityOfExplainablePeaks" : 0.957256928135275, + "ratioOfExplainedPeaks" : 0.42424242424242425 + }, + "recalibration" : { + "separate" : [ "none", "1.0x", "1.0x" ], + "merged" : "0.9999895514636724x + 2.979330070829178E-4" + } + }, + "fragments" : [ { + "id" : 0, + "molecularFormula" : "C9H26N4O4P", + "ion" : "[M + H]+", + "massDeviation" : "9.031754526785704 ppm (0.002584698732448487 m/z)", + "recalibratedMassDeviation" : "9.031754526785704 ppm (0.002584698732448487 m/z)", + "relativeIntensity" : 0.13297872340425532, + "mz" : 286.179028092823, + "recalibratedMass" : 286.179028092823, + "peaks" : [ { + "intensity" : 135.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 286.177025513197 + }, { + "intensity" : 105.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 286.178204102612 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 286.179738267349 + } ], + "score" : -1.842569760670251, + "scores" : { + "Chemical Prior" : 0.7708083266399447, + "MS-Isotopes" : 0.0, + "CommonRootLoss" : 0.0, + "Mass Deviation" : -1.003940174876095, + "CarbohydrogenCompound" : 0.0, + "motif-search" : 0.0, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "BeautificationScorer" : -0.0, + "ImplicitAdductPeakScore" : 0.0, + "IntrinsicallyChargedScorer" : 0.0, + "StrangeElementRootScorer" : -1.6094379124341003 + }, + "isotopes" : { + "score" : -6.841189376295789, + "mz" : [ 286.179028092823 ], + "relInt" : [ 1.0 ] + } + }, { + "id" : 1, + "molecularFormula" : "C4H11N3O4", + "ion" : "[M + H]+", + "massDeviation" : "9.561510468791653 ppm (0.001588012186459764 m/z)", + "recalibratedMassDeviation" : "9.561510468791653 ppm (0.001588012186459764 m/z)", + "relativeIntensity" : 0.03546099290780142, + "mz" : 166.083820296277, + "recalibratedMass" : 166.083820296277, + "peaks" : [ { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 166.083820296277 + }, { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 166.087482254599 + } ], + "score" : 2.6588501040804307, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.425260994680946, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.33916179703723004, + "ClippedPeakIsNoiseScorer" : 1.2449493017241469, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 2, + "molecularFormula" : "C4H8N2O4", + "ion" : "[M + H]+", + "massDeviation" : "6.775762087912526 ppm (0.0010099726904684303 m/z)", + "recalibratedMassDeviation" : "6.775762087912526 ppm (0.0010099726904684303 m/z)", + "relativeIntensity" : 0.006648936170212766, + "mz" : 149.056693160781, + "recalibratedMass" : 149.056693160781, + "peaks" : [ { + "intensity" : 15.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 149.056693160781 + } ], + "score" : 2.2493097788182097, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.24423174310626591, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5094330683921899, + "ClippedPeakIsNoiseScorer" : 0.4841084535322853, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 3, + "molecularFormula" : "C3H12N2O2P", + "ion" : "[M + H]+", + "massDeviation" : "-9.45869869182439 ppm (-0.0013248760555484296 m/z)", + "recalibratedMassDeviation" : "-9.45869869182439 ppm (-0.0013248760555484296 m/z)", + "relativeIntensity" : 0.6006205673758865, + "mz" : 140.069590830035, + "recalibratedMass" : 140.069590830035, + "peaks" : [ { + "intensity" : 561.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 140.069590830035 + }, { + "intensity" : 524.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 140.069724401264 + }, { + "intensity" : 270.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 140.072452948764 + } ], + "score" : 6.014648676613856, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.33894159587285166, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5993040916996499, + "ClippedPeakIsNoiseScorer" : 3.663872402171727, + "StrangeElementFragmentScorer" : -0.4054652081081694, + "CommonRootLoss" : 0.9958789867234998, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 4, + "molecularFormula" : "C3H11N3O3", + "ion" : "[M + H]+", + "massDeviation" : "8.329715123495133 ppm (0.0011502375994609793 m/z)", + "recalibratedMassDeviation" : "8.329715123495133 ppm (0.0011502375994609793 m/z)", + "relativeIntensity" : 0.01551418439716312, + "mz" : 138.08846790169, + "recalibratedMass" : 138.08846790169, + "peaks" : [ { + "intensity" : 35.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 138.08846790169 + } ], + "score" : 2.685650061451246, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.28527812353666043, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.6191153209831, + "ClippedPeakIsNoiseScorer" : 0.8518128640048066, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 5, + "molecularFormula" : "C2H6N2O4", + "ion" : "[M + H]+", + "massDeviation" : "10.065999536359788 ppm (0.001238533383457252 m/z)", + "recalibratedMassDeviation" : "10.065999536359788 ppm (0.001238533383457252 m/z)", + "relativeIntensity" : 0.008865248226950355, + "mz" : 123.041271657474, + "recalibratedMass" : 123.041271657474, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 123.041271657474 + } ], + "score" : 2.563428586242395, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.3120525173935285, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.76958728342526, + "ClippedPeakIsNoiseScorer" : 0.6058938202106641, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 6, + "molecularFormula" : "C3H8N2O2", + "ion" : "[M + H]+", + "massDeviation" : "12.142816620135408 ppm (0.001275810889467266 m/z)", + "recalibratedMassDeviation" : "12.142816620135408 ppm (0.001275810889467266 m/z)", + "relativeIntensity" : 0.004432624113475178, + "mz" : 105.06712975898, + "recalibratedMass" : 105.06712975898, + "peaks" : [ { + "intensity" : 10.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 105.06712975898 + } ], + "score" : 2.4425328620394944, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.3235754738389774, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.9493287024102, + "ClippedPeakIsNoiseScorer" : 0.31677963346827187, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 7, + "molecularFormula" : "CH10N2OP", + "ion" : "[M + H]+", + "massDeviation" : "-10.932564940816029 ppm (-0.001072039435527472 m/z)", + "recalibratedMassDeviation" : "-10.932564940816029 ppm (-0.001072039435527472 m/z)", + "relativeIntensity" : 1.0, + "mz" : 98.059278982655, + "recalibratedMass" : 98.059278982655, + "peaks" : [ { + "intensity" : 958.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 98.059278982655 + }, { + "intensity" : 929.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 98.059564237847 + }, { + "intensity" : 369.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 98.060380513671 + } ], + "score" : 13.64471931883449, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.2621708418260225, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.01940721017345, + "ClippedPeakIsNoiseScorer" : 11.387482950487064, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 8, + "molecularFormula" : "CH6N2O3", + "ion" : "[M + H]+", + "massDeviation" : "-0.3859761476327683 ppm (-3.6685134531921904E-5 m/z)", + "recalibratedMassDeviation" : "-0.3859761476327683 ppm (-3.6685134531921904E-5 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 95.045081818956, + "recalibratedMass" : 95.045081818956, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 95.045081818956 + } ], + "score" : 3.324911570594359, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.007371285107327513, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.0495491818104399, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 9, + "molecularFormula" : "H7NO2P", + "ion" : "[M + H]+", + "massDeviation" : "-3.5910369394037893 ppm (-3.053401655392918E-4 m/z)", + "recalibratedMassDeviation" : "-3.5910369394037893 ppm (-3.053401655392918E-4 m/z)", + "relativeIntensity" : 0.01551418439716312, + "mz" : 85.028411205925, + "recalibratedMass" : 85.028411205925, + "peaks" : [ { + "intensity" : 35.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 85.028411205925 + } ], + "score" : 3.436849242901471, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.06467950904408526, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.14971588794075, + "ClippedPeakIsNoiseScorer" : 0.8518128640048066, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 10, + "molecularFormula" : "C2H8NO2", + "ion" : "[M + H]+", + "massDeviation" : "12.947992014139288 ppm (0.001023717498469523 m/z)", + "recalibratedMassDeviation" : "12.947992014139288 ppm (0.001023717498469523 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 79.063803665589, + "recalibratedMass" : 79.063803665589, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 79.063803665589 + } ], + "score" : 3.2439217282071207, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.2481739090282355, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.20936196334411, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 11, + "molecularFormula" : "C3H5N", + "ion" : "[M + H]+", + "massDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "recalibratedMassDeviation" : "7.904458081118235 ppm (4.4304423246899205E-4 m/z)", + "relativeIntensity" : 0.05540780141843971, + "mz" : 56.049918656323, + "recalibratedMass" : 56.049918656323, + "peaks" : [ { + "intensity" : 20.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 56.048448506258 + }, { + "intensity" : 45.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 56.049507786248 + }, { + "intensity" : 60.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 56.049918656323 + } ], + "score" : 4.321746919219734, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.09637633526184135, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.43950081343677, + "ClippedPeakIsNoiseScorer" : 1.4786224410448057, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 12, + "molecularFormula" : "C4H6", + "ion" : "[M + H]+", + "massDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "recalibratedMassDeviation" : "5.06931156233155 ppm (2.7908844246837816E-4 m/z)", + "relativeIntensity" : 0.011081560283687944, + "mz" : 55.054505732533, + "recalibratedMass" : 55.054505732533, + "peaks" : [ { + "intensity" : 25.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 55.054505732533 + } ], + "score" : 3.5930332821241016, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.05881770900781395, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.4494549426746701, + "ClippedPeakIsNoiseScorer" : 0.7023960484572456, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 13, + "molecularFormula" : "H6NO2", + "ion" : "[M + H]+", + "massDeviation" : "-36.264929297489886 ppm (-0.0019236806525384509 m/z)", + "recalibratedMassDeviation" : "-36.264929297489886 ppm (-0.0019236806525384509 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 53.045206203438, + "recalibratedMass" : 53.045206203438, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 53.045206203438 + } ], + "score" : 3.207152696243114, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.5451289156137523, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.46954793796562, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 14, + "molecularFormula" : "C4H4", + "ion" : "[M + H]+", + "massDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "recalibratedMassDeviation" : "4.831274574031946 ppm (2.5624516446498546E-4 m/z)", + "relativeIntensity" : 0.013297872340425532, + "mz" : 53.038832825255, + "recalibratedMass" : 53.038832825255, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 53.038832825255 + } ], + "score" : 3.698581673364512, + "scores" : { + "TreeSizeScorer" : 1.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.05376367227418448, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.46961167174745, + "ClippedPeakIsNoiseScorer" : 0.7827336738912465, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + } ], + "losses" : [ { + "source" : 0, + "target" : 1, + "molecularFormula" : "C5H15NP", + "score" : -6.371626722486521, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.7535640460848674, + "Loss RDBE" : -1.0986122886681098, + "Mass Deviation" : -0.4499779428360395, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : -1.3862943611198906, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 2, + "molecularFormula" : "H3N", + "score" : 0.023030392061025362, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.11909994533147827, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.28702698696382317, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4175307821975065, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 0, + "target" : 3, + "molecularFormula" : "C6H14N2O2", + "score" : -5.132692885300438, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -1.4916638350114937, + "Loss RDBE" : 0.0, + "Mass Deviation" : -2.449405677363344, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -1.2032499150844207, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 4, + "molecularFormula" : "CO", + "score" : 1.1617927478991255, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8780805875717457, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.20658508697723843, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4786707051457979, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 5, + "molecularFormula" : "C2H2", + "score" : 0.8976677060960859, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7807331247698537, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.09970717797341114, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 6, + "molecularFormula" : "CO2", + "score" : -1.358756472994521, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.098012017797652, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.11763095215815493, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.3507640807928385, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 3, + "target" : 7, + "molecularFormula" : "C2H2O", + "score" : -0.49790814548501916, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1055072936737664, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.11132529381396397, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -1.503716687503642, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 5, + "target" : 8, + "molecularFormula" : "CO", + "score" : 0.5692439340323783, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8781167754652612, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.7991700887375011, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4786707051457979, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 3, + "target" : 9, + "molecularFormula" : "C3H5N", + "score" : -1.679039283099635, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.9646274134986461, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.5889111584331415, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.06638208032396, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 4, + "target" : 10, + "molecularFormula" : "CH3N2O", + "score" : -4.148649986277192, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8901712362287642, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.05305804573429617, + "Free Radical" : -2.2909585508352253, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 6, + "target" : 11, + "molecularFormula" : "H3NO2", + "score" : -2.081460959614616, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.0536804372021136, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.4519633130391151, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 12, + "molecularFormula" : "H2N2O4", + "score" : -3.0704801601857046, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.004281670877276156, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.38302040553081346, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 10, + "target" : 13, + "molecularFormula" : "C2H2", + "score" : -1.8740323357008308, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7809094410052824, + "Loss RDBE" : 0.0, + "Mass Deviation" : -2.8715835360057564, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 12, + "target" : 14, + "molecularFormula" : "H2", + "score" : -0.60128857920489, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -13.382452509315037, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.009196414819379358, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 12.778733802770706, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + } ] +} \ No newline at end of file diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/compound.config b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/compound.config new file mode 100644 index 00000000000..7f8f23a49b3 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/compound.config @@ -0,0 +1,199 @@ +# Allows the USER to Specify the ScoreType that is used to rank the list of Molecular Formula +# Identifications +# before CSI:FingerID predictions are calculated. Auto means that this ScoreType is +# automatically set depending on the executed workflow. +FormulaResultRankingScore=AUTO +PrintCitations=True +RecomputeResults=False +# Maximum number of candidate molecular formulas (fragmentation trees computed by SIRIUS) +# per compound which are considered by ZODIAC. +# This is the threshold used for all compounds with mz below 300 m/z and is used to interpolate the +# number of candidates for larger compounds. +# If lower than 0, all available candidates are considered. +ZodiacNumberOfConsideredCandidatesAt300Mz=10 +# As default ZODIAC runs a 2-step approach. First running 'good quality compounds' only, and +# afterwards including the remaining. +ZodiacRunInTwoSteps=true +# Ratio of candidate molecular formulas (fragmentation trees computed by SIRIUS) per +# compound which are forced for each ionization to be considered by ZODIAC. +# This depends on the number of candidates ZODIAC considers. E.g. if 50 candidates are +# considered and a ratio of 0.2 is set, at least 10 candidates per ionization will be +# considered, which might increase the number of candidates above 50. +ZodiacRatioOfConsideredCandidatesPerIonization=0.2 +# cluster compounds before running ZODIAC +ZodiacClusterCompounds=false +# Maximum number of candidate molecular formulas (fragmentation trees computed by SIRIUS) +# per compound which are considered by ZODIAC. +# This is the threshold used for all compounds with mz above 800 m/z and is used to interpolate the +# number of candidates for smaller compounds. +# If lower than 0, all available candidates are considered. +ZodiacNumberOfConsideredCandidatesAt800Mz=50 +MotifDbFile=none +StructurePredictors=CSI_FINGERID +# Candidates matching the lipid class estimated by El Gordo will be tagged. +# The lipid class will only be available if El Gordo predicts that the MS/MS is a lipid spectrum. +# If this parameter is set to 'false' El Gordo will still be executed and e.g. improve the +# fragmentation +# tree, but the matching candidates will not be tagged as lipid class. +InjectElGordoCompounds=True +NumberOfStructureCandidates=10000 +FormulaSearchDB=none +StructureSearchDB=BIO +# Specifies if the list of Molecular Formula Identifications is filtered by a soft threshold +# (calculateThreshold) before CSI:FingerID predictions are calculated. +FormulaResultThreshold=true +MedianNoiseIntensity=0.015 +# This configuration holds a set of user given formulas to be used as candidates for SIRIUS +# Note: This set might be merged with other sources like formulas from databases +# Set of Molecular Formulas to be used as candidates for molecular formula estimation with +# SIRIUS +CandidateFormulas=, +# Keywords that can be assigned to a input spectrum to judge its quality. Available keywords +# are: Good, LowIntensity, NoMS1Peak, FewPeaks, Chimeric, NotMonoisotopicPeak, +# PoorlyExplained +CompoundQuality=UNKNOWN +# An adduct switch is a switch of the ionization mode within a spectrum, e.g. an ion replaces an +# sodium adduct +# with a protonation during fragmentation. Such adduct switches heavily increase the +# complexity of the +# analysis, but for certain adducts they might happen regularly. Adduct switches are written +# in the +# form {@literal a -> b, a -> c, d -> c} where a, b, c, and d are adducts and {@literal a -> b} denotes an +# allowed switch from +# a to b within the MS/MS spectrum. +PossibleAdductSwitches=[M+Na]+:[M+H]+,[M+K]+:[M+H]+,[M+Cl]-:[M-H]- +IsotopeMs2Settings=IGNORE +# use this parameter if you want to force to report at least +# numberOfResultsToKeepPerIonization results per ionization. +# if le 0, this parameter will have no effect and just the top +# numberOfResultsToKeep results will be reported. +NumberOfCandidatesPerIon=1 +# Enable/Disable the hypothesen driven recalibration of MS/MS spectra +# Must be either 'ALLOWED' or FORBIDDEN' +ForbidRecalibration=ALLOWED +NumberOfCandidates=10 +# Configuration profile to store instrument specific algorithm properties. +# Some of the default profiles are: 'qtof', 'orbitrap', 'fticr'. +AlgorithmProfile=default +NoiseThresholdSettings.intensityThreshold = 0.005 +NoiseThresholdSettings.maximalNumberOfPeaks = 60 +NoiseThresholdSettings.basePeak = NOT_PRECURSOR +NoiseThresholdSettings.absoluteThreshold = 0 + +# Mass accuracy setting for MS1 spectra. Mass accuracies are always written as "X ppm (Y Da)" +# with X and Y +# are numerical values. The ppm is a relative measure (parts per million), Da is an absolute +# measure. For each mass, the +# maximum of relative and absolute is used. +MS1MassDeviation.allowedMassDeviation = 10.0 ppm +MS1MassDeviation.standardMassDeviation = 10.0 ppm +MS1MassDeviation.massDifferenceDeviation = 5.0 ppm + +# Mass accuracy setting for MS2 spectra. Mass Accuracies are always written as "X ppm (Y Da)" +# with X and Y +# are numerical values. The ppm is a relative measure (parts per million), Da is an absolute +# measure. For each mass, the +# maximum of relative and absolute is used. +MS2MassDeviation.allowedMassDeviation = 10.0 ppm +MS2MassDeviation.standardMassDeviation = 10.0 ppm + +# Describes how to deal with Adducts: +# Pos Examples: +# [M+H]+,[M]+,[M+K]+,[M+Na]+,[M+H-H2O]+,[M+Na2-H]+,[M+2K-H]+,[M+NH4]+,[M+H3O]+,[M+MeOH+H]+,[M+ACN+H]+,[M+2ACN+H]+,[M+IPA+H]+,[M+ACN+Na]+,[M+DMSO+H]+ +# Neg Examples: +# [M-H]-,[M]-,[M+K-2H]-,[M+Cl]-,[M-H2O-H]-,[M+Na-2H]-,M+FA-H]-,[M+Br]-,[M+HAc-H]-,[M+TFA-H]-,[M+ACN-H]- +# Enforced ion modes that are always considered. +AdductSettings.enforced = , +# Detectable ion modes which are only considered if there is an indication in the MS1 scan (e.g. +# correct mass delta). +AdductSettings.detectable = [M+H]+,[M+K]+,[M+Na]+,[M+H-H2O]+,[M+H-H4O2]+,[M+NH4]+,[M-H]-,[M+Cl]-,[M-H2O-H]-,[M+Br]- +# Fallback ion modes which are considered if the auto detection did not find any indication for +# an ion mode. +AdductSettings.fallback = [M+H]+,[M-H]-,[M+Na]+,[M+K]+ + +# These configurations hold the information how to autodetect elements based on the given +# formula constraints. +# Note: If the compound is already assigned to a specific molecular formula, this annotation is +# ignored. +# Enforced elements are always considered +FormulaSettings.enforced = C,H,N,O,P +# Detectable elements are added to the chemical alphabet, if there are indications for them +# (e.g. in isotope pattern) +FormulaSettings.detectable = S,Br,Cl,B,Se +# Fallback elements are used, if the auto-detection fails (e.g. no isotope pattern available) +FormulaSettings.fallback = S + +# This configurations define how to deal with isotope patterns in MS1. +# When filtering is enabled, molecular formulas are excluded if their theoretical isotope +# pattern does not match +# the theoretical one, even if their MS/MS pattern has high score. +IsotopeSettings.filter = True +# multiplier for the isotope score. Set to 0 to disable isotope scoring. Otherwise, the score +# from isotope +# pattern analysis is multiplied with this coefficient. Set to a value larger than one if your +# isotope +# pattern data is of much better quality than your MS/MS data. +IsotopeSettings.multiplier = 1 + +# This configurations define a timeout for the tree computation. As the underlying problem is +# NP-hard, it might take +# forever to compute trees for very challenging (e.g. large mass) compounds. Setting an time +# constraint allow the program +# to continue with other instances and just skip the challenging ones. +# Note that, due to multithreading, this time constraints are not absolutely accurate. +# Set the maximum number of seconds for computing a single compound. Set to 0 to disable the time +# constraint. +Timeout.secondsPerInstance = 0 +# Set the maximum number of seconds for a single molecular formula check. Set to 0 to disable the +# time constraint +Timeout.secondsPerTree = 0 +# Ignore isotope peaks below this intensity. +# This value should reflect the smallest relative intensive which is still above noise level. +# Obviously, this is hard to judge without having absolute values. Keeping this value around 1 +# percent is +# fine for most settings. Set it to smaller values if you trust your small intensities. +ms1.minimalIntensityToConsider = 0.01 +# The average absolute deviation between theoretical and measured intensity of isotope +# peaks. +# Do not change this parameter without a good reason! +ms1.absoluteIntensityError = 0.02 +# The average relative deviation between theoretical and measured intensity of isotope +# peaks. +# Do not change this parameter without a good reason! +ms1.relativeIntensityError = 0.08 +# Set minimum m/z to enable heuristic preprocessing. The heuristic will be used to initially +# rank the formula candidates. The Top (NumberOfCandidates) candidates will then be +# computed exactly by solving the ILP. +UseHeuristic.mzToUseHeuristic = 300 +# Set minimum m/z to only use heuristic tree computation. No exact tree computation (ILP) will +# be performed for this compounds. +UseHeuristic.mzToUseHeuristicOnly = 650 + +# Defines the proportion of edges of the complete network which will be ignored. +ZodiacEdgeFilterThresholds.thresholdFilter = 0.95 +# Minimum number of candidates per compound which are forced to have at least +# [minLocalConnections] connections to other compounds. +# E.g. 2 candidates per compound must have at least 10 connections to other compounds +ZodiacEdgeFilterThresholds.minLocalCandidates = 1 +# Minimum number of connections per candidate which are forced for at least +# [minLocalCandidates] candidates to other compounds. +# E.g. 2 candidates per compound must have at least 10 connections to other compounds +ZodiacEdgeFilterThresholds.minLocalConnections = 10 + +# Number of epochs to run the Gibbs sampling. When multiple Markov chains are computed, all +# chains' iterations sum up to this value. +ZodiacEpochs.iterations = 20000 +# Number of epochs considered as 'burn-in period'. +# Samples from the beginning of a Markov chain do not accurately represent the desired +# distribution of candidates and are not used to estimate the ZODIAC score. +ZodiacEpochs.burnInPeriod = 2000 +# Number of separate Gibbs sampling runs. +ZodiacEpochs.numberOfMarkovChains = 10 + +# Lambda used in the scoring function of spectral library hits. The higher this value the higher +# are librar hits weighted in ZODIAC scoring. +ZodiacLibraryScoring.lambda = 1000 +# Spectral library hits must have at least this cosine or higher to be considered in scoring. +# Value must be in [0,1]. +ZodiacLibraryScoring.minCosine = 0.5 + diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/compound.info b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/compound.info new file mode 100644 index 00000000000..2e96eca64a6 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/compound.info @@ -0,0 +1,6 @@ +index 2 +name SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil +ionMass 289.122615478838 +ionType [M + H]+ +rt 448.02799999998:NaN,NaN +rankingScoreType sirius.scores.SiriusScore diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/decoys/C15H17ClN4_[M+H]+.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/decoys/C15H17ClN4_[M+H]+.tsv new file mode 100644 index 00000000000..a7f1f6eee74 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/decoys/C15H17ClN4_[M+H]+.tsv @@ -0,0 +1,23 @@ +mz rel.intensity formula ionization +53.013424 100.00 C2N2 [M + H]+ +158.071274 1.18 C9H7N3 [M + H]+ +168.032301 0.54 C7H6ClN3 [M + H]+ +184.086924 0.77 C11H9N3 [M + H]+ +185.094749 1.11 C11H10N3 [M + H]+ +194.047951 63.51 C9H8ClN3 [M + H]+ +199.097823 1.32 C11H10N4 [M + H]+ +206.047951 0.91 C10H8ClN3 [M + H]+ +212.105648 0.67 C12H11N4 [M + H]+ +218.047951 1.33 C11H8ClN3 [M + H]+ +219.043200 1.45 C10H7ClN4 [M + H]+ +220.063601 15.12 C11H10ClN3 [M + H]+ +220.088754 1.91 C13H14ClN [M + H]+ +222.102574 0.86 C14H11N3 [M + H]+ +233.058850 5.26 C11H9ClN4 [M + H]+ +235.074500 1.55 C11H11ClN4 [M + H]+ +244.063601 0.86 C13H10ClN3 [M + H]+ +247.074500 3.10 C12H11ClN4 [M + H]+ +261.090151 0.57 C13H13ClN4 [M + H]+ +262.110552 0.70 C14H16ClN3 [M + H]+ +272.094902 0.85 C15H14ClN3 [M + H]+ +289.121451 1.91 C15H17ClN4 [M + H]+ diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/formula_candidates.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/formula_candidates.tsv new file mode 100644 index 00000000000..5ccf613b595 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/formula_candidates.tsv @@ -0,0 +1,2 @@ +formulaRank molecularFormula adduct precursorFormula SiriusScore TreeScore IsotopeScore numExplainedPeaks explainedIntensity medianMassErrorFragmentPeaks(ppm) medianAbsoluteMassErrorFragmentPeaks(ppm) massErrorPrecursor(ppm) lipidClass +1 C15H17ClN4 [M + H]+ C15H17ClN4 39.34241769057247 36.691010794465846 2.6514068961066233 22 0.9685426989556167 -4.462674100188872 4.8724686384496785 4.02875003592188 diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/scores/C15H17ClN4_[M+H]+.info b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/scores/C15H17ClN4_[M+H]+.info new file mode 100644 index 00000000000..db7a20598f0 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/scores/C15H17ClN4_[M+H]+.info @@ -0,0 +1,3 @@ +sirius.scores.IsotopeScore 2.6514068961066233 +sirius.scores.TreeScore 36.691010794465846 +sirius.scores.SiriusScore 39.34241769057247 diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/spectra/C15H17ClN4_[M+H]+.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/spectra/C15H17ClN4_[M+H]+.tsv new file mode 100644 index 00000000000..f4fdf313527 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/spectra/C15H17ClN4_[M+H]+.tsv @@ -0,0 +1,23 @@ +mz intensity rel.intensity exactmass formula ionization +70.040098 24218.53 100.00 70.039974 C2H3N3 [M + H]+ +89.037322 315.00 1.18 89.038577 C7H4 [M + H]+ +98.999966 135.00 0.54 98.999604 C5H3Cl [M + H]+ +115.054570 213.74 0.77 115.054227 C9H6 [M + H]+ +116.061561 270.00 1.11 116.062052 C9H7 [M + H]+ +125.014308 14773.00 63.51 125.015254 C7H5Cl [M + H]+ +130.064515 366.00 1.32 130.065126 C9H7N [M + H]+ +137.014279 249.00 0.91 137.015254 C8H5Cl [M + H]+ +143.072762 168.12 0.67 143.072951 C10H8N [M + H]+ +149.013989 299.00 1.33 149.015254 C9H5Cl [M + H]+ +150.010826 309.00 1.45 150.010503 C8H4ClN [M + H]+ +151.029903 3468.00 15.12 151.030904 C9H7Cl [M + H]+ +153.069565 225.00 0.86 153.069877 C12H8 [M + H]+ +164.024417 1260.00 5.26 164.026153 C9H6ClN [M + H]+ +166.041504 358.00 1.55 166.041803 C9H8ClN [M + H]+ +175.031788 270.00 0.86 175.030904 C11H7Cl [M + H]+ +178.040558 739.00 3.10 178.041803 C10H8ClN [M + H]+ +192.055368 195.00 0.57 192.057453 C11H10ClN [M + H]+ +193.076440 180.00 0.70 193.077855 C12H13Cl [M + H]+ +203.062236 251.00 0.85 203.062204 C13H11Cl [M + H]+ +220.087015 542.00 1.91 220.088754 C13H14ClN [M + H]+ +289.122615 827.00 2.92 289.121451 C15H17ClN4 [M + H]+ diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/spectrum.ms b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/spectrum.ms new file mode 100644 index 00000000000..e20891c8445 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/spectrum.ms @@ -0,0 +1,692 @@ +>compound 0_5053681185761206615-676004--121--Myclobutanil +>formula C15H17ClN4 +>parentmass 289.122615478838 +>ionization [M + H]+ +>instrumentation Unknown (LCMS) +>source file:///home/axel/dev/OpenMS/src/tests/topp/SiriusExport_2_output.ms +>quality UNKNOWN +>rt 448.02799999998s + +>ms1merged +##fid 5053681185761206615 +##fmz 289.122615478837758 +##des Myclobutanil +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source format [MS, MS:1000562, ABI WIFF format,] +289.122615478838 1356806.543650602 +290.123323995928 168319.5386947108 +291.117964046924 433903.2521391701 +292.12026079967 99781.63453909254 + +>ms1peaks +52.005351813457 2501.610107421875 +53.013412581284 13134.5205078125 +53.850226225992 1302.909057617188 +54.009140063564 338983.65625 +55.006042248338 6435.41259765625 +55.011148435189 6609.39404296875 +55.054172395822 1772.104248046875 +55.934029229957 5757.919921875 +56.941868288709 2705.908203125 +59.049392394217 65787.7578125 +60.04419739655 9389.001953125 +61.039698624921 1629.770751953125 +63.997582420249 4596.09619140625 +64.004915539546 4860.728515625 +68.011405901665 27484.29296875 +68.993238795734 11816.1728515625 +69.044514210085 12151.7626953125 +72.936346245282 1770.0 +73.063844648998 1632.810180664062 +76.485866327556 2207.0 +79.020638014668 15456.1591796875 +80.048700307132 11716.7060546875 +81.936658440041 8339.158203125 +82.995849176432 8191.0 +87.054215388379 1432.329345703125 +89.50580663687 1376.0 +90.488666027165 1798.0 +95.952211902793 2472.0 +97.967974119285 6640.0 +100.0745588278 1418.0 +102.090063528932 1768.0 +109.942148206295 1646.0 +113.96281092092 1728.0009765625 +114.090265101894 9843.087890625 +118.085166173822 5466.14697265625 +122.095082275611 3591.515380859375 +122.962671452755 9919.435546875 +123.090603383338 1818.105346679688 +130.157985838236 1433.0 +136.020144210415 1305.642211914062 +141.111768954054 1381.647338867188 +141.957291332652 13999.958984375 +147.090365251433 2315.56494140625 +149.021998403294 4169.404296875 +151.095653127576 2632.1923828125 +151.109600618565 2638.50390625 +155.06904919199 1400.58837890625 +155.10522171537 1306.244873046875 +155.972774632456 3955.750244140625 +158.152847157321 10190.6318359375 +161.094883274868 1469.0 +164.993233307885 1413.0 +170.0947568042 2692.873779296875 +173.07909618349 5464.607421875 +174.990754641374 1338.0 +175.120920396226 1335.489135742188 +178.157288006504 1567.557739257812 +179.104881581157 1856.0 +182.960071822982 1596.667236328125 +186.016812097735 3128.0 +194.115183195725 3037.01904296875 +195.105676043577 1846.959228515625 +195.121034909827 2138.53466796875 +198.183715433637 1614.0 +201.983396783946 6476.0 +217.007534943089 16000.083984375 +217.105603079 12722.193359375 +218.010461830348 1723.0 +218.108916975941 1918.0 +219.094207015885 1394.0 +234.033666185649 17919.0 +235.036061869219 1699.0 +239.087710708037 2715.0 +245.038087259231 3705.0 +246.860587751512 3017.0 +250.998652800198 2461.0 +252.996040050118 1751.0 +262.065226573716 31878.271484375 +263.067812997194 3540.0 +264.062744585962 1732.0 +276.080875651007 47441.0 +277.083729023421 6202.904296875 +278.078049070253 2909.8056640625 +279.092264164105 2269.0 +281.049607531965 1759.0 +284.16370925301 5971.3173828125 +285.167422523505 1450.9375 +289.120547785899 45105.26171875 +290.122834000335 8899.0 +291.11814896433 16223.0 +292.119468760172 3916.748291015625 +303.104211105075 4272.90087890625 +303.190626643079 3701.817626953125 +304.121038021889 1154982.0 +304.680120827865 1361.469604492188 +304.720450396369 1578.193115234375 +304.756696628278 1464.1357421875 +304.826755934771 1415.802856445312 +304.888295222133 4211.7490234375 +304.975939340234 6444.7470703125 +305.112954471951 109660.9765625 +306.110248734555 72833.0 +307.111946842557 10169.5791015625 +307.247397220322 1757.839477539062 +310.1202124831 5088.0 +320.107070842572 7286.0 +321.109817317563 1634.396606445312 +321.134008500327 1645.504272460938 +326.094135509242 51581.21484375 +327.006663634739 3305.2880859375 +327.096918826684 8025.06396484375 +328.09087936356 3401.237060546875 +329.002848029289 3721.0 +330.204815446188 11820.9521484375 +331.208232327135 2889.0 +342.067980362905 3189.39501953125 +349.169296376205 25098.0 +350.172883605486 4323.0 +351.167291455015 1724.0 +372.149200119315 2817.47705078125 +404.03600410036 11013.0 +405.038241871311 2224.6796875 +424.359699824875 1469.0 +445.117347283461 1962.204711914062 +500.274802921042 11554.1630859375 +501.277725760601 3400.0 +502.28653995658 1910.0 +505.85089556432 2188.0 +536.162361057972 4668.0 +537.163239801382 2428.0 +538.161608472883 1869.0 +544.336387601713 1598.0 +546.911505452596 1493.0 +549.965979448424 1640.0 +592.225456903764 1675.0 +607.216655018496 74091.0 +608.219193446659 23449.0 +609.2158525552 11438.5283203125 +610.208425679746 4454.0 +611.188234775837 1805.798706054688 +612.220726308427 4082.0 +613.22450541899 34075.0 +614.227906702716 11171.0 +615.225014693998 5343.0 +623.210784148654 2510.0 +629.198405169302 68640.0 +630.201595235063 21340.328125 +631.198284234777 10581.0 +632.198298853566 2483.0 +707.140261218123 1384.0 + +>ms1peaks +52.005397076818 2734.410888671875 +52.018107045505 1336.588989257812 +53.013261826329 14264.3037109375 +54.009079203842 328540.5625 +55.005732946798 6038.43408203125 +55.011210209049 5773.4833984375 +55.054089450492 1883.920532226562 +55.93393335135 5941.79931640625 +56.049311183158 2529.91064453125 +56.941559341288 2177.7314453125 +59.049288422008 55833.33203125 +60.044400478994 9188.86328125 +61.039483771618 1336.615844726562 +63.99776908929 4226.59521484375 +64.004652574785 4312.662109375 +67.028420902367 1685.13232421875 +68.011303574981 26639.857421875 +68.993400384347 11132.4560546875 +69.044245603619 12842.1396484375 +72.936451870693 2092.43896484375 +73.064343001052 2004.0 +76.485626827097 1932.002563476562 +79.020705537221 15479.7822265625 +80.048746552992 12934.6494140625 +81.936560826315 7849.1748046875 +82.996236710322 7697.5703125 +87.043649221397 1392.278564453125 +87.054161695388 1495.958618164062 +89.506032483299 1554.0 +90.488774891048 1551.744018554688 +91.052857733317 1701.434936523438 +95.951953010697 2094.0 +97.967766546756 6595.5302734375 +109.942695624537 1327.0 +113.961956344849 1877.0 +114.090202311915 11113.38671875 +118.085079269697 5461.0 +122.095332793077 3096.0 +122.962788239519 9551.916015625 +123.089923877343 1592.0 +130.158267685481 1374.0 +136.020500147191 1906.4296875 +141.089705751127 1398.031372070312 +141.111419699029 1374.918823242188 +141.935031405798 2215.52880859375 +141.957114961469 13636.359375 +147.090410388658 2596.0 +149.021734118264 3900.0 +149.0422250444 1717.679077148438 +151.095530836015 2392.175048828125 +151.109345923165 2675.036376953125 +155.069217138005 1392.010375976562 +155.972851416164 3798.715576171875 +158.152680730278 10054.0 +161.095473046681 1550.0 +164.142407569715 1467.709594726562 +170.094842381476 2189.80517578125 +173.079740417554 5427.904296875 +178.157986956425 1455.0 +179.105560744514 1912.301391601562 +182.96069817628 2000.407470703125 +186.016618789428 1896.0 +186.220115257894 1974.0 +194.116069304698 2583.0 +195.12120780654 1998.3037109375 +198.184395565259 1695.0 +201.982853397927 4906.0 +217.00704585203 12703.0 +217.105649597883 13317.7265625 +218.109378650956 2113.98193359375 +219.093923189224 1382.400756835938 +234.033511361987 14162.0 +235.036774500644 1342.0 +239.08726666962 2910.0 +242.282551973761 1561.0 +245.038675382516 2489.0 +246.861414583855 2664.0 +250.998716978816 2090.0 +262.065290180852 23768.0 +263.068197519244 2928.0 +276.081065166232 35016.0 +277.08420013176 4404.0 +278.078513434024 2183.0 +279.092009717775 2217.0 +281.049184165914 1367.0 +284.16336041232 3532.0 +289.121282596047 297520.0 +290.123339528492 48851.796875 +291.118124278084 95531.0 +292.120251426315 17101.046875 +293.12318758226 1858.0654296875 +303.10401477558 2693.449951171875 +303.190353825641 2785.50244140625 +304.119856155362 954170.0 +304.858461688543 1629.946044921875 +304.974182520147 7187.60791015625 +305.110635941863 61549.015625 +306.110453215668 55678.07421875 +307.111643085162 7091.70068359375 +310.120007901196 5493.85400390625 +320.106626078784 4025.0 +326.094632546811 51218.67578125 +327.006414911949 2851.898193359375 +327.096265128312 8263.4248046875 +328.091406924071 3217.697509765625 +329.003058211528 3429.933349609375 +330.205471949815 7747.0 +331.207754653901 1796.0 +342.06742675164 3267.0 +349.169395269431 21267.0 +350.172679880257 4154.27197265625 +351.168393055602 1571.0 +372.0987395627 1670.002075195312 +372.148644610713 2317.465087890625 +389.045115150928 4473.0 +391.043177396698 1663.0 +404.036316278299 7850.0 +405.03999791327 1931.0 +424.359886173771 1591.0 +445.117801993639 2038.0 +500.275651903375 13340.0 +501.278433801524 4082.0 +502.285907017338 2013.566040039062 +505.851095535466 2281.0 +536.163686089478 4281.0 +537.165279310098 2275.0 +538.161599212928 1446.0 +542.322146689605 2319.23583984375 +544.33668100172 2203.0 +546.913546060949 1480.0 +549.965890540792 1571.7275390625 +592.225728725342 6278.0 +593.2291918198 2109.0 +594.222911870749 2943.70703125 +607.216789747777 46858.0 +608.219527953593 15482.0 +609.215333724431 7397.0 +610.196851071075 3575.0 +611.184731787601 1662.0 +612.221188935026 2560.0 +613.225065362361 23067.0 +614.226835965539 7388.0 +615.223918934987 3328.0 +623.150116137773 1311.609985351562 +623.211673074874 1404.509399414062 +629.198822367023 49161.0 +630.201975789631 15060.724609375 +631.197108322666 7602.10302734375 +632.19918227597 1787.0 +707.142781768806 1359.0 + +>ms1peaks +52.005617027968 2841.486083984375 +53.013411271366 13567.8837890625 +54.009125331887 341665.8125 +55.005857415052 5900.7900390625 +55.011242701615 6013.953125 +55.054093292119 2035.055908203125 +55.933978586076 5672.33837890625 +56.049467099919 1695.441040039062 +56.94178230893 2173.33740234375 +59.049339198083 62878.703125 +60.044404001763 9862.6142578125 +61.039435521241 1719.998779296875 +63.997664239141 3450.59716796875 +64.005081384586 3958.136474609375 +68.011443914678 27040.419921875 +68.993714467215 12520.46484375 +69.007373071731 1388.10791015625 +69.044312866744 13073.23046875 +72.93642300411 2084.0 +73.063871079142 1705.0 +76.485830845774 2577.0 +79.020684296263 13782.1328125 +80.048779775419 11186.9970703125 +81.936674853257 8327.65625 +82.996269546702 8040.20166015625 +89.506005127285 1468.281982421875 +90.489095167913 1675.0 +95.951948147015 2520.51513671875 +97.967758472339 6678.626953125 +102.090788355145 2027.477661132812 +113.962336972098 2071.0 +114.090407289761 9387.833984375 +118.085129231385 6116.0 +122.09563813811 3776.03076171875 +122.962814871209 10117.1689453125 +123.09071509347 1657.50146484375 +136.020905158615 1394.424438476562 +140.067586645329 1617.045654296875 +141.112054526426 1383.640991210938 +141.93570970262 1911.949829101562 +141.957347460629 13581.779296875 +147.090339739564 2374.998291015625 +149.022576244489 3994.022705078125 +151.095387083973 2392.279052734375 +151.109293023596 2750.11474609375 +155.06969917273 1332.009765625 +155.972973853574 3810.662841796875 +158.152617650358 10434.0 +159.15482186858 1369.0 +161.095811541558 1615.0 +170.09478689383 2397.4794921875 +170.116223095026 1563.12939453125 +173.079809386205 6290.7470703125 +178.157999558146 1344.694458007812 +179.105474980732 1898.194946289062 +182.961052201833 2004.073364257812 +186.220351226598 1623.0 +193.157127136625 1493.4091796875 +194.115785614334 2955.0 +195.120763129781 1823.166137695312 +198.184413101409 2214.0 +201.984090601891 2436.0 +217.007207589124 6332.41943359375 +217.105727151964 16770.736328125 +218.108791440056 2512.0 +234.033555067529 7474.0 +239.08784770299 2936.0 +242.2830768363 1598.0 +245.03911035763 1466.0 +246.860750264023 2469.0 +249.183092518468 1366.967651367188 +250.999128212314 2641.0 +252.995944883436 1376.0 +262.065576474895 11528.0 +263.068397905954 1693.0 +276.080823895982 18533.0 +277.084470217057 2604.24365234375 +279.093578782719 2100.0 +281.049703566301 1340.0 +284.163284328388 2755.0 +288.245192514905 2240.408203125 +289.124028104405 571675.0 +289.974079344843 2398.387451171875 +290.020293351816 2510.57177734375 +290.12300483356 37005.6328125 +291.118405903154 172664.0625 +292.12044024798 30711.75 +293.123309031099 2511.0 +303.10399927149 1878.0 +303.190085777343 1857.193237304688 +304.115683834546 552400.0 +304.984847835069 1705.556396484375 +305.107785187759 57481.2109375 +306.110327480189 29213.0 +307.11238432698 4304.0 +310.120384968947 4593.26953125 +311.105475064582 1824.0 +320.107323506761 2737.0 +326.09481066741 41008.0 +327.006437528123 3347.260986328125 +327.09645563603 6753.96142578125 +328.092188803708 2930.0 +329.003747738298 3355.0 +330.205009985617 6046.36767578125 +331.208059597585 1436.0 +342.068061155461 2814.0 +349.1700609529 13874.0 +350.172621024257 2607.730712890625 +372.148688883306 1405.186401367188 +389.044748240917 7650.0 +390.04749755921 1913.0 +391.042419990568 2801.0 +392.068522384462 2797.0 +394.066194691334 1609.439208984375 +404.03664725 3756.0 +424.362220661973 1680.073608398438 +445.118239809427 2256.0 +457.032674519482 1580.0 +468.387534165811 1625.361328125 +487.228056299732 1735.0 +500.275588301319 14065.0 +501.278629401665 3579.0 +502.286881001175 2107.0 +505.851399270242 2207.88427734375 +531.255889309595 1828.0 +536.162574795725 4348.0 +537.164900413678 2412.0 +538.160905924694 1840.207275390625 +542.321702796647 4110.07568359375 +543.325936834084 1425.0 +544.336609702317 2008.0 +546.912855890436 1498.0 +592.225267665071 7023.0 +593.153130472392 2079.229736328125 +593.228621623492 2593.85986328125 +594.223736830213 3021.337890625 +607.216353924445 19371.0 +608.21987654802 6018.0 +609.216035675932 2735.843994140625 +610.184990477 2845.0 +612.185596819648 1643.0 +613.224838309655 6730.89697265625 +614.227226894726 2411.0 +629.198664613593 14632.0 +630.201165251457 4128.0 +631.197724705928 2446.0 +639.156464406238 1485.0 +641.154235888014 1515.855590820312 +654.147541437576 1594.0 +692.150340948486 1581.0 + +>ms2peaks +##specref ms_run[1]:sample=1 period=1 cycle=676 experiment=4 +##scan 121 +##n_id sample=1 period=1 cycle=676 experiment=4 +##m_id Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=4_0 +70.039827273652 5131.529296875 +82.041077772907 30.0 +82.066941721068 30.0 +83.048162364624 30.0 +89.038123713717 30.0 +98.998128961124 45.0 +99.005937159691 45.0 +116.057773265737 45.0 +116.068964884923 45.0 +125.014210234006 2627.0 +128.869373457499 30.0 +129.050864049931 30.0 +129.066487998016 43.279674530029 +130.062932087251 75.0 +130.074324678654 75.0 +131.069149811718 90.0 +137.012353655287 30.0 +143.074736350629 45.0 +143.085702367776 45.0 +149.013720936376 75.0 +150.009016679015 90.0 +151.029635761105 960.0 +153.071034687141 30.0 +164.027845684388 225.0 +166.040731347006 75.0 +167.084665955303 45.0 +168.094844704597 30.0 +173.861021388832 75.0 +178.040593736165 180.0 +191.04991567702 45.0 +203.057899363272 45.0 +220.08807292582 120.0 +289.119266976743 135.0 + +>ms2peaks +##specref ms_run[1]:sample=1 period=1 cycle=677 experiment=5 +##scan 131 +##n_id sample=1 period=1 cycle=677 experiment=5 +##m_id Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=677 experiment=5_0 +55.054639659329 105.0 +55.060017620298 92.68334197998 +56.049823597015 30.0 +57.069035771002 30.0 +65.037770341976 30.0 +69.832588352285 45.0 +70.039908024674 17805.998046875 +70.065015706368 30.0 +70.282524899395 30.0 +70.655650228794 30.0 +70.662690104158 30.0 +70.671685449976 30.0 +70.680369758222 30.0 +71.073891359706 30.0 +80.047874421886 45.0 +81.071842605128 75.0 +82.039226093295 45.0 +82.068250865158 45.0 +83.046676696339 105.0 +89.037423472355 210.0 +90.046133682594 75.0 +95.071588708154 60.0 +98.999966313572 135.0 +103.050438931432 30.0 +115.05516672796 150.0 +116.06252226169 210.0 +122.999173332647 45.0 +124.644051017099 60.0 +124.994916353506 582.297302246094 +125.014371187472 12549.0 +125.378378046066 30.0 +125.39053167682 30.0 +128.046903884584 225.0 +129.05537365472 75.0 +129.064357675053 60.0 +130.062595084552 180.0 +131.075918885468 60.0 +131.089262432243 60.0 +137.014910793247 150.0 +139.029843740401 105.0 +139.049300450331 47.856365203857 +143.072761538143 168.118270874023 +143.089863992705 96.726943969727 +149.013988771638 299.0 +150.010736302066 285.0 +151.030302067974 2704.0 +152.065539738869 30.0 +153.069429336803 150.0 +157.100583676525 45.0 +158.108303191611 30.0 +162.029804830888 30.0 +163.016613439026 30.0 +163.027865460821 30.0 +164.025164845834 997.0 +165.032309967876 230.13996887207 +165.048285398527 267.0 +165.068235719394 71.195930480957 +166.041158820976 300.0 +167.084364530618 120.0 +168.091368874638 180.0 +169.091421834386 45.0 +170.096865844811 90.0 +175.029690206742 135.0 +177.033157268884 30.0 +178.041386504653 543.0 +184.113505217082 75.0 +185.131013174733 45.0 +188.038417071829 30.0 +191.051083107779 30.0 +192.056950923082 75.0 +193.074112586304 150.0 +203.062235811985 251.0 +220.086936658481 240.0 +289.118902482462 413.0 + +>ms2peaks +##specref ms_run[1]:sample=1 period=1 cycle=678 experiment=3 +##scan 138 +##n_id sample=1 period=1 cycle=678 experiment=3 +##m_id Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=678 experiment=3_0 +55.05427043422 105.0 +56.052257730119 45.0 +57.069642685298 75.0 +57.076278365435 58.515125274658 +58.064669437897 30.0 +58.069671200743 30.0 +69.831821936433 120.0 +70.040097536413 24218.52734375 +70.062801316593 31.250431060791 +70.429050963972 30.0 +70.438704107352 30.0 +70.574152845601 53.442497253418 +71.040963389931 30.0 +71.331546496348 45.0 +71.547711411837 30.0 +71.554731582869 30.0 +81.069977524059 75.0 +82.040024877605 180.0 +82.064998747631 45.0 +82.071892633579 45.0 +83.046815904048 150.0 +89.037322041009 315.0 +93.058395230178 30.0 +94.065823923167 15.0 +95.073128971584 30.0 +98.998707139648 75.0 +115.038697637289 93.372489929199 +115.054570314383 213.739791870117 +116.061560571436 270.0 +122.996698381028 60.0 +123.007612454196 60.0 +123.995047593998 30.0 +124.002911191956 30.0 +125.014307674051 14773.0 +125.381473665944 30.0 +125.393966225912 30.0 +125.593372072822 30.0 +125.599867839373 30.0 +126.051609264641 30.0 +126.059603286955 30.0 +127.054832877589 45.0 +128.048017316181 180.0 +129.07207623044 45.0 +129.857221738296 30.0 +129.870016169563 30.0 +130.064515161974 366.0 +131.073613293583 60.0 +137.014278524345 249.0 +139.030165806979 60.0 +143.060465185927 75.0 +143.07401284668 104.308815002441 +143.089076083416 75.0 +144.077234015868 30.0 +149.015246811528 255.0 +150.010825556181 309.0 +150.598024297069 30.0 +150.607575019774 30.0 +151.029903267346 3468.0 +152.066634976325 75.0 +153.048272599038 48.395233154297 +153.069565327336 225.0 +156.056088009549 27.453353881836 +156.078507049206 90.0 +158.105667049362 30.0 +158.1156938966 30.0 +163.028234418456 150.0 +163.04907477486 101.341789245605 +164.024417450344 1260.0 +164.048222951239 223.749069213867 +165.033343347864 300.0 +165.07168912024 100.887588500977 +166.041504194847 358.0 +167.083021637505 120.0 +168.092033871908 180.0 +168.126067348571 15.0 +170.097096768962 45.0 +175.031788442407 270.0 +177.045702469556 45.0 +178.040557800332 739.0 +179.064601892177 45.0 +184.112879145243 75.0 +185.120289107757 30.0 +188.038359439527 30.0 +191.046836106019 45.0 +192.055368291335 195.0 +193.076440167615 180.0 +203.062460725867 150.0 +205.065521702945 45.0 +218.068791434007 45.0 +220.087014664115 542.0 +289.122158220479 827.0 + diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/trees/C15H17ClN4_[M+H]+.json b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/trees/C15H17ClN4_[M+H]+.json new file mode 100644 index 00000000000..d11caa9e219 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/trees/C15H17ClN4_[M+H]+.json @@ -0,0 +1,1301 @@ +{ + "molecularFormula" : "C15H17ClN4", + "root" : "C15H17ClN4", + "annotations" : { + "precursorIonType" : "[M + H]+", + "nodeBoost" : 1.0, + "numberOfUnconsideredCandidates" : 0, + "lowestConsideredCandidateScore" : 39.34241769057247, + "statistics" : { + "explainedIntensity" : 0.9685426989556167, + "explainedIntensityOfExplainablePeaks" : 0.980955482459397, + "ratioOfExplainedPeaks" : 0.7 + }, + "recalibration" : { + "separate" : [ "0.9999992499401706x + 0.0011672038944468", "1.0000082238596981x + -5.104749603361824E-4", "1.000006985872933x + -2.981000594672878E-4" ], + "merged" : "1.0000086927736447x + -7.328310364016488E-4" + } + }, + "fragments" : [ { + "id" : 0, + "molecularFormula" : "C15H17ClN4", + "ion" : "[M + H]+", + "massDeviation" : "4.02875003592188 ppm (0.0011648027474961964 m/z)", + "recalibratedMassDeviation" : "9.983512872948994 ppm (0.00288647654184615 m/z)", + "relativeIntensity" : 0.029158503804273542, + "mz" : 289.122615478838, + "recalibratedMass" : 289.12433715263234, + "peaks" : [ { + "intensity" : 413.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 289.118902482462 + }, { + "intensity" : 135.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 289.119266976743 + }, { + "intensity" : 827.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 289.122158220479 + } ], + "score" : 1.6666064826420646, + "scores" : { + "Chemical Prior" : 1.0, + "MS-Isotopes" : 2.6514068961066233, + "CommonRootLoss" : 0.0, + "Mass Deviation" : -0.3753625010304584, + "CarbohydrogenCompound" : 0.0, + "motif-search" : 0.0, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "BeautificationScorer" : -0.0, + "ImplicitAdductPeakScore" : 0.0, + "IntrinsicallyChargedScorer" : 0.0, + "StrangeElementRootScorer" : -1.6094379124341003 + }, + "isotopes" : { + "score" : 2.6514068961066233, + "mz" : [ 289.122615478838, 290.123323995928, 291.117964046924, 292.12026079967 ], + "relInt" : [ 1.0, 0.12405566547595867, 0.3197974347704109, 0.07354153398363017 ] + } + }, { + "id" : 1, + "molecularFormula" : "C13H14ClN", + "ion" : "[M + H]+", + "massDeviation" : "-7.901038496870883 ppm (-0.0017389159755225592 m/z)", + "recalibratedMassDeviation" : "-2.269617333617651 ppm (-4.995161163492412E-4 m/z)", + "relativeIntensity" : 0.019127978495603444, + "mz" : 220.087014664115, + "recalibratedMass" : 220.08825406397418, + "peaks" : [ { + "intensity" : 240.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 220.086936658481 + }, { + "intensity" : 542.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 220.087014664115 + }, { + "intensity" : 120.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 220.08807292582 + } ], + "score" : 1.3485751100694492, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.0989490225951921, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.0, + "ClippedPeakIsNoiseScorer" : 0.9475241326646413, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 2, + "molecularFormula" : "C13H11Cl", + "ion" : "[M + H]+", + "massDeviation" : "0.15427730493873867 ppm (3.132789447590767E-5 m/z)", + "recalibratedMassDeviation" : "5.864219249023691 ppm (0.0011908082714455759 m/z)", + "relativeIntensity" : 0.008503680018555412, + "mz" : 203.062235811985, + "recalibratedMass" : 203.06339529236197, + "peaks" : [ { + "intensity" : 251.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 203.062235811985 + }, { + "intensity" : 150.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 203.062460725867 + } ], + "score" : 0.7960274325027488, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.29206387067421696, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.0, + "ClippedPeakIsNoiseScorer" : 0.5880913031769656, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 3, + "molecularFormula" : "C12H13Cl", + "ion" : "[M + H]+", + "massDeviation" : "-7.325494888427065 ppm (-0.0014143804755235578 m/z)", + "recalibratedMassDeviation" : "-1.8835600979287652 ppm (-3.6367305762041724E-4 m/z)", + "relativeIntensity" : 0.00699804091302565, + "mz" : 193.076440167615, + "recalibratedMass" : 193.0774908750329, + "peaks" : [ { + "intensity" : 150.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 193.074112586304 + }, { + "intensity" : 180.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 193.076440167615 + } ], + "score" : 0.996896123628343, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.07791127867137017, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.06923559832384996, + "ClippedPeakIsNoiseScorer" : 0.5055718039758632, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 4, + "molecularFormula" : "C11H10ClN", + "ion" : "[M + H]+", + "massDeviation" : "-10.857081341139029 ppm (-0.0020851607555414375 m/z)", + "recalibratedMassDeviation" : "-5.423335810057452 ppm (-0.0010415864160222554 m/z)", + "relativeIntensity" : 0.005725669837930078, + "mz" : 192.055368291335, + "recalibratedMass" : 192.0564118656745, + "peaks" : [ { + "intensity" : 195.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 192.055368291335 + }, { + "intensity" : 75.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 192.056950923082 + } ], + "score" : 0.7479882715326616, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.2533248151486868, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.07944631708665018, + "ClippedPeakIsNoiseScorer" : 0.42186676959469815, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 5, + "molecularFormula" : "C10H8ClN", + "ion" : "[M + H]+", + "massDeviation" : "-6.9960899578574445 ppm (-0.0012455877585182407 m/z)", + "recalibratedMassDeviation" : "-1.684546009897009 ppm (-2.9991910426474533E-4 m/z)", + "relativeIntensity" : 0.031003441863162125, + "mz" : 178.040557800332, + "recalibratedMass" : 178.04150346898626, + "peaks" : [ { + "intensity" : 739.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 178.040557800332 + }, { + "intensity" : 180.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 178.040593736165 + }, { + "intensity" : 543.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 178.041386504653 + } ], + "score" : 1.8341226184013202, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.0634643182644769, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.2195944219966799, + "ClippedPeakIsNoiseScorer" : 1.1779925146691173, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 6, + "molecularFormula" : "C11H7Cl", + "ion" : "[M + H]+", + "massDeviation" : "5.051004302293667 ppm (8.840863164607526E-4 m/z)", + "recalibratedMassDeviation" : "10.333703102287899 ppm (0.0018087360902825367 m/z)", + "relativeIntensity" : 0.008588504756895116, + "mz" : 175.031788442407, + "recalibratedMass" : 175.0327130921808, + "peaks" : [ { + "intensity" : 135.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 175.029690206742 + }, { + "intensity" : 270.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 175.031788442407 + } ], + "score" : 0.8391774714418639, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.5028338935897302, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.24968211557593012, + "ClippedPeakIsNoiseScorer" : 0.5923292494556641, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 7, + "molecularFormula" : "C9H8ClN", + "ion" : "[M + H]+", + "massDeviation" : "-1.8019184118201104 ppm (-2.991932435350009E-4 m/z)", + "recalibratedMassDeviation" : "3.3886023208093694 ppm (5.626515469145943E-4 m/z)", + "relativeIntensity" : 0.015544133300750914, + "mz" : 166.041504194847, + "recalibratedMass" : 166.04236603963744, + "peaks" : [ { + "intensity" : 75.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 166.040731347006 + }, { + "intensity" : 300.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 166.041158820976 + }, { + "intensity" : 358.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 166.041504194847 + } ], + "score" : 1.9768507026090707, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.40980000000000016, + "Mass Deviation" : -0.12521848561760004, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.33958495805153, + "ClippedPeakIsNoiseScorer" : 0.8526842301751405, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 8, + "molecularFormula" : "C9H6ClN", + "ion" : "[M + H]+", + "massDeviation" : "-10.583020342391098 ppm (-0.00173587374652584 m/z)", + "recalibratedMassDeviation" : "-5.414532125071871 ppm (-8.881200677706147E-4 m/z)", + "relativeIntensity" : 0.05263375013978686, + "mz" : 164.024417450344, + "recalibratedMass" : 164.02526520402276, + "peaks" : [ { + "intensity" : 1260.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 164.024417450344 + }, { + "intensity" : 997.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 164.025164845834 + }, { + "intensity" : 225.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 164.027845684388 + } ], + "score" : 2.100456325757585, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.2100362538653716, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.35975582549656004, + "ClippedPeakIsNoiseScorer" : 1.4507367541263962, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 9, + "molecularFormula" : "C12H8", + "ion" : "[M + H]+", + "massDeviation" : "-2.0342434100017073 ppm (-3.113807545389591E-4 m/z)", + "recalibratedMassDeviation" : "3.0041334568330123 ppm (4.5984371928398105E-4 m/z)", + "relativeIntensity" : 0.008588504756895116, + "mz" : 153.069565327336, + "recalibratedMass" : 153.07033655180982, + "peaks" : [ { + "intensity" : 150.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 153.069429336803 + }, { + "intensity" : 225.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 153.069565327336 + }, { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 153.071034687141 + } ], + "score" : 1.4612803252220892, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.10035327096021494, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.46930434672664, + "ClippedPeakIsNoiseScorer" : 0.5923292494556641, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 10, + "molecularFormula" : "C9H7Cl", + "ion" : "[M + H]+", + "massDeviation" : "-6.628414127846931 ppm (-0.0010010887445446315 m/z)", + "recalibratedMassDeviation" : "-1.6163147953457855 ppm (-2.4411309070160314E-4 m/z)", + "relativeIntensity" : 0.15124250845969375, + "mz" : 151.029903267346, + "recalibratedMass" : 151.03066024299983, + "peaks" : [ { + "intensity" : 960.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 151.029635761105 + }, { + "intensity" : 3468.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 151.029903267346 + }, { + "intensity" : 2704.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 151.030302067974 + } ], + "score" : 3.0396353438057293, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.051097080108690296, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.4897009673265402, + "ClippedPeakIsNoiseScorer" : 2.1010314565878794, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 11, + "molecularFormula" : "C8H4ClN", + "ion" : "[M + H]+", + "massDeviation" : "2.148485546150962 ppm (3.222960904736283E-4 m/z)", + "recalibratedMassDeviation" : "7.147132439408817 ppm (0.0010721525969188406 m/z)", + "relativeIntensity" : 0.01450503025608953, + "mz" : 150.010825556181, + "recalibratedMass" : 150.01157541268745, + "peaks" : [ { + "intensity" : 90.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 150.009016679015 + }, { + "intensity" : 285.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 150.010736302066 + }, { + "intensity" : 309.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 150.010825556181 + } ], + "score" : 1.5592234415623711, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.2622038722907288, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.49989174443819007, + "ClippedPeakIsNoiseScorer" : 0.8215355694149097, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 12, + "molecularFormula" : "C9H5Cl", + "ion" : "[M + H]+", + "massDeviation" : "-8.492628530827854 ppm (-0.0012655204525344743 m/z)", + "recalibratedMassDeviation" : "-3.694435933177676 ppm (-5.505252761679458E-4 m/z)", + "relativeIntensity" : 0.013338690103918588, + "mz" : 149.013988771638, + "recalibratedMass" : 149.01470376681436, + "peaks" : [ { + "intensity" : 75.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 149.013720936376 + }, { + "intensity" : 299.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 149.013988771638 + }, { + "intensity" : 255.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 149.015246811528 + } ], + "score" : 1.671718347473519, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.12223820196012986, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5098601122836199, + "ClippedPeakIsNoiseScorer" : 0.7840964371500289, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 13, + "molecularFormula" : "C10H8N", + "ion" : "[M + H]+", + "massDeviation" : "-1.3221940046347078 ppm (-1.891699475322639E-4 m/z)", + "recalibratedMassDeviation" : "3.333710650652999 ppm (4.769654096605791E-4 m/z)", + "relativeIntensity" : 0.00673141737535152, + "mz" : 143.072761538143, + "recalibratedMass" : 143.0734276735002, + "peaks" : [ { + "intensity" : 168.118270874023, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 143.072761538143 + }, { + "intensity" : 104.308815002441, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 143.07401284668 + }, { + "intensity" : 45.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 143.074736350629 + } ], + "score" : 1.4541130020089041, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.10443130063215107, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.5692723846185701, + "ClippedPeakIsNoiseScorer" : 0.48927191802248526, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 14, + "molecularFormula" : "C8H5Cl", + "ion" : "[M + H]+", + "massDeviation" : "-7.1216500647878735 ppm (-9.757677455297653E-4 m/z)", + "recalibratedMassDeviation" : "-2.3114520999701407 ppm (-3.167034652165057E-4 m/z)", + "relativeIntensity" : 0.009097453186933346, + "mz" : 137.014278524345, + "recalibratedMass" : 137.01493758862532, + "peaks" : [ { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 137.012353655287 + }, { + "intensity" : 249.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 137.014278524345 + }, { + "intensity" : 150.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 137.014910793247 + } ], + "score" : 1.6796019066475418, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.06723469013750483, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.62985721475655, + "ClippedPeakIsNoiseScorer" : 0.6169793820284969, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 15, + "molecularFormula" : "C9H7N", + "ion" : "[M + H]+", + "massDeviation" : "-4.693932974605689 ppm (-6.105141165448913E-4 m/z)", + "recalibratedMassDeviation" : "0.0 ppm (0.0 m/z)", + "relativeIntensity" : 0.013169040627239179, + "mz" : 130.064515161974, + "recalibratedMass" : 130.06512567609053, + "peaks" : [ { + "intensity" : 180.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 130.062595084552 + }, { + "intensity" : 75.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 130.062932087251 + }, { + "intensity" : 366.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 130.064515161974 + } ], + "score" : 1.9777624604643393, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : 0.0, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.6993548483802601, + "ClippedPeakIsNoiseScorer" : 0.7784076120840793, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 16, + "molecularFormula" : "C7H5Cl", + "ion" : "[M + H]+", + "massDeviation" : "-7.572077605733799 ppm (-9.466180395349966E-4 m/z)", + "recalibratedMassDeviation" : "-2.9707185428347915 ppm (-3.7138403078529336E-4 m/z)", + "relativeIntensity" : 0.6351040221339551, + "mz" : 125.014307674051, + "recalibratedMass" : 125.01488290805975, + "peaks" : [ { + "intensity" : 2627.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 125.014210234006 + }, { + "intensity" : 14773.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 125.014307674051 + }, { + "intensity" : 12549.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 125.014371187472 + } ], + "score" : 5.711352860476965, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.05837100000000017, + "Mass Deviation" : -0.0796817857251408, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.74985692325949, + "ClippedPeakIsNoiseScorer" : 3.7896597229426163, + "StrangeElementFragmentScorer" : 0.693147, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 17, + "molecularFormula" : "C9H7", + "ion" : "[M + H]+", + "massDeviation" : "-4.231415225772055 ppm (-4.9110465452884E-4 m/z)", + "recalibratedMassDeviation" : "0.18599185729384737 ppm (2.15866005675025E-5 m/z)", + "relativeIntensity" : 0.011133246907086261, + "mz" : 116.061560571436, + "recalibratedMass" : 116.0620732626911, + "peaks" : [ { + "intensity" : 45.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 116.057773265737 + }, { + "intensity" : 270.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 116.061560571436 + }, { + "intensity" : 210.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 116.06252226169 + } ], + "score" : 2.097860087257688, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.05837100000000017, + "Mass Deviation" : -0.0043244674472150205, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.83938439428564, + "ClippedPeakIsNoiseScorer" : 0.7044291604192628, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 18, + "molecularFormula" : "C9H6", + "ion" : "[M + H]+", + "massDeviation" : "2.987019911741795 ppm (3.436702924659585E-4 m/z)", + "recalibratedMassDeviation" : "7.381915438388569 ppm (8.493268415747934E-4 m/z)", + "relativeIntensity" : 0.007713533167280343, + "mz" : 115.054570314383, + "recalibratedMass" : 115.05507597093211, + "peaks" : [ { + "intensity" : 213.739791870117, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 115.054570314383 + }, { + "intensity" : 150.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 115.05516672796 + } ], + "score" : 1.6966568554700618, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.19943193237483844, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 0.84945429685617, + "ClippedPeakIsNoiseScorer" : 0.5466344909887302, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 19, + "molecularFormula" : "C5H3Cl", + "ion" : "[M + H]+", + "massDeviation" : "3.657430350258991 ppm (3.6208548146987596E-4 m/z)", + "recalibratedMassDeviation" : "6.724954934037173 ppm (6.657723542105032E-4 m/z)", + "relativeIntensity" : 0.0054075770691561845, + "mz" : 98.999966313572, + "recalibratedMass" : 99.00027000044474, + "peaks" : [ { + "intensity" : 45.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 98.998128961124 + }, { + "intensity" : 75.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 98.998707139648 + }, { + "intensity" : 135.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 98.999966313572 + } ], + "score" : 2.4503111641149884, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.15107971337013218, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.0100003368642798, + "ClippedPeakIsNoiseScorer" : 0.3982435406208407, + "StrangeElementFragmentScorer" : 0.693147, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 20, + "molecularFormula" : "C7H4", + "ion" : "[M + H]+", + "massDeviation" : "-14.09003609689925 ppm (-0.0012545390815290602 m/z)", + "recalibratedMassDeviation" : "-10.452160016730344 ppm (-9.306357229235118E-4 m/z)", + "relativeIntensity" : 0.011769432444634048, + "mz" : 89.037322041009, + "recalibratedMass" : 89.03764594436761, + "peaks" : [ { + "intensity" : 315.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 89.037322041009 + }, { + "intensity" : 210.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 89.037423472355 + }, { + "intensity" : 30.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 89.038123713717 + } ], + "score" : 2.116589557359265, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.22181419068040337, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.10962677958991, + "ClippedPeakIsNoiseScorer" : 0.7287769684497583, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + }, { + "id" : 21, + "molecularFormula" : "C2H3N3", + "ion" : "[M + H]+", + "massDeviation" : "1.7702477128452196 ppm (1.239883224712912E-4 m/z)", + "recalibratedMassDeviation" : "4.499974091226673 ppm (3.1517948461612377E-4 m/z)", + "relativeIntensity" : 1.0, + "mz" : 70.040097536413, + "recalibratedMass" : 70.04028872757515, + "peaks" : [ { + "intensity" : 5131.529296875, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 70.039827273652 + }, { + "intensity" : 17805.998046875, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 1, + "mz" : 70.039908024674 + }, { + "intensity" : 24218.52734375, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 2, + "mz" : 70.040097536413 + } ], + "score" : 13.120190598456494, + "scores" : { + "TreeSizeScorer" : 0.5, + "StrangeElementSmallFragmentScorer" : 0.0, + "Common Fragments" : 0.0, + "Mass Deviation" : -0.06689137666643918, + "CarbohydrogenFragment" : 0.0, + "MS2-Isotopes" : 0.0, + "FragmentSizeScorer" : 1.29959902463587, + "ClippedPeakIsNoiseScorer" : 11.387482950487064, + "StrangeElementFragmentScorer" : 0.0, + "CommonRootLoss" : 0.0, + "PhosphorScorer" : 0.0, + "Predefined" : 0.0, + "ImplicitAdductPeakScore" : 0.0 + } + } ], + "losses" : [ { + "source" : 0, + "target" : 1, + "molecularFormula" : "C2H3N3", + "score" : -4.81813153786506, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.6664372244936265, + "Loss RDBE" : 0.0, + "Mass Deviation" : -2.801390678581072, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 2, + "molecularFormula" : "H3N", + "score" : -0.9743436346507856, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.11948631770900775, + "Loss RDBE" : 0.0, + "Mass Deviation" : -1.2840146412981046, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4175307821975065, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 3, + "molecularFormula" : "CHN", + "score" : 0.0810592346526999, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8327051934599607, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.14682817465066292, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -0.6164443263154182, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 4, + "molecularFormula" : "C2H4", + "score" : -0.3534233086799539, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8796453182290644, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.15793189373842093, + "Free Radical" : -0.09373397349900595, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -0.9814027596715915, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 1, + "target" : 5, + "molecularFormula" : "C3H6", + "score" : -1.034030295917232, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.1054294477565412, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.23758391533178658, + "Free Radical" : -0.09373397349900595, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -1.8081418548429808, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 6, + "molecularFormula" : "C2H4", + "score" : -0.6615075708908357, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8795937441051995, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.46596458182543776, + "Free Radical" : -0.09373397349900595, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -0.9814027596715915, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 4, + "target" : 7, + "molecularFormula" : "C2H2", + "score" : -0.30385098678480016, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7806466386229776, + "Loss RDBE" : 0.0, + "Mass Deviation" : -1.301139384707421, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 4, + "target" : 8, + "molecularFormula" : "C2H4", + "score" : -0.3550225003576503, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8796154014904287, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.1595011686774816, + "Free Radical" : -0.09373397349900595, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -0.9814027596715915, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 2, + "target" : 9, + "molecularFormula" : "CH3Cl", + "score" : -0.19825162952431385, + "scores" : { + "StrangeElementLossScorer" : 0.6931471805599453, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.0415747583465595, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.15611195036155656, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -1.7884881602280824, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 5, + "target" : 10, + "molecularFormula" : "CHN", + "score" : 0.12057909127865941, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8327091178857824, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.10731224245052505, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -0.6164443263154182, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 7, + "target" : 11, + "molecularFormula" : "CH4", + "score" : -0.004622776324140654, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.2938367268961999, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.31341975939115974, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.5910071678043987, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 7, + "target" : 12, + "molecularFormula" : "H3N", + "score" : -0.23836484996367735, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -0.11903606981265469, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.5484861045073495, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.4175307821975065, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 5, + "target" : 13, + "molecularFormula" : "Cl", + "score" : -2.0676945805471414, + "scores" : { + "StrangeElementLossScorer" : 0.6931471805599453, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.0679891749004824, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.6175986742415093, + "Free Radical" : -0.09373397349900595, + "PureCarbonNitrogenLossScorer" : -2.3025850929940455, + "CommonLossEdgeScorer" : -0.8149131952730082, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 8, + "target" : 14, + "molecularFormula" : "CHN", + "score" : -0.1745184374312293, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.8326838354525474, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.4023844887271788, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -0.6164443263154182, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 7, + "target" : 15, + "molecularFormula" : "ClH", + "score" : 1.2604022393269758, + "scores" : { + "StrangeElementLossScorer" : 0.6931471805599453, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.0808653308207727, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.1401502246891185, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -0.3850865895234441, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 10, + "target" : 16, + "molecularFormula" : "C2H2", + "score" : 0.9751787462713936, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7807427913265004, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.02220580435475013, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 13, + "target" : 17, + "molecularFormula" : "CHN", + "score" : 0.09247407554668366, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.832735910087079, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.13544405038379745, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -0.6164443263154182, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 10, + "target" : 18, + "molecularFormula" : "ClH", + "score" : 0.539518864596601, + "scores" : { + "StrangeElementLossScorer" : 0.6931471805599453, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.080846590800208, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.8610148593989285, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -0.3850865895234441, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 16, + "target" : 19, + "molecularFormula" : "C2H2", + "score" : 0.16861703788797755, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 0.7806731438869905, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.8286978652986563, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : 0.20501521714082305, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 16, + "target" : 20, + "molecularFormula" : "ClH", + "score" : 1.2621104107028407, + "scores" : { + "StrangeElementLossScorer" : 0.6931471805599453, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : 1.080865292356485, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.13844201484896576, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -0.3850865895234441, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + }, { + "source" : 0, + "target" : 21, + "molecularFormula" : "C13H14ClN", + "score" : -6.316756389659614, + "scores" : { + "StrangeElementLossScorer" : 0.0, + "FattyAcidChainScore" : 0.0, + "LossSizeScorer" : -3.4063012031961772, + "Loss RDBE" : 0.0, + "Mass Deviation" : -0.22727710268582155, + "Free Radical" : 0.011626542158820332, + "PureCarbonNitrogenLossScorer" : 0.0, + "CommonLossEdgeScorer" : -2.694804625936435, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "AdductSwitchLossScorer" : 0.0, + "MultimereLossScorer" : 0.0 + } + } ] +} \ No newline at end of file diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/compound.config b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/compound.config new file mode 100644 index 00000000000..7f8f23a49b3 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/compound.config @@ -0,0 +1,199 @@ +# Allows the USER to Specify the ScoreType that is used to rank the list of Molecular Formula +# Identifications +# before CSI:FingerID predictions are calculated. Auto means that this ScoreType is +# automatically set depending on the executed workflow. +FormulaResultRankingScore=AUTO +PrintCitations=True +RecomputeResults=False +# Maximum number of candidate molecular formulas (fragmentation trees computed by SIRIUS) +# per compound which are considered by ZODIAC. +# This is the threshold used for all compounds with mz below 300 m/z and is used to interpolate the +# number of candidates for larger compounds. +# If lower than 0, all available candidates are considered. +ZodiacNumberOfConsideredCandidatesAt300Mz=10 +# As default ZODIAC runs a 2-step approach. First running 'good quality compounds' only, and +# afterwards including the remaining. +ZodiacRunInTwoSteps=true +# Ratio of candidate molecular formulas (fragmentation trees computed by SIRIUS) per +# compound which are forced for each ionization to be considered by ZODIAC. +# This depends on the number of candidates ZODIAC considers. E.g. if 50 candidates are +# considered and a ratio of 0.2 is set, at least 10 candidates per ionization will be +# considered, which might increase the number of candidates above 50. +ZodiacRatioOfConsideredCandidatesPerIonization=0.2 +# cluster compounds before running ZODIAC +ZodiacClusterCompounds=false +# Maximum number of candidate molecular formulas (fragmentation trees computed by SIRIUS) +# per compound which are considered by ZODIAC. +# This is the threshold used for all compounds with mz above 800 m/z and is used to interpolate the +# number of candidates for smaller compounds. +# If lower than 0, all available candidates are considered. +ZodiacNumberOfConsideredCandidatesAt800Mz=50 +MotifDbFile=none +StructurePredictors=CSI_FINGERID +# Candidates matching the lipid class estimated by El Gordo will be tagged. +# The lipid class will only be available if El Gordo predicts that the MS/MS is a lipid spectrum. +# If this parameter is set to 'false' El Gordo will still be executed and e.g. improve the +# fragmentation +# tree, but the matching candidates will not be tagged as lipid class. +InjectElGordoCompounds=True +NumberOfStructureCandidates=10000 +FormulaSearchDB=none +StructureSearchDB=BIO +# Specifies if the list of Molecular Formula Identifications is filtered by a soft threshold +# (calculateThreshold) before CSI:FingerID predictions are calculated. +FormulaResultThreshold=true +MedianNoiseIntensity=0.015 +# This configuration holds a set of user given formulas to be used as candidates for SIRIUS +# Note: This set might be merged with other sources like formulas from databases +# Set of Molecular Formulas to be used as candidates for molecular formula estimation with +# SIRIUS +CandidateFormulas=, +# Keywords that can be assigned to a input spectrum to judge its quality. Available keywords +# are: Good, LowIntensity, NoMS1Peak, FewPeaks, Chimeric, NotMonoisotopicPeak, +# PoorlyExplained +CompoundQuality=UNKNOWN +# An adduct switch is a switch of the ionization mode within a spectrum, e.g. an ion replaces an +# sodium adduct +# with a protonation during fragmentation. Such adduct switches heavily increase the +# complexity of the +# analysis, but for certain adducts they might happen regularly. Adduct switches are written +# in the +# form {@literal a -> b, a -> c, d -> c} where a, b, c, and d are adducts and {@literal a -> b} denotes an +# allowed switch from +# a to b within the MS/MS spectrum. +PossibleAdductSwitches=[M+Na]+:[M+H]+,[M+K]+:[M+H]+,[M+Cl]-:[M-H]- +IsotopeMs2Settings=IGNORE +# use this parameter if you want to force to report at least +# numberOfResultsToKeepPerIonization results per ionization. +# if le 0, this parameter will have no effect and just the top +# numberOfResultsToKeep results will be reported. +NumberOfCandidatesPerIon=1 +# Enable/Disable the hypothesen driven recalibration of MS/MS spectra +# Must be either 'ALLOWED' or FORBIDDEN' +ForbidRecalibration=ALLOWED +NumberOfCandidates=10 +# Configuration profile to store instrument specific algorithm properties. +# Some of the default profiles are: 'qtof', 'orbitrap', 'fticr'. +AlgorithmProfile=default +NoiseThresholdSettings.intensityThreshold = 0.005 +NoiseThresholdSettings.maximalNumberOfPeaks = 60 +NoiseThresholdSettings.basePeak = NOT_PRECURSOR +NoiseThresholdSettings.absoluteThreshold = 0 + +# Mass accuracy setting for MS1 spectra. Mass accuracies are always written as "X ppm (Y Da)" +# with X and Y +# are numerical values. The ppm is a relative measure (parts per million), Da is an absolute +# measure. For each mass, the +# maximum of relative and absolute is used. +MS1MassDeviation.allowedMassDeviation = 10.0 ppm +MS1MassDeviation.standardMassDeviation = 10.0 ppm +MS1MassDeviation.massDifferenceDeviation = 5.0 ppm + +# Mass accuracy setting for MS2 spectra. Mass Accuracies are always written as "X ppm (Y Da)" +# with X and Y +# are numerical values. The ppm is a relative measure (parts per million), Da is an absolute +# measure. For each mass, the +# maximum of relative and absolute is used. +MS2MassDeviation.allowedMassDeviation = 10.0 ppm +MS2MassDeviation.standardMassDeviation = 10.0 ppm + +# Describes how to deal with Adducts: +# Pos Examples: +# [M+H]+,[M]+,[M+K]+,[M+Na]+,[M+H-H2O]+,[M+Na2-H]+,[M+2K-H]+,[M+NH4]+,[M+H3O]+,[M+MeOH+H]+,[M+ACN+H]+,[M+2ACN+H]+,[M+IPA+H]+,[M+ACN+Na]+,[M+DMSO+H]+ +# Neg Examples: +# [M-H]-,[M]-,[M+K-2H]-,[M+Cl]-,[M-H2O-H]-,[M+Na-2H]-,M+FA-H]-,[M+Br]-,[M+HAc-H]-,[M+TFA-H]-,[M+ACN-H]- +# Enforced ion modes that are always considered. +AdductSettings.enforced = , +# Detectable ion modes which are only considered if there is an indication in the MS1 scan (e.g. +# correct mass delta). +AdductSettings.detectable = [M+H]+,[M+K]+,[M+Na]+,[M+H-H2O]+,[M+H-H4O2]+,[M+NH4]+,[M-H]-,[M+Cl]-,[M-H2O-H]-,[M+Br]- +# Fallback ion modes which are considered if the auto detection did not find any indication for +# an ion mode. +AdductSettings.fallback = [M+H]+,[M-H]-,[M+Na]+,[M+K]+ + +# These configurations hold the information how to autodetect elements based on the given +# formula constraints. +# Note: If the compound is already assigned to a specific molecular formula, this annotation is +# ignored. +# Enforced elements are always considered +FormulaSettings.enforced = C,H,N,O,P +# Detectable elements are added to the chemical alphabet, if there are indications for them +# (e.g. in isotope pattern) +FormulaSettings.detectable = S,Br,Cl,B,Se +# Fallback elements are used, if the auto-detection fails (e.g. no isotope pattern available) +FormulaSettings.fallback = S + +# This configurations define how to deal with isotope patterns in MS1. +# When filtering is enabled, molecular formulas are excluded if their theoretical isotope +# pattern does not match +# the theoretical one, even if their MS/MS pattern has high score. +IsotopeSettings.filter = True +# multiplier for the isotope score. Set to 0 to disable isotope scoring. Otherwise, the score +# from isotope +# pattern analysis is multiplied with this coefficient. Set to a value larger than one if your +# isotope +# pattern data is of much better quality than your MS/MS data. +IsotopeSettings.multiplier = 1 + +# This configurations define a timeout for the tree computation. As the underlying problem is +# NP-hard, it might take +# forever to compute trees for very challenging (e.g. large mass) compounds. Setting an time +# constraint allow the program +# to continue with other instances and just skip the challenging ones. +# Note that, due to multithreading, this time constraints are not absolutely accurate. +# Set the maximum number of seconds for computing a single compound. Set to 0 to disable the time +# constraint. +Timeout.secondsPerInstance = 0 +# Set the maximum number of seconds for a single molecular formula check. Set to 0 to disable the +# time constraint +Timeout.secondsPerTree = 0 +# Ignore isotope peaks below this intensity. +# This value should reflect the smallest relative intensive which is still above noise level. +# Obviously, this is hard to judge without having absolute values. Keeping this value around 1 +# percent is +# fine for most settings. Set it to smaller values if you trust your small intensities. +ms1.minimalIntensityToConsider = 0.01 +# The average absolute deviation between theoretical and measured intensity of isotope +# peaks. +# Do not change this parameter without a good reason! +ms1.absoluteIntensityError = 0.02 +# The average relative deviation between theoretical and measured intensity of isotope +# peaks. +# Do not change this parameter without a good reason! +ms1.relativeIntensityError = 0.08 +# Set minimum m/z to enable heuristic preprocessing. The heuristic will be used to initially +# rank the formula candidates. The Top (NumberOfCandidates) candidates will then be +# computed exactly by solving the ILP. +UseHeuristic.mzToUseHeuristic = 300 +# Set minimum m/z to only use heuristic tree computation. No exact tree computation (ILP) will +# be performed for this compounds. +UseHeuristic.mzToUseHeuristicOnly = 650 + +# Defines the proportion of edges of the complete network which will be ignored. +ZodiacEdgeFilterThresholds.thresholdFilter = 0.95 +# Minimum number of candidates per compound which are forced to have at least +# [minLocalConnections] connections to other compounds. +# E.g. 2 candidates per compound must have at least 10 connections to other compounds +ZodiacEdgeFilterThresholds.minLocalCandidates = 1 +# Minimum number of connections per candidate which are forced for at least +# [minLocalCandidates] candidates to other compounds. +# E.g. 2 candidates per compound must have at least 10 connections to other compounds +ZodiacEdgeFilterThresholds.minLocalConnections = 10 + +# Number of epochs to run the Gibbs sampling. When multiple Markov chains are computed, all +# chains' iterations sum up to this value. +ZodiacEpochs.iterations = 20000 +# Number of epochs considered as 'burn-in period'. +# Samples from the beginning of a Markov chain do not accurately represent the desired +# distribution of candidates and are not used to estimate the ZODIAC score. +ZodiacEpochs.burnInPeriod = 2000 +# Number of separate Gibbs sampling runs. +ZodiacEpochs.numberOfMarkovChains = 10 + +# Lambda used in the scoring function of spectral library hits. The higher this value the higher +# are librar hits weighted in ZODIAC scoring. +ZodiacLibraryScoring.lambda = 1000 +# Spectral library hits must have at least this cosine or higher to be considered in scoring. +# Value must be in [0,1]. +ZodiacLibraryScoring.minCosine = 0.5 + diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/compound.info b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/compound.info new file mode 100644 index 00000000000..ceb6a218d81 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/compound.info @@ -0,0 +1,6 @@ +index 7 +name SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos +ionMass 326.094454354613 +ionType [M + Na]+ +rt 447.10000000002:NaN,NaN +rankingScoreType sirius.scores.SiriusScore diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/formula_candidates.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/formula_candidates.tsv new file mode 100644 index 00000000000..2c03c9e7d6d --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/formula_candidates.tsv @@ -0,0 +1,2 @@ +formulaRank molecularFormula adduct precursorFormula SiriusScore TreeScore IsotopeScore numExplainedPeaks explainedIntensity medianMassErrorFragmentPeaks(ppm) medianAbsoluteMassErrorFragmentPeaks(ppm) massErrorPrecursor(ppm) lipidClass +1 C13H22NO3PS [M + Na]+ C13H22NO3PS -2.3675697077238156 -2.3675697077238156 0.0 1 0.0 -1.7404143799237406 1.7404143799237406 -1.7404143799237406 diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/scores/C13H22NO3PS_[M+Na]+.info b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/scores/C13H22NO3PS_[M+Na]+.info new file mode 100644 index 00000000000..76ae94bace5 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/scores/C13H22NO3PS_[M+Na]+.info @@ -0,0 +1,3 @@ +sirius.scores.IsotopeScore 0.0 +sirius.scores.TreeScore -2.3675697077238156 +sirius.scores.SiriusScore -2.3675697077238156 diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/spectra/C13H22NO3PS_[M+Na]+.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/spectra/C13H22NO3PS_[M+Na]+.tsv new file mode 100644 index 00000000000..c4a92bb44d3 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/spectra/C13H22NO3PS_[M+Na]+.tsv @@ -0,0 +1,2 @@ +mz intensity rel.intensity exactmass formula ionization +326.094454 90.00 100.00 326.095022 C13H22NO3PS [M + Na]+ diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/spectrum.ms b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/spectrum.ms new file mode 100644 index 00000000000..a427c1111d9 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/spectrum.ms @@ -0,0 +1,178 @@ +>compound 0_7960809195137357048-676005--122--Fenamiphos +>formula C13H22NO3PS +>parentmass 326.094454354613 +>ionization [M + Na]+ +>instrumentation Unknown (LCMS) +>source file:///home/axel/dev/OpenMS/src/tests/topp/SiriusExport_2_output.ms +>quality UNKNOWN +>rt 447.10000000002s + +>ms1merged +##fid 7960809195137357048 +##fmz 326.094454354612708 +##des Fenamiphos +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source format [MS, MS:1000562, ABI WIFF format,] +326.094454354613 187407.0768380293 +327.096383244799 30166.116877709566 + +>ms1peaks +52.005351813457 2501.610107421875 +53.013412581284 13134.5205078125 +53.850226225992 1302.909057617188 +54.009140063564 338983.65625 +55.006042248338 6435.41259765625 +55.011148435189 6609.39404296875 +55.054172395822 1772.104248046875 +55.934029229957 5757.919921875 +56.941868288709 2705.908203125 +59.049392394217 65787.7578125 +60.04419739655 9389.001953125 +61.039698624921 1629.770751953125 +63.997582420249 4596.09619140625 +64.004915539546 4860.728515625 +68.011405901665 27484.29296875 +68.993238795734 11816.1728515625 +69.044514210085 12151.7626953125 +72.936346245282 1770.0 +73.063844648998 1632.810180664062 +76.485866327556 2207.0 +79.020638014668 15456.1591796875 +80.048700307132 11716.7060546875 +81.936658440041 8339.158203125 +82.995849176432 8191.0 +87.054215388379 1432.329345703125 +89.50580663687 1376.0 +90.488666027165 1798.0 +95.952211902793 2472.0 +97.967974119285 6640.0 +100.0745588278 1418.0 +102.090063528932 1768.0 +109.942148206295 1646.0 +113.96281092092 1728.0009765625 +114.090265101894 9843.087890625 +118.085166173822 5466.14697265625 +122.095082275611 3591.515380859375 +122.962671452755 9919.435546875 +123.090603383338 1818.105346679688 +130.157985838236 1433.0 +136.020144210415 1305.642211914062 +141.111768954054 1381.647338867188 +141.957291332652 13999.958984375 +147.090365251433 2315.56494140625 +149.021998403294 4169.404296875 +151.095653127576 2632.1923828125 +151.109600618565 2638.50390625 +155.06904919199 1400.58837890625 +155.10522171537 1306.244873046875 +155.972774632456 3955.750244140625 +158.152847157321 10190.6318359375 +161.094883274868 1469.0 +164.993233307885 1413.0 +170.0947568042 2692.873779296875 +173.07909618349 5464.607421875 +174.990754641374 1338.0 +175.120920396226 1335.489135742188 +178.157288006504 1567.557739257812 +179.104881581157 1856.0 +182.960071822982 1596.667236328125 +186.016812097735 3128.0 +194.115183195725 3037.01904296875 +195.105676043577 1846.959228515625 +195.121034909827 2138.53466796875 +198.183715433637 1614.0 +201.983396783946 6476.0 +217.007534943089 16000.083984375 +217.105603079 12722.193359375 +218.010461830348 1723.0 +218.108916975941 1918.0 +219.094207015885 1394.0 +234.033666185649 17919.0 +235.036061869219 1699.0 +239.087710708037 2715.0 +245.038087259231 3705.0 +246.860587751512 3017.0 +250.998652800198 2461.0 +252.996040050118 1751.0 +262.065226573716 31878.271484375 +263.067812997194 3540.0 +264.062744585962 1732.0 +276.080875651007 47441.0 +277.083729023421 6202.904296875 +278.078049070253 2909.8056640625 +279.092264164105 2269.0 +281.049607531965 1759.0 +284.16370925301 5971.3173828125 +285.167422523505 1450.9375 +289.120547785899 45105.26171875 +290.122834000335 8899.0 +291.11814896433 16223.0 +292.119468760172 3916.748291015625 +303.104211105075 4272.90087890625 +303.190626643079 3701.817626953125 +304.121038021889 1154982.0 +304.680120827865 1361.469604492188 +304.720450396369 1578.193115234375 +304.756696628278 1464.1357421875 +304.826755934771 1415.802856445312 +304.888295222133 4211.7490234375 +304.975939340234 6444.7470703125 +305.112954471951 109660.9765625 +306.110248734555 72833.0 +307.111946842557 10169.5791015625 +307.247397220322 1757.839477539062 +310.1202124831 5088.0 +320.107070842572 7286.0 +321.109817317563 1634.396606445312 +321.134008500327 1645.504272460938 +326.094135509242 51581.21484375 +327.006663634739 3305.2880859375 +327.096918826684 8025.06396484375 +328.09087936356 3401.237060546875 +329.002848029289 3721.0 +330.204815446188 11820.9521484375 +331.208232327135 2889.0 +342.067980362905 3189.39501953125 +349.169296376205 25098.0 +350.172883605486 4323.0 +351.167291455015 1724.0 +372.149200119315 2817.47705078125 +404.03600410036 11013.0 +405.038241871311 2224.6796875 +424.359699824875 1469.0 +445.117347283461 1962.204711914062 +500.274802921042 11554.1630859375 +501.277725760601 3400.0 +502.28653995658 1910.0 +505.85089556432 2188.0 +536.162361057972 4668.0 +537.163239801382 2428.0 +538.161608472883 1869.0 +544.336387601713 1598.0 +546.911505452596 1493.0 +549.965979448424 1640.0 +592.225456903764 1675.0 +607.216655018496 74091.0 +608.219193446659 23449.0 +609.2158525552 11438.5283203125 +610.208425679746 4454.0 +611.188234775837 1805.798706054688 +612.220726308427 4082.0 +613.22450541899 34075.0 +614.227906702716 11171.0 +615.225014693998 5343.0 +623.210784148654 2510.0 +629.198405169302 68640.0 +630.201595235063 21340.328125 +631.198284234777 10581.0 +632.198298853566 2483.0 +707.140261218123 1384.0 + +>ms2peaks +##specref ms_run[1]:sample=1 period=1 cycle=676 experiment=5 +##scan 122 +##n_id sample=1 period=1 cycle=676 experiment=5 +##m_id Fenamiphos_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=5_0 +135.110573680588 13.0 +326.090792568903 90.0 + diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/trees/C13H22NO3PS_[M+Na]+.json b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/trees/C13H22NO3PS_[M+Na]+.json new file mode 100644 index 00000000000..eb8904755f9 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/trees/C13H22NO3PS_[M+Na]+.json @@ -0,0 +1,55 @@ +{ + "molecularFormula" : "C13H22NO3PS", + "root" : "C13H22NO3PS", + "annotations" : { + "precursorIonType" : "[M + Na]+", + "nodeBoost" : 3.0, + "numberOfUnconsideredCandidates" : 0, + "lowestConsideredCandidateScore" : -2.3675697077238156, + "statistics" : { + "explainedIntensity" : 0.0, + "explainedIntensityOfExplainablePeaks" : 0.0, + "ratioOfExplainedPeaks" : 0.0 + }, + "recalibration" : { + "merged" : "1.0x" + } + }, + "fragments" : [ { + "id" : 0, + "molecularFormula" : "C13H22NO3PS", + "ion" : "[M + Na]+", + "massDeviation" : "-1.7404143799237406 ppm (-5.675394775721543E-4 m/z)", + "recalibratedMassDeviation" : "-1.7404143799237406 ppm (-5.675394775721543E-4 m/z)", + "relativeIntensity" : 1.0, + "mz" : 326.094454354613, + "recalibratedMass" : 326.094454354613, + "peaks" : [ { + "intensity" : 90.0, + "ce" : "-1 eV (corrected -1 eV)", + "spectrum" : 0, + "mz" : 326.090792568903 + } ], + "score" : -2.3675697077238156, + "scores" : { + "Chemical Prior" : 1.0, + "MS-Isotopes" : 0.0, + "CommonRootLoss" : 0.0, + "Mass Deviation" : -0.14869388285561508, + "CarbohydrogenCompound" : 0.0, + "motif-search" : 0.0, + "MS2-Isotopes" : 0.0, + "PhosphorScorer" : 0.0, + "BeautificationScorer" : -0.0, + "ImplicitAdductPeakScore" : 0.0, + "IntrinsicallyChargedScorer" : 0.0, + "StrangeElementRootScorer" : -3.2188758248682006 + }, + "isotopes" : { + "score" : -0.3066782904273615, + "mz" : [ 326.094454354613, 327.096383244799 ], + "relInt" : [ 1.0, 0.1609657297188478 ] + } + } ], + "losses" : [ ] +} \ No newline at end of file diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/canopus_formula_summary.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/canopus_formula_summary.tsv new file mode 100644 index 00000000000..3d95322d327 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/canopus_formula_summary.tsv @@ -0,0 +1 @@ +id molecularFormula adduct precursorFormula NPC#pathway NPC#pathway Probability NPC#superclass NPC#superclass Probability NPC#class NPC#class Probability ClassyFire#most specific class ClassyFire#most specific class Probability ClassyFire#level 5 ClassyFire#level 5 Probability ClassyFire#subclass ClassyFire#subclass Probability ClassyFire#class ClassyFire#class Probability ClassyFire#superclass ClassyFire#superclass probability ClassyFire#all classifications featureId diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/formula_identifications.tsv b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/formula_identifications.tsv new file mode 100644 index 00000000000..21c8366690c --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/formula_identifications.tsv @@ -0,0 +1,4 @@ +formulaRank molecularFormula adduct precursorFormula SiriusScore TreeScore IsotopeScore numExplainedPeaks explainedIntensity medianMassErrorFragmentPeaks(ppm) medianAbsoluteMassErrorFragmentPeaks(ppm) massErrorPrecursor(ppm) lipidClass ionMass retentionTimeInSeconds id featureId +1 C16H25NO2 [M + Na]+ C16H25NO2 37.77674634435295 37.77674634435295 0.0 13 0.8419395465994967 -3.076517427408221 4.831274574031946 4.466968600002982 286.17903 438.351 1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN N/A +1 C15H17ClN4 [M + H]+ C15H17ClN4 39.34241769057247 36.691010794465846 2.6514068961066233 22 0.9685426989556167 -4.462674100188872 4.8724686384496785 4.02875003592188 289.12262 448.02799999998 2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil N/A +1 C13H22NO3PS [M + Na]+ C13H22NO3PS -2.3675697077238156 -2.3675697077238156 0.0 1 0.0 -1.7404143799237406 1.7404143799237406 -1.7404143799237406 326.09445 447.10000000002 7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos N/A diff --git a/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/report.mztab b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/report.mztab new file mode 100644 index 00000000000..1b0f8e25f62 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetabo-in-SIRIUS-project/report.mztab @@ -0,0 +1,34 @@ +MTD mzTab-version 2.0.0-M +MTD mzTab-ID SIRIUS-3e6291f4-b8bc-4b73-bde0-ffa971fc61d2 +MTD title SIRIUS Analysis Report: 3e6291f4-b8bc-4b73-bde0-ffa971fc61d2 +MTD software[1] [, , SIRIUS, 4.13.1] +MTD ms_run[1]-location /home/axel/dev/OpenMS/src/tests/topp/SiriusExport_2_output.ms +MTD ms_run[1]-scan_polarity[1] [MS, MS:1000130, positive scan, ] +MTD cv[1]-label MS +MTD cv[1]-uri URL:https://raw.githubusercontent.com/HUPO-PSI/psi-ms-CV/master/psi-ms.obo +MTD cv[1]-version 4.1.16 +MTD cv[1]-full_name PSI-MS controlled vocabulary +MTD small_molecule-identification_reliability [MS, MS:1002955, hr-ms compound identification confidence level, ] +MTD database[1] [, , no database, null] +MTD database[1]-prefix null +MTD database[1]-uri null +MTD database[1]-version Unknown +MTD database[2] [, , CSI:FingerID PubChem Copy, CID] +MTD database[2]-prefix CID +MTD database[2]-uri https://pubchem.ncbi.nlm.nih.gov/compound/ +MTD database[2]-version Unknown + +SMH SML_ID SMF_ID_REFS database_identifier chemical_formula smiles inchi chemical_name uri theoretical_neutral_mass adduct_ions reliability best_id_confidence_measure best_id_confidence_value +SML 1 1 null C15H17ClN4 null null null null 288.11417422399995 [M + H]+ 4 null null +SML 2 2 null C13H22NO3PS null null null null 303.10580119400004 [M + Na]+ 4 null null +SML 10 10 null C16H25NO2 null null null null 263.18852904 [M + Na]+ 4 null null + +SFH SMF_ID SME_ID_REFS SME_ID_REF_ambiguity_code adduct_ion isotopomer exp_mass_to_charge charge retention_time_in_seconds retention_time_in_seconds_start retention_time_in_seconds_end +SMF 1 1 2 [M + H]+ null 289.122615478838 1 448.02799999998 null null +SMF 2 2 2 [M + Na]+ null 326.094454354613 1 447.10000000002 null null +SMF 10 10 2 [M + Na]+ null 286.179028092823 1 438.351 null null + +SEH SME_ID evidence_input_id database_identifier chemical_formula smiles inchi chemical_name uri derivatized_form adduct_ion exp_mass_to_charge charge theoretical_mass_to_charge spectra_ref identification_method ms_level rank opt_global_SIRIUS:sirius_score opt_global_SIRIUS:isotope_score opt_global_SIRIUS:tree_score opt_global_SIRIUS:zodiac_score opt_global_SIRIUS:explained_intensity_ratio opt_global_SIRIUS:explained_intensity_of_explainable_peaks_ratio opt_global_SIRIUS:explained_peaks_ratio opt_global_SIRIUS:annotated_spectra_location opt_global_SIRIUS:tree_location opt_global_SIRIUS:candidate_location +SME 1 2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil:289.122615478838:M+H+ null C15H17ClN4 null null null null null [M + H]+ 289.122615478838 1 289.1214506760905 ms_run[1]:sample=1 period=1 cycle=676 experiment=4|ms_run[1]:sample=1 period=1 cycle=677 experiment=5|ms_run[1]:sample=1 period=1 cycle=678 experiment=3 [, , SIRIUS, 4.13.1] [MS, MS:1000511, ms_level, 2] 1 39.34241769057247 2.6514068961066233 36.691010794465846 N/A 0.9685426989556167 0.980955482459397 0.7 spectra/C15H17ClN4_[M+H]+.tsv trees/C15H17ClN4_[M+H]+.json 2_SiriusExport_2_output_0_5053681185761206615-676004--121--Myclobutanil/formula_candidates.tsv +SME 2 7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos:326.094454354613:M+Na+ null C13H22NO3PS null null null null null [M + Na]+ 326.094454354613 1 326.09502189409056 ms_run[1]:sample=1 period=1 cycle=676 experiment=5 [, , SIRIUS, 4.13.1] [MS, MS:1000511, ms_level, 2] 1 -2.3675697077238156 0.0 -2.3675697077238156 N/A 0.0 0.0 0.0 spectra/C13H22NO3PS_[M+Na]+.tsv trees/C13H22NO3PS_[M+Na]+.json 7_SiriusExport_2_output_0_7960809195137357048-676005--122--Fenamiphos/formula_candidates.tsv +SME 10 1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN:286.179028092823:M+Na+ null C16H25NO2 null null null null null [M + Na]+ 286.179028092823 1 286.1777497400905 ms_run[1]:sample=1 period=1 cycle=664 experiment=3|ms_run[1]:sample=1 period=1 cycle=665 experiment=5|ms_run[1]:sample=1 period=1 cycle=666 experiment=3 [, , SIRIUS, 4.13.1] [MS, MS:1000511, ms_level, 2] 1 37.77674634435295 0.0 37.77674634435295 N/A 0.8419395465994967 0.9419915453264445 0.36363636363636365 spectra/C16H25NO2_[M+Na]+.tsv trees/C16H25NO2_[M+Na]+.json 1_SiriusExport_2_output_0_10333458062711546021-664003--57--UNKNOWN/formula_candidates.tsv diff --git a/src/tests/topp/AssayGeneratorMetaboSirius_output_1.tsv b/src/tests/topp/AssayGeneratorMetaboSirius_output_1.tsv new file mode 100644 index 00000000000..9b4cb779df1 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetaboSirius_output_1.tsv @@ -0,0 +1,4 @@ +PrecursorMz ProductMz PrecursorCharge ProductCharge LibraryIntensity NormalizedRetentionTime PeptideSequence ModifiedPeptideSequence PeptideGroupLabel LabelType CompoundName SumFormula SMILES Adducts ProteinId UniprotId GeneName FragmentType FragmentSeriesNumber Annotation CollisionEnergy PrecursorIonMobility TransitionGroupId TransitionId Decoy DetectingTransition IdentifyingTransition QuantifyingTransition Peptidoforms +289.12299999999999 70.040098 1 1 1.0 448.02800000000002 Myclobutanil C15H17ClN4 NA [M+H]+ -1 C2H3N3 -1.0 -1.0 0_Myclobutanil_[M+H]+_448_0 0_0_Myclobutanil_[M+H]+_448_0 0 1 0 1 +289.12299999999999 125.014308 1 1 0.609987497329712 448.02800000000002 Myclobutanil C15H17ClN4 NA [M+H]+ -1 C7H5Cl -1.0 -1.0 0_Myclobutanil_[M+H]+_448_0 0_1_Myclobutanil_[M+H]+_448_0 0 1 0 1 +289.12299999999999 151.02990299999999 1 1 0.143196150660515 448.02800000000002 Myclobutanil C15H17ClN4 NA [M+H]+ -1 C9H7Cl -1.0 -1.0 0_Myclobutanil_[M+H]+_448_0 0_2_Myclobutanil_[M+H]+_448_0 0 1 0 1 diff --git a/src/tests/topp/AssayGeneratorMetaboSirius_output_2.tsv b/src/tests/topp/AssayGeneratorMetaboSirius_output_2.tsv new file mode 100644 index 00000000000..f4e1f2443a6 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetaboSirius_output_2.tsv @@ -0,0 +1,7 @@ +PrecursorMz ProductMz PrecursorCharge ProductCharge LibraryIntensity NormalizedRetentionTime PeptideSequence ModifiedPeptideSequence PeptideGroupLabel LabelType CompoundName SumFormula SMILES Adducts ProteinId UniprotId GeneName FragmentType FragmentSeriesNumber Annotation CollisionEnergy PrecursorIonMobility TransitionGroupId TransitionId Decoy DetectingTransition IdentifyingTransition QuantifyingTransition Peptidoforms +286.178999999999974 98.059279000000004 1 1 1.0 438.350999999999999 UNKNOWN_0 C16H25NO2 NA [M+Na]+ -1 C5H7NO -1.0 -1.0 0_UNKNOWN_0_[M+Na]+_438_0 0_0_UNKNOWN_0_[M+Na]+_438_0 0 1 0 1 +286.178999999999974 140.069591000000003 1 1 0.585595011711121 438.350999999999999 UNKNOWN_0 C16H25NO2 NA [M+Na]+ -1 C5H11NO2 -1.0 -1.0 0_UNKNOWN_0_[M+Na]+_438_0 0_1_UNKNOWN_0_[M+Na]+_438_0 0 1 0 1 +286.178999999999974 56.049919000000003 1 1 0.062630482017994 438.350999999999999 UNKNOWN_0 C16H25NO2 NA [M+Na]+ -1 C3H5N -1.0 -1.0 0_UNKNOWN_0_[M+Na]+_438_0 0_2_UNKNOWN_0_[M+Na]+_438_0 0 1 0 1 +289.12299999999999 70.040098 1 1 1.0 448.02800000000002 Myclobutanil C15H17ClN4 NA [M+H]+ -1 C2H3N3 -1.0 -1.0 1_Myclobutanil_[M+H]+_448_0 1_0_Myclobutanil_[M+H]+_448_0 0 1 0 1 +289.12299999999999 125.014308 1 1 0.609987497329712 448.02800000000002 Myclobutanil C15H17ClN4 NA [M+H]+ -1 C7H5Cl -1.0 -1.0 1_Myclobutanil_[M+H]+_448_0 1_1_Myclobutanil_[M+H]+_448_0 0 1 0 1 +289.12299999999999 151.02990299999999 1 1 0.143196150660515 448.02800000000002 Myclobutanil C15H17ClN4 NA [M+H]+ -1 C9H7Cl -1.0 -1.0 1_Myclobutanil_[M+H]+_448_0 1_2_Myclobutanil_[M+H]+_448_0 0 1 0 1 diff --git a/src/tests/topp/AssayGeneratorMetaboSirius_output_3.tsv b/src/tests/topp/AssayGeneratorMetaboSirius_output_3.tsv new file mode 100644 index 00000000000..6dcf6395580 --- /dev/null +++ b/src/tests/topp/AssayGeneratorMetaboSirius_output_3.tsv @@ -0,0 +1,7 @@ +PrecursorMz ProductMz PrecursorCharge ProductCharge LibraryIntensity NormalizedRetentionTime PeptideSequence ModifiedPeptideSequence PeptideGroupLabel LabelType CompoundName SumFormula SMILES Adducts ProteinId UniprotId GeneName FragmentType FragmentSeriesNumber Annotation CollisionEnergy PrecursorIonMobility TransitionGroupId TransitionId Decoy DetectingTransition IdentifyingTransition QuantifyingTransition Peptidoforms +289.12299999999999 70.040098 1 1 1.0 448.02800000000002 Myclobutanil C15H17ClN4 NA [M+H]+ -1 C2H3N3 -1.0 -1.0 0_Myclobutanil_[M+H]+_448_0 0_0_Myclobutanil_[M+H]+_448_0 0 1 0 1 +289.12299999999999 53.013424000000001 1 1 1.0 448.02800000000002 Myclobutanil_decoy C15H17ClN4 NA [M+H]+ -1 C2N2 -1.0 -1.0 0_Myclobutanil_decoy_[M+H]+_448_0 0_0_Myclobutanil_decoy_[M+H]+_448_0 1 1 0 1 +289.12299999999999 125.014308 1 1 0.609987497329712 448.02800000000002 Myclobutanil C15H17ClN4 NA [M+H]+ -1 C7H5Cl -1.0 -1.0 0_Myclobutanil_[M+H]+_448_0 0_1_Myclobutanil_[M+H]+_448_0 0 1 0 1 +289.12299999999999 194.047951000000012 1 1 0.63510000705719 448.02800000000002 Myclobutanil_decoy C15H17ClN4 NA [M+H]+ -1 C9H8ClN3 -1.0 -1.0 0_Myclobutanil_decoy_[M+H]+_448_0 0_1_Myclobutanil_decoy_[M+H]+_448_0 1 1 0 1 +289.12299999999999 151.02990299999999 1 1 0.143196150660515 448.02800000000002 Myclobutanil C15H17ClN4 NA [M+H]+ -1 C9H7Cl -1.0 -1.0 0_Myclobutanil_[M+H]+_448_0 0_2_Myclobutanil_[M+H]+_448_0 0 1 0 1 +289.12299999999999 220.063601000000006 1 1 0.151199996471405 448.02800000000002 Myclobutanil_decoy C15H17ClN4 NA [M+H]+ -1 C11H10ClN3 -1.0 -1.0 0_Myclobutanil_decoy_[M+H]+_448_0 0_2_Myclobutanil_decoy_[M+H]+_448_0 1 1 0 1 diff --git a/src/tests/topp/CMakeLists.txt b/src/tests/topp/CMakeLists.txt index 4a69e4d95cf..de612f3e21a 100644 --- a/src/tests/topp/CMakeLists.txt +++ b/src/tests/topp/CMakeLists.txt @@ -2549,34 +2549,76 @@ set_tests_properties("TOPP_AccurateMassSearch_3_out1" PROPERTIES DEPENDS "TOPP_A add_test("TOPP_AccurateMassSearch_5" ${TOPP_BIN_PATH}/AccurateMassSearch -test -in ${DATA_DIR_TOPP}/AccurateMassSearch_2_input.featureXML -out AccurateMassSearch_5_output.tmp.mzTab -out_annotation AccurateMassSearch_5_output.tmp.oms -db:mapping ${DATA_DIR_TOPP}/AMS_test_Mapping.tsv -db:struct ${DATA_DIR_TOPP}/AMS_test_Struct.tsv -positive_adducts ${DATA_DIR_TOPP}/AMS_PositiveAdducts.tsv -negative_adducts ${DATA_DIR_TOPP}/AMS_NegativeAdducts.tsv -algorithm:id_format ID) add_test("TOPP_AccurateMassSearch_5_out1" ${DIFF} -in1 AccurateMassSearch_5_output.tmp.mzTab -in2 ${DATA_DIR_TOPP}/AccurateMassSearch_5_output.mzTab -whitelist "") set_tests_properties("TOPP_AccurateMassSearch_5_out1" PROPERTIES DEPENDS "TOPP_AccurateMassSearch_5") -# mztab_m + feautreXML (annotation) +# mztab_m + featureXML (annotation) add_test("TOPP_AccurateMassSearch_6" ${TOPP_BIN_PATH}/AccurateMassSearch -test -in ${DATA_DIR_TOPP}/AccurateMassSearch_2_input.featureXML -out AccurateMassSearch_6_output.tmp.mzTab -out_annotation AccurateMassSearch_6_output.tmp.featureXML -db:mapping ${DATA_DIR_TOPP}/AMS_test_Mapping.tsv -db:struct ${DATA_DIR_TOPP}/AMS_test_Struct.tsv -positive_adducts ${DATA_DIR_TOPP}/AMS_PositiveAdducts.tsv -negative_adducts ${DATA_DIR_TOPP}/AMS_NegativeAdducts.tsv -algorithm:id_format ID) add_test("TOPP_AccurateMassSearch_6_out1" ${DIFF} -in1 AccurateMassSearch_6_output.tmp.mzTab -in2 ${DATA_DIR_TOPP}/AccurateMassSearch_6_output.mzTab -whitelist "") add_test("TOPP_AccurateMassSearch_6_out2" ${DIFF} -in1 AccurateMassSearch_6_output.tmp.featureXML -in2 ${DATA_DIR_TOPP}/AccurateMassSearch_6_output.featureXML -whitelist "IdentificationRun id=\"PI_0\" date=" "database_location") set_tests_properties("TOPP_AccurateMassSearch_6_out1" PROPERTIES DEPENDS "TOPP_AccurateMassSearch_6") set_tests_properties("TOPP_AccurateMassSearch_6_out2" PROPERTIES DEPENDS "TOPP_AccurateMassSearch_6") +# SiriusExport +# without featureinfo +add_test("TOPP_SiriusExport_1" ${TOPP_BIN_PATH}/SiriusExport -test -in ${DATA_DIR_TOPP}/SiriusExport_1_input.mzML -out SiriusExport_1_output.tmp.ms) +add_test("TOPP_SiriusExport_1_out" ${DIFF} -in1 SiriusExport_1_output.tmp.ms -in2 ${DATA_DIR_TOPP}/SiriusExport_1_output.ms) +set_tests_properties("TOPP_SiriusExport_1_out" PROPERTIES DEPENDS "TOPP_SiriusExport_1") + +# with featureinfo, feature_only and compound info table (input for AssayGeneratorMetaboSirius tests) +add_test("TOPP_SiriusExport_2" ${TOPP_BIN_PATH}/SiriusExport -test -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_input.mzML -in_featureinfo ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_input.featureXML -out SiriusExport_2_output.tmp.ms -out_compoundinfo SiriusExport_2_output_compoundinfo.tmp.tsv -feature_only true) +add_test("TOPP_SiriusExport_2_out1" ${DIFF} -in1 SiriusExport_2_output.tmp.ms -in2 ${DATA_DIR_TOPP}/SiriusExport_2_output.ms) +add_test("TOPP_SiriusExport_2_out2" ${DIFF} -in1 SiriusExport_2_output_compoundinfo.tmp.tsv -in2 ${DATA_DIR_TOPP}/SiriusExport_2_output_compoundinfo.tsv) +set_tests_properties("TOPP_SiriusExport_2_out1" PROPERTIES DEPENDS "TOPP_SiriusExport_2") +set_tests_properties("TOPP_SiriusExport_2_out2" PROPERTIES DEPENDS "TOPP_SiriusExport_2") + +# with multiple files +add_test("TOPP_SiriusExport_3" ${TOPP_BIN_PATH}/SiriusExport -test -in ${DATA_DIR_TOPP}/SiriusExport_1_input.mzML ${DATA_DIR_TOPP}/AssayGeneratorMetabo_input.mzML -in_featureinfo ${DATA_DIR_TOPP}/SiriusExport_1_input.featureXML ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_input.featureXML -out SiriusExport_3_output.tmp.ms -out_compoundinfo SiriusExport_3_output_compoundinfo.tmp.tsv) +add_test("TOPP_SiriusExport_3_out1" ${DIFF} -in1 SiriusExport_3_output.tmp.ms -in2 ${DATA_DIR_TOPP}/SiriusExport_3_output.ms) +add_test("TOPP_SiriusExport_3_out2" ${DIFF} -in1 SiriusExport_3_output_compoundinfo.tmp.tsv -in2 ${DATA_DIR_TOPP}/SiriusExport_3_output_compoundinfo.tsv) +set_tests_properties("TOPP_SiriusExport_3_out1" PROPERTIES DEPENDS "TOPP_SiriusExport_3") +set_tests_properties("TOPP_SiriusExport_3_out2" PROPERTIES DEPENDS "TOPP_SiriusExport_3") + +# AssayGeneratorMetaboSirius +# SIRIUS project directory generated with SIRIUS 5.8.5 from SiriusExport_2 test .ms file, minimal example with one UNKNOWN 2 two named compounds from which only Myclobutanil will pass filtering +add_test("TOPP_AssayGeneratorMetaboSirius_1" ${TOPP_BIN_PATH}/AssayGeneratorMetaboSirius -test -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo-in-SIRIUS-project -in_compoundinfo ${DATA_DIR_TOPP}/SiriusExport_2_output_compoundinfo.tsv -out AssayGeneratorMetaboSirius_output_1.tmp.tsv -exclude_ms2_precursor -max_transitions 3) +add_test("TOPP_AssayGeneratorMetaboSirius_1_out" ${DIFF} -in1 AssayGeneratorMetaboSirius_output_1.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetaboSirius_output_1.tsv) +set_tests_properties("TOPP_AssayGeneratorMetaboSirius_1_out" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetaboSirius_1") + +# AssayGeneratorMetaboSirius: use_known_unknowns +add_test("TOPP_AssayGeneratorMetaboSirius_2" ${TOPP_BIN_PATH}/AssayGeneratorMetaboSirius -test -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo-in-SIRIUS-project -in_compoundinfo ${DATA_DIR_TOPP}/SiriusExport_2_output_compoundinfo.tsv -out AssayGeneratorMetaboSirius_output_2.tmp.tsv -exclude_ms2_precursor -max_transitions 3 -use_known_unknowns) +add_test("TOPP_AssayGeneratorMetaboSirius_2_out" ${DIFF} -in1 AssayGeneratorMetaboSirius_output_2.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetaboSirius_output_2.tsv) +set_tests_properties("TOPP_AssayGeneratorMetaboSirius_2_out" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetaboSirius_2") + +# AssayGeneratorMetaboSirius: decoys resolving overlaps +add_test("TOPP_AssayGeneratorMetaboSirius_3" ${TOPP_BIN_PATH}/AssayGeneratorMetaboSirius -test -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo-in-SIRIUS-project -in_compoundinfo ${DATA_DIR_TOPP}/SiriusExport_2_output_compoundinfo.tsv -out AssayGeneratorMetaboSirius_output_3.tmp.tsv -exclude_ms2_precursor -max_transitions 3 -decoy_generation -decoy_generation_method resolve_overlap) +add_test("TOPP_AssayGeneratorMetaboSirius_3_out" ${DIFF} -in1 AssayGeneratorMetaboSirius_output_3.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetaboSirius_output_3.tsv) +set_tests_properties("TOPP_AssayGeneratorMetaboSirius_3_out" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetaboSirius_3") + # AssayGeneratorMetabo # use FeatureFinderMetabo data -add_test("TOPP_AssayGeneratorMetabo_1" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_input.mzML -in_id ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ffm_input.featureXML -out AssayGeneratorMetabo_ffm_output.tmp.tsv -fragment_annotation none -min_transitions 1 -max_transitions 3) +add_test("TOPP_AssayGeneratorMetabo_1" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_input.mzML -in_featureinfo ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ffm_input.featureXML -out AssayGeneratorMetabo_ffm_output.tmp.tsv -min_transitions 1 -max_transitions 3) add_test("TOPP_AssayGeneratorMetabo_1_out1" ${DIFF} -in1 AssayGeneratorMetabo_ffm_output.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ffm_output.tsv) set_tests_properties("TOPP_AssayGeneratorMetabo_1_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_1") + # use AccurateMassSearch data -add_test("TOPP_AssayGeneratorMetabo_2" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_input.mzML -in_id ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_input.featureXML -out AssayGeneratorMetabo_ams_output.tmp.tsv -fragment_annotation none -min_transitions 1 -max_transitions 3) +add_test("TOPP_AssayGeneratorMetabo_2" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_input.mzML -in_featureinfo ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_input.featureXML -out AssayGeneratorMetabo_ams_output.tmp.tsv -min_transitions 1 -max_transitions 3) add_test("TOPP_AssayGeneratorMetabo_2_out1" ${DIFF} -in1 AssayGeneratorMetabo_ams_output.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_output.tsv) set_tests_properties("TOPP_AssayGeneratorMetabo_2_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_2") + # use FeatureFinderMetabo data with method consenesus_spectrum -add_test("TOPP_AssayGeneratorMetabo_3" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_input.mzML -in_id ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ffm_input.featureXML -out AssayGeneratorMetabo_ffm_output_consensus.tmp.tsv -fragment_annotation none -method consensus_spectrum -min_transitions 1 -max_transitions 3) +add_test("TOPP_AssayGeneratorMetabo_3" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_input.mzML -in_featureinfo ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ffm_input.featureXML -out AssayGeneratorMetabo_ffm_output_consensus.tmp.tsv -method consensus_spectrum -min_transitions 1 -max_transitions 3) add_test("TOPP_AssayGeneratorMetabo_3_out1" ${DIFF} -in1 AssayGeneratorMetabo_ffm_output_consensus.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ffm_output_consensus.tsv) set_tests_properties("TOPP_AssayGeneratorMetabo_3_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_3") + # use AccurateMassSearch data with method consensus_spectrum -add_test("TOPP_AssayGeneratorMetabo_4" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_input.mzML -in_id ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_input.featureXML -out AssayGeneratorMetabo_ams_output_consensus.tmp.tsv -fragment_annotation none -method consensus_spectrum -min_transitions 1 -max_transitions 3) +add_test("TOPP_AssayGeneratorMetabo_4" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_input.mzML -in_featureinfo ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_input.featureXML -out AssayGeneratorMetabo_ams_output_consensus.tmp.tsv -method consensus_spectrum -min_transitions 1 -max_transitions 3) add_test("TOPP_AssayGeneratorMetabo_4_out1" ${DIFF} -in1 AssayGeneratorMetabo_ams_output_consensus.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_output_consensus.tsv) set_tests_properties("TOPP_AssayGeneratorMetabo_4_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_4") + # use AccurateMassSearch data with method consensus_spectrum and use_known_unkowns -add_test("TOPP_AssayGeneratorMetabo_5" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_input.mzML -in_id ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_input.featureXML -out AssayGeneratorMetabo_ams_uku_output_consensus.tmp.tsv -fragment_annotation none -method consensus_spectrum -use_known_unknowns -min_transitions 1 -max_transitions 3) +add_test("TOPP_AssayGeneratorMetabo_5" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_input.mzML -in_featureinfo ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_input.featureXML -out AssayGeneratorMetabo_ams_uku_output_consensus.tmp.tsv -method consensus_spectrum -use_known_unknowns -min_transitions 1 -max_transitions 3) add_test("TOPP_AssayGeneratorMetabo_5_out1" ${DIFF} -in1 AssayGeneratorMetabo_ams_uku_output_consensus.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_uku_output_consensus.tsv) set_tests_properties("TOPP_AssayGeneratorMetabo_5_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_5") + +# export TOPP_AssayGeneratorMetabo_5 output to TraML add_test("TOPP_AssayGeneratorMetabo_6" ${TOPP_BIN_PATH}/TargetedFileConverter -test -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_uku_output_consensus.tsv -out AssayGeneratorMetabo_ams_uku_output_consensus_traml.tmp.TraML) add_test("TOPP_AssayGeneratorMetabo_6_out1" ${DIFF} -in1 AssayGeneratorMetabo_ams_uku_output_consensus_traml.tmp.TraML -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_uku_output_consensus_traml.TraML) set_tests_properties("TOPP_AssayGeneratorMetabo_6_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_6") diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_3_input.featureXML b/src/tests/topp/SiriusExport_1_input.featureXML similarity index 99% rename from src/tests/topp/THIRDPARTY/SiriusAdapter_3_input.featureXML rename to src/tests/topp/SiriusExport_1_input.featureXML index 5675a978f86..5c36a88d92a 100644 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_3_input.featureXML +++ b/src/tests/topp/SiriusExport_1_input.featureXML @@ -1,10 +1,10 @@ - + - - + + diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_3_input.mzML b/src/tests/topp/SiriusExport_1_input.mzML similarity index 99% rename from src/tests/topp/THIRDPARTY/SiriusAdapter_3_input.mzML rename to src/tests/topp/SiriusExport_1_input.mzML index ec38110fe64..03d5640bdaf 100644 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_3_input.mzML +++ b/src/tests/topp/SiriusExport_1_input.mzML @@ -172,9 +172,9 @@ - + - + diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_5_output.ms b/src/tests/topp/SiriusExport_1_output.ms similarity index 91% rename from src/tests/topp/THIRDPARTY/SiriusAdapter_5_output.ms rename to src/tests/topp/SiriusExport_1_output.ms index 13e17e21352..fb0fbb13f03 100644 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_5_output.ms +++ b/src/tests/topp/SiriusExport_1_output.ms @@ -1,19 +1,52 @@ ->compound _13442776035824190606-2167005--6--UNKNOWN ->parentmass 292.121752827683 +>compound 0_0-2165004--2--UNKNOWN +>parentmass 292.118520142944 +>charge 1 +>rt 404.455000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://.PestMix1pos.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +292.118520142944 1915.000000000000 +>ms1peaks +292.118520142944 1915.000000000000 +294.117460558153 780.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=2165 experiment=4 +##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2165 experiment=4_0 +##scan 2 +##specref ms_run[1]:sample=1 period=1 cycle=2165 experiment=4 +292.121314370419 294.000000000000 +>compound 0_0-2166006--4--UNKNOWN +>parentmass 292.121468920531 +>charge 1 +>rt 404.875000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://.PestMix1pos.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +292.121468920531 5829.000000000000 +>ms1peaks +292.121468920531 5829.000000000000 +293.123073196945 1108.000000000000 +294.116966544654 1439.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=2166 experiment=6 +##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2166 experiment=6_0 +##scan 4 +##specref ms_run[1]:sample=1 period=1 cycle=2166 experiment=6 +292.121333456885 798.000000000000 +>compound 0_0-2167005--6--UNKNOWN +>parentmass 292.121302384156 >charge 1 ->rt 410.145000000000 -##fmz 292.121752827682997 -##fid 13442776035824190606 +>rt 405.295000000020 ##des UNKNOWN ##specref_format [MS, MS:1000770, WIFF nativeID format] ##source file file://.PestMix1pos.wiff ##source format [MS, MS:1000562, ABI WIFF format,] >ms1merged -292.121752827683 5446638.265330639668 -293.124863183735 668010.447580512962 -294.119155604245 1663109.077192980098 -295.121610199554 257162.167168799991 -296.123527063003 27792.421876255601 +292.121302384156 9184.000000000000 >ms1peaks 292.121302384156 9184.000000000000 293.125436491662 1483.000000000000 @@ -26,6 +59,98 @@ ##specref ms_run[1]:sample=1 period=1 cycle=2167 experiment=5 292.120347921437 2157.000000000000 292.230622503656 42.000000000000 +>compound 0_0-2171003--11--UNKNOWN +>parentmass 296.123099065922 +>charge 1 +>rt 406.816999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://.PestMix1pos.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +296.123099065922 1194.000000000000 +>ms1peaks +291.224349165591 1045.000000000000 +292.122036064513 179902.000000000000 +293.125028313222 29293.646484375000 +294.118845532743 53763.000000000000 +295.120631519007 8426.000000000000 +296.123099065922 1194.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=2171 experiment=3 +##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2171 experiment=3_0 +##scan 11 +##specref ms_run[1]:sample=1 period=1 cycle=2171 experiment=3 +296.123852278497 84.000000000000 +296.170279302095 28.000000000000 +>compound 0_0-2172004--13--UNKNOWN +>parentmass 296.123821549630 +>charge 1 +>rt 407.245000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://.PestMix1pos.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +296.123821549630 1828.000000000000 +>ms1peaks +291.228305245532 2281.000000000000 +292.121628844349 353290.562500000000 +292.873209260830 762.116149902344 +292.948657738737 1700.587890625000 +293.124827763224 54737.000000000000 +294.119184999894 112358.921875000000 +295.121889009140 17240.000000000000 +296.123821549630 1828.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=2172 experiment=4 +##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2172 experiment=4_0 +##scan 13 +##specref ms_run[1]:sample=1 period=1 cycle=2172 experiment=4 +296.124718247637 252.000000000000 +296.181428565605 42.000000000000 +296.200211990605 42.000000000000 +>compound 0_0-2173002--15--UNKNOWN +>parentmass 296.125008105473 +>charge 1 +>rt 407.655000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://.PestMix1pos.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +296.125008105473 3131.000000000000 +>ms1peaks +291.225311742873 3531.410888671875 +292.121594874632 603490.000000000000 +292.844494240889 895.966491699219 +292.924862933623 3391.752441406250 +292.945749680321 3333.063964843750 +293.061298520115 726.139831542969 +293.075063609419 1551.603393554688 +293.125218605791 78178.000000000000 +294.119362908748 183181.000000000000 +294.941798145972 607.000000000000 +295.122330502481 30299.996093750000 +296.125008105473 3131.000000000000 +296.176985366327 631.191101074219 +>ms2peaks +##n_id sample=1 period=1 cycle=2173 experiment=2 +##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2173 experiment=2_0 +##scan 15 +##specref ms_run[1]:sample=1 period=1 cycle=2173 experiment=2 +296.125886082126 602.945556640625 +296.147120140233 714.000000000000 +>compound 0_0-2175004--18--UNKNOWN +>parentmass 292.121970956018 +>charge 1 +>rt 408.495000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://.PestMix1pos.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +292.121970956018 952091.000000000000 >ms1peaks 291.227611742001 5933.231933593750 292.121970956018 952091.000000000000 @@ -75,6 +200,16 @@ 292.503362735226 210.000000000000 292.526015236751 210.000000000000 292.840345918310 294.000000000000 +>compound 0_0-2176006--20--UNKNOWN +>parentmass 292.121614764237 +>charge 1 +>rt 408.915000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://.PestMix1pos.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +292.121614764237 974277.000000000000 >ms1peaks 291.224220910568 6368.000000000000 292.121614764237 974277.000000000000 @@ -133,128 +268,7 @@ 292.953203258155 546.000000000000 292.977891955669 420.000000000000 293.196421777814 210.000000000000 ->compound _0-2165004--2--UNKNOWN ->parentmass 292.118520142944 ->charge 1 ->rt 404.455000000020 -##des UNKNOWN -##specref_format [MS, MS:1000770, WIFF nativeID format] -##source file file://.PestMix1pos.wiff -##source format [MS, MS:1000562, ABI WIFF format,] ->ms1merged -292.118520142944 1915.000000000000 ->ms1peaks -292.118520142944 1915.000000000000 -294.117460558153 780.000000000000 ->ms2peaks -##n_id sample=1 period=1 cycle=2165 experiment=4 -##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2165 experiment=4_0 -##scan 2 -##specref ms_run[1]:sample=1 period=1 cycle=2165 experiment=4 -292.121314370419 294.000000000000 ->compound _0-2166006--4--UNKNOWN ->parentmass 292.121468920531 ->charge 1 ->rt 404.875000000020 -##des UNKNOWN -##specref_format [MS, MS:1000770, WIFF nativeID format] -##source file file://.PestMix1pos.wiff -##source format [MS, MS:1000562, ABI WIFF format,] ->ms1merged -292.121468920531 5829.000000000000 ->ms1peaks -292.121468920531 5829.000000000000 -293.123073196945 1108.000000000000 -294.116966544654 1439.000000000000 ->ms2peaks -##n_id sample=1 period=1 cycle=2166 experiment=6 -##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2166 experiment=6_0 -##scan 4 -##specref ms_run[1]:sample=1 period=1 cycle=2166 experiment=6 -292.121333456885 798.000000000000 ->compound _0-2171003--11--UNKNOWN ->parentmass 296.123099065922 ->charge 1 ->rt 406.816999999980 -##des UNKNOWN -##specref_format [MS, MS:1000770, WIFF nativeID format] -##source file file://.PestMix1pos.wiff -##source format [MS, MS:1000562, ABI WIFF format,] ->ms1merged -296.123099065922 1194.000000000000 ->ms1peaks -291.224349165591 1045.000000000000 -292.122036064513 179902.000000000000 -293.125028313222 29293.646484375000 -294.118845532743 53763.000000000000 -295.120631519007 8426.000000000000 -296.123099065922 1194.000000000000 ->ms2peaks -##n_id sample=1 period=1 cycle=2171 experiment=3 -##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2171 experiment=3_0 -##scan 11 -##specref ms_run[1]:sample=1 period=1 cycle=2171 experiment=3 -296.123852278497 84.000000000000 -296.170279302095 28.000000000000 ->compound _0-2172004--13--UNKNOWN ->parentmass 296.123821549630 ->charge 1 ->rt 407.245000000020 -##des UNKNOWN -##specref_format [MS, MS:1000770, WIFF nativeID format] -##source file file://.PestMix1pos.wiff -##source format [MS, MS:1000562, ABI WIFF format,] ->ms1merged -296.123821549630 1828.000000000000 ->ms1peaks -291.228305245532 2281.000000000000 -292.121628844349 353290.562500000000 -292.873209260830 762.116149902344 -292.948657738737 1700.587890625000 -293.124827763224 54737.000000000000 -294.119184999894 112358.921875000000 -295.121889009140 17240.000000000000 -296.123821549630 1828.000000000000 ->ms2peaks -##n_id sample=1 period=1 cycle=2172 experiment=4 -##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2172 experiment=4_0 -##scan 13 -##specref ms_run[1]:sample=1 period=1 cycle=2172 experiment=4 -296.124718247637 252.000000000000 -296.181428565605 42.000000000000 -296.200211990605 42.000000000000 ->compound _0-2173002--15--UNKNOWN ->parentmass 296.125008105473 ->charge 1 ->rt 407.655000000000 -##des UNKNOWN -##specref_format [MS, MS:1000770, WIFF nativeID format] -##source file file://.PestMix1pos.wiff -##source format [MS, MS:1000562, ABI WIFF format,] ->ms1merged -296.125008105473 3131.000000000000 ->ms1peaks -291.225311742873 3531.410888671875 -292.121594874632 603490.000000000000 -292.844494240889 895.966491699219 -292.924862933623 3391.752441406250 -292.945749680321 3333.063964843750 -293.061298520115 726.139831542969 -293.075063609419 1551.603393554688 -293.125218605791 78178.000000000000 -294.119362908748 183181.000000000000 -294.941798145972 607.000000000000 -295.122330502481 30299.996093750000 -296.125008105473 3131.000000000000 -296.176985366327 631.191101074219 ->ms2peaks -##n_id sample=1 period=1 cycle=2173 experiment=2 -##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2173 experiment=2_0 -##scan 15 -##specref ms_run[1]:sample=1 period=1 cycle=2173 experiment=2 -296.125886082126 602.945556640625 -296.147120140233 714.000000000000 ->compound _0-2199003--43--UNKNOWN +>compound 0_0-2199003--43--UNKNOWN >parentmass 295.187072485748 >charge 1 >rt 418.393999999980 @@ -279,7 +293,7 @@ ##specref ms_run[1]:sample=1 period=1 cycle=2199 experiment=3 295.083913845584 42.000000000000 295.119725048092 42.000000000000 ->compound _0-2204006--49--UNKNOWN +>compound 0_0-2204006--49--UNKNOWN >parentmass 290.124002639251 >charge 1 >rt 420.444000000000 diff --git a/src/tests/topp/SiriusExport_2_output.ms b/src/tests/topp/SiriusExport_2_output.ms new file mode 100644 index 00000000000..290fe8737a4 --- /dev/null +++ b/src/tests/topp/SiriusExport_2_output.ms @@ -0,0 +1,5636 @@ +>compound 0_10333458062711546021-664003--57--UNKNOWN +>parentmass 286.179028092823 +>charge 1 +>rt 438.351000000000 +##fmz 286.179028092822705 +##fid 10333458062711546021 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +286.179028092823 67049.219010244240 +>ms1peaks +52.005453969998 2626.723144531250 +53.013597312446 12728.553710937500 +53.850414409821 1250.853881835938 +54.009329210909 348334.937500000000 +55.006062122532 5392.668457031250 +55.011342055713 6236.111816406250 +55.054021350211 1869.273437500000 +55.934286374440 6315.563964843750 +56.941831842622 2597.011962890625 +59.049520241177 68985.562500000000 +60.044238693811 9277.411132812500 +60.051306561624 7152.463378906250 +61.039638104919 1556.488891601562 +63.997844257749 4543.386718750000 +64.004868648059 4706.500976562500 +68.011536869512 28038.335937500000 +68.993647464953 12595.196289062500 +69.044515645070 12865.375976562500 +72.936647087938 2567.000000000000 +73.064121365067 1769.925781250000 +76.486182586418 2785.377929687500 +79.020888115541 15628.571289062500 +80.049060365715 12153.072265625000 +81.936978966817 8495.000000000000 +82.996309100211 9038.668945312500 +87.043494139885 1178.190917968750 +87.054319172330 1546.054443359375 +89.506956806916 1559.000000000000 +90.488703688296 1817.000000000000 +91.053777911785 1528.745483398438 +95.952341177386 2260.741210937500 +97.968210936145 7024.000000000000 +98.983399057372 5034.887695312500 +100.075304888654 1243.000000000000 +102.090957068479 1525.000000000000 +109.943109012828 1320.928710937500 +113.962992754591 2498.000000000000 +114.090728474154 10512.617187500000 +118.085470631803 6601.458007812500 +122.095607083049 3712.721679687500 +122.962888411087 10607.500976562500 +123.091509718457 1686.104614257812 +132.043186178558 2464.123291015625 +136.020620151667 1645.000000000000 +140.067164786600 1314.000000000000 +141.089863109573 1272.675292968750 +141.111890586678 1562.626220703125 +141.957557081223 15988.394531250000 +147.090173997086 2431.000000000000 +149.022336160605 4523.349121093750 +149.043636850784 1223.066040039062 +151.095789721496 2301.788818359375 +151.111113393103 2538.584228515625 +155.069111807472 1549.374267578125 +155.105759874764 1515.979370117188 +155.973112787773 4487.000000000000 +158.153378740203 12758.589843750000 +159.156448385204 1328.413452148438 +161.095542076597 1436.000000000000 +164.142018358830 1273.736083984375 +170.095175686942 2849.232421875000 +171.138207188731 2555.000000000000 +172.133475837479 1266.057739257812 +173.079557051502 6304.225097656250 +174.991247355031 15122.000000000000 +176.988586706089 4881.000000000000 +178.158242399689 1403.950073242188 +179.105412805866 3814.716552734375 +182.960601426951 1842.280639648438 +182.982966835265 1410.150146484375 +186.220883153188 1802.000000000000 +194.115976643286 3119.000000000000 +195.102214753451 1498.057617187500 +195.120897037407 1858.993774414062 +198.184171488074 2116.000000000000 +217.106332787106 21497.787109375000 +218.109128733639 2613.000000000000 +219.095226750847 2102.304443359375 +224.127626531368 1175.000000000000 +228.195317705032 1672.133422851562 +239.088374855672 3685.309814453125 +242.283185310790 1468.000000000000 +246.860952738993 3049.000000000000 +249.183720846634 1286.295654296875 +250.177140311956 1205.756591796875 +250.999832075601 32001.000000000000 +252.002106420824 2157.000000000000 +252.996924958467 20204.000000000000 +253.999797691244 1411.000000000000 +254.993496356863 3401.000000000000 +279.092906188567 2036.000000000000 +286.179288894577 8400.000000000000 +287.181689656808 1994.078002929688 +287.217541902151 1349.643310546875 +291.235948805059 1485.048828125000 +292.122314491142 439122.000000000000 +292.983059595137 1438.034667968750 +293.122671084767 47692.136718750000 +294.118451514065 133013.562500000000 +295.120454982262 22502.744140625000 +296.122607984390 2357.932373046875 +313.039105768504 33266.000000000000 +314.042149111497 5168.000000000000 +315.036268416268 21007.242187500000 +316.038403197349 3302.000000000000 +317.033014483539 3862.000000000000 +321.227057921370 1381.000000000000 +327.007877449001 47611.566406250000 +328.011115186819 4973.000000000000 +329.004794999861 46547.000000000000 +330.008005603352 4737.000000000000 +331.001868162022 15538.000000000000 +332.004876313775 1480.000000000000 +333.003299668985 2744.071777343750 +335.018886982057 3585.000000000000 +337.016084576435 2205.000000000000 +339.994390073568 1754.000000000000 +348.988792788967 6573.000000000000 +350.986916484867 6721.000000000000 +352.984603835989 2083.000000000000 +354.041095041215 1340.092163085938 +356.039619641072 1269.081298828125 +372.065048824891 6209.586914062500 +374.062468004687 6086.000000000000 +376.059148229590 1968.000000000000 +392.045330940334 2193.000000000000 +395.067648242738 2230.000000000000 +397.066134815272 1581.000000000000 +426.930515343123 1306.000000000000 +426.976513054277 1169.811889648438 +428.927149366436 1298.000000000000 +430.886640350010 1403.000000000000 +445.118913900930 2269.000000000000 +491.969645058197 1379.000000000000 +505.851389825487 3789.000000000000 +522.878326149515 1800.000000000000 +536.163456762234 4427.000000000000 +537.165324404735 2206.000000000000 +538.161529742511 1590.843383789062 +544.337468455008 1195.000000000000 +546.914116937371 2559.000000000000 +547.911876414748 1196.000000000000 +610.180850219782 2080.000000000000 +611.182328195703 1214.000000000000 +645.154717656738 8484.000000000000 +646.158700037782 2782.000000000000 +647.152980374288 9942.000000000000 +648.155555240546 3294.000000000000 +649.150621117204 4284.000000000000 +650.152709955400 1200.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=664 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=3_0 +##scan 57 +##specref ms_run[1]:sample=1 period=1 cycle=664 experiment=3 +51.938122634847 13.000000000000 +56.049507786248 45.000000000000 +98.060380513671 369.000000000000 +123.048287156790 30.000000000000 +126.875862655178 13.000000000000 +138.097784854251 60.000000000000 +140.072452948764 270.000000000000 +170.852966884469 45.000000000000 +170.866613065551 45.000000000000 +184.123371965665 13.000000000000 +269.157141111623 30.000000000000 +269.174210692919 30.000000000000 +286.179738267349 60.000000000000 +>ms1peaks +52.005349834334 2531.576904296875 +52.017818445883 1415.950317382812 +53.013312992683 14436.391601562500 +53.850256514170 1311.865234375000 +54.009237809188 346906.656250000000 +55.005700977113 5493.924316406250 +55.011578128004 6377.684570312500 +55.053978874167 1984.071533203125 +55.933999133980 6168.766601562500 +56.049511919157 2977.762207031250 +56.942056567735 2284.776855468750 +59.049350876787 53629.328125000000 +60.044322757483 8600.164062500000 +61.039156449004 1644.316650390625 +63.997508188870 3394.982910156250 +64.005057234464 4259.679687500000 +67.029035810216 2293.846923828125 +68.011280581573 27100.835937500000 +68.993371510951 13738.876953125000 +69.007497995886 1441.296142578125 +69.044403084909 13070.419921875000 +72.936195718172 2643.000000000000 +73.063931102643 1919.621459960938 +76.486167754556 1986.000000000000 +79.020619039319 14111.753906250000 +80.048823728166 11369.215820312500 +81.936905757296 8703.630859375000 +82.996214707689 8986.651367187500 +87.054271044459 1595.093627929688 +89.505822079267 1760.000000000000 +90.488874903389 1822.018798828125 +91.053163445835 1300.610839843750 +95.952331345900 2696.000000000000 +97.967781752031 7299.724609375000 +98.982987677469 4854.522460937500 +102.090290867080 1906.000000000000 +109.942394870381 1583.000000000000 +113.962086127466 2074.000000000000 +114.090395399108 10058.849609375000 +118.084999014032 6547.758789062500 +122.095088721755 3711.124511718750 +122.962603857586 10794.167968750000 +123.090649527845 1803.942016601562 +123.961855384374 1203.000000000000 +130.157739418261 1256.000000000000 +136.020039379796 2083.000000000000 +136.110849290905 1530.000000000000 +141.089744053815 1237.175415039062 +141.111592847426 1371.696777343750 +141.957218960001 15367.227539062500 +147.090011968413 2463.000000000000 +149.021828990169 4784.995605468750 +149.041466762922 2472.640625000000 +151.095944798794 2940.508300781250 +151.109341918543 3165.085693359375 +155.069344508958 1582.135864257812 +155.105135879836 1693.281616210938 +155.972287468254 4554.340332031250 +158.152759351824 13585.107421875000 +159.156196357366 1465.921386718750 +159.967851357038 1225.276977539062 +161.095405694183 1641.000000000000 +164.141615127090 1478.434814453125 +170.094609622000 2457.688476562500 +171.141467030026 1915.000000000000 +173.079379445344 6273.838867187500 +174.990844938283 15688.865234375000 +176.987639364551 5360.525878906250 +177.052467267277 1475.000000000000 +178.157540067017 1547.000000000000 +179.105091602082 3287.998779296875 +182.959873591311 1986.817871093750 +186.220399692631 1658.000000000000 +194.115345005627 3116.000000000000 +195.120929712058 1968.662841796875 +198.184276303297 2015.000000000000 +217.105977610050 20924.755859375000 +218.108820705353 2495.792236328125 +219.094022022929 1823.679443359375 +228.194066029155 1666.038696289062 +239.087872978056 3722.000000000000 +242.282423819470 1362.000000000000 +246.860857987495 3450.000000000000 +249.182928857496 1266.000000000000 +250.177066939258 1504.335083007812 +250.999117678898 32221.000000000000 +252.001781095835 2314.000000000000 +252.995932699016 21462.000000000000 +253.998953923887 1371.000000000000 +254.993033756740 3403.000000000000 +267.170032496706 1345.000000000000 +279.092268016151 1928.000000000000 +281.050459546987 1487.000000000000 +286.178655880094 23309.207031250000 +287.182133845414 5196.471191406250 +291.235317712341 1559.882568359375 +292.121093988068 399090.000000000000 +292.982663908460 1255.682128906250 +293.023857907805 1542.287597656250 +293.121921829592 49425.335937500000 +294.117639052994 123150.929687500000 +295.119583284786 21162.347656250000 +296.122453171108 2024.725219726562 +304.297977116061 1205.098876953125 +311.183844763032 2282.703613281250 +313.038450493324 32210.287109375000 +314.041319280533 5035.671875000000 +315.035461346507 21071.000000000000 +316.038196392607 3544.000000000000 +317.032926032719 3656.000000000000 +327.007662782866 46713.000000000000 +328.009753952920 4731.131347656250 +329.004141727930 46254.000000000000 +330.006788270317 4440.000000000000 +331.000792355787 15238.000000000000 +332.003743171067 1635.000000000000 +333.001048030235 2840.547363281250 +335.018066518429 3857.000000000000 +337.016490283319 2257.000000000000 +348.988206068721 7382.000000000000 +350.985085465325 7259.000000000000 +352.983081816715 2462.000000000000 +354.041092701990 1411.000000000000 +358.095358680256 1344.000000000000 +372.064528986026 6467.495117187500 +374.061053722203 5695.000000000000 +376.059656060961 2211.000000000000 +392.044067632616 2143.000000000000 +395.066337210837 2288.000000000000 +397.065352026340 1841.000000000000 +428.895605409648 1348.684326171875 +428.927859796300 1412.000000000000 +445.117454275133 2106.000000000000 +491.967681975778 1277.000000000000 +505.850908455770 4139.747558593750 +522.876740252438 1800.000000000000 +536.161867901498 4607.000000000000 +537.162257475039 2465.000000000000 +538.160527239899 1695.000000000000 +544.336437856300 1324.164184570312 +546.911854407175 2375.000000000000 +547.911013918907 1216.000000000000 +610.179211400596 2165.000000000000 +611.181197363117 1284.000000000000 +645.153892760480 7294.000000000000 +646.156182811867 3135.000000000000 +647.151735773867 8987.490234375000 +648.154489817139 3184.000000000000 +649.150180493474 3821.591308593750 +650.151352616891 1194.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=665 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=665 experiment=5_0 +##scan 68 +##specref ms_run[1]:sample=1 period=1 cycle=665 experiment=5 +51.937914215879 30.000000000000 +53.038832825255 30.000000000000 +53.045206203438 30.000000000000 +56.049918656323 60.000000000000 +70.039929361435 30.000000000000 +79.056769706510 30.000000000000 +79.063803665589 30.000000000000 +81.036251104807 30.000000000000 +95.045081818956 30.000000000000 +98.059564237847 929.000000000000 +133.104347649114 30.000000000000 +138.093679048566 30.000000000000 +140.069724401264 524.000000000000 +166.083820296277 60.000000000000 +170.866129800466 45.000000000000 +179.086353477601 30.000000000000 +269.148315487256 30.000000000000 +286.177025513197 135.000000000000 +>ms1peaks +52.005546368410 2670.973876953125 +53.013447667176 13442.696289062500 +53.850235753676 1356.916015625000 +54.009375548499 346132.000000000000 +55.006052234178 5908.220703125000 +55.011327139628 6618.665039062500 +55.054273818991 1724.201538085938 +55.934183438349 6089.195312500000 +56.942085448242 2338.522949218750 +59.049497543886 62260.195312500000 +60.044496762287 9351.735351562500 +61.039589911785 1691.005004882812 +63.997480072658 3643.092529296875 +64.005073510260 4229.738281250000 +68.011506505752 28323.269531250000 +68.993585810696 12464.445312500000 +69.044640852940 13649.212890625000 +72.044186043856 1148.000000000000 +72.936480336335 2359.262451171875 +73.064260321862 1642.103027343750 +76.486297311909 2289.460693359375 +79.020766274604 15897.382812500000 +80.048988150704 12209.904296875000 +81.936792921049 8371.669921875000 +82.996095650262 8043.113281250000 +87.043834653730 1276.883422851562 +87.054214175865 1482.598144531250 +89.506458664277 1777.830322265625 +90.489196475802 1663.000000000000 +91.053755235930 1541.526000976562 +95.952402869893 2400.645751953125 +97.967886882016 8001.987304687500 +98.983532889025 3424.810302734375 +100.074677767759 1304.000000000000 +102.090242730316 1329.000000000000 +109.942679982849 1398.000000000000 +113.962690768860 1941.000000000000 +114.090409984344 11174.942382812500 +118.085207229958 6292.000000000000 +122.095068185146 3153.000000000000 +122.962957192644 10933.000000000000 +123.089979550376 1737.604248046875 +123.962216545241 1382.000000000000 +130.157851054625 1368.000000000000 +136.020636426938 1627.062988281250 +136.111496039851 1223.000000000000 +140.067223364828 1192.000000000000 +141.090663513328 1291.584838867188 +141.111904002369 1407.591674804688 +141.935850183021 1558.355590820312 +141.957535804851 16602.316406250000 +147.090073371469 2918.000000000000 +149.022242157340 5058.011230468750 +149.041140009202 2281.293701171875 +151.094511933196 2771.192138671875 +151.109513517514 3017.586181640625 +155.069293446605 1572.566406250000 +155.105166988042 1682.863525390625 +155.972752865047 4956.000000000000 +158.095291106412 1175.110473632812 +158.152897422617 13347.454101562500 +159.140146486584 1221.760620117188 +159.156626899127 1511.809692382812 +159.968130743445 1344.000000000000 +161.095301376904 1939.000000000000 +164.142147914813 1352.608276367188 +170.095211316489 2555.052490234375 +171.142065868167 1688.747070312500 +173.079666684779 7435.070800781250 +174.990876331450 12561.875976562500 +176.988228889313 4082.000000000000 +178.157451442432 1671.789062500000 +179.082574741649 1161.343872070312 +179.105464745461 2033.503295898438 +182.960688200025 1872.628540039062 +186.220236378822 1627.000000000000 +194.115587597029 3414.431152343750 +195.102521936100 1940.187622070312 +195.121153964710 2419.525878906250 +198.184119642186 2274.000000000000 +217.106221715984 24680.257812500000 +218.109389146592 2768.000000000000 +219.094928896725 1923.877807617188 +224.125737788530 1308.718017578125 +228.194389849522 1662.646850585938 +239.088555805042 4654.193847656250 +242.282289579657 1282.000000000000 +246.861651699246 3614.000000000000 +249.183697918794 1626.163208007812 +250.176302167701 1384.000000000000 +250.999159013320 25559.167968750000 +252.002213377038 1651.423461914062 +252.996445325154 16054.000000000000 +253.999379477884 1131.000000000000 +254.993447206468 2772.603271484375 +267.171432346745 1267.000000000000 +279.091928399145 1791.000000000000 +281.049474584863 1227.866455078125 +286.179096453069 25739.439453125000 +287.182281594319 5585.333496093750 +292.120716590068 202371.000000000000 +293.123166487022 34628.820312500000 +294.117931210581 66532.000000000000 +295.120340194058 11307.223632812500 +296.123175528233 1139.000000000000 +304.298333326187 1345.000000000000 +311.184016131023 2112.000000000000 +313.038042743243 19603.214843750000 +314.041307564911 3224.000000000000 +315.035568487358 12179.000000000000 +316.038573054615 2028.000000000000 +317.032999093534 2260.000000000000 +327.007882393116 37742.558593750000 +328.009892511372 3601.000000000000 +329.004296620889 35070.000000000000 +330.007896864877 3743.000000000000 +331.001397377526 12099.000000000000 +332.004304811118 1147.000000000000 +333.002267631798 2076.000000000000 +335.017770650220 2313.000000000000 +337.017035297896 1211.000000000000 +348.988715159870 5698.000000000000 +350.985988216636 6014.000000000000 +352.982227447720 1887.000000000000 +371.314800126809 1304.000000000000 +372.064251479626 5075.027343750000 +374.061938971072 4867.000000000000 +376.058486261926 1592.000000000000 +392.043742286078 1216.000000000000 +395.068502390905 1429.000000000000 +397.065868843467 1348.000000000000 +428.893525922553 1400.224853515625 +428.927664629947 1466.814208984375 +430.886759376928 1323.849609375000 +445.118824286635 2200.000000000000 +505.851799123756 3631.000000000000 +522.879142647299 1843.000000000000 +529.887839543416 1136.832397460938 +536.163692934414 5222.000000000000 +537.164127390652 2657.000000000000 +538.162454710439 1796.178100585938 +544.339301230729 1413.667114257812 +546.912450246131 2510.000000000000 +610.181542562630 2042.000000000000 +611.181371312242 1400.000000000000 +645.154552081192 5333.000000000000 +646.158693354263 1778.000000000000 +647.153270969225 6082.129394531250 +648.155656988395 2289.000000000000 +649.150637720064 2324.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=666 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=666 experiment=3_0 +##scan 75 +##specref ms_run[1]:sample=1 period=1 cycle=666 experiment=3 +55.054505732533 25.000000000000 +55.060116779446 15.000000000000 +56.048448506258 20.000000000000 +85.028411205925 35.000000000000 +98.059278982655 958.000000000000 +105.067129758980 10.000000000000 +123.041271657474 20.000000000000 +123.051095128888 20.000000000000 +126.876822431871 10.000000000000 +133.100243079469 59.000000000000 +138.088467901690 35.000000000000 +140.069590830035 561.000000000000 +145.101270946048 20.000000000000 +149.056693160781 15.000000000000 +166.087482254599 20.000000000000 +286.178204102612 105.000000000000 +286.213277531220 60.716449737549 +>compound 0_5053681185761206615-676004--121--Myclobutanil +>parentmass 289.122615478838 +>ionization [M+H]1+ +>formula C15H17ClN4 +>charge 1 +>rt 448.027999999980 +##fmz 289.122615478837758 +##fid 5053681185761206615 +##des Myclobutanil +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +289.122615478838 1356806.543650601991 +290.123323995928 168319.538694710791 +291.117964046924 433903.252139170072 +292.120260799670 99781.634539092542 +>ms1peaks +52.005351813457 2501.610107421875 +53.013412581284 13134.520507812500 +53.850226225992 1302.909057617188 +54.009140063564 338983.656250000000 +55.006042248338 6435.412597656250 +55.011148435189 6609.394042968750 +55.054172395822 1772.104248046875 +55.934029229957 5757.919921875000 +56.941868288709 2705.908203125000 +59.049392394217 65787.757812500000 +60.044197396550 9389.001953125000 +61.039698624921 1629.770751953125 +63.997582420249 4596.096191406250 +64.004915539546 4860.728515625000 +68.011405901665 27484.292968750000 +68.993238795734 11816.172851562500 +69.044514210085 12151.762695312500 +72.936346245282 1770.000000000000 +73.063844648998 1632.810180664062 +76.485866327556 2207.000000000000 +79.020638014668 15456.159179687500 +80.048700307132 11716.706054687500 +81.936658440041 8339.158203125000 +82.995849176432 8191.000000000000 +87.054215388379 1432.329345703125 +89.505806636870 1376.000000000000 +90.488666027165 1798.000000000000 +95.952211902793 2472.000000000000 +97.967974119285 6640.000000000000 +100.074558827800 1418.000000000000 +102.090063528932 1768.000000000000 +109.942148206295 1646.000000000000 +113.962810920920 1728.000976562500 +114.090265101894 9843.087890625000 +118.085166173822 5466.146972656250 +122.095082275611 3591.515380859375 +122.962671452755 9919.435546875000 +123.090603383338 1818.105346679688 +130.157985838236 1433.000000000000 +136.020144210415 1305.642211914062 +141.111768954054 1381.647338867188 +141.957291332652 13999.958984375000 +147.090365251433 2315.564941406250 +149.021998403294 4169.404296875000 +151.095653127576 2632.192382812500 +151.109600618565 2638.503906250000 +155.069049191990 1400.588378906250 +155.105221715370 1306.244873046875 +155.972774632456 3955.750244140625 +158.152847157321 10190.631835937500 +161.094883274868 1469.000000000000 +164.993233307885 1413.000000000000 +170.094756804200 2692.873779296875 +173.079096183490 5464.607421875000 +174.990754641374 1338.000000000000 +175.120920396226 1335.489135742188 +178.157288006504 1567.557739257812 +179.104881581157 1856.000000000000 +182.960071822982 1596.667236328125 +186.016812097735 3128.000000000000 +194.115183195725 3037.019042968750 +195.105676043577 1846.959228515625 +195.121034909827 2138.534667968750 +198.183715433637 1614.000000000000 +201.983396783946 6476.000000000000 +217.007534943089 16000.083984375000 +217.105603079000 12722.193359375000 +218.010461830348 1723.000000000000 +218.108916975941 1918.000000000000 +219.094207015885 1394.000000000000 +234.033666185649 17919.000000000000 +235.036061869219 1699.000000000000 +239.087710708037 2715.000000000000 +245.038087259231 3705.000000000000 +246.860587751512 3017.000000000000 +250.998652800198 2461.000000000000 +252.996040050118 1751.000000000000 +262.065226573716 31878.271484375000 +263.067812997194 3540.000000000000 +264.062744585962 1732.000000000000 +276.080875651007 47441.000000000000 +277.083729023421 6202.904296875000 +278.078049070253 2909.805664062500 +279.092264164105 2269.000000000000 +281.049607531965 1759.000000000000 +284.163709253010 5971.317382812500 +285.167422523505 1450.937500000000 +289.120547785899 45105.261718750000 +290.122834000335 8899.000000000000 +291.118148964330 16223.000000000000 +292.119468760172 3916.748291015625 +303.104211105075 4272.900878906250 +303.190626643079 3701.817626953125 +304.121038021889 1154982.000000000000 +304.680120827865 1361.469604492188 +304.720450396369 1578.193115234375 +304.756696628278 1464.135742187500 +304.826755934771 1415.802856445312 +304.888295222133 4211.749023437500 +304.975939340234 6444.747070312500 +305.112954471951 109660.976562500000 +306.110248734555 72833.000000000000 +307.111946842557 10169.579101562500 +307.247397220322 1757.839477539062 +310.120212483100 5088.000000000000 +320.107070842572 7286.000000000000 +321.109817317563 1634.396606445312 +321.134008500327 1645.504272460938 +326.094135509242 51581.214843750000 +327.006663634739 3305.288085937500 +327.096918826684 8025.063964843750 +328.090879363560 3401.237060546875 +329.002848029289 3721.000000000000 +330.204815446188 11820.952148437500 +331.208232327135 2889.000000000000 +342.067980362905 3189.395019531250 +349.169296376205 25098.000000000000 +350.172883605486 4323.000000000000 +351.167291455015 1724.000000000000 +372.149200119315 2817.477050781250 +404.036004100360 11013.000000000000 +405.038241871311 2224.679687500000 +424.359699824875 1469.000000000000 +445.117347283461 1962.204711914062 +500.274802921042 11554.163085937500 +501.277725760601 3400.000000000000 +502.286539956580 1910.000000000000 +505.850895564320 2188.000000000000 +536.162361057972 4668.000000000000 +537.163239801382 2428.000000000000 +538.161608472883 1869.000000000000 +544.336387601713 1598.000000000000 +546.911505452596 1493.000000000000 +549.965979448424 1640.000000000000 +592.225456903764 1675.000000000000 +607.216655018496 74091.000000000000 +608.219193446659 23449.000000000000 +609.215852555200 11438.528320312500 +610.208425679746 4454.000000000000 +611.188234775837 1805.798706054688 +612.220726308427 4082.000000000000 +613.224505418990 34075.000000000000 +614.227906702716 11171.000000000000 +615.225014693998 5343.000000000000 +623.210784148654 2510.000000000000 +629.198405169302 68640.000000000000 +630.201595235063 21340.328125000000 +631.198284234777 10581.000000000000 +632.198298853566 2483.000000000000 +707.140261218123 1384.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=676 experiment=4 +##m_id Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=4_0 +##scan 121 +##specref ms_run[1]:sample=1 period=1 cycle=676 experiment=4 +70.039827273652 5131.529296875000 +82.041077772907 30.000000000000 +82.066941721068 30.000000000000 +83.048162364624 30.000000000000 +89.038123713717 30.000000000000 +98.998128961124 45.000000000000 +99.005937159691 45.000000000000 +116.057773265737 45.000000000000 +116.068964884923 45.000000000000 +125.014210234006 2627.000000000000 +128.869373457499 30.000000000000 +129.050864049931 30.000000000000 +129.066487998016 43.279674530029 +130.062932087251 75.000000000000 +130.074324678654 75.000000000000 +131.069149811718 90.000000000000 +137.012353655287 30.000000000000 +143.074736350629 45.000000000000 +143.085702367776 45.000000000000 +149.013720936376 75.000000000000 +150.009016679015 90.000000000000 +151.029635761105 960.000000000000 +153.071034687141 30.000000000000 +164.027845684388 225.000000000000 +166.040731347006 75.000000000000 +167.084665955303 45.000000000000 +168.094844704597 30.000000000000 +173.861021388832 75.000000000000 +178.040593736165 180.000000000000 +191.049915677020 45.000000000000 +203.057899363272 45.000000000000 +220.088072925820 120.000000000000 +289.119266976743 135.000000000000 +>ms1peaks +52.005397076818 2734.410888671875 +52.018107045505 1336.588989257812 +53.013261826329 14264.303710937500 +54.009079203842 328540.562500000000 +55.005732946798 6038.434082031250 +55.011210209049 5773.483398437500 +55.054089450492 1883.920532226562 +55.933933351350 5941.799316406250 +56.049311183158 2529.910644531250 +56.941559341288 2177.731445312500 +59.049288422008 55833.332031250000 +60.044400478994 9188.863281250000 +61.039483771618 1336.615844726562 +63.997769089290 4226.595214843750 +64.004652574785 4312.662109375000 +67.028420902367 1685.132324218750 +68.011303574981 26639.857421875000 +68.993400384347 11132.456054687500 +69.044245603619 12842.139648437500 +72.936451870693 2092.438964843750 +73.064343001052 2004.000000000000 +76.485626827097 1932.002563476562 +79.020705537221 15479.782226562500 +80.048746552992 12934.649414062500 +81.936560826315 7849.174804687500 +82.996236710322 7697.570312500000 +87.043649221397 1392.278564453125 +87.054161695388 1495.958618164062 +89.506032483299 1554.000000000000 +90.488774891048 1551.744018554688 +91.052857733317 1701.434936523438 +95.951953010697 2094.000000000000 +97.967766546756 6595.530273437500 +109.942695624537 1327.000000000000 +113.961956344849 1877.000000000000 +114.090202311915 11113.386718750000 +118.085079269697 5461.000000000000 +122.095332793077 3096.000000000000 +122.962788239519 9551.916015625000 +123.089923877343 1592.000000000000 +130.158267685481 1374.000000000000 +136.020500147191 1906.429687500000 +141.089705751127 1398.031372070312 +141.111419699029 1374.918823242188 +141.935031405798 2215.528808593750 +141.957114961469 13636.359375000000 +147.090410388658 2596.000000000000 +149.021734118264 3900.000000000000 +149.042225044400 1717.679077148438 +151.095530836015 2392.175048828125 +151.109345923165 2675.036376953125 +155.069217138005 1392.010375976562 +155.972851416164 3798.715576171875 +158.152680730278 10054.000000000000 +161.095473046681 1550.000000000000 +164.142407569715 1467.709594726562 +170.094842381476 2189.805175781250 +173.079740417554 5427.904296875000 +178.157986956425 1455.000000000000 +179.105560744514 1912.301391601562 +182.960698176280 2000.407470703125 +186.016618789428 1896.000000000000 +186.220115257894 1974.000000000000 +194.116069304698 2583.000000000000 +195.121207806540 1998.303710937500 +198.184395565259 1695.000000000000 +201.982853397927 4906.000000000000 +217.007045852030 12703.000000000000 +217.105649597883 13317.726562500000 +218.109378650956 2113.981933593750 +219.093923189224 1382.400756835938 +234.033511361987 14162.000000000000 +235.036774500644 1342.000000000000 +239.087266669620 2910.000000000000 +242.282551973761 1561.000000000000 +245.038675382516 2489.000000000000 +246.861414583855 2664.000000000000 +250.998716978816 2090.000000000000 +262.065290180852 23768.000000000000 +263.068197519244 2928.000000000000 +276.081065166232 35016.000000000000 +277.084200131760 4404.000000000000 +278.078513434024 2183.000000000000 +279.092009717775 2217.000000000000 +281.049184165914 1367.000000000000 +284.163360412320 3532.000000000000 +289.121282596047 297520.000000000000 +290.123339528492 48851.796875000000 +291.118124278084 95531.000000000000 +292.120251426315 17101.046875000000 +293.123187582260 1858.065429687500 +303.104014775580 2693.449951171875 +303.190353825641 2785.502441406250 +304.119856155362 954170.000000000000 +304.858461688543 1629.946044921875 +304.974182520147 7187.607910156250 +305.110635941863 61549.015625000000 +306.110453215668 55678.074218750000 +307.111643085162 7091.700683593750 +310.120007901196 5493.854003906250 +320.106626078784 4025.000000000000 +326.094632546811 51218.675781250000 +327.006414911949 2851.898193359375 +327.096265128312 8263.424804687500 +328.091406924071 3217.697509765625 +329.003058211528 3429.933349609375 +330.205471949815 7747.000000000000 +331.207754653901 1796.000000000000 +342.067426751640 3267.000000000000 +349.169395269431 21267.000000000000 +350.172679880257 4154.271972656250 +351.168393055602 1571.000000000000 +372.098739562700 1670.002075195312 +372.148644610713 2317.465087890625 +389.045115150928 4473.000000000000 +391.043177396698 1663.000000000000 +404.036316278299 7850.000000000000 +405.039997913270 1931.000000000000 +424.359886173771 1591.000000000000 +445.117801993639 2038.000000000000 +500.275651903375 13340.000000000000 +501.278433801524 4082.000000000000 +502.285907017338 2013.566040039062 +505.851095535466 2281.000000000000 +536.163686089478 4281.000000000000 +537.165279310098 2275.000000000000 +538.161599212928 1446.000000000000 +542.322146689605 2319.235839843750 +544.336681001720 2203.000000000000 +546.913546060949 1480.000000000000 +549.965890540792 1571.727539062500 +592.225728725342 6278.000000000000 +593.229191819800 2109.000000000000 +594.222911870749 2943.707031250000 +607.216789747777 46858.000000000000 +608.219527953593 15482.000000000000 +609.215333724431 7397.000000000000 +610.196851071075 3575.000000000000 +611.184731787601 1662.000000000000 +612.221188935026 2560.000000000000 +613.225065362361 23067.000000000000 +614.226835965539 7388.000000000000 +615.223918934987 3328.000000000000 +623.150116137773 1311.609985351562 +623.211673074874 1404.509399414062 +629.198822367023 49161.000000000000 +630.201975789631 15060.724609375000 +631.197108322666 7602.103027343750 +632.199182275970 1787.000000000000 +707.142781768806 1359.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=677 experiment=5 +##m_id Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=677 experiment=5_0 +##scan 131 +##specref ms_run[1]:sample=1 period=1 cycle=677 experiment=5 +55.054639659329 105.000000000000 +55.060017620298 92.683341979980 +56.049823597015 30.000000000000 +57.069035771002 30.000000000000 +65.037770341976 30.000000000000 +69.832588352285 45.000000000000 +70.039908024674 17805.998046875000 +70.065015706368 30.000000000000 +70.282524899395 30.000000000000 +70.655650228794 30.000000000000 +70.662690104158 30.000000000000 +70.671685449976 30.000000000000 +70.680369758222 30.000000000000 +71.073891359706 30.000000000000 +80.047874421886 45.000000000000 +81.071842605128 75.000000000000 +82.039226093295 45.000000000000 +82.068250865158 45.000000000000 +83.046676696339 105.000000000000 +89.037423472355 210.000000000000 +90.046133682594 75.000000000000 +95.071588708154 60.000000000000 +98.999966313572 135.000000000000 +103.050438931432 30.000000000000 +115.055166727960 150.000000000000 +116.062522261690 210.000000000000 +122.999173332647 45.000000000000 +124.644051017099 60.000000000000 +124.994916353506 582.297302246094 +125.014371187472 12549.000000000000 +125.378378046066 30.000000000000 +125.390531676820 30.000000000000 +128.046903884584 225.000000000000 +129.055373654720 75.000000000000 +129.064357675053 60.000000000000 +130.062595084552 180.000000000000 +131.075918885468 60.000000000000 +131.089262432243 60.000000000000 +137.014910793247 150.000000000000 +139.029843740401 105.000000000000 +139.049300450331 47.856365203857 +143.072761538143 168.118270874023 +143.089863992705 96.726943969727 +149.013988771638 299.000000000000 +150.010736302066 285.000000000000 +151.030302067974 2704.000000000000 +152.065539738869 30.000000000000 +153.069429336803 150.000000000000 +157.100583676525 45.000000000000 +158.108303191611 30.000000000000 +162.029804830888 30.000000000000 +163.016613439026 30.000000000000 +163.027865460821 30.000000000000 +164.025164845834 997.000000000000 +165.032309967876 230.139968872070 +165.048285398527 267.000000000000 +165.068235719394 71.195930480957 +166.041158820976 300.000000000000 +167.084364530618 120.000000000000 +168.091368874638 180.000000000000 +169.091421834386 45.000000000000 +170.096865844811 90.000000000000 +175.029690206742 135.000000000000 +177.033157268884 30.000000000000 +178.041386504653 543.000000000000 +184.113505217082 75.000000000000 +185.131013174733 45.000000000000 +188.038417071829 30.000000000000 +191.051083107779 30.000000000000 +192.056950923082 75.000000000000 +193.074112586304 150.000000000000 +203.062235811985 251.000000000000 +220.086936658481 240.000000000000 +289.118902482462 413.000000000000 +>ms1peaks +52.005617027968 2841.486083984375 +53.013411271366 13567.883789062500 +54.009125331887 341665.812500000000 +55.005857415052 5900.790039062500 +55.011242701615 6013.953125000000 +55.054093292119 2035.055908203125 +55.933978586076 5672.338378906250 +56.049467099919 1695.441040039062 +56.941782308930 2173.337402343750 +59.049339198083 62878.703125000000 +60.044404001763 9862.614257812500 +61.039435521241 1719.998779296875 +63.997664239141 3450.597167968750 +64.005081384586 3958.136474609375 +68.011443914678 27040.419921875000 +68.993714467215 12520.464843750000 +69.007373071731 1388.107910156250 +69.044312866744 13073.230468750000 +72.936423004110 2084.000000000000 +73.063871079142 1705.000000000000 +76.485830845774 2577.000000000000 +79.020684296263 13782.132812500000 +80.048779775419 11186.997070312500 +81.936674853257 8327.656250000000 +82.996269546702 8040.201660156250 +89.506005127285 1468.281982421875 +90.489095167913 1675.000000000000 +95.951948147015 2520.515136718750 +97.967758472339 6678.626953125000 +102.090788355145 2027.477661132812 +113.962336972098 2071.000000000000 +114.090407289761 9387.833984375000 +118.085129231385 6116.000000000000 +122.095638138110 3776.030761718750 +122.962814871209 10117.168945312500 +123.090715093470 1657.501464843750 +136.020905158615 1394.424438476562 +140.067586645329 1617.045654296875 +141.112054526426 1383.640991210938 +141.935709702620 1911.949829101562 +141.957347460629 13581.779296875000 +147.090339739564 2374.998291015625 +149.022576244489 3994.022705078125 +151.095387083973 2392.279052734375 +151.109293023596 2750.114746093750 +155.069699172730 1332.009765625000 +155.972973853574 3810.662841796875 +158.152617650358 10434.000000000000 +159.154821868580 1369.000000000000 +161.095811541558 1615.000000000000 +170.094786893830 2397.479492187500 +170.116223095026 1563.129394531250 +173.079809386205 6290.747070312500 +178.157999558146 1344.694458007812 +179.105474980732 1898.194946289062 +182.961052201833 2004.073364257812 +186.220351226598 1623.000000000000 +193.157127136625 1493.409179687500 +194.115785614334 2955.000000000000 +195.120763129781 1823.166137695312 +198.184413101409 2214.000000000000 +201.984090601891 2436.000000000000 +217.007207589124 6332.419433593750 +217.105727151964 16770.736328125000 +218.108791440056 2512.000000000000 +234.033555067529 7474.000000000000 +239.087847702990 2936.000000000000 +242.283076836300 1598.000000000000 +245.039110357630 1466.000000000000 +246.860750264023 2469.000000000000 +249.183092518468 1366.967651367188 +250.999128212314 2641.000000000000 +252.995944883436 1376.000000000000 +262.065576474895 11528.000000000000 +263.068397905954 1693.000000000000 +276.080823895982 18533.000000000000 +277.084470217057 2604.243652343750 +279.093578782719 2100.000000000000 +281.049703566301 1340.000000000000 +284.163284328388 2755.000000000000 +288.245192514905 2240.408203125000 +289.124028104405 571675.000000000000 +289.974079344843 2398.387451171875 +290.020293351816 2510.571777343750 +290.123004833560 37005.632812500000 +291.118405903154 172664.062500000000 +292.120440247980 30711.750000000000 +293.123309031099 2511.000000000000 +303.103999271490 1878.000000000000 +303.190085777343 1857.193237304688 +304.115683834546 552400.000000000000 +304.984847835069 1705.556396484375 +305.107785187759 57481.210937500000 +306.110327480189 29213.000000000000 +307.112384326980 4304.000000000000 +310.120384968947 4593.269531250000 +311.105475064582 1824.000000000000 +320.107323506761 2737.000000000000 +326.094810667410 41008.000000000000 +327.006437528123 3347.260986328125 +327.096455636030 6753.961425781250 +328.092188803708 2930.000000000000 +329.003747738298 3355.000000000000 +330.205009985617 6046.367675781250 +331.208059597585 1436.000000000000 +342.068061155461 2814.000000000000 +349.170060952900 13874.000000000000 +350.172621024257 2607.730712890625 +372.148688883306 1405.186401367188 +389.044748240917 7650.000000000000 +390.047497559210 1913.000000000000 +391.042419990568 2801.000000000000 +392.068522384462 2797.000000000000 +394.066194691334 1609.439208984375 +404.036647250000 3756.000000000000 +424.362220661973 1680.073608398438 +445.118239809427 2256.000000000000 +457.032674519482 1580.000000000000 +468.387534165811 1625.361328125000 +487.228056299732 1735.000000000000 +500.275588301319 14065.000000000000 +501.278629401665 3579.000000000000 +502.286881001175 2107.000000000000 +505.851399270242 2207.884277343750 +531.255889309595 1828.000000000000 +536.162574795725 4348.000000000000 +537.164900413678 2412.000000000000 +538.160905924694 1840.207275390625 +542.321702796647 4110.075683593750 +543.325936834084 1425.000000000000 +544.336609702317 2008.000000000000 +546.912855890436 1498.000000000000 +592.225267665071 7023.000000000000 +593.153130472392 2079.229736328125 +593.228621623492 2593.859863281250 +594.223736830213 3021.337890625000 +607.216353924445 19371.000000000000 +608.219876548020 6018.000000000000 +609.216035675932 2735.843994140625 +610.184990477000 2845.000000000000 +612.185596819648 1643.000000000000 +613.224838309655 6730.896972656250 +614.227226894726 2411.000000000000 +629.198664613593 14632.000000000000 +630.201165251457 4128.000000000000 +631.197724705928 2446.000000000000 +639.156464406238 1485.000000000000 +641.154235888014 1515.855590820312 +654.147541437576 1594.000000000000 +692.150340948486 1581.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=678 experiment=3 +##m_id Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=678 experiment=3_0 +##scan 138 +##specref ms_run[1]:sample=1 period=1 cycle=678 experiment=3 +55.054270434220 105.000000000000 +56.052257730119 45.000000000000 +57.069642685298 75.000000000000 +57.076278365435 58.515125274658 +58.064669437897 30.000000000000 +58.069671200743 30.000000000000 +69.831821936433 120.000000000000 +70.040097536413 24218.527343750000 +70.062801316593 31.250431060791 +70.429050963972 30.000000000000 +70.438704107352 30.000000000000 +70.574152845601 53.442497253418 +71.040963389931 30.000000000000 +71.331546496348 45.000000000000 +71.547711411837 30.000000000000 +71.554731582869 30.000000000000 +81.069977524059 75.000000000000 +82.040024877605 180.000000000000 +82.064998747631 45.000000000000 +82.071892633579 45.000000000000 +83.046815904048 150.000000000000 +89.037322041009 315.000000000000 +93.058395230178 30.000000000000 +94.065823923167 15.000000000000 +95.073128971584 30.000000000000 +98.998707139648 75.000000000000 +115.038697637289 93.372489929199 +115.054570314383 213.739791870117 +116.061560571436 270.000000000000 +122.996698381028 60.000000000000 +123.007612454196 60.000000000000 +123.995047593998 30.000000000000 +124.002911191956 30.000000000000 +125.014307674051 14773.000000000000 +125.381473665944 30.000000000000 +125.393966225912 30.000000000000 +125.593372072822 30.000000000000 +125.599867839373 30.000000000000 +126.051609264641 30.000000000000 +126.059603286955 30.000000000000 +127.054832877589 45.000000000000 +128.048017316181 180.000000000000 +129.072076230440 45.000000000000 +129.857221738296 30.000000000000 +129.870016169563 30.000000000000 +130.064515161974 366.000000000000 +131.073613293583 60.000000000000 +137.014278524345 249.000000000000 +139.030165806979 60.000000000000 +143.060465185927 75.000000000000 +143.074012846680 104.308815002441 +143.089076083416 75.000000000000 +144.077234015868 30.000000000000 +149.015246811528 255.000000000000 +150.010825556181 309.000000000000 +150.598024297069 30.000000000000 +150.607575019774 30.000000000000 +151.029903267346 3468.000000000000 +152.066634976325 75.000000000000 +153.048272599038 48.395233154297 +153.069565327336 225.000000000000 +156.056088009549 27.453353881836 +156.078507049206 90.000000000000 +158.105667049362 30.000000000000 +158.115693896600 30.000000000000 +163.028234418456 150.000000000000 +163.049074774860 101.341789245605 +164.024417450344 1260.000000000000 +164.048222951239 223.749069213867 +165.033343347864 300.000000000000 +165.071689120240 100.887588500977 +166.041504194847 358.000000000000 +167.083021637505 120.000000000000 +168.092033871908 180.000000000000 +168.126067348571 15.000000000000 +170.097096768962 45.000000000000 +175.031788442407 270.000000000000 +177.045702469556 45.000000000000 +178.040557800332 739.000000000000 +179.064601892177 45.000000000000 +184.112879145243 75.000000000000 +185.120289107757 30.000000000000 +188.038359439527 30.000000000000 +191.046836106019 45.000000000000 +192.055368291335 195.000000000000 +193.076440167615 180.000000000000 +203.062460725867 150.000000000000 +205.065521702945 45.000000000000 +218.068791434007 45.000000000000 +220.087014664115 542.000000000000 +289.122158220479 827.000000000000 +>compound 0_5868141785564858207-659006--23--Cyproconazole +>parentmass 292.121361099857 +>ionization [M+H]1+ +>formula C15H18ClN3O +>charge 1 +>rt 436.497000000000 +##fmz 292.121361099857211 +##fid 5868141785564858207 +##des Cyproconazole +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +292.121361099857 1772579.388386697043 +293.123089125011 260903.108379805693 +294.118234104604 585930.221396290231 +295.120342830415 94191.053388591099 +>ms1peaks +50.015030688094 1631.000000000000 +52.005691836328 2833.837890625000 +53.013678352050 13820.645507812500 +53.850930804944 1372.676147460938 +54.009488813193 341215.375000000000 +55.006244952468 6363.858398437500 +55.011195314574 6663.786621093750 +55.054435589179 2093.444580078125 +55.934214796378 6443.966308593750 +56.049418637710 1614.372314453125 +56.942077131072 2603.345458984375 +59.049684010496 67068.679687500000 +60.044674600260 8507.357421875000 +61.039576232541 1618.787597656250 +63.997953270808 4540.612304687500 +64.004984885183 4765.146484375000 +68.011730125352 26984.066406250000 +68.993758540617 13250.065429687500 +69.044639818678 13453.114257812500 +72.936865747985 3009.785888671875 +73.064487442720 1926.000000000000 +76.486106736487 2394.000000000000 +77.012975210189 1331.000000000000 +77.038245950909 6864.013671875000 +79.021170250218 14954.513671875000 +80.049055487900 12273.781250000000 +81.937167726085 8605.721679687500 +82.996581259270 9547.895507812500 +87.054493611252 1308.586669921875 +89.506388403917 1579.000000000000 +90.489379547455 1879.000000000000 +91.053817827625 1210.000000000000 +95.952611673257 2421.652587890625 +97.968325410624 7844.628906250000 +100.075376789744 1408.000000000000 +102.090940410850 1712.000000000000 +104.048827681379 4021.000000000000 +105.032851808396 3043.702148437500 +109.943040230612 1524.000000000000 +113.962743611150 2300.809326171875 +114.091086475065 10732.537109375000 +118.085604757949 6375.129394531250 +122.095612538633 3453.346191406250 +122.963478886657 10149.138671875000 +123.091154033496 1907.152587890625 +123.962085557178 1291.000000000000 +124.964032856960 1524.723510742188 +124.981293760905 5573.300781250000 +132.044243365317 129513.453125000000 +133.047275934233 12024.171875000000 +136.021338396786 1596.000000000000 +136.111611313675 1179.000000000000 +141.090513006913 1389.292724609375 +141.112565247916 1247.203857421875 +141.957978845995 16325.500000000000 +147.090945866648 2556.685302734375 +149.023028218992 6399.154296875000 +150.054262184195 1568.000000000000 +151.096430884077 2664.400390625000 +151.111011940160 2835.027587890625 +155.069438117684 1871.944824218750 +155.105960083325 1401.000000000000 +155.973753152622 4288.000000000000 +158.153627071218 14384.000000000000 +159.156473714741 1627.752929687500 +160.050487288307 38915.000000000000 +161.053611692746 4466.942382812500 +161.095700587134 1743.057495117188 +164.142944501592 1256.052368164062 +167.015735366166 2785.089599609375 +170.096151543720 2652.023193359375 +170.116409887737 1324.376464843750 +170.968993556255 7076.000000000000 +171.137671144810 4912.312011718750 +172.136045264128 1371.000000000000 +173.079830429233 8581.928710937500 +174.991306236853 1198.000000000000 +177.054219725911 1769.000000000000 +178.157947155736 1498.908447265625 +179.106050750592 1934.090454101562 +182.960933723657 1780.061523437500 +182.991388549794 1244.309082031250 +186.221152079128 2287.000000000000 +194.116900036921 2752.000000000000 +195.121615177487 1919.471069335938 +198.184412559940 2140.000000000000 +200.200455656322 1296.554199218750 +209.153704347399 1590.000000000000 +212.888258624179 1535.000000000000 +217.106944592366 24346.000000000000 +218.110517718319 2646.000000000000 +219.095540028475 2644.006591796875 +228.196097140190 1527.811645507812 +236.167749124378 1677.000000000000 +239.089312381813 3327.000000000000 +242.284215148787 1201.000000000000 +246.862288406064 3365.000000000000 +249.184532839914 1860.293334960938 +251.001107206325 2362.000000000000 +252.997444701878 1876.000000000000 +253.916335213075 4093.000000000000 +260.980865788213 46877.000000000000 +261.983931158765 5301.000000000000 +262.976772362746 4418.000000000000 +267.172661485943 1410.000000000000 +277.199859444074 2417.590087890625 +279.093448238935 1888.450561523438 +281.051163936397 1557.000000000000 +292.121170689402 15731.000000000000 +293.123945781771 2615.000000000000 +294.118820607873 4859.000000000000 +295.121821476430 1186.000000000000 +318.013460543863 19020.000000000000 +319.016226586969 2819.000000000000 +320.010792812476 1745.000000000000 +324.021120495162 2522.000000000000 +327.007928037291 3314.077636718750 +329.005428091932 3187.000000000000 +331.002680981835 1140.229492187500 +335.040406311528 1228.000000000000 +339.995783079981 73785.000000000000 +340.998517552508 10283.000000000000 +341.992089047450 7216.000000000000 +351.928943475892 4368.000000000000 +353.926519256680 2362.000000000000 +355.969819970535 3512.076416015625 +363.071778928522 11698.970703125000 +364.073181575102 1981.000000000000 +371.315525399960 1354.000000000000 +379.934529706961 4095.883300781250 +381.932716463007 2062.000000000000 +445.119746997025 2474.000000000000 +446.119291863183 1145.000000000000 +505.853826516954 4858.000000000000 +506.855308046231 1451.000000000000 +519.139330404280 1166.703979492188 +522.880837958116 1970.000000000000 +523.871380297922 1372.000000000000 +529.891671811182 1342.000000000000 +536.165890644769 5714.000000000000 +537.166372879728 2646.000000000000 +538.163391669663 2155.000000000000 +544.339624971493 1155.000000000000 +546.914039373140 3234.000000000000 +547.912958504845 1306.000000000000 +610.184280095073 1860.000000000000 +611.183517202231 1239.000000000000 +657.000223829242 1834.000000000000 +696.940499292838 3022.000000000000 +698.938485246113 2250.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=659 experiment=6 +##m_id Cyproconazole_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=6_0 +##scan 23 +##specref ms_run[1]:sample=1 period=1 cycle=659 experiment=6 +70.040568192781 3615.933349609375 +125.015306520704 1696.000000000000 +138.993130230232 120.000000000000 +292.118132099014 75.000000000000 +>ms1peaks +52.005894908514 3265.400634765625 +53.013510908959 13106.733398437500 +53.850705653871 1327.061035156250 +54.009389058624 348945.000000000000 +55.006169898270 6124.332519531250 +55.011317455070 6538.428710937500 +55.054331627343 2077.732910156250 +55.934133744738 6508.345214843750 +56.049593965189 1999.699707031250 +56.942184704094 2688.283691406250 +59.049605800481 70253.718750000000 +60.044658666294 10706.690429687500 +61.039619044210 1586.278076171875 +63.997756861684 3941.995605468750 +64.005166169614 4907.884765625000 +67.028913163203 1580.000000000000 +68.011642030602 27597.281250000000 +68.993728986678 12929.603515625000 +69.044696634986 12506.645507812500 +72.936667673711 2191.062988281250 +73.064288768235 1852.000000000000 +76.486322585941 2327.304443359375 +77.038204782362 5884.000000000000 +79.020970020200 14096.371093750000 +80.049138765431 11437.409179687500 +81.937010633269 8800.649414062500 +82.996563663943 9775.875976562500 +87.054866657942 1386.671508789062 +89.506477006513 1856.891357421875 +90.489380614180 1867.000000000000 +91.053607705956 1522.000000000000 +95.952400718089 2411.000000000000 +97.968129951793 7534.000000000000 +100.075098492601 1334.000000000000 +102.090723461138 1696.000000000000 +104.049086460790 3045.739257812500 +105.032948258430 2178.018554687500 +109.942760191152 1389.039428710938 +113.963014550647 1955.283325195312 +114.090880342296 9824.000000000000 +118.085478285355 6071.000000000000 +122.095943650184 3414.491943359375 +122.963053449523 10824.022460937500 +123.091014422132 1667.127319335938 +123.961852610233 1273.000000000000 +124.964467047349 2135.799560546875 +124.981051711745 4296.547363281250 +132.043642930226 93077.242187500000 +133.046777995488 9274.231445312500 +136.020768820120 1683.000000000000 +136.110810804565 1296.000000000000 +141.090222902589 1360.714843750000 +141.112627587411 1461.608520507812 +141.935004916839 1940.239746093750 +141.957609246025 17033.816406250000 +147.090484942279 2411.661132812500 +149.022774177869 5733.046386718750 +149.042316567318 2746.710693359375 +150.054248684273 1437.284790039062 +151.095045034366 2698.686279296875 +151.110908763912 3144.476318359375 +155.069769845772 1649.881591796875 +155.105405759277 1860.793457031250 +155.973140596379 4755.245605468750 +158.153359438729 14516.186523437500 +159.156612007249 1486.367431640625 +160.049846075993 24545.988281250000 +161.052607402490 2286.874755859375 +161.095210153424 1778.371337890625 +167.015155408714 1740.000000000000 +170.095595750468 2643.026123046875 +170.968534800983 4638.000000000000 +171.137187033467 8793.664062500000 +172.138659608019 1674.000000000000 +172.168464035175 1208.633911132812 +173.079743164910 7798.492675781250 +174.991345453773 1573.000000000000 +177.053816341336 1417.014038085938 +178.158055093780 1735.947753906250 +179.105704311835 2197.604980468750 +182.961317763038 2211.718750000000 +186.220205393587 1399.000000000000 +194.116470425084 2855.795654296875 +195.121709243913 1774.128417968750 +198.184491575929 2140.000000000000 +200.199765534300 1398.692871093750 +209.152792656657 1425.000000000000 +217.106381802785 24672.529296875000 +218.109726712595 2594.000000000000 +219.095072568829 2421.334228515625 +228.194355078180 1758.423828125000 +236.167326569908 1392.000000000000 +239.087560169956 3393.000000000000 +242.283100716676 1301.000000000000 +246.861853504396 3967.000000000000 +249.184072418419 1674.044555664062 +250.179850228401 1317.625488281250 +250.969009212760 1272.659667968750 +250.998800627422 2485.986083984375 +252.996506036249 1407.000000000000 +253.914744903944 3247.000000000000 +260.980140443968 31189.000000000000 +261.982652125164 3630.000000000000 +262.976320674948 3030.000000000000 +267.169211061356 1310.111816406250 +277.200326399959 5169.000000000000 +279.093304185450 2011.372070312500 +281.050388682144 1561.000000000000 +292.121055360225 111310.531250000000 +293.123630076529 20278.496093750000 +294.118239620053 37417.625000000000 +295.120516544042 6903.191406250000 +299.181966555803 2788.124755859375 +304.298855657172 1458.000000000000 +318.012599323858 12766.560546875000 +319.014697171275 1763.000000000000 +320.008501629176 1292.000000000000 +324.021279180039 2211.000000000000 +327.007286394326 3510.000000000000 +329.004329094240 3020.000000000000 +339.994441786583 55469.000000000000 +340.996800649447 7731.000000000000 +341.991164319056 5376.000000000000 +351.927480336150 4373.000000000000 +353.925190372111 2157.000000000000 +355.923288991607 1875.234497070312 +355.967623747153 2895.083740234375 +363.069819320259 9600.000000000000 +364.071840904280 1502.000000000000 +365.067263835001 1200.000000000000 +379.933765070569 3274.000000000000 +381.930698322663 2082.000000000000 +445.119022397624 2321.740478515625 +505.851287178680 4210.000000000000 +506.853720407640 1284.000000000000 +522.877826294640 1830.000000000000 +529.887917529630 1402.000000000000 +536.163984165691 5143.000000000000 +537.165630799202 2699.000000000000 +538.162716451736 1997.000000000000 +544.338330991241 1339.000000000000 +546.913670520771 2956.903320312500 +547.912049049860 1201.466308593750 +610.182850595719 2143.000000000000 +611.183650714411 1327.000000000000 +647.152176664637 1285.000000000000 +671.046640090612 3328.000000000000 +673.045642862147 3209.000000000000 +696.940422810442 1799.000000000000 +698.936403714808 1431.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=660 experiment=5 +##m_id Cyproconazole_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=660 experiment=5_0 +##scan 31 +##specref ms_run[1]:sample=1 period=1 cycle=660 experiment=5 +69.069680828999 60.000000000000 +69.833468065273 60.000000000000 +70.039800909321 9567.099609375000 +70.641144537874 15.000000000000 +89.039009042006 90.000000000000 +96.981904363605 13.000000000000 +98.999669479829 13.000000000000 +124.645645258446 30.000000000000 +124.666018175052 30.000000000000 +125.014601911838 6743.000000000000 +129.070787391149 30.000000000000 +130.077634043857 45.000000000000 +137.015407395449 30.000000000000 +138.994241947132 309.000000000000 +139.027445850546 45.000000000000 +142.075290059555 45.000000000000 +163.032692292347 45.000000000000 +165.053013026384 30.000000000000 +170.879635830076 13.000000000000 +205.069739102638 13.000000000000 +292.116826310858 217.000000000000 +>ms1peaks +52.005486844196 2797.312255859375 +53.013452941613 13289.114257812500 +53.850392691129 1182.554077148438 +54.009302603618 341601.031250000000 +55.005911181832 5603.758300781250 +55.011355581201 5959.661132812500 +55.054189724209 2205.188476562500 +55.933928601241 6093.526367187500 +56.941939565668 2798.683593750000 +59.049443593556 67299.640625000000 +60.044262774734 8968.761718750000 +61.039204580633 1571.923095703125 +63.997813637547 4075.065429687500 +64.004662670356 4416.795898437500 +68.011501134588 27277.638671875000 +68.993585500338 12264.906250000000 +69.044393197123 13147.085937500000 +72.043949942055 1214.000000000000 +72.936545824901 2386.261962890625 +73.064141392327 1809.102661132812 +76.486217265459 2318.000000000000 +77.037914467348 2784.771240234375 +79.020708818127 18172.382812500000 +80.048894299954 13850.358398437500 +81.936654565436 8646.963867187500 +82.996013274860 9151.881835937500 +87.042952193812 1456.767700195312 +87.054623008241 1774.283325195312 +89.069755450540 1371.091674804688 +89.506205030598 1420.000000000000 +90.488660539027 2076.000000000000 +91.053504137418 1574.000000000000 +95.952180653762 2284.000000000000 +97.967884579650 7862.442871093750 +100.074476020240 1221.000000000000 +102.090415152097 1454.000000000000 +104.048216330484 1263.218750000000 +109.942447219977 1590.828491210938 +113.962324334339 2023.251098632812 +114.090394525983 11631.025390625000 +118.085045416936 6564.007812500000 +122.095214148430 3526.000000000000 +122.962880463908 10844.000000000000 +123.090776414574 1696.206054687500 +123.961832528390 1236.000000000000 +124.981223378162 1673.021850585938 +130.158379717264 1405.000000000000 +132.043434483782 41526.472656250000 +133.046757663549 4137.170898437500 +136.020231843939 1752.000000000000 +139.962610586396 1241.217529296875 +141.090622201525 1287.143798828125 +141.112120261557 1304.199096679688 +141.957439283701 16426.482421875000 +147.090642325371 2533.530273437500 +149.022533327810 5845.030273437500 +149.040994237727 2756.796875000000 +151.095191450521 2425.737792968750 +151.109945034180 2827.097656250000 +155.069776946854 1748.044799804688 +155.105248734220 1748.282226562500 +155.973048592075 4793.413085937500 +158.153052811157 14275.985351562500 +159.139068434260 1227.674072265625 +159.156070191539 1425.673461914062 +160.049271893755 12624.257812500000 +161.053296289892 1271.000000000000 +161.096235386258 1578.421630859375 +164.142270683686 1217.000000000000 +170.094887803481 2717.008544921875 +170.968792401520 2390.000000000000 +171.137329533636 9794.265625000000 +172.136840902698 2122.000000000000 +172.168466786332 1309.672119140625 +173.079514403953 7730.000000000000 +174.990695602365 1337.972656250000 +177.054653270806 1487.000000000000 +178.158403800321 1799.193237304688 +179.105583290233 3646.174560546875 +182.960823278834 1922.372802734375 +182.986018115359 1341.532470703125 +186.220896557034 1469.000000000000 +194.116385994522 3228.431884765625 +195.101721591860 1761.497314453125 +195.120840048138 2139.872070312500 +198.184759772344 2245.000000000000 +200.198358143313 1177.926513671875 +209.152634370621 1389.980712890625 +217.106353356190 24341.000000000000 +218.109655666691 2974.806884765625 +219.095036364843 2223.419921875000 +224.127894084409 1278.478759765625 +228.195273215592 1674.000000000000 +236.167137123771 1456.000000000000 +239.088416675585 3867.606689453125 +242.282513583885 1277.000000000000 +246.861185203855 3901.000000000000 +249.182714411045 1537.000000000000 +250.178392714940 1258.000000000000 +250.999007399485 2502.000000000000 +252.996469033063 1435.000000000000 +253.914671653353 1239.000000000000 +260.979753981104 14440.506835937500 +261.982083120224 1659.000000000000 +262.976384632325 1466.000000000000 +267.171781473257 1284.615478515625 +277.200008538434 5514.000000000000 +279.092542460055 2184.000000000000 +281.050041935527 1782.000000000000 +292.121077385471 225397.000000000000 +293.123076709567 37677.234375000000 +294.118496498528 72202.039062500000 +295.120481083763 12277.000000000000 +296.122922541254 1529.722534179688 +299.182168197771 3169.000000000000 +304.298453938228 1206.488281250000 +318.011978476534 6627.000000000000 +322.257925183826 1680.000000000000 +327.007860740219 3296.000000000000 +329.003921677419 3051.000000000000 +331.002277995733 1209.000000000000 +339.994321798017 30539.392578125000 +340.996727216497 4443.000000000000 +341.991298278029 3214.898193359375 +351.926939354897 2576.000000000000 +353.925624186681 1528.262939453125 +355.967794750582 1676.749389648438 +363.070157834182 5926.000000000000 +379.934179014433 2532.000000000000 +381.930242914518 1263.000000000000 +445.118947651762 2644.000000000000 +505.851615177973 4750.000000000000 +522.877878746579 2136.000000000000 +529.887991001196 1339.000000000000 +536.163681670628 5319.764160156250 +537.164689652602 2801.000000000000 +538.163060633683 2127.000000000000 +544.338383816682 1327.000000000000 +546.914418903411 2791.000000000000 +547.911772088961 1197.000000000000 +610.182643718635 2184.000000000000 +611.184358419061 1263.000000000000 +645.154326732470 4086.000000000000 +646.158388244596 1322.000000000000 +647.153421689114 4193.000000000000 +648.155059129677 1544.000000000000 +649.151941293891 1547.000000000000 +671.046678825629 4046.000000000000 +672.049764904672 1509.000000000000 +673.044229478168 4164.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=661 experiment=4 +##m_id Cyproconazole_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=661 experiment=4_0 +##scan 39 +##specref ms_run[1]:sample=1 period=1 cycle=661 experiment=4 +69.069782720526 75.000000000000 +69.075037200335 72.171691894531 +69.833112312395 75.000000000000 +69.843591471427 60.000000000000 +70.039928634265 13088.292968750000 +70.319666133547 15.000000000000 +89.038675227825 135.000000000000 +98.999711365249 75.000000000000 +110.999837825429 45.000000000000 +124.625194151181 42.994541168213 +124.642697348778 60.000000000000 +125.014756270469 8204.791015625000 +128.059856883403 30.000000000000 +129.068987922921 30.000000000000 +137.001555355407 45.000000000000 +137.012360970077 45.000000000000 +138.995547268225 330.000000000000 +139.030941733198 30.000000000000 +141.069593086757 45.000000000000 +142.076344647709 75.000000000000 +151.025488198283 30.000000000000 +155.057537358319 15.000000000000 +155.084546775978 30.000000000000 +163.031632720579 30.000000000000 +165.052030425682 45.000000000000 +292.123662525593 418.000000000000 +>compound 0_18386993698014176665-675005--113--UNKNOWN +>parentmass 304.118832214819 +>ionization [M+H]1+ +>charge 1 +>rt 446.172000000000 +##fmz 304.118832214819406 +##fid 18386993698014176665 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +304.118832214819 3569184.783728866838 +305.111339121164 309883.178195710818 +>ms1peaks +52.005429962927 2874.067626953125 +53.013488092548 14817.291015625000 +54.009250374962 334494.937500000000 +55.006084606761 5488.883300781250 +55.011047738293 6443.265136718750 +55.054381628314 2385.724365234375 +55.934070669618 5486.966796875000 +56.942036090778 2313.250244140625 +59.049556209203 57988.484375000000 +60.044347260401 9323.001953125000 +61.039167560780 1828.241455078125 +63.997923021227 4927.193359375000 +64.004932691950 5181.531250000000 +68.011552270537 27280.974609375000 +68.993634139472 11798.143554687500 +69.044334270747 12566.409179687500 +72.936570834957 2193.115966796875 +73.063872777826 1681.879882812500 +76.486053959604 2158.190429687500 +79.020753207512 16147.697265625000 +80.048886066869 12139.645507812500 +81.936907500524 8343.286132812500 +82.996250408243 8009.000000000000 +87.042980895665 1166.738403320312 +87.053972860944 1485.116088867188 +89.506705194324 1444.000000000000 +90.488891330057 1645.000000000000 +91.053476545401 1583.000000000000 +95.952210208006 2039.742797851562 +97.968150682366 6945.562500000000 +100.074718244150 1363.000000000000 +102.090306392772 1417.000000000000 +109.942448236827 1253.000000000000 +113.962708637249 2032.000000000000 +114.090792284548 10306.000000000000 +118.084892277491 5540.821289062500 +122.095166173318 3378.000000000000 +122.962913232208 9579.000000000000 +123.091195975991 1531.662963867188 +130.157764407919 1286.000000000000 +136.020428292954 1633.000000000000 +141.090127789620 1346.968627929688 +141.112042976374 1656.172241210938 +141.957142368171 13820.262695312500 +147.089971164701 2287.525390625000 +149.022027180229 4587.050292968750 +149.040978245649 2678.199707031250 +151.095856455214 2104.623291015625 +151.110429192129 2233.988037109375 +155.068837159282 1322.053710937500 +155.973356955881 4212.000000000000 +158.153011960091 10898.886718750000 +161.095284178342 1762.593994140625 +164.141720682546 1224.125244140625 +170.095143568643 2743.236816406250 +173.079445020465 6455.588378906250 +174.990181271009 1164.000000000000 +175.126264328958 1229.927246093750 +178.157011972493 1362.000000000000 +179.105369890054 1931.000000000000 +182.960638968270 1810.076538085938 +182.983125598895 1274.763061523438 +186.016954934375 1958.000000000000 +186.220415397417 1282.000000000000 +193.158240520354 1195.032958984375 +194.115937912419 2861.000000000000 +195.121022485646 2380.102539062500 +198.183707422577 1745.000000000000 +200.199383225092 1357.000000000000 +201.983259096536 4157.000000000000 +217.007242135614 11741.327148437500 +217.105963587093 15482.668945312500 +218.009949414252 1208.000000000000 +218.108958783015 2547.000000000000 +219.093633048806 1319.448730468750 +234.033582693957 12770.000000000000 +235.037603512480 1379.336669921875 +239.087766278998 3286.875732421875 +242.283333142943 1269.000000000000 +245.038366204801 2525.000000000000 +246.860868473188 2768.000000000000 +249.183726045021 1277.861328125000 +250.999502407170 2552.000000000000 +252.995631834554 1836.000000000000 +262.065239894604 21394.767578125000 +263.067572169870 2404.000000000000 +264.061891103771 1243.000000000000 +276.080813947841 32185.000000000000 +277.083963767141 4114.000000000000 +278.078054160446 2217.000000000000 +279.092495265569 1940.000000000000 +281.050419778851 1367.000000000000 +284.163590469925 9332.000000000000 +285.167331910184 2517.000000000000 +289.119964437534 1441.302978515625 +292.119508242518 1546.000000000000 +303.104642799152 3336.000000000000 +303.191168270618 2846.093505859375 +304.118917204532 886697.062500000000 +304.856339026942 1419.656616210938 +304.975022441588 5892.455566406250 +305.107897820025 60098.996093750000 +306.110158464267 52147.246093750000 +307.111260806590 6616.670410156250 +307.247283236566 2744.782226562500 +310.120139525907 4017.412597656250 +320.106832165572 5127.000000000000 +321.110457254103 1231.635253906250 +321.131042046566 1226.668579101562 +326.094185610162 39581.000000000000 +327.007439325330 3479.883544921875 +327.096485748553 6323.979980468750 +328.091424657873 2476.325927734375 +329.002736488496 3916.000000000000 +330.204957173578 17861.789062500000 +331.208137127779 4322.000000000000 +342.068068201427 2858.656982421875 +349.169386508932 18308.152343750000 +350.172289812388 3575.000000000000 +351.169114792649 1326.000000000000 +352.185338388432 1383.838623046875 +372.148023932598 2199.032714843750 +380.334421867930 1500.000000000000 +404.036203084131 8110.000000000000 +405.038280600419 1614.000000000000 +445.117639958471 2103.000000000000 +500.274765830931 9506.000000000000 +501.278189264574 2845.197509765625 +502.287108152553 1738.000000000000 +505.850965822120 2506.000000000000 +536.163265279090 5123.811523437500 +537.164206705990 2452.000000000000 +538.160787955733 1794.000000000000 +544.336478775213 1764.000000000000 +546.913227478942 1570.434814453125 +549.964589119831 1398.000000000000 +607.215848916045 42716.000000000000 +608.219229396365 13004.000000000000 +609.215354074706 6569.000000000000 +610.191475231986 3658.000000000000 +611.187180591379 1650.000000000000 +612.219311132493 2717.000000000000 +613.224098373297 22062.000000000000 +614.227279534381 7018.149414062500 +615.222828016202 3443.000000000000 +623.211028873207 1301.000000000000 +629.198230629944 46218.000000000000 +630.201437914669 14408.000000000000 +631.197842259138 6467.000000000000 +632.198694915122 1400.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=675 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=675 experiment=5_0 +##scan 113 +##specref ms_run[1]:sample=1 period=1 cycle=675 experiment=5 +51.025230191010 60.000000000000 +53.042474404052 45.000000000000 +58.995209811857 285.000000000000 +60.080905436478 1803.923461914062 +65.038735029139 45.000000000000 +77.038622051882 332.000000000000 +78.045973004466 60.000000000000 +79.053817998651 539.000000000000 +79.990848874925 300.000000000000 +91.054001664442 620.000000000000 +93.068645217008 370.000000000000 +95.049052730571 45.000000000000 +97.010676625187 890.000000000000 +103.053787209201 291.000000000000 +104.061084742769 150.000000000000 +105.068334920325 38.785545349121 +107.048476065256 2240.160888671875 +107.072432955012 135.000000000000 +108.055792255651 1061.000000000000 +109.063970513485 264.350006103516 +110.016978522096 165.000000000000 +111.025272603771 75.000000000000 +118.074140251592 45.000000000000 +121.009130624023 548.000000000000 +121.029958953434 60.535709381104 +122.017298486385 980.000000000000 +122.036506966533 227.800430297852 +125.041266230161 262.000000000000 +134.018538775237 60.000000000000 +134.073916170563 45.000000000000 +134.095695488835 45.000000000000 +135.026161726804 534.000000000000 +135.078487450095 90.000000000000 +137.006305675560 313.000000000000 +137.040979968925 1778.926025390625 +138.012727979825 1464.000000000000 +139.020309257361 1024.000000000000 +140.027069020713 150.000000000000 +140.591866048816 30.000000000000 +141.011260927571 75.000000000000 +150.046751311030 105.000000000000 +151.021299475346 150.000000000000 +152.576168311708 60.000000000000 +152.998044511193 75.000000000000 +153.036074179846 6124.000000000000 +154.043709586541 210.000000000000 +154.068241390455 62.952999114990 +154.972722850633 330.000000000000 +155.052161537136 3686.873535156250 +165.043680396210 45.000000000000 +168.986761486121 8191.273437500000 +169.003111638348 7602.300781250000 +170.010033115696 45.000000000000 +173.035848580677 30.000000000000 +180.985431825642 60.000000000000 +181.052453612627 45.000000000000 +181.070315448994 45.000000000000 +183.018664996496 135.000000000000 +183.973342047871 75.000000000000 +184.026572772516 45.000000000000 +184.419112957683 30.000000000000 +184.981576709492 6491.000000000000 +186.996738133410 343.000000000000 +187.039366781676 45.000000000000 +197.034096977050 45.000000000000 +198.015599522243 45.000000000000 +198.997463487937 4190.000000000000 +200.976234887806 1639.719970703125 +200.999328730996 1443.055786132812 +201.375560498466 330.000000000000 +201.984744162441 63752.667968750000 +202.025092005346 214.887084960938 +202.151693094227 45.000000000000 +202.176315801779 45.594470977783 +202.419371448987 60.000000000000 +202.437288231128 45.000000000000 +202.500019618456 60.000000000000 +202.517624485801 48.558765411377 +202.648988098710 45.000000000000 +202.993585993201 150.000000000000 +203.108544868346 30.000000000000 +203.121478592138 45.000000000000 +204.132231430480 45.000000000000 +204.153026361689 45.000000000000 +214.991727371784 945.000000000000 +216.023012287561 843.000000000000 +216.355082188226 442.000000000000 +216.385654222669 90.000000000000 +216.964403576794 59.121311187744 +217.008494855200 125901.000000000000 +217.056166733144 228.620422363281 +217.174442197011 75.000000000000 +217.205900295791 55.864074707031 +217.396324549254 45.000000000000 +217.415518436779 74.666610717773 +217.442451066205 47.380496978760 +217.588006413291 45.000000000000 +217.621801811369 31.066198348999 +217.664328232764 90.000000000000 +217.679728975131 105.000000000000 +217.706002637447 60.000000000000 +217.757983028729 60.000000000000 +217.809934792328 48.510864257812 +217.841984466983 139.269760131836 +217.883101217311 43.148494720459 +217.943854175255 89.818382263184 +217.964694239548 105.000000000000 +218.011068530749 180.000000000000 +218.072232357054 75.000000000000 +218.098922642672 84.849304199219 +218.265989620271 31.124542236328 +218.280034633009 37.702697753906 +218.308801511389 90.247619628906 +218.328355039950 90.000000000000 +218.387581973378 45.000000000000 +218.446704980964 75.000000000000 +218.467978540240 90.000000000000 +218.695018142784 70.259552001953 +218.719948225804 67.364746093750 +218.789254676702 45.000000000000 +218.813580838430 45.000000000000 +218.846289402485 45.000000000000 +218.995968780702 105.000000000000 +219.012218895710 101.918548583984 +219.303339997865 45.000000000000 +219.325838359475 45.000000000000 +219.388058465824 45.000000000000 +219.459153843468 30.000000000000 +219.739233899158 30.000000000000 +220.670213104301 45.000000000000 +220.686553112587 45.000000000000 +227.030058630938 60.000000000000 +229.004458545685 45.000000000000 +229.988914935534 523.873046875000 +230.015305123973 1019.361999511719 +233.326493414012 45.000000000000 +234.034608098264 14349.000000000000 +235.040675886350 60.000000000000 +241.043552600133 60.000000000000 +244.017269590781 45.000000000000 +244.046131119763 33.784996032715 +245.039409146005 1613.000000000000 +258.074029499555 150.000000000000 +259.054432449659 75.000000000000 +262.032514350373 638.202148437500 +262.065722539033 1269.000000000000 +275.250410575562 45.000000000000 +275.276233367382 45.000000000000 +276.082221466818 3389.000000000000 +304.114900229964 1271.000000000000 +>compound 0_11941333258820146302-663003--50--UNKNOWN +>parentmass 313.038703270813 +>ionization [M+H]1+ +>charge 1 +>rt 436.497000000000 +##fmz 313.038703270813244 +##fid 11941333258820146302 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +313.038703270813 90349.665873127466 +>ms1peaks +52.005966180500 2509.332031250000 +53.013507369873 14095.641601562500 +53.850970390711 1246.033935546875 +54.009372281497 342031.000000000000 +55.006163575275 5705.965820312500 +55.011387270805 6127.473144531250 +55.054184206823 1848.058593750000 +55.934334911976 6140.810546875000 +56.049690767818 1330.017089843750 +56.942074959092 2606.667480468750 +59.049518267006 56697.359375000000 +60.044566292185 9567.453125000000 +60.051796148101 5984.580078125000 +61.039393490257 1915.440551757812 +63.997909973617 3748.628417968750 +64.005283923938 4326.699218750000 +68.011628084817 27292.236328125000 +68.993816323075 12618.667968750000 +69.032897101129 1379.142456054688 +69.044540912933 13986.380859375000 +72.936558146637 2579.000000000000 +73.064228849484 1913.000000000000 +76.486180881623 2682.000244140625 +79.021000086474 14334.086914062500 +80.049089873152 11904.342773437500 +81.937137428830 9328.000000000000 +82.996717483329 9530.261718750000 +87.044278019735 1244.984619140625 +87.054474952312 1464.973510742188 +89.506620387415 1797.000000000000 +90.489369315210 1750.000000000000 +91.053371587935 1520.000000000000 +95.952544398364 2306.000000000000 +97.967985008693 7122.677246093750 +98.983597639133 2707.236572265625 +102.090693288494 2155.000000000000 +109.942639865272 1479.000000000000 +113.962988365185 2088.000000000000 +114.090715282838 10161.079101562500 +118.085459870469 7107.342285156250 +122.095676141264 3819.024658203125 +122.963182714449 11743.000000000000 +123.091076294906 1884.834838867188 +123.962710172625 1278.000000000000 +130.158549361780 1309.000000000000 +132.043510097675 6102.050781250000 +136.020884350350 1696.428710937500 +136.110913014003 1219.864746093750 +141.090089283606 1510.582885742188 +141.112164115087 1395.173217773438 +141.957727661927 16172.547851562500 +147.090953742167 2593.000000000000 +149.022660175650 5113.270019531250 +149.042184219595 2270.130126953125 +151.095573062425 2291.701904296875 +151.109764648433 2508.697753906250 +155.069421770644 1304.007690429688 +155.105956399660 1556.186767578125 +155.973291029133 4647.000000000000 +158.153352334475 13909.827148437500 +159.156157365710 1453.476074218750 +160.049315575157 1807.000000000000 +161.095748922100 1676.696289062500 +164.141989249057 1365.831665039062 +170.095477046624 2501.143554687500 +171.138013785490 3982.982177734375 +172.134863309732 1431.708251953125 +173.080523810193 6956.130371093750 +174.991175918913 9969.217773437500 +176.988389097507 3050.117675781250 +177.054118074174 1458.434448242188 +178.157975354817 1551.791381835938 +179.106014386017 6976.000000000000 +182.960744773798 1855.346191406250 +182.979834217019 1800.970458984375 +186.220995397905 2442.000000000000 +194.116040015282 3148.000000000000 +195.104779764897 1691.220825195312 +195.121820949901 2158.996582031250 +198.184910946765 2078.562744140625 +217.106618021168 23378.933593750000 +218.110011440618 2630.000000000000 +219.095176701267 2434.000000000000 +228.195374276500 1663.423095703125 +235.168383933758 1236.068969726562 +236.166825939935 1254.000000000000 +239.088686366357 4311.829589843750 +242.284913917132 1324.000000000000 +246.862288674394 3536.000000000000 +249.184859994698 1408.000000000000 +250.178788935105 1421.692382812500 +250.999929283760 20029.000000000000 +252.003012365740 1411.418090820312 +252.997001503914 12765.000000000000 +254.993768386515 1938.000000000000 +260.980022779583 1808.000000000000 +267.171368540006 1448.377807617188 +277.200433490599 1660.000000000000 +279.093759730917 2119.000000000000 +281.051032806120 1483.000000000000 +291.237715025520 1241.364013671875 +292.121361150912 285183.000000000000 +293.123834428448 45555.277343750000 +294.118427695985 93122.570312500000 +295.120641413580 15470.696289062500 +296.123835906431 1561.000000000000 +313.039035562555 16422.000000000000 +314.041466363413 2766.000000000000 +315.036563511042 10824.000000000000 +316.039700661579 1830.000000000000 +317.034195270562 1773.448120117188 +321.226781744505 2044.000000000000 +327.008089983734 28336.265625000000 +328.011190071085 2858.514404296875 +329.005295881569 27689.000000000000 +330.008649187278 3052.000000000000 +331.002098826780 9057.932617187500 +333.003548365368 1609.000000000000 +335.018062590141 2124.000000000000 +339.950891675362 1270.914672851562 +339.994456530817 4579.000000000000 +348.990164564731 4627.000000000000 +350.986598107700 4290.000000000000 +372.065686169920 4230.000000000000 +374.062221925680 3509.000000000000 +376.059337391009 1282.000000000000 +392.047236888469 1599.000000000000 +395.069603447750 1690.000000000000 +397.066731969223 1427.000000000000 +428.928860183743 1238.358520507812 +430.887744920288 1367.548706054688 +445.120189406834 2253.000000000000 +505.852818670435 4262.000000000000 +506.855243935787 1464.000000000000 +522.879200969200 1903.639038085938 +529.890071522891 1483.417846679688 +536.164962577408 4542.000000000000 +537.166020159870 2688.000000000000 +538.164211996041 1760.000000000000 +544.339325990071 1415.000000000000 +546.913817544760 2912.000000000000 +547.914903230189 1254.000000000000 +610.183749066707 2160.000000000000 +611.183884033885 1283.000000000000 +645.156997893402 7650.000000000000 +646.160667456787 3315.000000000000 +647.154701516229 9174.000000000000 +648.157895170257 3104.000000000000 +649.152380094183 3397.000000000000 +673.045753694998 1272.428222656250 +>ms2peaks +##n_id sample=1 period=1 cycle=663 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=663 experiment=3_0 +##scan 50 +##specref ms_run[1]:sample=1 period=1 cycle=663 experiment=3 +79.054534010328 30.000000000000 +81.069024421900 75.000000000000 +138.997340989450 30.000000000000 +146.973850300653 30.000000000000 +150.993294957568 30.000000000000 +152.064927694190 45.000000000000 +156.961224883657 842.000000000000 +158.975205667710 360.000000000000 +165.069897758503 30.000000000000 +170.975051884785 30.000000000000 +172.953347267476 75.000000000000 +174.969622660121 45.000000000000 +179.085562211052 150.000000000000 +184.954446069391 901.000000000000 +186.974009154470 60.000000000000 +188.019125882175 20.250818252563 +188.041595099939 27.989727020264 +198.970267195566 45.000000000000 +199.003336715238 30.000000000000 +199.022915165548 30.000000000000 +204.033776256140 60.000000000000 +204.069004228345 18.236137390137 +208.993398028951 60.000000000000 +212.950028404695 799.000000000000 +213.043299647071 45.000000000000 +214.054672340147 120.000000000000 +214.964896120028 180.000000000000 +230.962098026426 180.000000000000 +238.999390755164 165.000000000000 +249.024795643907 75.000000000000 +267.035582268648 105.000000000000 +277.017494808075 30.000000000000 +295.029960009017 195.000000000000 +313.033105483710 45.000000000000 +>ms1peaks +52.005453969998 2626.723144531250 +53.013597312446 12728.553710937500 +53.850414409821 1250.853881835938 +54.009329210909 348334.937500000000 +55.006062122532 5392.668457031250 +55.011342055713 6236.111816406250 +55.054021350211 1869.273437500000 +55.934286374440 6315.563964843750 +56.941831842622 2597.011962890625 +59.049520241177 68985.562500000000 +60.044238693811 9277.411132812500 +60.051306561624 7152.463378906250 +61.039638104919 1556.488891601562 +63.997844257749 4543.386718750000 +64.004868648059 4706.500976562500 +68.011536869512 28038.335937500000 +68.993647464953 12595.196289062500 +69.044515645070 12865.375976562500 +72.936647087938 2567.000000000000 +73.064121365067 1769.925781250000 +76.486182586418 2785.377929687500 +79.020888115541 15628.571289062500 +80.049060365715 12153.072265625000 +81.936978966817 8495.000000000000 +82.996309100211 9038.668945312500 +87.043494139885 1178.190917968750 +87.054319172330 1546.054443359375 +89.506956806916 1559.000000000000 +90.488703688296 1817.000000000000 +91.053777911785 1528.745483398438 +95.952341177386 2260.741210937500 +97.968210936145 7024.000000000000 +98.983399057372 5034.887695312500 +100.075304888654 1243.000000000000 +102.090957068479 1525.000000000000 +109.943109012828 1320.928710937500 +113.962992754591 2498.000000000000 +114.090728474154 10512.617187500000 +118.085470631803 6601.458007812500 +122.095607083049 3712.721679687500 +122.962888411087 10607.500976562500 +123.091509718457 1686.104614257812 +132.043186178558 2464.123291015625 +136.020620151667 1645.000000000000 +140.067164786600 1314.000000000000 +141.089863109573 1272.675292968750 +141.111890586678 1562.626220703125 +141.957557081223 15988.394531250000 +147.090173997086 2431.000000000000 +149.022336160605 4523.349121093750 +149.043636850784 1223.066040039062 +151.095789721496 2301.788818359375 +151.111113393103 2538.584228515625 +155.069111807472 1549.374267578125 +155.105759874764 1515.979370117188 +155.973112787773 4487.000000000000 +158.153378740203 12758.589843750000 +159.156448385204 1328.413452148438 +161.095542076597 1436.000000000000 +164.142018358830 1273.736083984375 +170.095175686942 2849.232421875000 +171.138207188731 2555.000000000000 +172.133475837479 1266.057739257812 +173.079557051502 6304.225097656250 +174.991247355031 15122.000000000000 +176.988586706089 4881.000000000000 +178.158242399689 1403.950073242188 +179.105412805866 3814.716552734375 +182.960601426951 1842.280639648438 +182.982966835265 1410.150146484375 +186.220883153188 1802.000000000000 +194.115976643286 3119.000000000000 +195.102214753451 1498.057617187500 +195.120897037407 1858.993774414062 +198.184171488074 2116.000000000000 +217.106332787106 21497.787109375000 +218.109128733639 2613.000000000000 +219.095226750847 2102.304443359375 +224.127626531368 1175.000000000000 +228.195317705032 1672.133422851562 +239.088374855672 3685.309814453125 +242.283185310790 1468.000000000000 +246.860952738993 3049.000000000000 +249.183720846634 1286.295654296875 +250.177140311956 1205.756591796875 +250.999832075601 32001.000000000000 +252.002106420824 2157.000000000000 +252.996924958467 20204.000000000000 +253.999797691244 1411.000000000000 +254.993496356863 3401.000000000000 +279.092906188567 2036.000000000000 +286.179288894577 8400.000000000000 +287.181689656808 1994.078002929688 +287.217541902151 1349.643310546875 +291.235948805059 1485.048828125000 +292.122314491142 439122.000000000000 +292.983059595137 1438.034667968750 +293.122671084767 47692.136718750000 +294.118451514065 133013.562500000000 +295.120454982262 22502.744140625000 +296.122607984390 2357.932373046875 +313.039105768504 33266.000000000000 +314.042149111497 5168.000000000000 +315.036268416268 21007.242187500000 +316.038403197349 3302.000000000000 +317.033014483539 3862.000000000000 +321.227057921370 1381.000000000000 +327.007877449001 47611.566406250000 +328.011115186819 4973.000000000000 +329.004794999861 46547.000000000000 +330.008005603352 4737.000000000000 +331.001868162022 15538.000000000000 +332.004876313775 1480.000000000000 +333.003299668985 2744.071777343750 +335.018886982057 3585.000000000000 +337.016084576435 2205.000000000000 +339.994390073568 1754.000000000000 +348.988792788967 6573.000000000000 +350.986916484867 6721.000000000000 +352.984603835989 2083.000000000000 +354.041095041215 1340.092163085938 +356.039619641072 1269.081298828125 +372.065048824891 6209.586914062500 +374.062468004687 6086.000000000000 +376.059148229590 1968.000000000000 +392.045330940334 2193.000000000000 +395.067648242738 2230.000000000000 +397.066134815272 1581.000000000000 +426.930515343123 1306.000000000000 +426.976513054277 1169.811889648438 +428.927149366436 1298.000000000000 +430.886640350010 1403.000000000000 +445.118913900930 2269.000000000000 +491.969645058197 1379.000000000000 +505.851389825487 3789.000000000000 +522.878326149515 1800.000000000000 +536.163456762234 4427.000000000000 +537.165324404735 2206.000000000000 +538.161529742511 1590.843383789062 +544.337468455008 1195.000000000000 +546.914116937371 2559.000000000000 +547.911876414748 1196.000000000000 +610.180850219782 2080.000000000000 +611.182328195703 1214.000000000000 +645.154717656738 8484.000000000000 +646.158700037782 2782.000000000000 +647.152980374288 9942.000000000000 +648.155555240546 3294.000000000000 +649.150621117204 4284.000000000000 +650.152709955400 1200.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=664 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=4_0 +##scan 58 +##specref ms_run[1]:sample=1 period=1 cycle=664 experiment=4 +67.052860010023 60.000000000000 +67.055622152498 60.000000000000 +81.069428964487 45.000000000000 +81.077587109471 45.000000000000 +103.058281594513 30.000000000000 +110.998196456129 30.000000000000 +111.009859654407 30.000000000000 +138.996284531066 60.000000000000 +139.011800641272 60.000000000000 +150.023220788635 30.000000000000 +152.066111503787 45.000000000000 +153.067329858556 30.000000000000 +156.959221707615 1422.000000000000 +158.975323377537 573.000000000000 +167.998485094510 75.000000000000 +168.054963100567 45.000000000000 +170.978736884857 30.000000000000 +170.989580124746 30.000000000000 +172.952683092322 15.000000000000 +172.994922272365 30.000000000000 +174.970336993994 45.000000000000 +178.078063806293 150.000000000000 +179.083834729450 180.000000000000 +182.975542373838 150.000000000000 +184.954422686375 1843.000000000000 +184.992879568467 48.715236663818 +186.968700625415 75.000000000000 +194.975613857505 30.000000000000 +194.991095982443 30.000000000000 +196.990058954009 60.000000000000 +199.008102021282 45.000000000000 +199.030178886815 45.000000000000 +201.048040457878 30.000000000000 +202.965285319444 45.000000000000 +204.036034755587 90.000000000000 +207.082759367559 30.000000000000 +208.990721337596 30.000000000000 +212.950645803637 1638.000000000000 +212.986769086209 148.526763916016 +213.046844646179 90.000000000000 +213.955156667542 15.000000000000 +214.051741312846 150.000000000000 +214.966808128885 135.000000000000 +217.035226498901 30.000000000000 +223.003713665023 45.000000000000 +224.986874913994 60.000000000000 +230.919675166084 15.000000000000 +230.960902234020 405.000000000000 +232.066177190226 30.000000000000 +239.002766522535 165.000000000000 +239.042628345807 15.000000000000 +242.055948459935 75.000000000000 +249.024370713899 105.000000000000 +266.994560803543 160.405776977539 +267.030177175817 247.000000000000 +277.016316391148 75.000000000000 +295.030764387377 675.000000000000 +313.036686987791 210.000000000000 +>ms1peaks +52.005349834334 2531.576904296875 +52.017818445883 1415.950317382812 +53.013312992683 14436.391601562500 +53.850256514170 1311.865234375000 +54.009237809188 346906.656250000000 +55.005700977113 5493.924316406250 +55.011578128004 6377.684570312500 +55.053978874167 1984.071533203125 +55.933999133980 6168.766601562500 +56.049511919157 2977.762207031250 +56.942056567735 2284.776855468750 +59.049350876787 53629.328125000000 +60.044322757483 8600.164062500000 +61.039156449004 1644.316650390625 +63.997508188870 3394.982910156250 +64.005057234464 4259.679687500000 +67.029035810216 2293.846923828125 +68.011280581573 27100.835937500000 +68.993371510951 13738.876953125000 +69.007497995886 1441.296142578125 +69.044403084909 13070.419921875000 +72.936195718172 2643.000000000000 +73.063931102643 1919.621459960938 +76.486167754556 1986.000000000000 +79.020619039319 14111.753906250000 +80.048823728166 11369.215820312500 +81.936905757296 8703.630859375000 +82.996214707689 8986.651367187500 +87.054271044459 1595.093627929688 +89.505822079267 1760.000000000000 +90.488874903389 1822.018798828125 +91.053163445835 1300.610839843750 +95.952331345900 2696.000000000000 +97.967781752031 7299.724609375000 +98.982987677469 4854.522460937500 +102.090290867080 1906.000000000000 +109.942394870381 1583.000000000000 +113.962086127466 2074.000000000000 +114.090395399108 10058.849609375000 +118.084999014032 6547.758789062500 +122.095088721755 3711.124511718750 +122.962603857586 10794.167968750000 +123.090649527845 1803.942016601562 +123.961855384374 1203.000000000000 +130.157739418261 1256.000000000000 +136.020039379796 2083.000000000000 +136.110849290905 1530.000000000000 +141.089744053815 1237.175415039062 +141.111592847426 1371.696777343750 +141.957218960001 15367.227539062500 +147.090011968413 2463.000000000000 +149.021828990169 4784.995605468750 +149.041466762922 2472.640625000000 +151.095944798794 2940.508300781250 +151.109341918543 3165.085693359375 +155.069344508958 1582.135864257812 +155.105135879836 1693.281616210938 +155.972287468254 4554.340332031250 +158.152759351824 13585.107421875000 +159.156196357366 1465.921386718750 +159.967851357038 1225.276977539062 +161.095405694183 1641.000000000000 +164.141615127090 1478.434814453125 +170.094609622000 2457.688476562500 +171.141467030026 1915.000000000000 +173.079379445344 6273.838867187500 +174.990844938283 15688.865234375000 +176.987639364551 5360.525878906250 +177.052467267277 1475.000000000000 +178.157540067017 1547.000000000000 +179.105091602082 3287.998779296875 +182.959873591311 1986.817871093750 +186.220399692631 1658.000000000000 +194.115345005627 3116.000000000000 +195.120929712058 1968.662841796875 +198.184276303297 2015.000000000000 +217.105977610050 20924.755859375000 +218.108820705353 2495.792236328125 +219.094022022929 1823.679443359375 +228.194066029155 1666.038696289062 +239.087872978056 3722.000000000000 +242.282423819470 1362.000000000000 +246.860857987495 3450.000000000000 +249.182928857496 1266.000000000000 +250.177066939258 1504.335083007812 +250.999117678898 32221.000000000000 +252.001781095835 2314.000000000000 +252.995932699016 21462.000000000000 +253.998953923887 1371.000000000000 +254.993033756740 3403.000000000000 +267.170032496706 1345.000000000000 +279.092268016151 1928.000000000000 +281.050459546987 1487.000000000000 +286.178655880094 23309.207031250000 +287.182133845414 5196.471191406250 +291.235317712341 1559.882568359375 +292.121093988068 399090.000000000000 +292.982663908460 1255.682128906250 +293.023857907805 1542.287597656250 +293.121921829592 49425.335937500000 +294.117639052994 123150.929687500000 +295.119583284786 21162.347656250000 +296.122453171108 2024.725219726562 +304.297977116061 1205.098876953125 +311.183844763032 2282.703613281250 +313.038450493324 32210.287109375000 +314.041319280533 5035.671875000000 +315.035461346507 21071.000000000000 +316.038196392607 3544.000000000000 +317.032926032719 3656.000000000000 +327.007662782866 46713.000000000000 +328.009753952920 4731.131347656250 +329.004141727930 46254.000000000000 +330.006788270317 4440.000000000000 +331.000792355787 15238.000000000000 +332.003743171067 1635.000000000000 +333.001048030235 2840.547363281250 +335.018066518429 3857.000000000000 +337.016490283319 2257.000000000000 +348.988206068721 7382.000000000000 +350.985085465325 7259.000000000000 +352.983081816715 2462.000000000000 +354.041092701990 1411.000000000000 +358.095358680256 1344.000000000000 +372.064528986026 6467.495117187500 +374.061053722203 5695.000000000000 +376.059656060961 2211.000000000000 +392.044067632616 2143.000000000000 +395.066337210837 2288.000000000000 +397.065352026340 1841.000000000000 +428.895605409648 1348.684326171875 +428.927859796300 1412.000000000000 +445.117454275133 2106.000000000000 +491.967681975778 1277.000000000000 +505.850908455770 4139.747558593750 +522.876740252438 1800.000000000000 +536.161867901498 4607.000000000000 +537.162257475039 2465.000000000000 +538.160527239899 1695.000000000000 +544.336437856300 1324.164184570312 +546.911854407175 2375.000000000000 +547.911013918907 1216.000000000000 +610.179211400596 2165.000000000000 +611.181197363117 1284.000000000000 +645.153892760480 7294.000000000000 +646.156182811867 3135.000000000000 +647.151735773867 8987.490234375000 +648.154489817139 3184.000000000000 +649.150180493474 3821.591308593750 +650.151352616891 1194.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=665 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=665 experiment=6_0 +##scan 69 +##specref ms_run[1]:sample=1 period=1 cycle=665 experiment=6 +67.053909584653 45.000000000000 +69.033542873165 13.000000000000 +79.058030256646 30.000000000000 +81.071734674950 30.000000000000 +81.077520980836 30.000000000000 +91.053098777872 13.000000000000 +109.060313103905 13.000000000000 +138.993471049311 30.000000000000 +149.023896935008 30.000000000000 +150.017107851047 13.000000000000 +156.959451948594 749.000000000000 +158.976159750666 460.000000000000 +162.031570235371 30.000000000000 +162.399240446876 13.000000000000 +170.977950756921 45.000000000000 +172.956036470090 75.000000000000 +174.971632752174 120.000000000000 +178.077461386559 45.000000000000 +179.086561839318 165.000000000000 +182.975030642321 45.000000000000 +184.955502967338 896.000000000000 +184.992605516328 30.000000000000 +191.998848071163 30.000000000000 +196.997306173106 60.000000000000 +199.034660593666 45.000000000000 +200.984079860705 30.000000000000 +202.966246576670 45.000000000000 +210.115748455489 13.000000000000 +212.949562579619 1107.000000000000 +214.056205506006 60.000000000000 +214.966968499949 90.000000000000 +215.063547094064 30.000000000000 +217.046765511981 30.000000000000 +223.009125324614 45.000000000000 +225.026448920531 30.000000000000 +230.959952529606 285.000000000000 +239.005060800584 75.000000000000 +239.038323483484 100.378295898438 +248.980307720551 35.114593505859 +249.019654122443 105.000000000000 +252.013840214424 30.000000000000 +252.973787534598 13.000000000000 +267.032662567266 345.000000000000 +277.013441128794 30.000000000000 +295.029124243952 728.000000000000 +313.006618779013 150.000000000000 +313.040296521628 165.000000000000 +>compound 0_5585685219772452827-657005--4--Guthion +>parentmass 318.012862565976 +>ionization [M+H]1+ +>formula C10H12N3O3PS2 +>charge 1 +>rt 431.866000000020 +##fmz 318.012862565976377 +##fid 5585685219772452827 +##des Guthion +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +318.012862565976 47593.132286356151 +>ms1peaks +52.005865355475 2936.356689453125 +53.013723515258 15168.868164062500 +53.850400239168 1357.829345703125 +54.009447090145 347607.156250000000 +55.006110218286 6238.441894531250 +55.011508541956 7268.958007812500 +55.054636618089 2136.000000000000 +55.934309116073 6532.552734375000 +56.942275933353 2612.874023437500 +59.049622158630 56011.429687500000 +60.044524012498 9000.792968750000 +61.039481839151 1786.074829101562 +63.997449394256 3736.165039062500 +64.005109595772 4712.666015625000 +68.011792039005 26707.251953125000 +68.993702477550 13633.019531250000 +69.008646447254 1441.886596679688 +69.044733608562 13552.908203125000 +69.494666168807 1088.000000000000 +72.044289477019 1134.000000000000 +72.936653378507 2379.292724609375 +73.064314657279 1947.000000000000 +76.486410468336 2230.000000000000 +77.038532396207 1590.778686523438 +79.021074679723 14557.214843750000 +80.049121781728 13038.990234375000 +81.937384309880 9136.173828125000 +82.996771559276 9647.291015625000 +87.044032478393 1164.202392578125 +87.055030197874 1937.880737304688 +89.506480817586 1633.000000000000 +90.489144644798 1823.000000000000 +91.053978578614 1481.000000000000 +95.952653475183 2798.568603515625 +97.968242662562 7804.676269531250 +100.075124666224 1357.000000000000 +102.091023963336 2105.000000000000 +109.943015773476 1849.492675781250 +113.963173340819 2146.000000000000 +114.091149027124 11434.439453125000 +118.085562888545 7126.602050781250 +122.095450971812 3351.000000000000 +122.963406396921 11429.592773437500 +123.091816714399 1461.405029296875 +123.962989553704 1162.000000000000 +132.043858137010 23466.287109375000 +133.047312261130 2601.019775390625 +136.020979409517 1763.000000000000 +136.111376584671 1338.000000000000 +141.090631531290 1452.329956054688 +141.112250777587 1933.171752929688 +141.957805111647 16272.520507812500 +142.960130525273 1091.785766601562 +147.090889713370 2561.000000000000 +149.022860382613 8952.703125000000 +149.043461527452 2074.399169921875 +151.096439801801 2539.815917968750 +151.111209143750 2693.475830078125 +155.070028482861 1787.522338867188 +155.105375703160 1554.431030273438 +155.973268704769 4467.000000000000 +158.002234575261 1123.180664062500 +158.153819790011 15565.543945312500 +159.136830576290 1251.366088867188 +159.156929350810 1638.817993164062 +159.968015589745 1144.587158203125 +160.050107538005 10862.000000000000 +161.095753069011 1987.528442382812 +163.130314304873 1321.613403320312 +164.142207413101 1344.506469726562 +170.096003050047 2831.750244140625 +170.116393016687 1241.047485351562 +170.969308188165 1467.000000000000 +171.138824143644 1976.471679687500 +172.132816514555 1070.000000000000 +172.169354072833 1126.623413085938 +173.080592066342 7150.673339843750 +174.127101054123 1093.000000000000 +174.991572624579 1115.259887695312 +175.117966507653 1382.413574218750 +177.053956263481 3086.000000000000 +178.158743604693 1737.946655273438 +179.106488149861 2092.017333984375 +182.961571664514 1566.125366210938 +182.982955367691 1389.804321289062 +186.221312636852 2310.000000000000 +194.116506735598 3012.142089843750 +195.121983568600 1971.532348632812 +198.184492106186 2254.000000000000 +199.168659259112 1074.472778320312 +200.200544607050 1265.000000000000 +209.152957718499 1444.000000000000 +215.126858142678 1195.000000000000 +217.107186196782 24662.302734375000 +218.110233972313 2772.000000000000 +219.095202240315 3180.013427734375 +219.137164883586 1444.293090820312 +224.128646207474 1167.206176757812 +228.196369189320 1732.199340820312 +235.170060948981 1264.538574218750 +236.167946332224 2704.449462890625 +239.089160494599 5259.000000000000 +240.068219796793 1277.484863281250 +240.091769691182 1359.958740234375 +242.284200605489 1137.000000000000 +246.863294404574 3891.000000000000 +249.184938071857 1294.474121093750 +250.177914710678 1312.000000000000 +250.999736865556 2366.000000000000 +251.185303455126 1195.000000000000 +252.996845199048 1725.000000000000 +260.980831135670 9681.000000000000 +262.976934337234 1074.000000000000 +267.172286092444 1268.487426757812 +279.093453473919 1954.000000000000 +281.051187832394 1373.000000000000 +287.889696989575 1142.000000000000 +318.012975056617 4878.000000000000 +327.008528574617 3507.000000000000 +329.005288792022 3151.000000000000 +339.995536258518 21188.000000000000 +340.998304727292 3403.000000000000 +341.991615450972 1965.000000000000 +351.928765172494 2752.000000000000 +353.925863637500 1287.000000000000 +355.970345025132 1233.272216796875 +363.071463720139 4333.000000000000 +371.315937786641 1386.000000000000 +379.934517326720 2414.000000000000 +381.932765584480 1355.000000000000 +430.887891579421 1170.000000000000 +445.119501835711 2373.000000000000 +503.857852657168 1208.000000000000 +505.853144541362 5379.000000000000 +506.854406933930 1813.000000000000 +522.880381915172 2380.000000000000 +523.873038712107 1344.000000000000 +529.890971881918 1718.000000000000 +536.164830382665 5050.000000000000 +537.165530578391 2568.000000000000 +538.164082153377 1889.000000000000 +542.919791547930 1233.000000000000 +544.340309842267 1260.000000000000 +544.916740966050 1184.000000000000 +546.914239791284 3795.000000000000 +547.912822025670 1609.000000000000 +563.944002995814 1077.258789062500 +610.183402350979 1851.000000000000 +611.184706508494 1107.000000000000 +696.940078237106 1408.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=657 experiment=5 +##m_id Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=657 experiment=5_0 +##scan 4 +##specref ms_run[1]:sample=1 period=1 cycle=657 experiment=5 +51.024411650566 166.000000000000 +77.038595873029 3035.000000000000 +78.994852705761 195.000000000000 +102.033579338103 169.000000000000 +104.050175822373 488.000000000000 +105.032352182141 910.895751953125 +124.981761234611 1563.000000000000 +130.038666860551 105.000000000000 +132.043763332558 1142.000000000000 +167.019219324624 150.000000000000 +>ms1peaks +52.005717667707 2536.876953125000 +53.013645918459 13517.719726562500 +53.851091408425 1440.814208984375 +54.009479564739 340518.468750000000 +55.006713705873 6189.195800781250 +55.011648330739 5775.918945312500 +55.054395080163 1937.021850585938 +55.934309790351 6216.487304687500 +56.049851096555 1422.552856445312 +56.942103151176 2497.945800781250 +59.049782018324 63557.187500000000 +60.044617957556 9127.332031250000 +61.039564209817 1916.918579101562 +63.998058629288 4341.631347656250 +64.005180932598 4902.907226562500 +68.011727932833 27051.191406250000 +68.994002789359 13611.511718750000 +69.034264524552 2235.962402343750 +69.044867744672 14147.763671875000 +72.936875253829 3080.500976562500 +73.064425531348 1778.781250000000 +76.486297547963 2075.000000000000 +77.038265451054 5099.881835937500 +79.021270792779 14303.786132812500 +80.049179511142 11132.483398437500 +81.937187525733 8269.017578125000 +82.996616277972 9058.604492187500 +87.055191552618 1226.265625000000 +89.506723502083 2138.000000000000 +90.489274059111 1883.000000000000 +91.053872057085 1250.000000000000 +95.952563443877 2416.907226562500 +97.968351278732 7414.000000000000 +102.091075578098 2124.000000000000 +104.049176798538 2869.822265625000 +105.032824057535 2268.302246093750 +109.942659719793 1552.503417968750 +113.963028919819 2876.313476562500 +114.091047730204 9707.000000000000 +118.085960022478 6202.343750000000 +122.095829000463 3354.874755859375 +122.963603572159 10189.080078125000 +123.091990223840 1658.215576171875 +123.962908276753 1264.000000000000 +124.961981387844 1248.617553710938 +124.981468335431 3929.697021484375 +132.044195947098 93934.070312500000 +133.046929709006 8774.461914062500 +136.020849942089 1733.000000000000 +136.111849813683 1360.000000000000 +139.963062553447 1109.337646484375 +141.090358589210 1395.717041015625 +141.112852312471 1316.060180664062 +141.957905703603 16856.453125000000 +142.959660117555 1253.947509765625 +147.090758649450 2468.091308593750 +149.023008191796 6552.861328125000 +150.054483884674 1381.879394531250 +151.096258773620 2499.016357421875 +151.110632987131 2703.097412109375 +153.126579038194 1175.000000000000 +155.069775153959 1603.251586914062 +155.105765884478 1708.284912109375 +155.973825500886 4965.000000000000 +158.002736417151 1095.759399414062 +158.153601610996 15319.201171875000 +159.156377711765 1693.013305664062 +160.050203671116 29808.187500000000 +161.053148014827 2780.099853515625 +161.095739798824 1801.900268554688 +164.143136174419 1163.970947265625 +167.016142798795 1938.000000000000 +170.095669159809 2557.841796875000 +170.116803885810 1136.247192382812 +170.969513731195 5351.000000000000 +171.138682297569 3310.690673828125 +172.133498266589 1186.970092773438 +172.168816609007 1753.000000000000 +173.079889235839 8137.424804687500 +174.127584523158 1118.000000000000 +177.053398759750 2010.000000000000 +178.158757601913 1500.698242187500 +179.105540802675 2172.262695312500 +182.961283063703 1745.384643554688 +186.221178069795 1622.000000000000 +194.116354222571 3003.000000000000 +195.102160721940 1637.390014648438 +195.121964321705 2114.307128906250 +198.185094857026 2154.000000000000 +209.152949152955 1423.597534179688 +217.106757414349 22820.371093750000 +218.109717212262 2365.715332031250 +219.095322856019 2839.912353515625 +224.127859164514 1268.000000000000 +228.195125596876 1796.750244140625 +235.168738541554 1153.106201171875 +236.167125665018 2147.822998046875 +239.089167868946 3697.000000000000 +242.283752097581 1331.000000000000 +246.862020032552 3643.000000000000 +249.184726675759 1740.000000000000 +250.176839865775 1269.149047851562 +251.000052262976 1835.000000000000 +251.185199846439 1143.344848632812 +252.997000735520 1613.000000000000 +253.915053857069 3181.000000000000 +260.980520936940 34136.089843750000 +261.983107472769 3914.000000000000 +262.975908361642 3711.000000000000 +267.171176133304 1190.000000000000 +279.094069923914 2218.000000000000 +281.050366742298 1525.000000000000 +304.299335403967 1178.000000000000 +318.012807082281 13905.000000000000 +319.015812641865 1771.000000000000 +320.009779889072 1411.312622070312 +324.021497063862 2274.000000000000 +327.008303487350 3194.000000000000 +329.005675073912 3118.000000000000 +339.995324080662 63593.000000000000 +340.998247708453 9047.660156250000 +341.991464705082 6892.000000000000 +351.928380615899 5009.000000000000 +353.925994810456 2303.000000000000 +355.968410053379 3129.565673828125 +363.070877703428 10529.000000000000 +364.073137490148 1819.000000000000 +379.934530374708 4270.000000000000 +381.931407641533 2153.000000000000 +445.120046493581 2353.000000000000 +503.859909772363 1436.000000000000 +505.853063220538 5926.000000000000 +506.854048759295 1904.000000000000 +519.139384687535 1126.000000000000 +522.880368766100 2806.000000000000 +523.877736811317 1418.000000000000 +529.888748439098 1722.000000000000 +536.165143915241 4925.000000000000 +537.165086990853 2707.000000000000 +538.162296228146 1762.000000000000 +542.921174254561 1132.000000000000 +543.918003709155 1152.000000000000 +546.914886995490 3416.000000000000 +547.912219447510 1693.000000000000 +563.943181698806 1223.378784179688 +610.184322938020 2314.000000000000 +611.184296206340 1322.000000000000 +657.001817843383 1409.000000000000 +696.940437510992 3603.000000000000 +698.940217154744 2331.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=658 experiment=6 +##m_id Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=658 experiment=6_0 +##scan 14 +##specref ms_run[1]:sample=1 period=1 cycle=658 experiment=6 +50.014691789931 30.000000000000 +50.024594232484 15.000000000000 +51.023487773864 693.360839843750 +55.057307673128 13.000000000000 +62.017416144800 60.000000000000 +62.022558150102 60.000000000000 +75.021910544523 45.000000000000 +76.969400380676 13.000000000000 +77.038719402888 7559.670898437500 +77.358766992240 13.000000000000 +77.908647248588 30.000000000000 +77.916409786540 30.000000000000 +78.032820819888 30.000000000000 +78.994535162676 491.007476806641 +92.024213095291 30.000000000000 +93.009414078685 30.000000000000 +101.731414730929 13.000000000000 +102.033724528028 301.612030029297 +103.740436291946 30.000000000000 +104.049620996277 2037.000000000000 +105.033096287295 2149.877929687500 +109.009378682469 13.000000000000 +110.990785884171 13.000000000000 +124.609786162675 45.000000000000 +124.982586564713 3771.000000000000 +130.038871325813 312.000000000000 +132.044466950146 3875.000000000000 +132.737736847345 13.000000000000 +133.059399526787 30.000000000000 +134.515630815072 13.000000000000 +135.045638388353 30.000000000000 +137.006358531913 180.000000000000 +151.992732393118 135.000000000000 +167.017809464954 504.000000000000 +167.975239069750 30.000000000000 +168.014364521589 15.000000000000 +182.994146815153 135.000000000000 +>ms1peaks +50.015030688094 1631.000000000000 +52.005691836328 2833.837890625000 +53.013678352050 13820.645507812500 +53.850930804944 1372.676147460938 +54.009488813193 341215.375000000000 +55.006244952468 6363.858398437500 +55.011195314574 6663.786621093750 +55.054435589179 2093.444580078125 +55.934214796378 6443.966308593750 +56.049418637710 1614.372314453125 +56.942077131072 2603.345458984375 +59.049684010496 67068.679687500000 +60.044674600260 8507.357421875000 +61.039576232541 1618.787597656250 +63.997953270808 4540.612304687500 +64.004984885183 4765.146484375000 +68.011730125352 26984.066406250000 +68.993758540617 13250.065429687500 +69.044639818678 13453.114257812500 +72.936865747985 3009.785888671875 +73.064487442720 1926.000000000000 +76.486106736487 2394.000000000000 +77.012975210189 1331.000000000000 +77.038245950909 6864.013671875000 +79.021170250218 14954.513671875000 +80.049055487900 12273.781250000000 +81.937167726085 8605.721679687500 +82.996581259270 9547.895507812500 +87.054493611252 1308.586669921875 +89.506388403917 1579.000000000000 +90.489379547455 1879.000000000000 +91.053817827625 1210.000000000000 +95.952611673257 2421.652587890625 +97.968325410624 7844.628906250000 +100.075376789744 1408.000000000000 +102.090940410850 1712.000000000000 +104.048827681379 4021.000000000000 +105.032851808396 3043.702148437500 +109.943040230612 1524.000000000000 +113.962743611150 2300.809326171875 +114.091086475065 10732.537109375000 +118.085604757949 6375.129394531250 +122.095612538633 3453.346191406250 +122.963478886657 10149.138671875000 +123.091154033496 1907.152587890625 +123.962085557178 1291.000000000000 +124.964032856960 1524.723510742188 +124.981293760905 5573.300781250000 +132.044243365317 129513.453125000000 +133.047275934233 12024.171875000000 +136.021338396786 1596.000000000000 +136.111611313675 1179.000000000000 +141.090513006913 1389.292724609375 +141.112565247916 1247.203857421875 +141.957978845995 16325.500000000000 +147.090945866648 2556.685302734375 +149.023028218992 6399.154296875000 +150.054262184195 1568.000000000000 +151.096430884077 2664.400390625000 +151.111011940160 2835.027587890625 +155.069438117684 1871.944824218750 +155.105960083325 1401.000000000000 +155.973753152622 4288.000000000000 +158.153627071218 14384.000000000000 +159.156473714741 1627.752929687500 +160.050487288307 38915.000000000000 +161.053611692746 4466.942382812500 +161.095700587134 1743.057495117188 +164.142944501592 1256.052368164062 +167.015735366166 2785.089599609375 +170.096151543720 2652.023193359375 +170.116409887737 1324.376464843750 +170.968993556255 7076.000000000000 +171.137671144810 4912.312011718750 +172.136045264128 1371.000000000000 +173.079830429233 8581.928710937500 +174.991306236853 1198.000000000000 +177.054219725911 1769.000000000000 +178.157947155736 1498.908447265625 +179.106050750592 1934.090454101562 +182.960933723657 1780.061523437500 +182.991388549794 1244.309082031250 +186.221152079128 2287.000000000000 +194.116900036921 2752.000000000000 +195.121615177487 1919.471069335938 +198.184412559940 2140.000000000000 +200.200455656322 1296.554199218750 +209.153704347399 1590.000000000000 +212.888258624179 1535.000000000000 +217.106944592366 24346.000000000000 +218.110517718319 2646.000000000000 +219.095540028475 2644.006591796875 +228.196097140190 1527.811645507812 +236.167749124378 1677.000000000000 +239.089312381813 3327.000000000000 +242.284215148787 1201.000000000000 +246.862288406064 3365.000000000000 +249.184532839914 1860.293334960938 +251.001107206325 2362.000000000000 +252.997444701878 1876.000000000000 +253.916335213075 4093.000000000000 +260.980865788213 46877.000000000000 +261.983931158765 5301.000000000000 +262.976772362746 4418.000000000000 +267.172661485943 1410.000000000000 +277.199859444074 2417.590087890625 +279.093448238935 1888.450561523438 +281.051163936397 1557.000000000000 +292.121170689402 15731.000000000000 +293.123945781771 2615.000000000000 +294.118820607873 4859.000000000000 +295.121821476430 1186.000000000000 +318.013460543863 19020.000000000000 +319.016226586969 2819.000000000000 +320.010792812476 1745.000000000000 +324.021120495162 2522.000000000000 +327.007928037291 3314.077636718750 +329.005428091932 3187.000000000000 +331.002680981835 1140.229492187500 +335.040406311528 1228.000000000000 +339.995783079981 73785.000000000000 +340.998517552508 10283.000000000000 +341.992089047450 7216.000000000000 +351.928943475892 4368.000000000000 +353.926519256680 2362.000000000000 +355.969819970535 3512.076416015625 +363.071778928522 11698.970703125000 +364.073181575102 1981.000000000000 +371.315525399960 1354.000000000000 +379.934529706961 4095.883300781250 +381.932716463007 2062.000000000000 +445.119746997025 2474.000000000000 +446.119291863183 1145.000000000000 +505.853826516954 4858.000000000000 +506.855308046231 1451.000000000000 +519.139330404280 1166.703979492188 +522.880837958116 1970.000000000000 +523.871380297922 1372.000000000000 +529.891671811182 1342.000000000000 +536.165890644769 5714.000000000000 +537.166372879728 2646.000000000000 +538.163391669663 2155.000000000000 +544.339624971493 1155.000000000000 +546.914039373140 3234.000000000000 +547.912958504845 1306.000000000000 +610.184280095073 1860.000000000000 +611.183517202231 1239.000000000000 +657.000223829242 1834.000000000000 +696.940499292838 3022.000000000000 +698.938485246113 2250.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=659 experiment=7 +##m_id Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=7_0 +##scan 24 +##specref ms_run[1]:sample=1 period=1 cycle=659 experiment=7 +50.011945356227 45.000000000000 +50.016256671506 49.487056732178 +50.022471395276 30.022994995117 +51.023137253924 713.147644042969 +62.018117926456 60.000000000000 +75.022593594554 90.000000000000 +77.038765619679 6198.346191406250 +78.994159655565 300.000000000000 +95.049659419828 45.000000000000 +102.032654025566 195.000000000000 +104.049320764675 2561.366455078125 +104.717611043490 45.000000000000 +105.033125946638 2057.047363281250 +105.058664010100 164.415649414062 +124.982069879350 3636.000000000000 +130.038883295770 336.000000000000 +132.044268805220 4731.000000000000 +137.005031295070 165.000000000000 +151.991870480462 135.000000000000 +167.017216144522 349.000000000000 +167.970809068710 90.000000000000 +170.968502602363 45.000000000000 +170.979804540922 45.000000000000 +182.992849568269 120.000000000000 +>compound 0_7960809195137357048-676005--122--Fenamiphos +>parentmass 326.094454354613 +>ionization [M+Na]1+ +>formula C13H22NO3PS +>charge 1 +>rt 447.100000000020 +##fmz 326.094454354612708 +##fid 7960809195137357048 +##des Fenamiphos +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +326.094454354613 187407.076838029287 +327.096383244799 30166.116877709566 +>ms1peaks +52.005351813457 2501.610107421875 +53.013412581284 13134.520507812500 +53.850226225992 1302.909057617188 +54.009140063564 338983.656250000000 +55.006042248338 6435.412597656250 +55.011148435189 6609.394042968750 +55.054172395822 1772.104248046875 +55.934029229957 5757.919921875000 +56.941868288709 2705.908203125000 +59.049392394217 65787.757812500000 +60.044197396550 9389.001953125000 +61.039698624921 1629.770751953125 +63.997582420249 4596.096191406250 +64.004915539546 4860.728515625000 +68.011405901665 27484.292968750000 +68.993238795734 11816.172851562500 +69.044514210085 12151.762695312500 +72.936346245282 1770.000000000000 +73.063844648998 1632.810180664062 +76.485866327556 2207.000000000000 +79.020638014668 15456.159179687500 +80.048700307132 11716.706054687500 +81.936658440041 8339.158203125000 +82.995849176432 8191.000000000000 +87.054215388379 1432.329345703125 +89.505806636870 1376.000000000000 +90.488666027165 1798.000000000000 +95.952211902793 2472.000000000000 +97.967974119285 6640.000000000000 +100.074558827800 1418.000000000000 +102.090063528932 1768.000000000000 +109.942148206295 1646.000000000000 +113.962810920920 1728.000976562500 +114.090265101894 9843.087890625000 +118.085166173822 5466.146972656250 +122.095082275611 3591.515380859375 +122.962671452755 9919.435546875000 +123.090603383338 1818.105346679688 +130.157985838236 1433.000000000000 +136.020144210415 1305.642211914062 +141.111768954054 1381.647338867188 +141.957291332652 13999.958984375000 +147.090365251433 2315.564941406250 +149.021998403294 4169.404296875000 +151.095653127576 2632.192382812500 +151.109600618565 2638.503906250000 +155.069049191990 1400.588378906250 +155.105221715370 1306.244873046875 +155.972774632456 3955.750244140625 +158.152847157321 10190.631835937500 +161.094883274868 1469.000000000000 +164.993233307885 1413.000000000000 +170.094756804200 2692.873779296875 +173.079096183490 5464.607421875000 +174.990754641374 1338.000000000000 +175.120920396226 1335.489135742188 +178.157288006504 1567.557739257812 +179.104881581157 1856.000000000000 +182.960071822982 1596.667236328125 +186.016812097735 3128.000000000000 +194.115183195725 3037.019042968750 +195.105676043577 1846.959228515625 +195.121034909827 2138.534667968750 +198.183715433637 1614.000000000000 +201.983396783946 6476.000000000000 +217.007534943089 16000.083984375000 +217.105603079000 12722.193359375000 +218.010461830348 1723.000000000000 +218.108916975941 1918.000000000000 +219.094207015885 1394.000000000000 +234.033666185649 17919.000000000000 +235.036061869219 1699.000000000000 +239.087710708037 2715.000000000000 +245.038087259231 3705.000000000000 +246.860587751512 3017.000000000000 +250.998652800198 2461.000000000000 +252.996040050118 1751.000000000000 +262.065226573716 31878.271484375000 +263.067812997194 3540.000000000000 +264.062744585962 1732.000000000000 +276.080875651007 47441.000000000000 +277.083729023421 6202.904296875000 +278.078049070253 2909.805664062500 +279.092264164105 2269.000000000000 +281.049607531965 1759.000000000000 +284.163709253010 5971.317382812500 +285.167422523505 1450.937500000000 +289.120547785899 45105.261718750000 +290.122834000335 8899.000000000000 +291.118148964330 16223.000000000000 +292.119468760172 3916.748291015625 +303.104211105075 4272.900878906250 +303.190626643079 3701.817626953125 +304.121038021889 1154982.000000000000 +304.680120827865 1361.469604492188 +304.720450396369 1578.193115234375 +304.756696628278 1464.135742187500 +304.826755934771 1415.802856445312 +304.888295222133 4211.749023437500 +304.975939340234 6444.747070312500 +305.112954471951 109660.976562500000 +306.110248734555 72833.000000000000 +307.111946842557 10169.579101562500 +307.247397220322 1757.839477539062 +310.120212483100 5088.000000000000 +320.107070842572 7286.000000000000 +321.109817317563 1634.396606445312 +321.134008500327 1645.504272460938 +326.094135509242 51581.214843750000 +327.006663634739 3305.288085937500 +327.096918826684 8025.063964843750 +328.090879363560 3401.237060546875 +329.002848029289 3721.000000000000 +330.204815446188 11820.952148437500 +331.208232327135 2889.000000000000 +342.067980362905 3189.395019531250 +349.169296376205 25098.000000000000 +350.172883605486 4323.000000000000 +351.167291455015 1724.000000000000 +372.149200119315 2817.477050781250 +404.036004100360 11013.000000000000 +405.038241871311 2224.679687500000 +424.359699824875 1469.000000000000 +445.117347283461 1962.204711914062 +500.274802921042 11554.163085937500 +501.277725760601 3400.000000000000 +502.286539956580 1910.000000000000 +505.850895564320 2188.000000000000 +536.162361057972 4668.000000000000 +537.163239801382 2428.000000000000 +538.161608472883 1869.000000000000 +544.336387601713 1598.000000000000 +546.911505452596 1493.000000000000 +549.965979448424 1640.000000000000 +592.225456903764 1675.000000000000 +607.216655018496 74091.000000000000 +608.219193446659 23449.000000000000 +609.215852555200 11438.528320312500 +610.208425679746 4454.000000000000 +611.188234775837 1805.798706054688 +612.220726308427 4082.000000000000 +613.224505418990 34075.000000000000 +614.227906702716 11171.000000000000 +615.225014693998 5343.000000000000 +623.210784148654 2510.000000000000 +629.198405169302 68640.000000000000 +630.201595235063 21340.328125000000 +631.198284234777 10581.000000000000 +632.198298853566 2483.000000000000 +707.140261218123 1384.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=676 experiment=5 +##m_id Fenamiphos_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=5_0 +##scan 122 +##specref ms_run[1]:sample=1 period=1 cycle=676 experiment=5 +135.110573680588 13.000000000000 +326.090792568903 90.000000000000 +>compound 0_1072340199693961134-657006--5--Guthion +>parentmass 339.995124103413 +>ionization [M+Na]1+ +>formula C10H12N3O3PS2 +>charge 1 +>rt 431.866000000020 +##fmz 339.99512410341282 +##fid 1072340199693961134 +##des Guthion +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +339.995124103413 202334.306264709012 +340.997818750530 28664.112314598762 +>ms1peaks +52.005865355475 2936.356689453125 +53.013723515258 15168.868164062500 +53.850400239168 1357.829345703125 +54.009447090145 347607.156250000000 +55.006110218286 6238.441894531250 +55.011508541956 7268.958007812500 +55.054636618089 2136.000000000000 +55.934309116073 6532.552734375000 +56.942275933353 2612.874023437500 +59.049622158630 56011.429687500000 +60.044524012498 9000.792968750000 +61.039481839151 1786.074829101562 +63.997449394256 3736.165039062500 +64.005109595772 4712.666015625000 +68.011792039005 26707.251953125000 +68.993702477550 13633.019531250000 +69.008646447254 1441.886596679688 +69.044733608562 13552.908203125000 +69.494666168807 1088.000000000000 +72.044289477019 1134.000000000000 +72.936653378507 2379.292724609375 +73.064314657279 1947.000000000000 +76.486410468336 2230.000000000000 +77.038532396207 1590.778686523438 +79.021074679723 14557.214843750000 +80.049121781728 13038.990234375000 +81.937384309880 9136.173828125000 +82.996771559276 9647.291015625000 +87.044032478393 1164.202392578125 +87.055030197874 1937.880737304688 +89.506480817586 1633.000000000000 +90.489144644798 1823.000000000000 +91.053978578614 1481.000000000000 +95.952653475183 2798.568603515625 +97.968242662562 7804.676269531250 +100.075124666224 1357.000000000000 +102.091023963336 2105.000000000000 +109.943015773476 1849.492675781250 +113.963173340819 2146.000000000000 +114.091149027124 11434.439453125000 +118.085562888545 7126.602050781250 +122.095450971812 3351.000000000000 +122.963406396921 11429.592773437500 +123.091816714399 1461.405029296875 +123.962989553704 1162.000000000000 +132.043858137010 23466.287109375000 +133.047312261130 2601.019775390625 +136.020979409517 1763.000000000000 +136.111376584671 1338.000000000000 +141.090631531290 1452.329956054688 +141.112250777587 1933.171752929688 +141.957805111647 16272.520507812500 +142.960130525273 1091.785766601562 +147.090889713370 2561.000000000000 +149.022860382613 8952.703125000000 +149.043461527452 2074.399169921875 +151.096439801801 2539.815917968750 +151.111209143750 2693.475830078125 +155.070028482861 1787.522338867188 +155.105375703160 1554.431030273438 +155.973268704769 4467.000000000000 +158.002234575261 1123.180664062500 +158.153819790011 15565.543945312500 +159.136830576290 1251.366088867188 +159.156929350810 1638.817993164062 +159.968015589745 1144.587158203125 +160.050107538005 10862.000000000000 +161.095753069011 1987.528442382812 +163.130314304873 1321.613403320312 +164.142207413101 1344.506469726562 +170.096003050047 2831.750244140625 +170.116393016687 1241.047485351562 +170.969308188165 1467.000000000000 +171.138824143644 1976.471679687500 +172.132816514555 1070.000000000000 +172.169354072833 1126.623413085938 +173.080592066342 7150.673339843750 +174.127101054123 1093.000000000000 +174.991572624579 1115.259887695312 +175.117966507653 1382.413574218750 +177.053956263481 3086.000000000000 +178.158743604693 1737.946655273438 +179.106488149861 2092.017333984375 +182.961571664514 1566.125366210938 +182.982955367691 1389.804321289062 +186.221312636852 2310.000000000000 +194.116506735598 3012.142089843750 +195.121983568600 1971.532348632812 +198.184492106186 2254.000000000000 +199.168659259112 1074.472778320312 +200.200544607050 1265.000000000000 +209.152957718499 1444.000000000000 +215.126858142678 1195.000000000000 +217.107186196782 24662.302734375000 +218.110233972313 2772.000000000000 +219.095202240315 3180.013427734375 +219.137164883586 1444.293090820312 +224.128646207474 1167.206176757812 +228.196369189320 1732.199340820312 +235.170060948981 1264.538574218750 +236.167946332224 2704.449462890625 +239.089160494599 5259.000000000000 +240.068219796793 1277.484863281250 +240.091769691182 1359.958740234375 +242.284200605489 1137.000000000000 +246.863294404574 3891.000000000000 +249.184938071857 1294.474121093750 +250.177914710678 1312.000000000000 +250.999736865556 2366.000000000000 +251.185303455126 1195.000000000000 +252.996845199048 1725.000000000000 +260.980831135670 9681.000000000000 +262.976934337234 1074.000000000000 +267.172286092444 1268.487426757812 +279.093453473919 1954.000000000000 +281.051187832394 1373.000000000000 +287.889696989575 1142.000000000000 +318.012975056617 4878.000000000000 +327.008528574617 3507.000000000000 +329.005288792022 3151.000000000000 +339.995536258518 21188.000000000000 +340.998304727292 3403.000000000000 +341.991615450972 1965.000000000000 +351.928765172494 2752.000000000000 +353.925863637500 1287.000000000000 +355.970345025132 1233.272216796875 +363.071463720139 4333.000000000000 +371.315937786641 1386.000000000000 +379.934517326720 2414.000000000000 +381.932765584480 1355.000000000000 +430.887891579421 1170.000000000000 +445.119501835711 2373.000000000000 +503.857852657168 1208.000000000000 +505.853144541362 5379.000000000000 +506.854406933930 1813.000000000000 +522.880381915172 2380.000000000000 +523.873038712107 1344.000000000000 +529.890971881918 1718.000000000000 +536.164830382665 5050.000000000000 +537.165530578391 2568.000000000000 +538.164082153377 1889.000000000000 +542.919791547930 1233.000000000000 +544.340309842267 1260.000000000000 +544.916740966050 1184.000000000000 +546.914239791284 3795.000000000000 +547.912822025670 1609.000000000000 +563.944002995814 1077.258789062500 +610.183402350979 1851.000000000000 +611.184706508494 1107.000000000000 +696.940078237106 1408.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=657 experiment=6 +##m_id Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=657 experiment=6_0 +##scan 5 +##specref ms_run[1]:sample=1 period=1 cycle=657 experiment=6 +50.015108090982 30.000000000000 +51.023164211064 180.000000000000 +77.038275757512 1908.000000000000 +95.059280397863 13.000000000000 +102.035255157111 75.000000000000 +104.049402590680 764.000000000000 +105.033036827807 713.000000000000 +124.990392017926 30.000000000000 +132.044138630021 3917.000000000000 +148.024481257446 45.000000000000 +160.052436120329 135.000000000000 +250.873112501629 13.000000000000 +>ms1peaks +52.005717667707 2536.876953125000 +53.013645918459 13517.719726562500 +53.851091408425 1440.814208984375 +54.009479564739 340518.468750000000 +55.006713705873 6189.195800781250 +55.011648330739 5775.918945312500 +55.054395080163 1937.021850585938 +55.934309790351 6216.487304687500 +56.049851096555 1422.552856445312 +56.942103151176 2497.945800781250 +59.049782018324 63557.187500000000 +60.044617957556 9127.332031250000 +61.039564209817 1916.918579101562 +63.998058629288 4341.631347656250 +64.005180932598 4902.907226562500 +68.011727932833 27051.191406250000 +68.994002789359 13611.511718750000 +69.034264524552 2235.962402343750 +69.044867744672 14147.763671875000 +72.936875253829 3080.500976562500 +73.064425531348 1778.781250000000 +76.486297547963 2075.000000000000 +77.038265451054 5099.881835937500 +79.021270792779 14303.786132812500 +80.049179511142 11132.483398437500 +81.937187525733 8269.017578125000 +82.996616277972 9058.604492187500 +87.055191552618 1226.265625000000 +89.506723502083 2138.000000000000 +90.489274059111 1883.000000000000 +91.053872057085 1250.000000000000 +95.952563443877 2416.907226562500 +97.968351278732 7414.000000000000 +102.091075578098 2124.000000000000 +104.049176798538 2869.822265625000 +105.032824057535 2268.302246093750 +109.942659719793 1552.503417968750 +113.963028919819 2876.313476562500 +114.091047730204 9707.000000000000 +118.085960022478 6202.343750000000 +122.095829000463 3354.874755859375 +122.963603572159 10189.080078125000 +123.091990223840 1658.215576171875 +123.962908276753 1264.000000000000 +124.961981387844 1248.617553710938 +124.981468335431 3929.697021484375 +132.044195947098 93934.070312500000 +133.046929709006 8774.461914062500 +136.020849942089 1733.000000000000 +136.111849813683 1360.000000000000 +139.963062553447 1109.337646484375 +141.090358589210 1395.717041015625 +141.112852312471 1316.060180664062 +141.957905703603 16856.453125000000 +142.959660117555 1253.947509765625 +147.090758649450 2468.091308593750 +149.023008191796 6552.861328125000 +150.054483884674 1381.879394531250 +151.096258773620 2499.016357421875 +151.110632987131 2703.097412109375 +153.126579038194 1175.000000000000 +155.069775153959 1603.251586914062 +155.105765884478 1708.284912109375 +155.973825500886 4965.000000000000 +158.002736417151 1095.759399414062 +158.153601610996 15319.201171875000 +159.156377711765 1693.013305664062 +160.050203671116 29808.187500000000 +161.053148014827 2780.099853515625 +161.095739798824 1801.900268554688 +164.143136174419 1163.970947265625 +167.016142798795 1938.000000000000 +170.095669159809 2557.841796875000 +170.116803885810 1136.247192382812 +170.969513731195 5351.000000000000 +171.138682297569 3310.690673828125 +172.133498266589 1186.970092773438 +172.168816609007 1753.000000000000 +173.079889235839 8137.424804687500 +174.127584523158 1118.000000000000 +177.053398759750 2010.000000000000 +178.158757601913 1500.698242187500 +179.105540802675 2172.262695312500 +182.961283063703 1745.384643554688 +186.221178069795 1622.000000000000 +194.116354222571 3003.000000000000 +195.102160721940 1637.390014648438 +195.121964321705 2114.307128906250 +198.185094857026 2154.000000000000 +209.152949152955 1423.597534179688 +217.106757414349 22820.371093750000 +218.109717212262 2365.715332031250 +219.095322856019 2839.912353515625 +224.127859164514 1268.000000000000 +228.195125596876 1796.750244140625 +235.168738541554 1153.106201171875 +236.167125665018 2147.822998046875 +239.089167868946 3697.000000000000 +242.283752097581 1331.000000000000 +246.862020032552 3643.000000000000 +249.184726675759 1740.000000000000 +250.176839865775 1269.149047851562 +251.000052262976 1835.000000000000 +251.185199846439 1143.344848632812 +252.997000735520 1613.000000000000 +253.915053857069 3181.000000000000 +260.980520936940 34136.089843750000 +261.983107472769 3914.000000000000 +262.975908361642 3711.000000000000 +267.171176133304 1190.000000000000 +279.094069923914 2218.000000000000 +281.050366742298 1525.000000000000 +304.299335403967 1178.000000000000 +318.012807082281 13905.000000000000 +319.015812641865 1771.000000000000 +320.009779889072 1411.312622070312 +324.021497063862 2274.000000000000 +327.008303487350 3194.000000000000 +329.005675073912 3118.000000000000 +339.995324080662 63593.000000000000 +340.998247708453 9047.660156250000 +341.991464705082 6892.000000000000 +351.928380615899 5009.000000000000 +353.925994810456 2303.000000000000 +355.968410053379 3129.565673828125 +363.070877703428 10529.000000000000 +364.073137490148 1819.000000000000 +379.934530374708 4270.000000000000 +381.931407641533 2153.000000000000 +445.120046493581 2353.000000000000 +503.859909772363 1436.000000000000 +505.853063220538 5926.000000000000 +506.854048759295 1904.000000000000 +519.139384687535 1126.000000000000 +522.880368766100 2806.000000000000 +523.877736811317 1418.000000000000 +529.888748439098 1722.000000000000 +536.165143915241 4925.000000000000 +537.165086990853 2707.000000000000 +538.162296228146 1762.000000000000 +542.921174254561 1132.000000000000 +543.918003709155 1152.000000000000 +546.914886995490 3416.000000000000 +547.912219447510 1693.000000000000 +563.943181698806 1223.378784179688 +610.184322938020 2314.000000000000 +611.184296206340 1322.000000000000 +657.001817843383 1409.000000000000 +696.940437510992 3603.000000000000 +698.940217154744 2331.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=658 experiment=7 +##m_id Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=658 experiment=7_0 +##scan 15 +##specref ms_run[1]:sample=1 period=1 cycle=658 experiment=7 +50.015107422585 45.000000000000 +51.023257171810 385.000000000000 +76.809444242167 45.000000000000 +76.816396118776 45.000000000000 +77.038638658533 3569.000000000000 +102.033997039434 120.000000000000 +103.741576634459 45.000000000000 +104.049277894383 1381.095214843750 +105.033422442588 1416.438964843750 +124.982582830443 75.000000000000 +130.038279917398 165.000000000000 +132.044560334103 4432.000000000000 +160.049869986071 120.000000000000 +>ms1peaks +50.015030688094 1631.000000000000 +52.005691836328 2833.837890625000 +53.013678352050 13820.645507812500 +53.850930804944 1372.676147460938 +54.009488813193 341215.375000000000 +55.006244952468 6363.858398437500 +55.011195314574 6663.786621093750 +55.054435589179 2093.444580078125 +55.934214796378 6443.966308593750 +56.049418637710 1614.372314453125 +56.942077131072 2603.345458984375 +59.049684010496 67068.679687500000 +60.044674600260 8507.357421875000 +61.039576232541 1618.787597656250 +63.997953270808 4540.612304687500 +64.004984885183 4765.146484375000 +68.011730125352 26984.066406250000 +68.993758540617 13250.065429687500 +69.044639818678 13453.114257812500 +72.936865747985 3009.785888671875 +73.064487442720 1926.000000000000 +76.486106736487 2394.000000000000 +77.012975210189 1331.000000000000 +77.038245950909 6864.013671875000 +79.021170250218 14954.513671875000 +80.049055487900 12273.781250000000 +81.937167726085 8605.721679687500 +82.996581259270 9547.895507812500 +87.054493611252 1308.586669921875 +89.506388403917 1579.000000000000 +90.489379547455 1879.000000000000 +91.053817827625 1210.000000000000 +95.952611673257 2421.652587890625 +97.968325410624 7844.628906250000 +100.075376789744 1408.000000000000 +102.090940410850 1712.000000000000 +104.048827681379 4021.000000000000 +105.032851808396 3043.702148437500 +109.943040230612 1524.000000000000 +113.962743611150 2300.809326171875 +114.091086475065 10732.537109375000 +118.085604757949 6375.129394531250 +122.095612538633 3453.346191406250 +122.963478886657 10149.138671875000 +123.091154033496 1907.152587890625 +123.962085557178 1291.000000000000 +124.964032856960 1524.723510742188 +124.981293760905 5573.300781250000 +132.044243365317 129513.453125000000 +133.047275934233 12024.171875000000 +136.021338396786 1596.000000000000 +136.111611313675 1179.000000000000 +141.090513006913 1389.292724609375 +141.112565247916 1247.203857421875 +141.957978845995 16325.500000000000 +147.090945866648 2556.685302734375 +149.023028218992 6399.154296875000 +150.054262184195 1568.000000000000 +151.096430884077 2664.400390625000 +151.111011940160 2835.027587890625 +155.069438117684 1871.944824218750 +155.105960083325 1401.000000000000 +155.973753152622 4288.000000000000 +158.153627071218 14384.000000000000 +159.156473714741 1627.752929687500 +160.050487288307 38915.000000000000 +161.053611692746 4466.942382812500 +161.095700587134 1743.057495117188 +164.142944501592 1256.052368164062 +167.015735366166 2785.089599609375 +170.096151543720 2652.023193359375 +170.116409887737 1324.376464843750 +170.968993556255 7076.000000000000 +171.137671144810 4912.312011718750 +172.136045264128 1371.000000000000 +173.079830429233 8581.928710937500 +174.991306236853 1198.000000000000 +177.054219725911 1769.000000000000 +178.157947155736 1498.908447265625 +179.106050750592 1934.090454101562 +182.960933723657 1780.061523437500 +182.991388549794 1244.309082031250 +186.221152079128 2287.000000000000 +194.116900036921 2752.000000000000 +195.121615177487 1919.471069335938 +198.184412559940 2140.000000000000 +200.200455656322 1296.554199218750 +209.153704347399 1590.000000000000 +212.888258624179 1535.000000000000 +217.106944592366 24346.000000000000 +218.110517718319 2646.000000000000 +219.095540028475 2644.006591796875 +228.196097140190 1527.811645507812 +236.167749124378 1677.000000000000 +239.089312381813 3327.000000000000 +242.284215148787 1201.000000000000 +246.862288406064 3365.000000000000 +249.184532839914 1860.293334960938 +251.001107206325 2362.000000000000 +252.997444701878 1876.000000000000 +253.916335213075 4093.000000000000 +260.980865788213 46877.000000000000 +261.983931158765 5301.000000000000 +262.976772362746 4418.000000000000 +267.172661485943 1410.000000000000 +277.199859444074 2417.590087890625 +279.093448238935 1888.450561523438 +281.051163936397 1557.000000000000 +292.121170689402 15731.000000000000 +293.123945781771 2615.000000000000 +294.118820607873 4859.000000000000 +295.121821476430 1186.000000000000 +318.013460543863 19020.000000000000 +319.016226586969 2819.000000000000 +320.010792812476 1745.000000000000 +324.021120495162 2522.000000000000 +327.007928037291 3314.077636718750 +329.005428091932 3187.000000000000 +331.002680981835 1140.229492187500 +335.040406311528 1228.000000000000 +339.995783079981 73785.000000000000 +340.998517552508 10283.000000000000 +341.992089047450 7216.000000000000 +351.928943475892 4368.000000000000 +353.926519256680 2362.000000000000 +355.969819970535 3512.076416015625 +363.071778928522 11698.970703125000 +364.073181575102 1981.000000000000 +371.315525399960 1354.000000000000 +379.934529706961 4095.883300781250 +381.932716463007 2062.000000000000 +445.119746997025 2474.000000000000 +446.119291863183 1145.000000000000 +505.853826516954 4858.000000000000 +506.855308046231 1451.000000000000 +519.139330404280 1166.703979492188 +522.880837958116 1970.000000000000 +523.871380297922 1372.000000000000 +529.891671811182 1342.000000000000 +536.165890644769 5714.000000000000 +537.166372879728 2646.000000000000 +538.163391669663 2155.000000000000 +544.339624971493 1155.000000000000 +546.914039373140 3234.000000000000 +547.912958504845 1306.000000000000 +610.184280095073 1860.000000000000 +611.183517202231 1239.000000000000 +657.000223829242 1834.000000000000 +696.940499292838 3022.000000000000 +698.938485246113 2250.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=659 experiment=8 +##m_id Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=8_0 +##scan 25 +##specref ms_run[1]:sample=1 period=1 cycle=659 experiment=8 +50.020070819941 30.000000000000 +51.023482850302 195.000000000000 +77.038364033267 3246.000000000000 +78.033404846471 30.000000000000 +78.552620684994 15.000000000000 +102.032982714874 90.000000000000 +104.048728147669 1394.000000000000 +105.032731936693 1151.000000000000 +124.980669674857 90.000000000000 +130.042013539390 75.000000000000 +131.642901555616 30.000000000000 +132.044319218476 4842.849121093750 +148.019756120458 30.000000000000 +160.051798718236 120.000000000000 +>compound 0_15110953643123771443-674006--105--UNKNOWN +>parentmass 349.169536935035 +>ionization [M+Na]1+ +>charge 1 +>rt 447.100000000020 +##fmz 349.169536935035183 +##fid 15110953643123771443 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +349.169536935035 78624.106478969305 +>ms1peaks +52.005592753043 3006.313964843750 +53.013386604926 14895.982421875000 +53.850307885580 1282.519653320312 +54.009266588925 342199.718750000000 +55.006082581110 6060.072753906250 +55.011283454187 6240.310058593750 +55.054294821572 2210.000000000000 +55.934096145228 5628.309570312500 +56.941759312303 2162.160156250000 +59.049359471853 46694.679687500000 +60.044421789280 9540.689453125000 +61.039479760124 2294.308837890625 +63.997714272448 3712.306396484375 +64.004717741595 3776.877441406250 +68.011627587572 27064.916015625000 +68.993566533187 11389.638671875000 +69.008625246067 1040.924560546875 +69.044535203632 13668.087890625000 +72.936481622578 2454.600341796875 +73.064065589451 1403.865722656250 +76.486273965426 2375.015136718750 +79.020790259171 14203.234375000000 +80.049005926370 10670.580078125000 +81.936823889862 7769.677734375000 +82.996318430269 8831.000000000000 +87.043659684882 1291.933349609375 +87.054507882909 1447.717041015625 +89.506487543125 1968.296386718750 +90.489051431145 1567.000000000000 +91.053400164401 1256.000000000000 +95.952306311885 1977.000000000000 +97.968075016323 6813.626953125000 +100.074949120053 1188.000000000000 +102.090464066418 1830.000000000000 +109.942585550788 1505.090454101562 +113.962587921756 2250.229736328125 +114.090562200242 10307.702148437500 +118.085082878297 6730.000000000000 +122.095605127592 3465.000000000000 +122.963039812214 10185.000000000000 +123.091494988172 1608.787231445312 +129.051393255556 1096.195678710938 +130.157964856700 1224.000000000000 +136.020696393521 1628.173095703125 +136.111265586312 1351.884765625000 +137.963028699523 1044.000000000000 +141.090735684411 1400.241577148438 +141.111884779659 1559.751831054688 +141.936149934788 2056.103759765625 +141.957562608877 15536.687500000000 +147.090844143576 2684.000000000000 +149.022219076913 4357.918945312500 +149.040987249104 1837.193115234375 +151.095349881837 2305.082275390625 +151.109939199155 2576.997802734375 +155.068952001479 1217.608398437500 +155.105783696987 1630.887817382812 +155.972951860043 4015.000000000000 +158.153089325142 12131.025390625000 +159.156361011225 1282.655029296875 +161.095571014168 1849.739868164062 +164.142332600548 1475.398193359375 +170.095084317194 2525.529541015625 +171.146419276332 1492.000000000000 +172.132296924472 1198.192871093750 +173.080359168822 7163.493164062500 +174.127015852864 1059.000000000000 +174.990991861896 1587.000000000000 +178.157781317469 1624.536987304688 +179.105994436857 1966.000000000000 +182.960688878508 2338.556152343750 +182.982210678536 2178.232421875000 +186.220605721634 1746.000000000000 +194.115986578552 3414.184814453125 +195.121368448944 2440.554443359375 +198.184661469947 1850.538574218750 +200.200431422851 1250.850830078125 +201.983565637695 1125.000000000000 +217.006778563847 3269.000000000000 +217.106257896227 20478.425781250000 +218.109387671986 2700.000000000000 +219.094811619683 1568.384521484375 +224.126330250006 1136.363037109375 +228.195256821021 1364.000000000000 +234.034555602122 3162.000000000000 +235.168379942276 1059.765869140625 +239.088123273064 4617.123535156250 +242.283687547927 1626.000000000000 +246.861503474727 3165.000000000000 +249.183966936445 1338.000000000000 +250.178157580094 1268.000000000000 +250.999499019254 3169.000000000000 +251.184919733032 1121.084228515625 +252.996470645480 2204.000000000000 +262.065339439714 5824.345214843750 +267.170259991556 1568.463745117188 +276.081091674263 8173.000000000000 +277.057665923216 1209.618164062500 +277.085219951598 1293.623413085938 +279.093583842250 1859.000000000000 +281.050436828814 1462.000000000000 +284.164194797510 15720.000000000000 +285.167199045233 4022.000000000000 +286.177305853522 1891.670776367188 +292.120375414143 1944.000000000000 +303.190300317299 1143.297241210938 +304.113551407962 233981.000000000000 +305.115237199332 34039.113281250000 +306.110943955948 13933.000000000000 +307.113098422247 1919.696899414062 +307.246808467596 3300.572753906250 +310.120295757069 1681.000000000000 +320.107169971093 1195.785766601562 +326.095118441765 16572.000000000000 +327.007733661441 3760.000000000000 +327.095761410498 3082.000000000000 +328.091343004556 1205.000000000000 +329.005017718870 3936.000000000000 +330.206156493086 31473.623046875000 +331.001131359041 1283.000000000000 +331.208781030804 7087.107910156250 +332.212762979446 1049.000000000000 +342.069329790769 1871.000000000000 +349.169872251691 6112.673339843750 +350.172892076873 1285.000000000000 +352.188381138816 3463.990966796875 +352.237855065072 1571.586547851562 +380.335730124158 1272.000000000000 +404.036775645443 2150.000000000000 +445.119594711322 2089.000000000000 +487.229352410180 1300.347412109375 +500.276727311162 8288.133789062500 +501.279823879484 2533.000000000000 +502.288704966210 1392.000000000000 +505.852309070026 2882.000000000000 +522.878554007503 1334.599853515625 +536.164536908876 5057.000000000000 +537.165016352661 2456.000000000000 +538.163523094599 1972.255615234375 +544.338584253074 1675.149536132812 +546.914933234641 1855.000000000000 +607.218843523736 2732.000000000000 +610.184293153428 2142.000000000000 +611.183428881164 1140.000000000000 +612.185574985429 1243.000000000000 +613.226429565287 4419.000000000000 +614.228332015276 1213.785766601562 +629.199480533100 8990.000000000000 +630.203842344410 2729.000000000000 +631.198645508739 1426.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=674 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=674 experiment=6_0 +##scan 105 +##specref ms_run[1]:sample=1 period=1 cycle=674 experiment=6 +60.081311873120 317.000000000000 +107.048591987939 75.000000000000 +121.011185515683 45.000000000000 +137.042863316042 135.000000000000 +138.016928731083 75.000000000000 +139.019366132232 45.000000000000 +153.036359085879 180.000000000000 +155.052447162542 210.000000000000 +168.986017376512 270.000000000000 +184.982182920189 90.000000000000 +198.994924698980 120.000000000000 +200.998143970587 75.000000000000 +201.984368682258 2676.000000000000 +216.021457924153 75.000000000000 +216.350770868740 105.000000000000 +216.432740599583 30.000000000000 +216.450991207642 30.000000000000 +217.008052190453 11994.411132812500 +230.014504527888 75.000000000000 +233.328955599542 45.000000000000 +234.033967852197 2770.000000000000 +245.037925257354 135.000000000000 +262.065875378587 437.000000000000 +276.082025735516 1394.000000000000 +304.112103688826 1171.000000000000 +>ms1peaks +52.005429962927 2874.067626953125 +53.013488092548 14817.291015625000 +54.009250374962 334494.937500000000 +55.006084606761 5488.883300781250 +55.011047738293 6443.265136718750 +55.054381628314 2385.724365234375 +55.934070669618 5486.966796875000 +56.942036090778 2313.250244140625 +59.049556209203 57988.484375000000 +60.044347260401 9323.001953125000 +61.039167560780 1828.241455078125 +63.997923021227 4927.193359375000 +64.004932691950 5181.531250000000 +68.011552270537 27280.974609375000 +68.993634139472 11798.143554687500 +69.044334270747 12566.409179687500 +72.936570834957 2193.115966796875 +73.063872777826 1681.879882812500 +76.486053959604 2158.190429687500 +79.020753207512 16147.697265625000 +80.048886066869 12139.645507812500 +81.936907500524 8343.286132812500 +82.996250408243 8009.000000000000 +87.042980895665 1166.738403320312 +87.053972860944 1485.116088867188 +89.506705194324 1444.000000000000 +90.488891330057 1645.000000000000 +91.053476545401 1583.000000000000 +95.952210208006 2039.742797851562 +97.968150682366 6945.562500000000 +100.074718244150 1363.000000000000 +102.090306392772 1417.000000000000 +109.942448236827 1253.000000000000 +113.962708637249 2032.000000000000 +114.090792284548 10306.000000000000 +118.084892277491 5540.821289062500 +122.095166173318 3378.000000000000 +122.962913232208 9579.000000000000 +123.091195975991 1531.662963867188 +130.157764407919 1286.000000000000 +136.020428292954 1633.000000000000 +141.090127789620 1346.968627929688 +141.112042976374 1656.172241210938 +141.957142368171 13820.262695312500 +147.089971164701 2287.525390625000 +149.022027180229 4587.050292968750 +149.040978245649 2678.199707031250 +151.095856455214 2104.623291015625 +151.110429192129 2233.988037109375 +155.068837159282 1322.053710937500 +155.973356955881 4212.000000000000 +158.153011960091 10898.886718750000 +161.095284178342 1762.593994140625 +164.141720682546 1224.125244140625 +170.095143568643 2743.236816406250 +173.079445020465 6455.588378906250 +174.990181271009 1164.000000000000 +175.126264328958 1229.927246093750 +178.157011972493 1362.000000000000 +179.105369890054 1931.000000000000 +182.960638968270 1810.076538085938 +182.983125598895 1274.763061523438 +186.016954934375 1958.000000000000 +186.220415397417 1282.000000000000 +193.158240520354 1195.032958984375 +194.115937912419 2861.000000000000 +195.121022485646 2380.102539062500 +198.183707422577 1745.000000000000 +200.199383225092 1357.000000000000 +201.983259096536 4157.000000000000 +217.007242135614 11741.327148437500 +217.105963587093 15482.668945312500 +218.009949414252 1208.000000000000 +218.108958783015 2547.000000000000 +219.093633048806 1319.448730468750 +234.033582693957 12770.000000000000 +235.037603512480 1379.336669921875 +239.087766278998 3286.875732421875 +242.283333142943 1269.000000000000 +245.038366204801 2525.000000000000 +246.860868473188 2768.000000000000 +249.183726045021 1277.861328125000 +250.999502407170 2552.000000000000 +252.995631834554 1836.000000000000 +262.065239894604 21394.767578125000 +263.067572169870 2404.000000000000 +264.061891103771 1243.000000000000 +276.080813947841 32185.000000000000 +277.083963767141 4114.000000000000 +278.078054160446 2217.000000000000 +279.092495265569 1940.000000000000 +281.050419778851 1367.000000000000 +284.163590469925 9332.000000000000 +285.167331910184 2517.000000000000 +289.119964437534 1441.302978515625 +292.119508242518 1546.000000000000 +303.104642799152 3336.000000000000 +303.191168270618 2846.093505859375 +304.118917204532 886697.062500000000 +304.856339026942 1419.656616210938 +304.975022441588 5892.455566406250 +305.107897820025 60098.996093750000 +306.110158464267 52147.246093750000 +307.111260806590 6616.670410156250 +307.247283236566 2744.782226562500 +310.120139525907 4017.412597656250 +320.106832165572 5127.000000000000 +321.110457254103 1231.635253906250 +321.131042046566 1226.668579101562 +326.094185610162 39581.000000000000 +327.007439325330 3479.883544921875 +327.096485748553 6323.979980468750 +328.091424657873 2476.325927734375 +329.002736488496 3916.000000000000 +330.204957173578 17861.789062500000 +331.208137127779 4322.000000000000 +342.068068201427 2858.656982421875 +349.169386508932 18308.152343750000 +350.172289812388 3575.000000000000 +351.169114792649 1326.000000000000 +352.185338388432 1383.838623046875 +372.148023932598 2199.032714843750 +380.334421867930 1500.000000000000 +404.036203084131 8110.000000000000 +405.038280600419 1614.000000000000 +445.117639958471 2103.000000000000 +500.274765830931 9506.000000000000 +501.278189264574 2845.197509765625 +502.287108152553 1738.000000000000 +505.850965822120 2506.000000000000 +536.163265279090 5123.811523437500 +537.164206705990 2452.000000000000 +538.160787955733 1794.000000000000 +544.336478775213 1764.000000000000 +546.913227478942 1570.434814453125 +549.964589119831 1398.000000000000 +607.215848916045 42716.000000000000 +608.219229396365 13004.000000000000 +609.215354074706 6569.000000000000 +610.191475231986 3658.000000000000 +611.187180591379 1650.000000000000 +612.219311132493 2717.000000000000 +613.224098373297 22062.000000000000 +614.227279534381 7018.149414062500 +615.222828016202 3443.000000000000 +623.211028873207 1301.000000000000 +629.198230629944 46218.000000000000 +630.201437914669 14408.000000000000 +631.197842259138 6467.000000000000 +632.198694915122 1400.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=675 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=675 experiment=6_0 +##scan 114 +##specref ms_run[1]:sample=1 period=1 cycle=675 experiment=6 +58.996001750623 30.000000000000 +60.080603176850 312.000000000000 +79.054209126712 30.000000000000 +108.054653787627 60.000000000000 +108.065739487326 56.225082397461 +109.010792405487 30.000000000000 +121.009796723678 30.000000000000 +121.019361963549 30.000000000000 +137.041178917357 135.000000000000 +138.011633501269 60.000000000000 +138.020572409930 60.000000000000 +139.020685086527 75.000000000000 +153.036669947981 330.000000000000 +155.028529627766 71.037872314453 +155.050885009520 255.000000000000 +168.986193427166 335.790893554688 +169.005494842977 263.783813476562 +180.983729756425 30.000000000000 +184.979757717870 180.000000000000 +186.996465097648 45.000000000000 +197.044969171046 13.000000000000 +198.995507284397 330.000000000000 +200.977071763483 60.000000000000 +201.005388168102 51.036884307861 +201.378265734807 45.000000000000 +201.983900875679 3766.254394531250 +214.062947226188 30.000000000000 +216.024647971071 75.000000000000 +216.044892485375 75.000000000000 +216.350618341967 75.000000000000 +217.008093074677 19212.000000000000 +218.543211108378 30.000000000000 +218.552176214816 30.000000000000 +219.007942777136 30.000000000000 +230.017030272807 180.000000000000 +233.289535001227 15.000000000000 +233.960096828681 13.000000000000 +234.034328458175 4563.000000000000 +234.394676822829 13.000000000000 +235.044702856826 30.000000000000 +244.034141805200 13.000000000000 +245.040864912952 461.000000000000 +258.070168801048 60.000000000000 +262.065305326236 869.000000000000 +276.082158135887 2140.000000000000 +277.085594725098 45.000000000000 +277.901531191057 45.000000000000 +277.943555976348 30.000000000000 +303.179510395725 13.000000000000 +304.112709846410 2392.000000000000 +305.112381425482 30.000000000000 +307.656160100874 13.000000000000 +348.985330011267 30.000000000000 +>ms1peaks +52.005351813457 2501.610107421875 +53.013412581284 13134.520507812500 +53.850226225992 1302.909057617188 +54.009140063564 338983.656250000000 +55.006042248338 6435.412597656250 +55.011148435189 6609.394042968750 +55.054172395822 1772.104248046875 +55.934029229957 5757.919921875000 +56.941868288709 2705.908203125000 +59.049392394217 65787.757812500000 +60.044197396550 9389.001953125000 +61.039698624921 1629.770751953125 +63.997582420249 4596.096191406250 +64.004915539546 4860.728515625000 +68.011405901665 27484.292968750000 +68.993238795734 11816.172851562500 +69.044514210085 12151.762695312500 +72.936346245282 1770.000000000000 +73.063844648998 1632.810180664062 +76.485866327556 2207.000000000000 +79.020638014668 15456.159179687500 +80.048700307132 11716.706054687500 +81.936658440041 8339.158203125000 +82.995849176432 8191.000000000000 +87.054215388379 1432.329345703125 +89.505806636870 1376.000000000000 +90.488666027165 1798.000000000000 +95.952211902793 2472.000000000000 +97.967974119285 6640.000000000000 +100.074558827800 1418.000000000000 +102.090063528932 1768.000000000000 +109.942148206295 1646.000000000000 +113.962810920920 1728.000976562500 +114.090265101894 9843.087890625000 +118.085166173822 5466.146972656250 +122.095082275611 3591.515380859375 +122.962671452755 9919.435546875000 +123.090603383338 1818.105346679688 +130.157985838236 1433.000000000000 +136.020144210415 1305.642211914062 +141.111768954054 1381.647338867188 +141.957291332652 13999.958984375000 +147.090365251433 2315.564941406250 +149.021998403294 4169.404296875000 +151.095653127576 2632.192382812500 +151.109600618565 2638.503906250000 +155.069049191990 1400.588378906250 +155.105221715370 1306.244873046875 +155.972774632456 3955.750244140625 +158.152847157321 10190.631835937500 +161.094883274868 1469.000000000000 +164.993233307885 1413.000000000000 +170.094756804200 2692.873779296875 +173.079096183490 5464.607421875000 +174.990754641374 1338.000000000000 +175.120920396226 1335.489135742188 +178.157288006504 1567.557739257812 +179.104881581157 1856.000000000000 +182.960071822982 1596.667236328125 +186.016812097735 3128.000000000000 +194.115183195725 3037.019042968750 +195.105676043577 1846.959228515625 +195.121034909827 2138.534667968750 +198.183715433637 1614.000000000000 +201.983396783946 6476.000000000000 +217.007534943089 16000.083984375000 +217.105603079000 12722.193359375000 +218.010461830348 1723.000000000000 +218.108916975941 1918.000000000000 +219.094207015885 1394.000000000000 +234.033666185649 17919.000000000000 +235.036061869219 1699.000000000000 +239.087710708037 2715.000000000000 +245.038087259231 3705.000000000000 +246.860587751512 3017.000000000000 +250.998652800198 2461.000000000000 +252.996040050118 1751.000000000000 +262.065226573716 31878.271484375000 +263.067812997194 3540.000000000000 +264.062744585962 1732.000000000000 +276.080875651007 47441.000000000000 +277.083729023421 6202.904296875000 +278.078049070253 2909.805664062500 +279.092264164105 2269.000000000000 +281.049607531965 1759.000000000000 +284.163709253010 5971.317382812500 +285.167422523505 1450.937500000000 +289.120547785899 45105.261718750000 +290.122834000335 8899.000000000000 +291.118148964330 16223.000000000000 +292.119468760172 3916.748291015625 +303.104211105075 4272.900878906250 +303.190626643079 3701.817626953125 +304.121038021889 1154982.000000000000 +304.680120827865 1361.469604492188 +304.720450396369 1578.193115234375 +304.756696628278 1464.135742187500 +304.826755934771 1415.802856445312 +304.888295222133 4211.749023437500 +304.975939340234 6444.747070312500 +305.112954471951 109660.976562500000 +306.110248734555 72833.000000000000 +307.111946842557 10169.579101562500 +307.247397220322 1757.839477539062 +310.120212483100 5088.000000000000 +320.107070842572 7286.000000000000 +321.109817317563 1634.396606445312 +321.134008500327 1645.504272460938 +326.094135509242 51581.214843750000 +327.006663634739 3305.288085937500 +327.096918826684 8025.063964843750 +328.090879363560 3401.237060546875 +329.002848029289 3721.000000000000 +330.204815446188 11820.952148437500 +331.208232327135 2889.000000000000 +342.067980362905 3189.395019531250 +349.169296376205 25098.000000000000 +350.172883605486 4323.000000000000 +351.167291455015 1724.000000000000 +372.149200119315 2817.477050781250 +404.036004100360 11013.000000000000 +405.038241871311 2224.679687500000 +424.359699824875 1469.000000000000 +445.117347283461 1962.204711914062 +500.274802921042 11554.163085937500 +501.277725760601 3400.000000000000 +502.286539956580 1910.000000000000 +505.850895564320 2188.000000000000 +536.162361057972 4668.000000000000 +537.163239801382 2428.000000000000 +538.161608472883 1869.000000000000 +544.336387601713 1598.000000000000 +546.911505452596 1493.000000000000 +549.965979448424 1640.000000000000 +592.225456903764 1675.000000000000 +607.216655018496 74091.000000000000 +608.219193446659 23449.000000000000 +609.215852555200 11438.528320312500 +610.208425679746 4454.000000000000 +611.188234775837 1805.798706054688 +612.220726308427 4082.000000000000 +613.224505418990 34075.000000000000 +614.227906702716 11171.000000000000 +615.225014693998 5343.000000000000 +623.210784148654 2510.000000000000 +629.198405169302 68640.000000000000 +630.201595235063 21340.328125000000 +631.198284234777 10581.000000000000 +632.198298853566 2483.000000000000 +707.140261218123 1384.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=676 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=6_0 +##scan 123 +##specref ms_run[1]:sample=1 period=1 cycle=676 experiment=6 +60.080804667174 433.000000000000 +77.037138854585 30.000000000000 +77.044660163015 30.000000000000 +79.051436344945 30.000000000000 +79.987786684964 45.000000000000 +79.995145870102 45.000000000000 +91.053912185659 45.000000000000 +103.055533984494 45.000000000000 +107.047730443211 150.000000000000 +108.056269079190 30.000000000000 +121.009504971189 30.000000000000 +125.040363278974 45.000000000000 +137.042600268373 120.000000000000 +138.019111040995 75.000000000000 +139.020855944901 105.000000000000 +140.031859103509 30.000000000000 +150.070308181449 30.000000000000 +153.035568142921 438.000000000000 +154.041169236265 30.000000000000 +155.050251278454 292.000000000000 +168.985995519890 388.000000000000 +184.982127385526 240.000000000000 +186.996395915972 90.000000000000 +187.034875102026 15.000000000000 +198.997821411773 180.000000000000 +200.977311045020 120.000000000000 +201.984671750322 4516.000000000000 +214.059766225802 30.000000000000 +214.073341606216 30.000000000000 +214.995982481649 45.000000000000 +216.024223244159 75.000000000000 +216.352099910034 45.000000000000 +217.008225956243 19597.000000000000 +217.159059425024 30.000000000000 +217.172831358415 30.000000000000 +217.680866309640 30.000000000000 +217.701180241721 30.000000000000 +217.946417478232 30.000000000000 +218.595765379496 30.000000000000 +219.010234249981 30.000000000000 +230.014065437955 45.000000000000 +233.336055274841 45.000000000000 +234.034165917597 4691.000000000000 +234.071698687435 208.209503173828 +234.991297986214 30.000000000000 +235.014754835894 45.000000000000 +235.038214028110 30.000000000000 +245.039792758223 315.000000000000 +258.068699435792 120.000000000000 +262.065919000015 870.000000000000 +276.081990706357 2323.384521484375 +303.209442753655 30.000000000000 +304.112289160302 3220.247314453125 +>compound 0_3034601138604610277-657008--7--UNKNOWN +>parentmass 363.070775069452 +>ionization [M+Na]1+ +>charge 1 +>rt 431.866000000020 +##fmz 363.07077506945177 +##fid 3034601138604610277 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +363.070775069452 38114.593385922941 +>ms1peaks +52.005865355475 2936.356689453125 +53.013723515258 15168.868164062500 +53.850400239168 1357.829345703125 +54.009447090145 347607.156250000000 +55.006110218286 6238.441894531250 +55.011508541956 7268.958007812500 +55.054636618089 2136.000000000000 +55.934309116073 6532.552734375000 +56.942275933353 2612.874023437500 +59.049622158630 56011.429687500000 +60.044524012498 9000.792968750000 +61.039481839151 1786.074829101562 +63.997449394256 3736.165039062500 +64.005109595772 4712.666015625000 +68.011792039005 26707.251953125000 +68.993702477550 13633.019531250000 +69.008646447254 1441.886596679688 +69.044733608562 13552.908203125000 +69.494666168807 1088.000000000000 +72.044289477019 1134.000000000000 +72.936653378507 2379.292724609375 +73.064314657279 1947.000000000000 +76.486410468336 2230.000000000000 +77.038532396207 1590.778686523438 +79.021074679723 14557.214843750000 +80.049121781728 13038.990234375000 +81.937384309880 9136.173828125000 +82.996771559276 9647.291015625000 +87.044032478393 1164.202392578125 +87.055030197874 1937.880737304688 +89.506480817586 1633.000000000000 +90.489144644798 1823.000000000000 +91.053978578614 1481.000000000000 +95.952653475183 2798.568603515625 +97.968242662562 7804.676269531250 +100.075124666224 1357.000000000000 +102.091023963336 2105.000000000000 +109.943015773476 1849.492675781250 +113.963173340819 2146.000000000000 +114.091149027124 11434.439453125000 +118.085562888545 7126.602050781250 +122.095450971812 3351.000000000000 +122.963406396921 11429.592773437500 +123.091816714399 1461.405029296875 +123.962989553704 1162.000000000000 +132.043858137010 23466.287109375000 +133.047312261130 2601.019775390625 +136.020979409517 1763.000000000000 +136.111376584671 1338.000000000000 +141.090631531290 1452.329956054688 +141.112250777587 1933.171752929688 +141.957805111647 16272.520507812500 +142.960130525273 1091.785766601562 +147.090889713370 2561.000000000000 +149.022860382613 8952.703125000000 +149.043461527452 2074.399169921875 +151.096439801801 2539.815917968750 +151.111209143750 2693.475830078125 +155.070028482861 1787.522338867188 +155.105375703160 1554.431030273438 +155.973268704769 4467.000000000000 +158.002234575261 1123.180664062500 +158.153819790011 15565.543945312500 +159.136830576290 1251.366088867188 +159.156929350810 1638.817993164062 +159.968015589745 1144.587158203125 +160.050107538005 10862.000000000000 +161.095753069011 1987.528442382812 +163.130314304873 1321.613403320312 +164.142207413101 1344.506469726562 +170.096003050047 2831.750244140625 +170.116393016687 1241.047485351562 +170.969308188165 1467.000000000000 +171.138824143644 1976.471679687500 +172.132816514555 1070.000000000000 +172.169354072833 1126.623413085938 +173.080592066342 7150.673339843750 +174.127101054123 1093.000000000000 +174.991572624579 1115.259887695312 +175.117966507653 1382.413574218750 +177.053956263481 3086.000000000000 +178.158743604693 1737.946655273438 +179.106488149861 2092.017333984375 +182.961571664514 1566.125366210938 +182.982955367691 1389.804321289062 +186.221312636852 2310.000000000000 +194.116506735598 3012.142089843750 +195.121983568600 1971.532348632812 +198.184492106186 2254.000000000000 +199.168659259112 1074.472778320312 +200.200544607050 1265.000000000000 +209.152957718499 1444.000000000000 +215.126858142678 1195.000000000000 +217.107186196782 24662.302734375000 +218.110233972313 2772.000000000000 +219.095202240315 3180.013427734375 +219.137164883586 1444.293090820312 +224.128646207474 1167.206176757812 +228.196369189320 1732.199340820312 +235.170060948981 1264.538574218750 +236.167946332224 2704.449462890625 +239.089160494599 5259.000000000000 +240.068219796793 1277.484863281250 +240.091769691182 1359.958740234375 +242.284200605489 1137.000000000000 +246.863294404574 3891.000000000000 +249.184938071857 1294.474121093750 +250.177914710678 1312.000000000000 +250.999736865556 2366.000000000000 +251.185303455126 1195.000000000000 +252.996845199048 1725.000000000000 +260.980831135670 9681.000000000000 +262.976934337234 1074.000000000000 +267.172286092444 1268.487426757812 +279.093453473919 1954.000000000000 +281.051187832394 1373.000000000000 +287.889696989575 1142.000000000000 +318.012975056617 4878.000000000000 +327.008528574617 3507.000000000000 +329.005288792022 3151.000000000000 +339.995536258518 21188.000000000000 +340.998304727292 3403.000000000000 +341.991615450972 1965.000000000000 +351.928765172494 2752.000000000000 +353.925863637500 1287.000000000000 +355.970345025132 1233.272216796875 +363.071463720139 4333.000000000000 +371.315937786641 1386.000000000000 +379.934517326720 2414.000000000000 +381.932765584480 1355.000000000000 +430.887891579421 1170.000000000000 +445.119501835711 2373.000000000000 +503.857852657168 1208.000000000000 +505.853144541362 5379.000000000000 +506.854406933930 1813.000000000000 +522.880381915172 2380.000000000000 +523.873038712107 1344.000000000000 +529.890971881918 1718.000000000000 +536.164830382665 5050.000000000000 +537.165530578391 2568.000000000000 +538.164082153377 1889.000000000000 +542.919791547930 1233.000000000000 +544.340309842267 1260.000000000000 +544.916740966050 1184.000000000000 +546.914239791284 3795.000000000000 +547.912822025670 1609.000000000000 +563.944002995814 1077.258789062500 +610.183402350979 1851.000000000000 +611.184706508494 1107.000000000000 +696.940078237106 1408.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=657 experiment=8 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=657 experiment=8_0 +##scan 7 +##specref ms_run[1]:sample=1 period=1 cycle=657 experiment=8 +51.023327393106 30.000000000000 +77.037828076161 230.000000000000 +77.047112591606 188.054351806641 +104.051039199103 135.000000000000 +105.033428602011 150.000000000000 +124.983684040858 90.000000000000 +132.044015045267 690.740539550781 +167.013583750308 30.000000000000 +172.867381277642 30.000000000000 +>ms1peaks +52.005717667707 2536.876953125000 +53.013645918459 13517.719726562500 +53.851091408425 1440.814208984375 +54.009479564739 340518.468750000000 +55.006713705873 6189.195800781250 +55.011648330739 5775.918945312500 +55.054395080163 1937.021850585938 +55.934309790351 6216.487304687500 +56.049851096555 1422.552856445312 +56.942103151176 2497.945800781250 +59.049782018324 63557.187500000000 +60.044617957556 9127.332031250000 +61.039564209817 1916.918579101562 +63.998058629288 4341.631347656250 +64.005180932598 4902.907226562500 +68.011727932833 27051.191406250000 +68.994002789359 13611.511718750000 +69.034264524552 2235.962402343750 +69.044867744672 14147.763671875000 +72.936875253829 3080.500976562500 +73.064425531348 1778.781250000000 +76.486297547963 2075.000000000000 +77.038265451054 5099.881835937500 +79.021270792779 14303.786132812500 +80.049179511142 11132.483398437500 +81.937187525733 8269.017578125000 +82.996616277972 9058.604492187500 +87.055191552618 1226.265625000000 +89.506723502083 2138.000000000000 +90.489274059111 1883.000000000000 +91.053872057085 1250.000000000000 +95.952563443877 2416.907226562500 +97.968351278732 7414.000000000000 +102.091075578098 2124.000000000000 +104.049176798538 2869.822265625000 +105.032824057535 2268.302246093750 +109.942659719793 1552.503417968750 +113.963028919819 2876.313476562500 +114.091047730204 9707.000000000000 +118.085960022478 6202.343750000000 +122.095829000463 3354.874755859375 +122.963603572159 10189.080078125000 +123.091990223840 1658.215576171875 +123.962908276753 1264.000000000000 +124.961981387844 1248.617553710938 +124.981468335431 3929.697021484375 +132.044195947098 93934.070312500000 +133.046929709006 8774.461914062500 +136.020849942089 1733.000000000000 +136.111849813683 1360.000000000000 +139.963062553447 1109.337646484375 +141.090358589210 1395.717041015625 +141.112852312471 1316.060180664062 +141.957905703603 16856.453125000000 +142.959660117555 1253.947509765625 +147.090758649450 2468.091308593750 +149.023008191796 6552.861328125000 +150.054483884674 1381.879394531250 +151.096258773620 2499.016357421875 +151.110632987131 2703.097412109375 +153.126579038194 1175.000000000000 +155.069775153959 1603.251586914062 +155.105765884478 1708.284912109375 +155.973825500886 4965.000000000000 +158.002736417151 1095.759399414062 +158.153601610996 15319.201171875000 +159.156377711765 1693.013305664062 +160.050203671116 29808.187500000000 +161.053148014827 2780.099853515625 +161.095739798824 1801.900268554688 +164.143136174419 1163.970947265625 +167.016142798795 1938.000000000000 +170.095669159809 2557.841796875000 +170.116803885810 1136.247192382812 +170.969513731195 5351.000000000000 +171.138682297569 3310.690673828125 +172.133498266589 1186.970092773438 +172.168816609007 1753.000000000000 +173.079889235839 8137.424804687500 +174.127584523158 1118.000000000000 +177.053398759750 2010.000000000000 +178.158757601913 1500.698242187500 +179.105540802675 2172.262695312500 +182.961283063703 1745.384643554688 +186.221178069795 1622.000000000000 +194.116354222571 3003.000000000000 +195.102160721940 1637.390014648438 +195.121964321705 2114.307128906250 +198.185094857026 2154.000000000000 +209.152949152955 1423.597534179688 +217.106757414349 22820.371093750000 +218.109717212262 2365.715332031250 +219.095322856019 2839.912353515625 +224.127859164514 1268.000000000000 +228.195125596876 1796.750244140625 +235.168738541554 1153.106201171875 +236.167125665018 2147.822998046875 +239.089167868946 3697.000000000000 +242.283752097581 1331.000000000000 +246.862020032552 3643.000000000000 +249.184726675759 1740.000000000000 +250.176839865775 1269.149047851562 +251.000052262976 1835.000000000000 +251.185199846439 1143.344848632812 +252.997000735520 1613.000000000000 +253.915053857069 3181.000000000000 +260.980520936940 34136.089843750000 +261.983107472769 3914.000000000000 +262.975908361642 3711.000000000000 +267.171176133304 1190.000000000000 +279.094069923914 2218.000000000000 +281.050366742298 1525.000000000000 +304.299335403967 1178.000000000000 +318.012807082281 13905.000000000000 +319.015812641865 1771.000000000000 +320.009779889072 1411.312622070312 +324.021497063862 2274.000000000000 +327.008303487350 3194.000000000000 +329.005675073912 3118.000000000000 +339.995324080662 63593.000000000000 +340.998247708453 9047.660156250000 +341.991464705082 6892.000000000000 +351.928380615899 5009.000000000000 +353.925994810456 2303.000000000000 +355.968410053379 3129.565673828125 +363.070877703428 10529.000000000000 +364.073137490148 1819.000000000000 +379.934530374708 4270.000000000000 +381.931407641533 2153.000000000000 +445.120046493581 2353.000000000000 +503.859909772363 1436.000000000000 +505.853063220538 5926.000000000000 +506.854048759295 1904.000000000000 +519.139384687535 1126.000000000000 +522.880368766100 2806.000000000000 +523.877736811317 1418.000000000000 +529.888748439098 1722.000000000000 +536.165143915241 4925.000000000000 +537.165086990853 2707.000000000000 +538.162296228146 1762.000000000000 +542.921174254561 1132.000000000000 +543.918003709155 1152.000000000000 +546.914886995490 3416.000000000000 +547.912219447510 1693.000000000000 +563.943181698806 1223.378784179688 +610.184322938020 2314.000000000000 +611.184296206340 1322.000000000000 +657.001817843383 1409.000000000000 +696.940437510992 3603.000000000000 +698.940217154744 2331.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=658 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=658 experiment=9_0 +##scan 17 +##specref ms_run[1]:sample=1 period=1 cycle=658 experiment=9 +77.039588173559 315.000000000000 +104.048667587430 90.000000000000 +105.034213515052 266.000000000000 +124.982932191415 120.000000000000 +132.045552020292 1052.000000000000 +134.069001291881 15.000000000000 +160.052154319404 75.000000000000 +260.988397593186 30.000000000000 +>ms1peaks +50.015030688094 1631.000000000000 +52.005691836328 2833.837890625000 +53.013678352050 13820.645507812500 +53.850930804944 1372.676147460938 +54.009488813193 341215.375000000000 +55.006244952468 6363.858398437500 +55.011195314574 6663.786621093750 +55.054435589179 2093.444580078125 +55.934214796378 6443.966308593750 +56.049418637710 1614.372314453125 +56.942077131072 2603.345458984375 +59.049684010496 67068.679687500000 +60.044674600260 8507.357421875000 +61.039576232541 1618.787597656250 +63.997953270808 4540.612304687500 +64.004984885183 4765.146484375000 +68.011730125352 26984.066406250000 +68.993758540617 13250.065429687500 +69.044639818678 13453.114257812500 +72.936865747985 3009.785888671875 +73.064487442720 1926.000000000000 +76.486106736487 2394.000000000000 +77.012975210189 1331.000000000000 +77.038245950909 6864.013671875000 +79.021170250218 14954.513671875000 +80.049055487900 12273.781250000000 +81.937167726085 8605.721679687500 +82.996581259270 9547.895507812500 +87.054493611252 1308.586669921875 +89.506388403917 1579.000000000000 +90.489379547455 1879.000000000000 +91.053817827625 1210.000000000000 +95.952611673257 2421.652587890625 +97.968325410624 7844.628906250000 +100.075376789744 1408.000000000000 +102.090940410850 1712.000000000000 +104.048827681379 4021.000000000000 +105.032851808396 3043.702148437500 +109.943040230612 1524.000000000000 +113.962743611150 2300.809326171875 +114.091086475065 10732.537109375000 +118.085604757949 6375.129394531250 +122.095612538633 3453.346191406250 +122.963478886657 10149.138671875000 +123.091154033496 1907.152587890625 +123.962085557178 1291.000000000000 +124.964032856960 1524.723510742188 +124.981293760905 5573.300781250000 +132.044243365317 129513.453125000000 +133.047275934233 12024.171875000000 +136.021338396786 1596.000000000000 +136.111611313675 1179.000000000000 +141.090513006913 1389.292724609375 +141.112565247916 1247.203857421875 +141.957978845995 16325.500000000000 +147.090945866648 2556.685302734375 +149.023028218992 6399.154296875000 +150.054262184195 1568.000000000000 +151.096430884077 2664.400390625000 +151.111011940160 2835.027587890625 +155.069438117684 1871.944824218750 +155.105960083325 1401.000000000000 +155.973753152622 4288.000000000000 +158.153627071218 14384.000000000000 +159.156473714741 1627.752929687500 +160.050487288307 38915.000000000000 +161.053611692746 4466.942382812500 +161.095700587134 1743.057495117188 +164.142944501592 1256.052368164062 +167.015735366166 2785.089599609375 +170.096151543720 2652.023193359375 +170.116409887737 1324.376464843750 +170.968993556255 7076.000000000000 +171.137671144810 4912.312011718750 +172.136045264128 1371.000000000000 +173.079830429233 8581.928710937500 +174.991306236853 1198.000000000000 +177.054219725911 1769.000000000000 +178.157947155736 1498.908447265625 +179.106050750592 1934.090454101562 +182.960933723657 1780.061523437500 +182.991388549794 1244.309082031250 +186.221152079128 2287.000000000000 +194.116900036921 2752.000000000000 +195.121615177487 1919.471069335938 +198.184412559940 2140.000000000000 +200.200455656322 1296.554199218750 +209.153704347399 1590.000000000000 +212.888258624179 1535.000000000000 +217.106944592366 24346.000000000000 +218.110517718319 2646.000000000000 +219.095540028475 2644.006591796875 +228.196097140190 1527.811645507812 +236.167749124378 1677.000000000000 +239.089312381813 3327.000000000000 +242.284215148787 1201.000000000000 +246.862288406064 3365.000000000000 +249.184532839914 1860.293334960938 +251.001107206325 2362.000000000000 +252.997444701878 1876.000000000000 +253.916335213075 4093.000000000000 +260.980865788213 46877.000000000000 +261.983931158765 5301.000000000000 +262.976772362746 4418.000000000000 +267.172661485943 1410.000000000000 +277.199859444074 2417.590087890625 +279.093448238935 1888.450561523438 +281.051163936397 1557.000000000000 +292.121170689402 15731.000000000000 +293.123945781771 2615.000000000000 +294.118820607873 4859.000000000000 +295.121821476430 1186.000000000000 +318.013460543863 19020.000000000000 +319.016226586969 2819.000000000000 +320.010792812476 1745.000000000000 +324.021120495162 2522.000000000000 +327.007928037291 3314.077636718750 +329.005428091932 3187.000000000000 +331.002680981835 1140.229492187500 +335.040406311528 1228.000000000000 +339.995783079981 73785.000000000000 +340.998517552508 10283.000000000000 +341.992089047450 7216.000000000000 +351.928943475892 4368.000000000000 +353.926519256680 2362.000000000000 +355.969819970535 3512.076416015625 +363.071778928522 11698.970703125000 +364.073181575102 1981.000000000000 +371.315525399960 1354.000000000000 +379.934529706961 4095.883300781250 +381.932716463007 2062.000000000000 +445.119746997025 2474.000000000000 +446.119291863183 1145.000000000000 +505.853826516954 4858.000000000000 +506.855308046231 1451.000000000000 +519.139330404280 1166.703979492188 +522.880837958116 1970.000000000000 +523.871380297922 1372.000000000000 +529.891671811182 1342.000000000000 +536.165890644769 5714.000000000000 +537.166372879728 2646.000000000000 +538.163391669663 2155.000000000000 +544.339624971493 1155.000000000000 +546.914039373140 3234.000000000000 +547.912958504845 1306.000000000000 +610.184280095073 1860.000000000000 +611.183517202231 1239.000000000000 +657.000223829242 1834.000000000000 +696.940499292838 3022.000000000000 +698.938485246113 2250.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=659 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=9_0 +##scan 26 +##specref ms_run[1]:sample=1 period=1 cycle=659 experiment=9 +77.038879416695 240.000000000000 +104.047502330176 150.000000000000 +105.032936494768 150.000000000000 +105.045515734250 116.539550781250 +124.982386965946 30.000000000000 +130.038678184319 30.000000000000 +130.049262402724 30.000000000000 +132.044440689304 739.000000000000 +160.052657174434 75.000000000000 +182.992309980599 30.000000000000 +>compound 0_16459302675638519057-664006--60--UNKNOWN +>parentmass 372.064975852221 +>ionization [M+Na]1+ +>charge 1 +>rt 437.422999999980 +##fmz 372.064975852221096 +##fid 16459302675638519057 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +372.064975852221 23380.927388863765 +>ms1peaks +52.005453969998 2626.723144531250 +53.013597312446 12728.553710937500 +53.850414409821 1250.853881835938 +54.009329210909 348334.937500000000 +55.006062122532 5392.668457031250 +55.011342055713 6236.111816406250 +55.054021350211 1869.273437500000 +55.934286374440 6315.563964843750 +56.941831842622 2597.011962890625 +59.049520241177 68985.562500000000 +60.044238693811 9277.411132812500 +60.051306561624 7152.463378906250 +61.039638104919 1556.488891601562 +63.997844257749 4543.386718750000 +64.004868648059 4706.500976562500 +68.011536869512 28038.335937500000 +68.993647464953 12595.196289062500 +69.044515645070 12865.375976562500 +72.936647087938 2567.000000000000 +73.064121365067 1769.925781250000 +76.486182586418 2785.377929687500 +79.020888115541 15628.571289062500 +80.049060365715 12153.072265625000 +81.936978966817 8495.000000000000 +82.996309100211 9038.668945312500 +87.043494139885 1178.190917968750 +87.054319172330 1546.054443359375 +89.506956806916 1559.000000000000 +90.488703688296 1817.000000000000 +91.053777911785 1528.745483398438 +95.952341177386 2260.741210937500 +97.968210936145 7024.000000000000 +98.983399057372 5034.887695312500 +100.075304888654 1243.000000000000 +102.090957068479 1525.000000000000 +109.943109012828 1320.928710937500 +113.962992754591 2498.000000000000 +114.090728474154 10512.617187500000 +118.085470631803 6601.458007812500 +122.095607083049 3712.721679687500 +122.962888411087 10607.500976562500 +123.091509718457 1686.104614257812 +132.043186178558 2464.123291015625 +136.020620151667 1645.000000000000 +140.067164786600 1314.000000000000 +141.089863109573 1272.675292968750 +141.111890586678 1562.626220703125 +141.957557081223 15988.394531250000 +147.090173997086 2431.000000000000 +149.022336160605 4523.349121093750 +149.043636850784 1223.066040039062 +151.095789721496 2301.788818359375 +151.111113393103 2538.584228515625 +155.069111807472 1549.374267578125 +155.105759874764 1515.979370117188 +155.973112787773 4487.000000000000 +158.153378740203 12758.589843750000 +159.156448385204 1328.413452148438 +161.095542076597 1436.000000000000 +164.142018358830 1273.736083984375 +170.095175686942 2849.232421875000 +171.138207188731 2555.000000000000 +172.133475837479 1266.057739257812 +173.079557051502 6304.225097656250 +174.991247355031 15122.000000000000 +176.988586706089 4881.000000000000 +178.158242399689 1403.950073242188 +179.105412805866 3814.716552734375 +182.960601426951 1842.280639648438 +182.982966835265 1410.150146484375 +186.220883153188 1802.000000000000 +194.115976643286 3119.000000000000 +195.102214753451 1498.057617187500 +195.120897037407 1858.993774414062 +198.184171488074 2116.000000000000 +217.106332787106 21497.787109375000 +218.109128733639 2613.000000000000 +219.095226750847 2102.304443359375 +224.127626531368 1175.000000000000 +228.195317705032 1672.133422851562 +239.088374855672 3685.309814453125 +242.283185310790 1468.000000000000 +246.860952738993 3049.000000000000 +249.183720846634 1286.295654296875 +250.177140311956 1205.756591796875 +250.999832075601 32001.000000000000 +252.002106420824 2157.000000000000 +252.996924958467 20204.000000000000 +253.999797691244 1411.000000000000 +254.993496356863 3401.000000000000 +279.092906188567 2036.000000000000 +286.179288894577 8400.000000000000 +287.181689656808 1994.078002929688 +287.217541902151 1349.643310546875 +291.235948805059 1485.048828125000 +292.122314491142 439122.000000000000 +292.983059595137 1438.034667968750 +293.122671084767 47692.136718750000 +294.118451514065 133013.562500000000 +295.120454982262 22502.744140625000 +296.122607984390 2357.932373046875 +313.039105768504 33266.000000000000 +314.042149111497 5168.000000000000 +315.036268416268 21007.242187500000 +316.038403197349 3302.000000000000 +317.033014483539 3862.000000000000 +321.227057921370 1381.000000000000 +327.007877449001 47611.566406250000 +328.011115186819 4973.000000000000 +329.004794999861 46547.000000000000 +330.008005603352 4737.000000000000 +331.001868162022 15538.000000000000 +332.004876313775 1480.000000000000 +333.003299668985 2744.071777343750 +335.018886982057 3585.000000000000 +337.016084576435 2205.000000000000 +339.994390073568 1754.000000000000 +348.988792788967 6573.000000000000 +350.986916484867 6721.000000000000 +352.984603835989 2083.000000000000 +354.041095041215 1340.092163085938 +356.039619641072 1269.081298828125 +372.065048824891 6209.586914062500 +374.062468004687 6086.000000000000 +376.059148229590 1968.000000000000 +392.045330940334 2193.000000000000 +395.067648242738 2230.000000000000 +397.066134815272 1581.000000000000 +426.930515343123 1306.000000000000 +426.976513054277 1169.811889648438 +428.927149366436 1298.000000000000 +430.886640350010 1403.000000000000 +445.118913900930 2269.000000000000 +491.969645058197 1379.000000000000 +505.851389825487 3789.000000000000 +522.878326149515 1800.000000000000 +536.163456762234 4427.000000000000 +537.165324404735 2206.000000000000 +538.161529742511 1590.843383789062 +544.337468455008 1195.000000000000 +546.914116937371 2559.000000000000 +547.911876414748 1196.000000000000 +610.180850219782 2080.000000000000 +611.182328195703 1214.000000000000 +645.154717656738 8484.000000000000 +646.158700037782 2782.000000000000 +647.152980374288 9942.000000000000 +648.155555240546 3294.000000000000 +649.150621117204 4284.000000000000 +650.152709955400 1200.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=664 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=6_0 +##scan 60 +##specref ms_run[1]:sample=1 period=1 cycle=664 experiment=6 +80.972953153785 13.000000000000 +98.982914422980 431.000000000000 +129.050346989349 13.000000000000 +174.989442978594 105.000000000000 +>compound 0_12237362536485158566-690002--189--Fluopicolide +>parentmass 382.973869490197 +>ionization [M+H]1+ +>formula C14H8Cl3F3N2O +>charge 1 +>rt 461.815000000020 +##fmz 382.973869490196876 +##fid 12237362536485158566 +##des Fluopicolide +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +382.973869490197 1566560.194702931913 +383.974085388476 215156.515593794087 +384.971182227280 1515411.090952950995 +385.971445846469 217515.636160165188 +386.966617270822 496455.906171257608 +387.969500648600 70588.742014634801 +388.966369635235 66477.465492693751 +>ms1peaks +52.005210101745 2880.326171875000 +53.013244764978 14536.934570312500 +53.849926196038 1299.180541992188 +54.009062191468 337463.656250000000 +55.005782184426 6018.867675781250 +55.011130257419 6291.486816406250 +55.053977714849 2564.656250000000 +55.934045390685 5149.269042968750 +56.049252844183 1522.427001953125 +56.941603012839 2038.434204101562 +59.049303582077 66746.156250000000 +60.044155103878 10569.948242187500 +61.039339551811 1535.741943359375 +63.997382781260 3987.302490234375 +64.004764366709 4495.057128906250 +67.029012182241 1196.788085937500 +68.011241243102 27618.355468750000 +68.993215053966 11211.009765625000 +69.007933522035 1110.942382812500 +69.030952972722 1208.401123046875 +69.044122956537 14957.959960937500 +70.047392494398 1056.000000000000 +72.936253799388 1911.266845703125 +73.064074433437 1870.000000000000 +76.485837613149 2263.000000000000 +79.020585106505 16188.393554687500 +80.048658040907 12759.203125000000 +81.936455171914 7130.960449218750 +82.995989890540 8094.847167968750 +83.084419311590 1600.000000000000 +87.043278684781 1486.388549804688 +87.053817622777 1603.334838867188 +89.069749088361 1018.981018066406 +89.505979323008 1330.000000000000 +90.488509802564 1298.000000000000 +91.053061548451 1458.197998046875 +95.952010042584 2034.000000000000 +97.967845663329 6727.871582031250 +100.074557176530 1242.297607421875 +102.090456966796 1808.000000000000 +109.942605580563 1304.000000000000 +113.961995665745 1783.000000000000 +114.090136653414 11099.125976562500 +118.084578873938 6589.014160156250 +122.095225690220 3753.473632812500 +122.962554906366 9321.000000000000 +123.090771458381 1894.498779296875 +123.959613404275 1190.405883789062 +129.051729705624 1153.000000000000 +130.157564325932 1454.000000000000 +136.020001066212 1765.000000000000 +136.111173027530 1401.000000000000 +140.066639527938 1028.000000000000 +141.089745096835 1563.539672851562 +141.111484223018 1201.726074218750 +141.934455898498 1853.158203125000 +141.957169463850 15166.348632812500 +147.090458533503 2770.000000000000 +149.021900848308 4662.361816406250 +149.040700354547 2059.066162109375 +151.095497123421 2745.510253906250 +151.109864345448 3167.984130859375 +155.069134838044 1226.075561523438 +155.104965175783 5033.305175781250 +155.972604697841 3923.406005859375 +158.152845331544 12425.991210937500 +159.155757881201 1277.437866210938 +159.967768899180 1071.000000000000 +161.095020040845 1890.000000000000 +164.141534807567 1672.000000000000 +170.094937863069 2534.239013671875 +171.145574254043 1674.000000000000 +172.132621534302 1231.000000000000 +173.079595798653 7293.703125000000 +174.126503889229 1050.000000000000 +174.990271465623 1245.000000000000 +175.121004452465 1328.734497070312 +177.053009667276 1263.687377929688 +178.157674087207 1448.371459960938 +179.105287566263 2170.352783203125 +182.960459644363 2471.043212890625 +182.982288944426 1163.013549804688 +183.079109532841 6225.136718750000 +184.081105483367 1022.846374511719 +186.219653891550 1284.000000000000 +194.115456511691 3794.229980468750 +195.099541191905 1349.889038085938 +195.121523296283 2229.914550781250 +198.183976447015 2341.000000000000 +199.168630322872 1033.270751953125 +200.199814752449 1084.000000000000 +215.080651017155 1832.000000000000 +217.106027886947 23780.771484375000 +218.109364414939 2635.000000000000 +219.094316037445 1318.440917968750 +221.152166294283 1164.883911132812 +224.126348349948 1477.977416992188 +227.126868766390 14694.514648437500 +227.161495790859 1160.310546875000 +228.130201807144 2153.737548828125 +228.194384410156 1676.000000000000 +233.134961623018 1118.406982421875 +235.167077858732 1294.375976562500 +239.087617137075 5289.139648437500 +242.282321574347 2010.184570312500 +246.860834293952 3268.000000000000 +249.108707735736 7477.228027343750 +249.183052414364 1165.512939453125 +250.176352588420 1357.000000000000 +250.998215553850 2416.000000000000 +251.183857770360 1222.461791992188 +252.995780678787 1689.000000000000 +267.170841081571 1457.286621093750 +279.092420733858 2225.000000000000 +281.050010295874 1569.000000000000 +289.119147717746 1566.258178710938 +294.135329652932 4503.000000000000 +295.188814348578 2271.450439453125 +296.132567161201 1627.334594726562 +304.111668221270 3004.000000000000 +309.233650475700 1074.000000000000 +327.007272430691 3551.831542968750 +329.003127675682 3321.000000000000 +330.204917561574 2224.000000000000 +331.001391515662 1115.000000000000 +367.244150717722 1652.779052734375 +371.099010574269 1011.000000000000 +382.971173512741 7099.000000000000 +383.975115565599 1219.000000000000 +384.968741898502 6715.411132812500 +385.970680131379 1240.000000000000 +386.965633977078 2382.000000000000 +430.884821512900 1145.000000000000 +445.117845109390 2209.000000000000 +500.274546729878 1889.000000000000 +502.290379415694 1910.427490234375 +505.850981337320 1612.000000000000 +519.134856069604 1068.000000000000 +520.338024852892 1339.000000000000 +524.367950184351 1991.705444335938 +536.162415980276 5397.000000000000 +537.164195256501 2408.000000000000 +538.161390635714 2020.000000000000 +542.322588022880 3070.203369140625 +543.324833448983 1285.000000000000 +544.336359438462 3205.019042968750 +546.911641444659 1057.000000000000 +610.180489575856 2193.000000000000 +611.181108891135 1384.000000000000 +684.198238488602 1003.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=690 experiment=2 +##m_id Fluopicolide_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=690 experiment=2_0 +##scan 189 +##specref ms_run[1]:sample=1 period=1 cycle=690 experiment=2 +74.014827458225 8.000000000000 +108.983366207722 26.000000000000 +109.989618691772 4.000000000000 +123.979816140963 2.000000000000 +132.018313553585 6.000000000000 +144.519211201056 4.000000000000 +144.529614141667 4.000000000000 +144.959898296654 481.000000000000 +146.983453232469 2.000000000000 +153.877690540072 2.000000000000 +158.021510503175 10.000000000000 +159.026979232729 6.000000000000 +172.435617385246 34.000000000000 +172.483826110428 3.604490280151 +172.502325907959 3.796431541443 +172.955133300395 5827.000000000000 +173.017652697274 4.000000000000 +173.102323528288 8.000000000000 +173.119342430749 7.952377319336 +173.169183183190 4.000000000000 +173.183867564746 4.000000000000 +173.958949059484 6.000000000000 +173.992189755989 19.000000000000 +174.292784929592 4.000000000000 +174.303838341920 4.000000000000 +174.498056923622 4.000000000000 +174.507993062891 4.000000000000 +174.601446376462 4.000000000000 +174.618843037831 4.000000000000 +174.847046208074 2.000000000000 +175.359849884359 2.000000000000 +175.469734656576 4.000000000000 +175.486021571205 6.000000000000 +175.497515908935 4.000000000000 +189.699838262997 2.000000000000 +193.998191877080 288.000000000000 +212.011275243780 14.000000000000 +212.886974994315 2.000000000000 +234.188215950907 2.000000000000 +235.803102855284 2.000000000000 +237.057303951399 2.000000000000 +282.803853588561 8.000000000000 +282.826910729405 8.000000000000 +327.069830102971 2.000000000000 +334.802573876047 2.000000000000 +364.963080105351 179.000000000000 +371.709130079698 2.000000000000 +376.326026715934 2.000000000000 +382.972744466787 67.000000000000 +383.976807274218 4.000000000000 +>ms1peaks +52.005460768039 2632.474609375000 +52.018216605071 1453.331787109375 +53.013504878262 13629.050781250000 +53.849980694050 1426.347900390625 +54.009228946889 336414.500000000000 +55.006192155745 5923.077148437500 +55.011510780469 6201.034179687500 +55.054252354012 2748.183837890625 +55.934342759512 5029.362792968750 +56.049718574756 3820.462890625000 +56.941798954376 2040.369384765625 +59.049450389379 63100.214843750000 +60.044446622738 10277.622070312500 +61.039574586144 1639.209472656250 +63.997833501230 3457.696044921875 +64.005356757182 3922.083740234375 +67.028813659264 2927.124267578125 +68.011568906879 27184.011718750000 +68.993799166752 11291.774414062500 +69.008782671073 1110.820922851562 +69.044422525384 14576.621093750000 +72.044090470135 1069.000000000000 +72.936647746103 1867.645996093750 +73.064241969654 1890.270141601562 +76.486566607142 2154.000000000000 +79.021060621858 16402.000000000000 +80.048912504147 11908.904296875000 +81.936948519663 7659.439453125000 +82.996456601784 7432.041015625000 +83.084846425827 2619.000000000000 +87.044234628717 1642.456787109375 +87.054412582263 1764.396362304688 +89.070136748709 1188.329101562500 +89.506769824945 1309.000000000000 +90.489346677114 1261.775878906250 +91.053422064295 1599.987548828125 +95.952556829344 1954.000000000000 +97.967937653882 6272.680175781250 +100.074820050407 1313.661132812500 +102.090442487468 2018.000000000000 +109.942993258045 1292.210815429688 +113.962358113491 1857.055419921875 +114.090543897348 10782.883789062500 +118.085193271831 6439.585937500000 +122.095576433333 3719.300781250000 +122.963045289522 8831.000000000000 +123.090127906704 2032.145874023438 +123.961671902554 1039.000000000000 +130.158410860949 1108.000000000000 +136.020580299746 1385.000000000000 +136.110973601797 1208.185180664062 +137.963495288748 1038.000000000000 +138.970185164931 1044.000000000000 +141.090483230390 1714.842407226562 +141.112072140860 1217.862182617188 +141.957625571099 14848.524414062500 +142.959933648058 1183.193115234375 +147.090750731097 2692.000000000000 +149.022586318358 4677.753906250000 +151.095818189897 2463.614501953125 +151.109403980113 2852.661376953125 +155.069856888985 1644.906494140625 +155.105634666236 8124.955078125000 +155.973077442175 3878.003173828125 +158.095390272769 1041.850830078125 +158.153110530602 11433.902343750000 +159.156138029756 1255.307250976562 +159.968790133864 1084.000000000000 +161.096047015176 1855.838989257812 +163.131292514217 1081.046264648438 +164.142338808225 1538.000000000000 +170.095249905282 2481.923583984375 +170.114818729424 1586.174682617188 +171.144577817449 1465.000000000000 +172.133060054694 1132.135253906250 +173.080138735239 6781.958007812500 +174.126750381227 1146.000000000000 +174.990894555098 1459.000000000000 +175.124197631539 1158.163574218750 +177.054313185370 1050.000000000000 +178.158439439061 1351.589477539062 +179.106069845588 2217.652832031250 +182.960683036176 2721.000000000000 +183.079572975077 3558.392822265625 +186.220577305634 1472.000000000000 +194.115833443496 3200.611816406250 +195.099867813526 1492.162719726562 +195.121670053083 2089.949218750000 +198.184355819996 2036.034667968750 +199.185771412889 1053.000000000000 +200.199994101328 1045.000000000000 +217.106066147047 23700.000000000000 +218.109880969704 2669.000000000000 +219.095458161270 1180.932006835938 +224.126383591275 1239.964111328125 +227.127075688130 24915.439453125000 +228.130566679052 3475.000000000000 +228.195672567193 1184.000000000000 +233.135519600916 1606.236083984375 +235.167213939552 1131.541503906250 +239.088391913188 5292.000000000000 +242.283165125348 1763.000000000000 +246.861456391400 2687.000000000000 +249.108966407852 11636.693359375000 +250.113738299007 1549.000000000000 +250.178629966588 1340.000000000000 +250.999377894033 2470.000000000000 +252.996369939032 1431.000000000000 +267.169859968301 1516.000000000000 +279.093360326372 2198.000000000000 +281.049935707172 1718.359741210938 +289.120421172109 1505.223999023438 +294.135805745070 1954.000000000000 +295.190643010298 1597.599243164062 +304.112579156761 2114.000000000000 +327.007179750003 3429.369384765625 +327.051990179871 1964.440551757812 +329.004854748166 3098.000000000000 +330.205970450676 2139.970947265625 +331.001810666775 1124.000000000000 +367.245375431034 1096.678710937500 +371.099956255100 1145.000000000000 +371.315850471733 1077.000000000000 +382.972477955693 57862.191406250000 +383.973581113624 9390.000000000000 +384.969379705317 56829.000000000000 +385.971610318225 8858.000000000000 +386.966433781431 18577.000000000000 +387.968684254304 3112.000000000000 +388.968200016670 2893.000000000000 +404.953693248965 4478.000000000000 +406.950549247024 5007.000000000000 +408.948134552343 1602.000000000000 +430.886087934454 1034.000000000000 +445.119126674486 2384.000000000000 +446.119450710310 1082.000000000000 +500.276347970652 1519.000000000000 +502.291527770051 2163.919189453125 +505.851373232660 1515.000000000000 +520.336525060874 1398.000000000000 +524.368789804896 2012.000000000000 +526.290251526751 1047.306762695312 +536.163216797749 5403.000000000000 +537.165736905426 2653.000000000000 +538.162249785514 1911.000000000000 +542.322969125465 2655.288330078125 +544.337954764480 2683.000000000000 +546.913572609430 1216.000000000000 +610.182763261579 2011.580444335938 +611.182765882529 1285.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=691 experiment=5 +##m_id Fluopicolide_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=691 experiment=5_0 +##scan 194 +##specref ms_run[1]:sample=1 period=1 cycle=691 experiment=5 +94.434175767174 13.000000000000 +100.470091159134 13.000000000000 +108.984100401010 150.000000000000 +144.959636504415 2258.000000000000 +158.020256143752 30.000000000000 +158.027675425270 30.000000000000 +172.435894581249 75.000000000000 +172.469065092596 30.000000000000 +172.719677895769 30.000000000000 +172.955388574782 28821.000000000000 +173.655714669105 13.000000000000 +173.745544595693 15.000000000000 +173.779716942753 30.000000000000 +173.952141059980 45.000000000000 +173.968506193653 60.000000000000 +173.991228893118 75.000000000000 +174.021679641905 30.000000000000 +174.065013627237 30.000000000000 +174.082566814628 30.000000000000 +175.410680683511 30.000000000000 +175.428157974081 30.000000000000 +181.987621311304 13.000000000000 +193.997014592663 1490.000000000000 +261.818816423649 13.000000000000 +364.963188973205 1040.000000000000 +382.971132691434 382.000000000000 diff --git a/src/tests/topp/SiriusExport_2_output_compoundinfo.tsv b/src/tests/topp/SiriusExport_2_output_compoundinfo.tsv new file mode 100644 index 00000000000..cb5fe21fd65 --- /dev/null +++ b/src/tests/topp/SiriusExport_2_output_compoundinfo.tsv @@ -0,0 +1,13 @@ +cmp file_index pmass pint_mono rt fmz fid formula charge ionization des specref_format source_file source_format native_ids_id m_ids_id +0_10333458062711546021-664003--57--UNKNOWN 0 286.179 67049.2 438.351 286.179 10333458062711546021 1 UNKNOWN [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=664 experiment=3|sample=1 period=1 cycle=665 experiment=5|sample=1 period=1 cycle=666 experiment=3 UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=3_0|UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=665 experiment=5_0|UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=666 experiment=3_0 +0_5053681185761206615-676004--121--Myclobutanil 0 289.123 1.35681e+06 448.028 289.123 5053681185761206615 C15H17ClN4 1 [M+H]1+ Myclobutanil [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=676 experiment=4|sample=1 period=1 cycle=677 experiment=5|sample=1 period=1 cycle=678 experiment=3 Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=4_0|Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=677 experiment=5_0|Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=678 experiment=3_0 +0_5868141785564858207-659006--23--Cyproconazole 0 292.121 1.77258e+06 436.497 292.121 5868141785564858207 C15H18ClN3O 1 [M+H]1+ Cyproconazole [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=659 experiment=6|sample=1 period=1 cycle=660 experiment=5|sample=1 period=1 cycle=661 experiment=4 Cyproconazole_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=6_0|Cyproconazole_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=660 experiment=5_0|Cyproconazole_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=661 experiment=4_0 +0_18386993698014176665-675005--113--UNKNOWN 0 304.119 3.56918e+06 446.172 304.119 18386993698014176665 1 [M+H]1+ UNKNOWN [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=675 experiment=5 UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=675 experiment=5_0 +0_11941333258820146302-663003--50--UNKNOWN 0 313.039 90349.7 436.497 313.039 11941333258820146302 1 [M+H]1+ UNKNOWN [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=663 experiment=3|sample=1 period=1 cycle=664 experiment=4|sample=1 period=1 cycle=665 experiment=6 UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=663 experiment=3_0|UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=4_0|UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=665 experiment=6_0 +0_5585685219772452827-657005--4--Guthion 0 318.013 47593.1 431.866 318.013 5585685219772452827 C10H12N3O3PS2 1 [M+H]1+ Guthion [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=657 experiment=5|sample=1 period=1 cycle=658 experiment=6|sample=1 period=1 cycle=659 experiment=7 Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=657 experiment=5_0|Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=658 experiment=6_0|Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=7_0 +0_7960809195137357048-676005--122--Fenamiphos 0 326.094 187407 447.1 326.094 7960809195137357048 C13H22NO3PS 1 [M+Na]1+ Fenamiphos [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=676 experiment=5 Fenamiphos_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=5_0 +0_1072340199693961134-657006--5--Guthion 0 339.995 202334 431.866 339.995 1072340199693961134 C10H12N3O3PS2 1 [M+Na]1+ Guthion [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=657 experiment=6|sample=1 period=1 cycle=658 experiment=7|sample=1 period=1 cycle=659 experiment=8 Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=657 experiment=6_0|Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=658 experiment=7_0|Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=8_0 +0_15110953643123771443-674006--105--UNKNOWN 0 349.17 78624.1 447.1 349.17 15110953643123771443 1 [M+Na]1+ UNKNOWN [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=674 experiment=6|sample=1 period=1 cycle=675 experiment=6|sample=1 period=1 cycle=676 experiment=6 UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=674 experiment=6_0|UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=675 experiment=6_0|UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=6_0 +0_3034601138604610277-657008--7--UNKNOWN 0 363.071 38114.6 431.866 363.071 3034601138604610277 1 [M+Na]1+ UNKNOWN [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=657 experiment=8|sample=1 period=1 cycle=658 experiment=9|sample=1 period=1 cycle=659 experiment=9 UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=657 experiment=8_0|UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=658 experiment=9_0|UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=9_0 +0_16459302675638519057-664006--60--UNKNOWN 0 372.065 23380.9 437.423 372.065 16459302675638519057 1 [M+Na]1+ UNKNOWN [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=664 experiment=6 UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=6_0 +0_12237362536485158566-690002--189--Fluopicolide 0 382.974 1.56656e+06 461.815 382.974 12237362536485158566 C14H8Cl3F3N2O 1 [M+H]1+ Fluopicolide [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=690 experiment=2|sample=1 period=1 cycle=691 experiment=5 Fluopicolide_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=690 experiment=2_0|Fluopicolide_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=691 experiment=5_0 diff --git a/src/tests/topp/SiriusExport_3_output.ms b/src/tests/topp/SiriusExport_3_output.ms new file mode 100644 index 00000000000..c6963013f33 --- /dev/null +++ b/src/tests/topp/SiriusExport_3_output.ms @@ -0,0 +1,38149 @@ +>compound 0_13442776035824190606-2167005--6--UNKNOWN +>parentmass 292.121752827683 +>charge 1 +>rt 410.145000000000 +##fmz 292.121752827682997 +##fid 13442776035824190606 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://.PestMix1pos.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +292.121752827683 5446638.265330639668 +293.124863183735 668010.447580512962 +294.119155604245 1663109.077192980098 +295.121610199554 257162.167168799991 +296.123527063003 27792.421876255601 +>ms1peaks +292.121302384156 9184.000000000000 +293.125436491662 1483.000000000000 +294.118709098161 3537.000000000000 +295.120851794460 581.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=2167 experiment=5 +##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2167 experiment=5_0 +##scan 6 +##specref ms_run[1]:sample=1 period=1 cycle=2167 experiment=5 +292.120347921437 2157.000000000000 +292.230622503656 42.000000000000 +>ms1peaks +291.227611742001 5933.231933593750 +292.121970956018 952091.000000000000 +292.600784083412 1813.373779296875 +292.625391617310 1942.974365234375 +292.870614918734 3206.520751953125 +292.914698248922 4069.153320312500 +292.955993808867 5482.062988281250 +292.984468322198 5034.270019531250 +293.062510122155 1878.177612304688 +293.124856605889 76833.851562500000 +293.771688569890 454.000000000000 +293.794423476364 480.945709228516 +293.873798821536 601.242553710938 +293.919183187270 791.000000000000 +293.943529342654 889.199768066406 +294.118995108565 283102.250000000000 +294.690059061292 457.266967773438 +294.731076708942 503.000000000000 +294.765963646879 489.742889404297 +294.828056898526 550.124084472656 +294.890338745415 1116.290039062500 +294.948156474825 1388.386596679688 +294.996547979613 619.612548828125 +295.048777885623 630.000000000000 +295.121689096228 47065.230468750000 +295.400753145264 535.468078613281 +295.413812857998 453.452697753906 +295.512627053283 516.000000000000 +295.736814845120 517.600585937500 +295.856878594116 760.000000000000 +295.890459222359 744.369750976562 +295.916184144875 494.160980224609 +296.080119484585 1101.742187500000 +296.124715732580 4807.255859375000 +296.194281256997 519.150390625000 +296.485887543491 464.244689941406 +296.525951846672 471.541839599609 +296.814412450300 484.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=2175 experiment=4 +##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2175 experiment=4_0 +##scan 18 +##specref ms_run[1]:sample=1 period=1 cycle=2175 experiment=4 +291.217137556058 714.000000000000 +292.122914779150 111767.000000000000 +292.503362735226 210.000000000000 +292.526015236751 210.000000000000 +292.840345918310 294.000000000000 +>ms1peaks +291.224220910568 6368.000000000000 +292.121614764237 974277.000000000000 +292.602400083430 437.000000000000 +292.912719798382 3885.043945312500 +292.949338916803 3612.433349609375 +293.070104763343 497.662689208984 +293.124628909948 144040.453125000000 +293.480552737776 401.000000000000 +293.763605658242 464.869323730469 +293.900755572146 576.034179687500 +293.966231212632 547.000000000000 +294.118681702582 292803.687500000000 +294.379028560083 366.788238525391 +294.411592992305 401.000000000000 +294.544830471138 583.000000000000 +294.574398137986 656.000000000000 +294.670860333942 365.000000000000 +294.703086460653 438.030883789062 +294.778096480686 474.000000000000 +294.855431056283 474.000000000000 +294.872408508893 631.344055175781 +294.896551414956 474.000000000000 +294.960624260299 1232.000000000000 +295.012479277491 692.547851562500 +295.050922931604 662.725646972656 +295.121647146276 46884.218750000000 +295.213960103382 437.000000000000 +295.365395566686 437.000000000000 +295.398882680144 601.965942382812 +295.429816514318 488.949554443359 +295.667908865267 510.000000000000 +295.684356508942 510.000000000000 +295.782122487246 474.000000000000 +295.807928951542 656.000000000000 +295.834023656244 729.000000000000 +295.862201836370 474.000000000000 +296.123058772697 5103.291992187500 +296.181316029469 435.000000000000 +296.304990800985 437.000000000000 +296.473086062009 365.000000000000 +296.674889401153 510.000000000000 +296.691543393358 583.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=2176 experiment=6 +##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2176 experiment=6_0 +##scan 20 +##specref ms_run[1]:sample=1 period=1 cycle=2176 experiment=6 +291.222353601227 923.000000000000 +292.122612317949 140626.000000000000 +292.634025560336 210.000000000000 +292.801725449778 210.000000000000 +292.821322616467 252.000000000000 +292.880413812731 294.000000000000 +292.909621144378 336.000000000000 +292.953203258155 546.000000000000 +292.977891955669 420.000000000000 +293.196421777814 210.000000000000 +>compound 0_0-2165004--2--UNKNOWN +>parentmass 292.118520142944 +>charge 1 +>rt 404.455000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://.PestMix1pos.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +292.118520142944 1915.000000000000 +>ms1peaks +292.118520142944 1915.000000000000 +294.117460558153 780.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=2165 experiment=4 +##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2165 experiment=4_0 +##scan 2 +##specref ms_run[1]:sample=1 period=1 cycle=2165 experiment=4 +292.121314370419 294.000000000000 +>compound 0_0-2166006--4--UNKNOWN +>parentmass 292.121468920531 +>charge 1 +>rt 404.875000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://.PestMix1pos.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +292.121468920531 5829.000000000000 +>ms1peaks +292.121468920531 5829.000000000000 +293.123073196945 1108.000000000000 +294.116966544654 1439.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=2166 experiment=6 +##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2166 experiment=6_0 +##scan 4 +##specref ms_run[1]:sample=1 period=1 cycle=2166 experiment=6 +292.121333456885 798.000000000000 +>compound 0_0-2171003--11--UNKNOWN +>parentmass 296.123099065922 +>charge 1 +>rt 406.816999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://.PestMix1pos.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +296.123099065922 1194.000000000000 +>ms1peaks +291.224349165591 1045.000000000000 +292.122036064513 179902.000000000000 +293.125028313222 29293.646484375000 +294.118845532743 53763.000000000000 +295.120631519007 8426.000000000000 +296.123099065922 1194.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=2171 experiment=3 +##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2171 experiment=3_0 +##scan 11 +##specref ms_run[1]:sample=1 period=1 cycle=2171 experiment=3 +296.123852278497 84.000000000000 +296.170279302095 28.000000000000 +>compound 0_0-2172004--13--UNKNOWN +>parentmass 296.123821549630 +>charge 1 +>rt 407.245000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://.PestMix1pos.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +296.123821549630 1828.000000000000 +>ms1peaks +291.228305245532 2281.000000000000 +292.121628844349 353290.562500000000 +292.873209260830 762.116149902344 +292.948657738737 1700.587890625000 +293.124827763224 54737.000000000000 +294.119184999894 112358.921875000000 +295.121889009140 17240.000000000000 +296.123821549630 1828.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=2172 experiment=4 +##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2172 experiment=4_0 +##scan 13 +##specref ms_run[1]:sample=1 period=1 cycle=2172 experiment=4 +296.124718247637 252.000000000000 +296.181428565605 42.000000000000 +296.200211990605 42.000000000000 +>compound 0_0-2173002--15--UNKNOWN +>parentmass 296.125008105473 +>charge 1 +>rt 407.655000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://.PestMix1pos.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +296.125008105473 3131.000000000000 +>ms1peaks +291.225311742873 3531.410888671875 +292.121594874632 603490.000000000000 +292.844494240889 895.966491699219 +292.924862933623 3391.752441406250 +292.945749680321 3333.063964843750 +293.061298520115 726.139831542969 +293.075063609419 1551.603393554688 +293.125218605791 78178.000000000000 +294.119362908748 183181.000000000000 +294.941798145972 607.000000000000 +295.122330502481 30299.996093750000 +296.125008105473 3131.000000000000 +296.176985366327 631.191101074219 +>ms2peaks +##n_id sample=1 period=1 cycle=2173 experiment=2 +##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2173 experiment=2_0 +##scan 15 +##specref ms_run[1]:sample=1 period=1 cycle=2173 experiment=2 +296.125886082126 602.945556640625 +296.147120140233 714.000000000000 +>compound 0_0-2199003--43--UNKNOWN +>parentmass 295.187072485748 +>charge 1 +>rt 418.393999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://.PestMix1pos.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +295.187072485748 607.000000000000 +>ms1peaks +289.119188720099 383.000000000000 +289.156570999736 314.757629394531 +292.121664618143 12909.000000000000 +293.123482534562 1968.000000000000 +294.118968071226 3679.000000000000 +295.119930960168 607.000000000000 +295.187072485748 607.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=2199 experiment=3 +##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2199 experiment=3_0 +##scan 43 +##specref ms_run[1]:sample=1 period=1 cycle=2199 experiment=3 +295.083913845584 42.000000000000 +295.119725048092 42.000000000000 +>compound 0_0-2204006--49--UNKNOWN +>parentmass 290.124002639251 +>charge 1 +>rt 420.444000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://.PestMix1pos.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +290.124002639251 1184.000000000000 +>ms1peaks +289.076977752583 1046.175170898438 +289.120808284958 7624.000000000000 +290.124002639251 1184.000000000000 +291.117882393609 2625.000000000000 +292.121445363191 5817.000000000000 +293.122623314819 1290.000000000000 +293.164141016630 357.384429931641 +294.118060477730 1716.000000000000 +294.163352795438 350.539123535156 +295.026278830448 1267.607299804688 +295.185958723798 337.209289550781 +>ms2peaks +##n_id sample=1 period=1 cycle=2204 experiment=6 +##m_id UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2204 experiment=6_0 +##scan 49 +##specref ms_run[1]:sample=1 period=1 cycle=2204 experiment=6 +290.106948471714 84.000000000000 +290.125346661415 84.000000000000 +>compound 1_10333458062711546021-664003--57--UNKNOWN +>parentmass 286.179028092823 +>charge 1 +>rt 438.351000000000 +##fmz 286.179028092822705 +##fid 10333458062711546021 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +286.179028092823 67049.219010244240 +>ms1peaks +52.005453969998 2626.723144531250 +53.013597312446 12728.553710937500 +53.850414409821 1250.853881835938 +54.009329210909 348334.937500000000 +55.006062122532 5392.668457031250 +55.011342055713 6236.111816406250 +55.054021350211 1869.273437500000 +55.934286374440 6315.563964843750 +56.941831842622 2597.011962890625 +59.049520241177 68985.562500000000 +60.044238693811 9277.411132812500 +60.051306561624 7152.463378906250 +61.039638104919 1556.488891601562 +63.997844257749 4543.386718750000 +64.004868648059 4706.500976562500 +68.011536869512 28038.335937500000 +68.993647464953 12595.196289062500 +69.044515645070 12865.375976562500 +72.936647087938 2567.000000000000 +73.064121365067 1769.925781250000 +76.486182586418 2785.377929687500 +79.020888115541 15628.571289062500 +80.049060365715 12153.072265625000 +81.936978966817 8495.000000000000 +82.996309100211 9038.668945312500 +87.043494139885 1178.190917968750 +87.054319172330 1546.054443359375 +89.506956806916 1559.000000000000 +90.488703688296 1817.000000000000 +91.053777911785 1528.745483398438 +95.952341177386 2260.741210937500 +97.968210936145 7024.000000000000 +98.983399057372 5034.887695312500 +100.075304888654 1243.000000000000 +102.090957068479 1525.000000000000 +109.943109012828 1320.928710937500 +113.962992754591 2498.000000000000 +114.090728474154 10512.617187500000 +118.085470631803 6601.458007812500 +122.095607083049 3712.721679687500 +122.962888411087 10607.500976562500 +123.091509718457 1686.104614257812 +132.043186178558 2464.123291015625 +136.020620151667 1645.000000000000 +140.067164786600 1314.000000000000 +141.089863109573 1272.675292968750 +141.111890586678 1562.626220703125 +141.957557081223 15988.394531250000 +147.090173997086 2431.000000000000 +149.022336160605 4523.349121093750 +149.043636850784 1223.066040039062 +151.095789721496 2301.788818359375 +151.111113393103 2538.584228515625 +155.069111807472 1549.374267578125 +155.105759874764 1515.979370117188 +155.973112787773 4487.000000000000 +158.153378740203 12758.589843750000 +159.156448385204 1328.413452148438 +161.095542076597 1436.000000000000 +164.142018358830 1273.736083984375 +170.095175686942 2849.232421875000 +171.138207188731 2555.000000000000 +172.133475837479 1266.057739257812 +173.079557051502 6304.225097656250 +174.991247355031 15122.000000000000 +176.988586706089 4881.000000000000 +178.158242399689 1403.950073242188 +179.105412805866 3814.716552734375 +182.960601426951 1842.280639648438 +182.982966835265 1410.150146484375 +186.220883153188 1802.000000000000 +194.115976643286 3119.000000000000 +195.102214753451 1498.057617187500 +195.120897037407 1858.993774414062 +198.184171488074 2116.000000000000 +217.106332787106 21497.787109375000 +218.109128733639 2613.000000000000 +219.095226750847 2102.304443359375 +224.127626531368 1175.000000000000 +228.195317705032 1672.133422851562 +239.088374855672 3685.309814453125 +242.283185310790 1468.000000000000 +246.860952738993 3049.000000000000 +249.183720846634 1286.295654296875 +250.177140311956 1205.756591796875 +250.999832075601 32001.000000000000 +252.002106420824 2157.000000000000 +252.996924958467 20204.000000000000 +253.999797691244 1411.000000000000 +254.993496356863 3401.000000000000 +279.092906188567 2036.000000000000 +286.179288894577 8400.000000000000 +287.181689656808 1994.078002929688 +287.217541902151 1349.643310546875 +291.235948805059 1485.048828125000 +292.122314491142 439122.000000000000 +292.983059595137 1438.034667968750 +293.122671084767 47692.136718750000 +294.118451514065 133013.562500000000 +295.120454982262 22502.744140625000 +296.122607984390 2357.932373046875 +313.039105768504 33266.000000000000 +314.042149111497 5168.000000000000 +315.036268416268 21007.242187500000 +316.038403197349 3302.000000000000 +317.033014483539 3862.000000000000 +321.227057921370 1381.000000000000 +327.007877449001 47611.566406250000 +328.011115186819 4973.000000000000 +329.004794999861 46547.000000000000 +330.008005603352 4737.000000000000 +331.001868162022 15538.000000000000 +332.004876313775 1480.000000000000 +333.003299668985 2744.071777343750 +335.018886982057 3585.000000000000 +337.016084576435 2205.000000000000 +339.994390073568 1754.000000000000 +348.988792788967 6573.000000000000 +350.986916484867 6721.000000000000 +352.984603835989 2083.000000000000 +354.041095041215 1340.092163085938 +356.039619641072 1269.081298828125 +372.065048824891 6209.586914062500 +374.062468004687 6086.000000000000 +376.059148229590 1968.000000000000 +392.045330940334 2193.000000000000 +395.067648242738 2230.000000000000 +397.066134815272 1581.000000000000 +426.930515343123 1306.000000000000 +426.976513054277 1169.811889648438 +428.927149366436 1298.000000000000 +430.886640350010 1403.000000000000 +445.118913900930 2269.000000000000 +491.969645058197 1379.000000000000 +505.851389825487 3789.000000000000 +522.878326149515 1800.000000000000 +536.163456762234 4427.000000000000 +537.165324404735 2206.000000000000 +538.161529742511 1590.843383789062 +544.337468455008 1195.000000000000 +546.914116937371 2559.000000000000 +547.911876414748 1196.000000000000 +610.180850219782 2080.000000000000 +611.182328195703 1214.000000000000 +645.154717656738 8484.000000000000 +646.158700037782 2782.000000000000 +647.152980374288 9942.000000000000 +648.155555240546 3294.000000000000 +649.150621117204 4284.000000000000 +650.152709955400 1200.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=664 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=3_0 +##scan 57 +##specref ms_run[1]:sample=1 period=1 cycle=664 experiment=3 +51.938122634847 13.000000000000 +56.049507786248 45.000000000000 +98.060380513671 369.000000000000 +123.048287156790 30.000000000000 +126.875862655178 13.000000000000 +138.097784854251 60.000000000000 +140.072452948764 270.000000000000 +170.852966884469 45.000000000000 +170.866613065551 45.000000000000 +184.123371965665 13.000000000000 +269.157141111623 30.000000000000 +269.174210692919 30.000000000000 +286.179738267349 60.000000000000 +>ms1peaks +52.005349834334 2531.576904296875 +52.017818445883 1415.950317382812 +53.013312992683 14436.391601562500 +53.850256514170 1311.865234375000 +54.009237809188 346906.656250000000 +55.005700977113 5493.924316406250 +55.011578128004 6377.684570312500 +55.053978874167 1984.071533203125 +55.933999133980 6168.766601562500 +56.049511919157 2977.762207031250 +56.942056567735 2284.776855468750 +59.049350876787 53629.328125000000 +60.044322757483 8600.164062500000 +61.039156449004 1644.316650390625 +63.997508188870 3394.982910156250 +64.005057234464 4259.679687500000 +67.029035810216 2293.846923828125 +68.011280581573 27100.835937500000 +68.993371510951 13738.876953125000 +69.007497995886 1441.296142578125 +69.044403084909 13070.419921875000 +72.936195718172 2643.000000000000 +73.063931102643 1919.621459960938 +76.486167754556 1986.000000000000 +79.020619039319 14111.753906250000 +80.048823728166 11369.215820312500 +81.936905757296 8703.630859375000 +82.996214707689 8986.651367187500 +87.054271044459 1595.093627929688 +89.505822079267 1760.000000000000 +90.488874903389 1822.018798828125 +91.053163445835 1300.610839843750 +95.952331345900 2696.000000000000 +97.967781752031 7299.724609375000 +98.982987677469 4854.522460937500 +102.090290867080 1906.000000000000 +109.942394870381 1583.000000000000 +113.962086127466 2074.000000000000 +114.090395399108 10058.849609375000 +118.084999014032 6547.758789062500 +122.095088721755 3711.124511718750 +122.962603857586 10794.167968750000 +123.090649527845 1803.942016601562 +123.961855384374 1203.000000000000 +130.157739418261 1256.000000000000 +136.020039379796 2083.000000000000 +136.110849290905 1530.000000000000 +141.089744053815 1237.175415039062 +141.111592847426 1371.696777343750 +141.957218960001 15367.227539062500 +147.090011968413 2463.000000000000 +149.021828990169 4784.995605468750 +149.041466762922 2472.640625000000 +151.095944798794 2940.508300781250 +151.109341918543 3165.085693359375 +155.069344508958 1582.135864257812 +155.105135879836 1693.281616210938 +155.972287468254 4554.340332031250 +158.152759351824 13585.107421875000 +159.156196357366 1465.921386718750 +159.967851357038 1225.276977539062 +161.095405694183 1641.000000000000 +164.141615127090 1478.434814453125 +170.094609622000 2457.688476562500 +171.141467030026 1915.000000000000 +173.079379445344 6273.838867187500 +174.990844938283 15688.865234375000 +176.987639364551 5360.525878906250 +177.052467267277 1475.000000000000 +178.157540067017 1547.000000000000 +179.105091602082 3287.998779296875 +182.959873591311 1986.817871093750 +186.220399692631 1658.000000000000 +194.115345005627 3116.000000000000 +195.120929712058 1968.662841796875 +198.184276303297 2015.000000000000 +217.105977610050 20924.755859375000 +218.108820705353 2495.792236328125 +219.094022022929 1823.679443359375 +228.194066029155 1666.038696289062 +239.087872978056 3722.000000000000 +242.282423819470 1362.000000000000 +246.860857987495 3450.000000000000 +249.182928857496 1266.000000000000 +250.177066939258 1504.335083007812 +250.999117678898 32221.000000000000 +252.001781095835 2314.000000000000 +252.995932699016 21462.000000000000 +253.998953923887 1371.000000000000 +254.993033756740 3403.000000000000 +267.170032496706 1345.000000000000 +279.092268016151 1928.000000000000 +281.050459546987 1487.000000000000 +286.178655880094 23309.207031250000 +287.182133845414 5196.471191406250 +291.235317712341 1559.882568359375 +292.121093988068 399090.000000000000 +292.982663908460 1255.682128906250 +293.023857907805 1542.287597656250 +293.121921829592 49425.335937500000 +294.117639052994 123150.929687500000 +295.119583284786 21162.347656250000 +296.122453171108 2024.725219726562 +304.297977116061 1205.098876953125 +311.183844763032 2282.703613281250 +313.038450493324 32210.287109375000 +314.041319280533 5035.671875000000 +315.035461346507 21071.000000000000 +316.038196392607 3544.000000000000 +317.032926032719 3656.000000000000 +327.007662782866 46713.000000000000 +328.009753952920 4731.131347656250 +329.004141727930 46254.000000000000 +330.006788270317 4440.000000000000 +331.000792355787 15238.000000000000 +332.003743171067 1635.000000000000 +333.001048030235 2840.547363281250 +335.018066518429 3857.000000000000 +337.016490283319 2257.000000000000 +348.988206068721 7382.000000000000 +350.985085465325 7259.000000000000 +352.983081816715 2462.000000000000 +354.041092701990 1411.000000000000 +358.095358680256 1344.000000000000 +372.064528986026 6467.495117187500 +374.061053722203 5695.000000000000 +376.059656060961 2211.000000000000 +392.044067632616 2143.000000000000 +395.066337210837 2288.000000000000 +397.065352026340 1841.000000000000 +428.895605409648 1348.684326171875 +428.927859796300 1412.000000000000 +445.117454275133 2106.000000000000 +491.967681975778 1277.000000000000 +505.850908455770 4139.747558593750 +522.876740252438 1800.000000000000 +536.161867901498 4607.000000000000 +537.162257475039 2465.000000000000 +538.160527239899 1695.000000000000 +544.336437856300 1324.164184570312 +546.911854407175 2375.000000000000 +547.911013918907 1216.000000000000 +610.179211400596 2165.000000000000 +611.181197363117 1284.000000000000 +645.153892760480 7294.000000000000 +646.156182811867 3135.000000000000 +647.151735773867 8987.490234375000 +648.154489817139 3184.000000000000 +649.150180493474 3821.591308593750 +650.151352616891 1194.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=665 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=665 experiment=5_0 +##scan 68 +##specref ms_run[1]:sample=1 period=1 cycle=665 experiment=5 +51.937914215879 30.000000000000 +53.038832825255 30.000000000000 +53.045206203438 30.000000000000 +56.049918656323 60.000000000000 +70.039929361435 30.000000000000 +79.056769706510 30.000000000000 +79.063803665589 30.000000000000 +81.036251104807 30.000000000000 +95.045081818956 30.000000000000 +98.059564237847 929.000000000000 +133.104347649114 30.000000000000 +138.093679048566 30.000000000000 +140.069724401264 524.000000000000 +166.083820296277 60.000000000000 +170.866129800466 45.000000000000 +179.086353477601 30.000000000000 +269.148315487256 30.000000000000 +286.177025513197 135.000000000000 +>ms1peaks +52.005546368410 2670.973876953125 +53.013447667176 13442.696289062500 +53.850235753676 1356.916015625000 +54.009375548499 346132.000000000000 +55.006052234178 5908.220703125000 +55.011327139628 6618.665039062500 +55.054273818991 1724.201538085938 +55.934183438349 6089.195312500000 +56.942085448242 2338.522949218750 +59.049497543886 62260.195312500000 +60.044496762287 9351.735351562500 +61.039589911785 1691.005004882812 +63.997480072658 3643.092529296875 +64.005073510260 4229.738281250000 +68.011506505752 28323.269531250000 +68.993585810696 12464.445312500000 +69.044640852940 13649.212890625000 +72.044186043856 1148.000000000000 +72.936480336335 2359.262451171875 +73.064260321862 1642.103027343750 +76.486297311909 2289.460693359375 +79.020766274604 15897.382812500000 +80.048988150704 12209.904296875000 +81.936792921049 8371.669921875000 +82.996095650262 8043.113281250000 +87.043834653730 1276.883422851562 +87.054214175865 1482.598144531250 +89.506458664277 1777.830322265625 +90.489196475802 1663.000000000000 +91.053755235930 1541.526000976562 +95.952402869893 2400.645751953125 +97.967886882016 8001.987304687500 +98.983532889025 3424.810302734375 +100.074677767759 1304.000000000000 +102.090242730316 1329.000000000000 +109.942679982849 1398.000000000000 +113.962690768860 1941.000000000000 +114.090409984344 11174.942382812500 +118.085207229958 6292.000000000000 +122.095068185146 3153.000000000000 +122.962957192644 10933.000000000000 +123.089979550376 1737.604248046875 +123.962216545241 1382.000000000000 +130.157851054625 1368.000000000000 +136.020636426938 1627.062988281250 +136.111496039851 1223.000000000000 +140.067223364828 1192.000000000000 +141.090663513328 1291.584838867188 +141.111904002369 1407.591674804688 +141.935850183021 1558.355590820312 +141.957535804851 16602.316406250000 +147.090073371469 2918.000000000000 +149.022242157340 5058.011230468750 +149.041140009202 2281.293701171875 +151.094511933196 2771.192138671875 +151.109513517514 3017.586181640625 +155.069293446605 1572.566406250000 +155.105166988042 1682.863525390625 +155.972752865047 4956.000000000000 +158.095291106412 1175.110473632812 +158.152897422617 13347.454101562500 +159.140146486584 1221.760620117188 +159.156626899127 1511.809692382812 +159.968130743445 1344.000000000000 +161.095301376904 1939.000000000000 +164.142147914813 1352.608276367188 +170.095211316489 2555.052490234375 +171.142065868167 1688.747070312500 +173.079666684779 7435.070800781250 +174.990876331450 12561.875976562500 +176.988228889313 4082.000000000000 +178.157451442432 1671.789062500000 +179.082574741649 1161.343872070312 +179.105464745461 2033.503295898438 +182.960688200025 1872.628540039062 +186.220236378822 1627.000000000000 +194.115587597029 3414.431152343750 +195.102521936100 1940.187622070312 +195.121153964710 2419.525878906250 +198.184119642186 2274.000000000000 +217.106221715984 24680.257812500000 +218.109389146592 2768.000000000000 +219.094928896725 1923.877807617188 +224.125737788530 1308.718017578125 +228.194389849522 1662.646850585938 +239.088555805042 4654.193847656250 +242.282289579657 1282.000000000000 +246.861651699246 3614.000000000000 +249.183697918794 1626.163208007812 +250.176302167701 1384.000000000000 +250.999159013320 25559.167968750000 +252.002213377038 1651.423461914062 +252.996445325154 16054.000000000000 +253.999379477884 1131.000000000000 +254.993447206468 2772.603271484375 +267.171432346745 1267.000000000000 +279.091928399145 1791.000000000000 +281.049474584863 1227.866455078125 +286.179096453069 25739.439453125000 +287.182281594319 5585.333496093750 +292.120716590068 202371.000000000000 +293.123166487022 34628.820312500000 +294.117931210581 66532.000000000000 +295.120340194058 11307.223632812500 +296.123175528233 1139.000000000000 +304.298333326187 1345.000000000000 +311.184016131023 2112.000000000000 +313.038042743243 19603.214843750000 +314.041307564911 3224.000000000000 +315.035568487358 12179.000000000000 +316.038573054615 2028.000000000000 +317.032999093534 2260.000000000000 +327.007882393116 37742.558593750000 +328.009892511372 3601.000000000000 +329.004296620889 35070.000000000000 +330.007896864877 3743.000000000000 +331.001397377526 12099.000000000000 +332.004304811118 1147.000000000000 +333.002267631798 2076.000000000000 +335.017770650220 2313.000000000000 +337.017035297896 1211.000000000000 +348.988715159870 5698.000000000000 +350.985988216636 6014.000000000000 +352.982227447720 1887.000000000000 +371.314800126809 1304.000000000000 +372.064251479626 5075.027343750000 +374.061938971072 4867.000000000000 +376.058486261926 1592.000000000000 +392.043742286078 1216.000000000000 +395.068502390905 1429.000000000000 +397.065868843467 1348.000000000000 +428.893525922553 1400.224853515625 +428.927664629947 1466.814208984375 +430.886759376928 1323.849609375000 +445.118824286635 2200.000000000000 +505.851799123756 3631.000000000000 +522.879142647299 1843.000000000000 +529.887839543416 1136.832397460938 +536.163692934414 5222.000000000000 +537.164127390652 2657.000000000000 +538.162454710439 1796.178100585938 +544.339301230729 1413.667114257812 +546.912450246131 2510.000000000000 +610.181542562630 2042.000000000000 +611.181371312242 1400.000000000000 +645.154552081192 5333.000000000000 +646.158693354263 1778.000000000000 +647.153270969225 6082.129394531250 +648.155656988395 2289.000000000000 +649.150637720064 2324.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=666 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=666 experiment=3_0 +##scan 75 +##specref ms_run[1]:sample=1 period=1 cycle=666 experiment=3 +55.054505732533 25.000000000000 +55.060116779446 15.000000000000 +56.048448506258 20.000000000000 +85.028411205925 35.000000000000 +98.059278982655 958.000000000000 +105.067129758980 10.000000000000 +123.041271657474 20.000000000000 +123.051095128888 20.000000000000 +126.876822431871 10.000000000000 +133.100243079469 59.000000000000 +138.088467901690 35.000000000000 +140.069590830035 561.000000000000 +145.101270946048 20.000000000000 +149.056693160781 15.000000000000 +166.087482254599 20.000000000000 +286.178204102612 105.000000000000 +286.213277531220 60.716449737549 +>compound 1_5053681185761206615-676004--121--Myclobutanil +>parentmass 289.122615478838 +>ionization [M+H]1+ +>formula C15H17ClN4 +>charge 1 +>rt 448.027999999980 +##fmz 289.122615478837758 +##fid 5053681185761206615 +##des Myclobutanil +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +289.122615478838 1356806.543650601991 +290.123323995928 168319.538694710791 +291.117964046924 433903.252139170072 +292.120260799670 99781.634539092542 +>ms1peaks +52.005351813457 2501.610107421875 +53.013412581284 13134.520507812500 +53.850226225992 1302.909057617188 +54.009140063564 338983.656250000000 +55.006042248338 6435.412597656250 +55.011148435189 6609.394042968750 +55.054172395822 1772.104248046875 +55.934029229957 5757.919921875000 +56.941868288709 2705.908203125000 +59.049392394217 65787.757812500000 +60.044197396550 9389.001953125000 +61.039698624921 1629.770751953125 +63.997582420249 4596.096191406250 +64.004915539546 4860.728515625000 +68.011405901665 27484.292968750000 +68.993238795734 11816.172851562500 +69.044514210085 12151.762695312500 +72.936346245282 1770.000000000000 +73.063844648998 1632.810180664062 +76.485866327556 2207.000000000000 +79.020638014668 15456.159179687500 +80.048700307132 11716.706054687500 +81.936658440041 8339.158203125000 +82.995849176432 8191.000000000000 +87.054215388379 1432.329345703125 +89.505806636870 1376.000000000000 +90.488666027165 1798.000000000000 +95.952211902793 2472.000000000000 +97.967974119285 6640.000000000000 +100.074558827800 1418.000000000000 +102.090063528932 1768.000000000000 +109.942148206295 1646.000000000000 +113.962810920920 1728.000976562500 +114.090265101894 9843.087890625000 +118.085166173822 5466.146972656250 +122.095082275611 3591.515380859375 +122.962671452755 9919.435546875000 +123.090603383338 1818.105346679688 +130.157985838236 1433.000000000000 +136.020144210415 1305.642211914062 +141.111768954054 1381.647338867188 +141.957291332652 13999.958984375000 +147.090365251433 2315.564941406250 +149.021998403294 4169.404296875000 +151.095653127576 2632.192382812500 +151.109600618565 2638.503906250000 +155.069049191990 1400.588378906250 +155.105221715370 1306.244873046875 +155.972774632456 3955.750244140625 +158.152847157321 10190.631835937500 +161.094883274868 1469.000000000000 +164.993233307885 1413.000000000000 +170.094756804200 2692.873779296875 +173.079096183490 5464.607421875000 +174.990754641374 1338.000000000000 +175.120920396226 1335.489135742188 +178.157288006504 1567.557739257812 +179.104881581157 1856.000000000000 +182.960071822982 1596.667236328125 +186.016812097735 3128.000000000000 +194.115183195725 3037.019042968750 +195.105676043577 1846.959228515625 +195.121034909827 2138.534667968750 +198.183715433637 1614.000000000000 +201.983396783946 6476.000000000000 +217.007534943089 16000.083984375000 +217.105603079000 12722.193359375000 +218.010461830348 1723.000000000000 +218.108916975941 1918.000000000000 +219.094207015885 1394.000000000000 +234.033666185649 17919.000000000000 +235.036061869219 1699.000000000000 +239.087710708037 2715.000000000000 +245.038087259231 3705.000000000000 +246.860587751512 3017.000000000000 +250.998652800198 2461.000000000000 +252.996040050118 1751.000000000000 +262.065226573716 31878.271484375000 +263.067812997194 3540.000000000000 +264.062744585962 1732.000000000000 +276.080875651007 47441.000000000000 +277.083729023421 6202.904296875000 +278.078049070253 2909.805664062500 +279.092264164105 2269.000000000000 +281.049607531965 1759.000000000000 +284.163709253010 5971.317382812500 +285.167422523505 1450.937500000000 +289.120547785899 45105.261718750000 +290.122834000335 8899.000000000000 +291.118148964330 16223.000000000000 +292.119468760172 3916.748291015625 +303.104211105075 4272.900878906250 +303.190626643079 3701.817626953125 +304.121038021889 1154982.000000000000 +304.680120827865 1361.469604492188 +304.720450396369 1578.193115234375 +304.756696628278 1464.135742187500 +304.826755934771 1415.802856445312 +304.888295222133 4211.749023437500 +304.975939340234 6444.747070312500 +305.112954471951 109660.976562500000 +306.110248734555 72833.000000000000 +307.111946842557 10169.579101562500 +307.247397220322 1757.839477539062 +310.120212483100 5088.000000000000 +320.107070842572 7286.000000000000 +321.109817317563 1634.396606445312 +321.134008500327 1645.504272460938 +326.094135509242 51581.214843750000 +327.006663634739 3305.288085937500 +327.096918826684 8025.063964843750 +328.090879363560 3401.237060546875 +329.002848029289 3721.000000000000 +330.204815446188 11820.952148437500 +331.208232327135 2889.000000000000 +342.067980362905 3189.395019531250 +349.169296376205 25098.000000000000 +350.172883605486 4323.000000000000 +351.167291455015 1724.000000000000 +372.149200119315 2817.477050781250 +404.036004100360 11013.000000000000 +405.038241871311 2224.679687500000 +424.359699824875 1469.000000000000 +445.117347283461 1962.204711914062 +500.274802921042 11554.163085937500 +501.277725760601 3400.000000000000 +502.286539956580 1910.000000000000 +505.850895564320 2188.000000000000 +536.162361057972 4668.000000000000 +537.163239801382 2428.000000000000 +538.161608472883 1869.000000000000 +544.336387601713 1598.000000000000 +546.911505452596 1493.000000000000 +549.965979448424 1640.000000000000 +592.225456903764 1675.000000000000 +607.216655018496 74091.000000000000 +608.219193446659 23449.000000000000 +609.215852555200 11438.528320312500 +610.208425679746 4454.000000000000 +611.188234775837 1805.798706054688 +612.220726308427 4082.000000000000 +613.224505418990 34075.000000000000 +614.227906702716 11171.000000000000 +615.225014693998 5343.000000000000 +623.210784148654 2510.000000000000 +629.198405169302 68640.000000000000 +630.201595235063 21340.328125000000 +631.198284234777 10581.000000000000 +632.198298853566 2483.000000000000 +707.140261218123 1384.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=676 experiment=4 +##m_id Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=4_0 +##scan 121 +##specref ms_run[1]:sample=1 period=1 cycle=676 experiment=4 +70.039827273652 5131.529296875000 +82.041077772907 30.000000000000 +82.066941721068 30.000000000000 +83.048162364624 30.000000000000 +89.038123713717 30.000000000000 +98.998128961124 45.000000000000 +99.005937159691 45.000000000000 +116.057773265737 45.000000000000 +116.068964884923 45.000000000000 +125.014210234006 2627.000000000000 +128.869373457499 30.000000000000 +129.050864049931 30.000000000000 +129.066487998016 43.279674530029 +130.062932087251 75.000000000000 +130.074324678654 75.000000000000 +131.069149811718 90.000000000000 +137.012353655287 30.000000000000 +143.074736350629 45.000000000000 +143.085702367776 45.000000000000 +149.013720936376 75.000000000000 +150.009016679015 90.000000000000 +151.029635761105 960.000000000000 +153.071034687141 30.000000000000 +164.027845684388 225.000000000000 +166.040731347006 75.000000000000 +167.084665955303 45.000000000000 +168.094844704597 30.000000000000 +173.861021388832 75.000000000000 +178.040593736165 180.000000000000 +191.049915677020 45.000000000000 +203.057899363272 45.000000000000 +220.088072925820 120.000000000000 +289.119266976743 135.000000000000 +>ms1peaks +52.005397076818 2734.410888671875 +52.018107045505 1336.588989257812 +53.013261826329 14264.303710937500 +54.009079203842 328540.562500000000 +55.005732946798 6038.434082031250 +55.011210209049 5773.483398437500 +55.054089450492 1883.920532226562 +55.933933351350 5941.799316406250 +56.049311183158 2529.910644531250 +56.941559341288 2177.731445312500 +59.049288422008 55833.332031250000 +60.044400478994 9188.863281250000 +61.039483771618 1336.615844726562 +63.997769089290 4226.595214843750 +64.004652574785 4312.662109375000 +67.028420902367 1685.132324218750 +68.011303574981 26639.857421875000 +68.993400384347 11132.456054687500 +69.044245603619 12842.139648437500 +72.936451870693 2092.438964843750 +73.064343001052 2004.000000000000 +76.485626827097 1932.002563476562 +79.020705537221 15479.782226562500 +80.048746552992 12934.649414062500 +81.936560826315 7849.174804687500 +82.996236710322 7697.570312500000 +87.043649221397 1392.278564453125 +87.054161695388 1495.958618164062 +89.506032483299 1554.000000000000 +90.488774891048 1551.744018554688 +91.052857733317 1701.434936523438 +95.951953010697 2094.000000000000 +97.967766546756 6595.530273437500 +109.942695624537 1327.000000000000 +113.961956344849 1877.000000000000 +114.090202311915 11113.386718750000 +118.085079269697 5461.000000000000 +122.095332793077 3096.000000000000 +122.962788239519 9551.916015625000 +123.089923877343 1592.000000000000 +130.158267685481 1374.000000000000 +136.020500147191 1906.429687500000 +141.089705751127 1398.031372070312 +141.111419699029 1374.918823242188 +141.935031405798 2215.528808593750 +141.957114961469 13636.359375000000 +147.090410388658 2596.000000000000 +149.021734118264 3900.000000000000 +149.042225044400 1717.679077148438 +151.095530836015 2392.175048828125 +151.109345923165 2675.036376953125 +155.069217138005 1392.010375976562 +155.972851416164 3798.715576171875 +158.152680730278 10054.000000000000 +161.095473046681 1550.000000000000 +164.142407569715 1467.709594726562 +170.094842381476 2189.805175781250 +173.079740417554 5427.904296875000 +178.157986956425 1455.000000000000 +179.105560744514 1912.301391601562 +182.960698176280 2000.407470703125 +186.016618789428 1896.000000000000 +186.220115257894 1974.000000000000 +194.116069304698 2583.000000000000 +195.121207806540 1998.303710937500 +198.184395565259 1695.000000000000 +201.982853397927 4906.000000000000 +217.007045852030 12703.000000000000 +217.105649597883 13317.726562500000 +218.109378650956 2113.981933593750 +219.093923189224 1382.400756835938 +234.033511361987 14162.000000000000 +235.036774500644 1342.000000000000 +239.087266669620 2910.000000000000 +242.282551973761 1561.000000000000 +245.038675382516 2489.000000000000 +246.861414583855 2664.000000000000 +250.998716978816 2090.000000000000 +262.065290180852 23768.000000000000 +263.068197519244 2928.000000000000 +276.081065166232 35016.000000000000 +277.084200131760 4404.000000000000 +278.078513434024 2183.000000000000 +279.092009717775 2217.000000000000 +281.049184165914 1367.000000000000 +284.163360412320 3532.000000000000 +289.121282596047 297520.000000000000 +290.123339528492 48851.796875000000 +291.118124278084 95531.000000000000 +292.120251426315 17101.046875000000 +293.123187582260 1858.065429687500 +303.104014775580 2693.449951171875 +303.190353825641 2785.502441406250 +304.119856155362 954170.000000000000 +304.858461688543 1629.946044921875 +304.974182520147 7187.607910156250 +305.110635941863 61549.015625000000 +306.110453215668 55678.074218750000 +307.111643085162 7091.700683593750 +310.120007901196 5493.854003906250 +320.106626078784 4025.000000000000 +326.094632546811 51218.675781250000 +327.006414911949 2851.898193359375 +327.096265128312 8263.424804687500 +328.091406924071 3217.697509765625 +329.003058211528 3429.933349609375 +330.205471949815 7747.000000000000 +331.207754653901 1796.000000000000 +342.067426751640 3267.000000000000 +349.169395269431 21267.000000000000 +350.172679880257 4154.271972656250 +351.168393055602 1571.000000000000 +372.098739562700 1670.002075195312 +372.148644610713 2317.465087890625 +389.045115150928 4473.000000000000 +391.043177396698 1663.000000000000 +404.036316278299 7850.000000000000 +405.039997913270 1931.000000000000 +424.359886173771 1591.000000000000 +445.117801993639 2038.000000000000 +500.275651903375 13340.000000000000 +501.278433801524 4082.000000000000 +502.285907017338 2013.566040039062 +505.851095535466 2281.000000000000 +536.163686089478 4281.000000000000 +537.165279310098 2275.000000000000 +538.161599212928 1446.000000000000 +542.322146689605 2319.235839843750 +544.336681001720 2203.000000000000 +546.913546060949 1480.000000000000 +549.965890540792 1571.727539062500 +592.225728725342 6278.000000000000 +593.229191819800 2109.000000000000 +594.222911870749 2943.707031250000 +607.216789747777 46858.000000000000 +608.219527953593 15482.000000000000 +609.215333724431 7397.000000000000 +610.196851071075 3575.000000000000 +611.184731787601 1662.000000000000 +612.221188935026 2560.000000000000 +613.225065362361 23067.000000000000 +614.226835965539 7388.000000000000 +615.223918934987 3328.000000000000 +623.150116137773 1311.609985351562 +623.211673074874 1404.509399414062 +629.198822367023 49161.000000000000 +630.201975789631 15060.724609375000 +631.197108322666 7602.103027343750 +632.199182275970 1787.000000000000 +707.142781768806 1359.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=677 experiment=5 +##m_id Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=677 experiment=5_0 +##scan 131 +##specref ms_run[1]:sample=1 period=1 cycle=677 experiment=5 +55.054639659329 105.000000000000 +55.060017620298 92.683341979980 +56.049823597015 30.000000000000 +57.069035771002 30.000000000000 +65.037770341976 30.000000000000 +69.832588352285 45.000000000000 +70.039908024674 17805.998046875000 +70.065015706368 30.000000000000 +70.282524899395 30.000000000000 +70.655650228794 30.000000000000 +70.662690104158 30.000000000000 +70.671685449976 30.000000000000 +70.680369758222 30.000000000000 +71.073891359706 30.000000000000 +80.047874421886 45.000000000000 +81.071842605128 75.000000000000 +82.039226093295 45.000000000000 +82.068250865158 45.000000000000 +83.046676696339 105.000000000000 +89.037423472355 210.000000000000 +90.046133682594 75.000000000000 +95.071588708154 60.000000000000 +98.999966313572 135.000000000000 +103.050438931432 30.000000000000 +115.055166727960 150.000000000000 +116.062522261690 210.000000000000 +122.999173332647 45.000000000000 +124.644051017099 60.000000000000 +124.994916353506 582.297302246094 +125.014371187472 12549.000000000000 +125.378378046066 30.000000000000 +125.390531676820 30.000000000000 +128.046903884584 225.000000000000 +129.055373654720 75.000000000000 +129.064357675053 60.000000000000 +130.062595084552 180.000000000000 +131.075918885468 60.000000000000 +131.089262432243 60.000000000000 +137.014910793247 150.000000000000 +139.029843740401 105.000000000000 +139.049300450331 47.856365203857 +143.072761538143 168.118270874023 +143.089863992705 96.726943969727 +149.013988771638 299.000000000000 +150.010736302066 285.000000000000 +151.030302067974 2704.000000000000 +152.065539738869 30.000000000000 +153.069429336803 150.000000000000 +157.100583676525 45.000000000000 +158.108303191611 30.000000000000 +162.029804830888 30.000000000000 +163.016613439026 30.000000000000 +163.027865460821 30.000000000000 +164.025164845834 997.000000000000 +165.032309967876 230.139968872070 +165.048285398527 267.000000000000 +165.068235719394 71.195930480957 +166.041158820976 300.000000000000 +167.084364530618 120.000000000000 +168.091368874638 180.000000000000 +169.091421834386 45.000000000000 +170.096865844811 90.000000000000 +175.029690206742 135.000000000000 +177.033157268884 30.000000000000 +178.041386504653 543.000000000000 +184.113505217082 75.000000000000 +185.131013174733 45.000000000000 +188.038417071829 30.000000000000 +191.051083107779 30.000000000000 +192.056950923082 75.000000000000 +193.074112586304 150.000000000000 +203.062235811985 251.000000000000 +220.086936658481 240.000000000000 +289.118902482462 413.000000000000 +>ms1peaks +52.005617027968 2841.486083984375 +53.013411271366 13567.883789062500 +54.009125331887 341665.812500000000 +55.005857415052 5900.790039062500 +55.011242701615 6013.953125000000 +55.054093292119 2035.055908203125 +55.933978586076 5672.338378906250 +56.049467099919 1695.441040039062 +56.941782308930 2173.337402343750 +59.049339198083 62878.703125000000 +60.044404001763 9862.614257812500 +61.039435521241 1719.998779296875 +63.997664239141 3450.597167968750 +64.005081384586 3958.136474609375 +68.011443914678 27040.419921875000 +68.993714467215 12520.464843750000 +69.007373071731 1388.107910156250 +69.044312866744 13073.230468750000 +72.936423004110 2084.000000000000 +73.063871079142 1705.000000000000 +76.485830845774 2577.000000000000 +79.020684296263 13782.132812500000 +80.048779775419 11186.997070312500 +81.936674853257 8327.656250000000 +82.996269546702 8040.201660156250 +89.506005127285 1468.281982421875 +90.489095167913 1675.000000000000 +95.951948147015 2520.515136718750 +97.967758472339 6678.626953125000 +102.090788355145 2027.477661132812 +113.962336972098 2071.000000000000 +114.090407289761 9387.833984375000 +118.085129231385 6116.000000000000 +122.095638138110 3776.030761718750 +122.962814871209 10117.168945312500 +123.090715093470 1657.501464843750 +136.020905158615 1394.424438476562 +140.067586645329 1617.045654296875 +141.112054526426 1383.640991210938 +141.935709702620 1911.949829101562 +141.957347460629 13581.779296875000 +147.090339739564 2374.998291015625 +149.022576244489 3994.022705078125 +151.095387083973 2392.279052734375 +151.109293023596 2750.114746093750 +155.069699172730 1332.009765625000 +155.972973853574 3810.662841796875 +158.152617650358 10434.000000000000 +159.154821868580 1369.000000000000 +161.095811541558 1615.000000000000 +170.094786893830 2397.479492187500 +170.116223095026 1563.129394531250 +173.079809386205 6290.747070312500 +178.157999558146 1344.694458007812 +179.105474980732 1898.194946289062 +182.961052201833 2004.073364257812 +186.220351226598 1623.000000000000 +193.157127136625 1493.409179687500 +194.115785614334 2955.000000000000 +195.120763129781 1823.166137695312 +198.184413101409 2214.000000000000 +201.984090601891 2436.000000000000 +217.007207589124 6332.419433593750 +217.105727151964 16770.736328125000 +218.108791440056 2512.000000000000 +234.033555067529 7474.000000000000 +239.087847702990 2936.000000000000 +242.283076836300 1598.000000000000 +245.039110357630 1466.000000000000 +246.860750264023 2469.000000000000 +249.183092518468 1366.967651367188 +250.999128212314 2641.000000000000 +252.995944883436 1376.000000000000 +262.065576474895 11528.000000000000 +263.068397905954 1693.000000000000 +276.080823895982 18533.000000000000 +277.084470217057 2604.243652343750 +279.093578782719 2100.000000000000 +281.049703566301 1340.000000000000 +284.163284328388 2755.000000000000 +288.245192514905 2240.408203125000 +289.124028104405 571675.000000000000 +289.974079344843 2398.387451171875 +290.020293351816 2510.571777343750 +290.123004833560 37005.632812500000 +291.118405903154 172664.062500000000 +292.120440247980 30711.750000000000 +293.123309031099 2511.000000000000 +303.103999271490 1878.000000000000 +303.190085777343 1857.193237304688 +304.115683834546 552400.000000000000 +304.984847835069 1705.556396484375 +305.107785187759 57481.210937500000 +306.110327480189 29213.000000000000 +307.112384326980 4304.000000000000 +310.120384968947 4593.269531250000 +311.105475064582 1824.000000000000 +320.107323506761 2737.000000000000 +326.094810667410 41008.000000000000 +327.006437528123 3347.260986328125 +327.096455636030 6753.961425781250 +328.092188803708 2930.000000000000 +329.003747738298 3355.000000000000 +330.205009985617 6046.367675781250 +331.208059597585 1436.000000000000 +342.068061155461 2814.000000000000 +349.170060952900 13874.000000000000 +350.172621024257 2607.730712890625 +372.148688883306 1405.186401367188 +389.044748240917 7650.000000000000 +390.047497559210 1913.000000000000 +391.042419990568 2801.000000000000 +392.068522384462 2797.000000000000 +394.066194691334 1609.439208984375 +404.036647250000 3756.000000000000 +424.362220661973 1680.073608398438 +445.118239809427 2256.000000000000 +457.032674519482 1580.000000000000 +468.387534165811 1625.361328125000 +487.228056299732 1735.000000000000 +500.275588301319 14065.000000000000 +501.278629401665 3579.000000000000 +502.286881001175 2107.000000000000 +505.851399270242 2207.884277343750 +531.255889309595 1828.000000000000 +536.162574795725 4348.000000000000 +537.164900413678 2412.000000000000 +538.160905924694 1840.207275390625 +542.321702796647 4110.075683593750 +543.325936834084 1425.000000000000 +544.336609702317 2008.000000000000 +546.912855890436 1498.000000000000 +592.225267665071 7023.000000000000 +593.153130472392 2079.229736328125 +593.228621623492 2593.859863281250 +594.223736830213 3021.337890625000 +607.216353924445 19371.000000000000 +608.219876548020 6018.000000000000 +609.216035675932 2735.843994140625 +610.184990477000 2845.000000000000 +612.185596819648 1643.000000000000 +613.224838309655 6730.896972656250 +614.227226894726 2411.000000000000 +629.198664613593 14632.000000000000 +630.201165251457 4128.000000000000 +631.197724705928 2446.000000000000 +639.156464406238 1485.000000000000 +641.154235888014 1515.855590820312 +654.147541437576 1594.000000000000 +692.150340948486 1581.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=678 experiment=3 +##m_id Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=678 experiment=3_0 +##scan 138 +##specref ms_run[1]:sample=1 period=1 cycle=678 experiment=3 +55.054270434220 105.000000000000 +56.052257730119 45.000000000000 +57.069642685298 75.000000000000 +57.076278365435 58.515125274658 +58.064669437897 30.000000000000 +58.069671200743 30.000000000000 +69.831821936433 120.000000000000 +70.040097536413 24218.527343750000 +70.062801316593 31.250431060791 +70.429050963972 30.000000000000 +70.438704107352 30.000000000000 +70.574152845601 53.442497253418 +71.040963389931 30.000000000000 +71.331546496348 45.000000000000 +71.547711411837 30.000000000000 +71.554731582869 30.000000000000 +81.069977524059 75.000000000000 +82.040024877605 180.000000000000 +82.064998747631 45.000000000000 +82.071892633579 45.000000000000 +83.046815904048 150.000000000000 +89.037322041009 315.000000000000 +93.058395230178 30.000000000000 +94.065823923167 15.000000000000 +95.073128971584 30.000000000000 +98.998707139648 75.000000000000 +115.038697637289 93.372489929199 +115.054570314383 213.739791870117 +116.061560571436 270.000000000000 +122.996698381028 60.000000000000 +123.007612454196 60.000000000000 +123.995047593998 30.000000000000 +124.002911191956 30.000000000000 +125.014307674051 14773.000000000000 +125.381473665944 30.000000000000 +125.393966225912 30.000000000000 +125.593372072822 30.000000000000 +125.599867839373 30.000000000000 +126.051609264641 30.000000000000 +126.059603286955 30.000000000000 +127.054832877589 45.000000000000 +128.048017316181 180.000000000000 +129.072076230440 45.000000000000 +129.857221738296 30.000000000000 +129.870016169563 30.000000000000 +130.064515161974 366.000000000000 +131.073613293583 60.000000000000 +137.014278524345 249.000000000000 +139.030165806979 60.000000000000 +143.060465185927 75.000000000000 +143.074012846680 104.308815002441 +143.089076083416 75.000000000000 +144.077234015868 30.000000000000 +149.015246811528 255.000000000000 +150.010825556181 309.000000000000 +150.598024297069 30.000000000000 +150.607575019774 30.000000000000 +151.029903267346 3468.000000000000 +152.066634976325 75.000000000000 +153.048272599038 48.395233154297 +153.069565327336 225.000000000000 +156.056088009549 27.453353881836 +156.078507049206 90.000000000000 +158.105667049362 30.000000000000 +158.115693896600 30.000000000000 +163.028234418456 150.000000000000 +163.049074774860 101.341789245605 +164.024417450344 1260.000000000000 +164.048222951239 223.749069213867 +165.033343347864 300.000000000000 +165.071689120240 100.887588500977 +166.041504194847 358.000000000000 +167.083021637505 120.000000000000 +168.092033871908 180.000000000000 +168.126067348571 15.000000000000 +170.097096768962 45.000000000000 +175.031788442407 270.000000000000 +177.045702469556 45.000000000000 +178.040557800332 739.000000000000 +179.064601892177 45.000000000000 +184.112879145243 75.000000000000 +185.120289107757 30.000000000000 +188.038359439527 30.000000000000 +191.046836106019 45.000000000000 +192.055368291335 195.000000000000 +193.076440167615 180.000000000000 +203.062460725867 150.000000000000 +205.065521702945 45.000000000000 +218.068791434007 45.000000000000 +220.087014664115 542.000000000000 +289.122158220479 827.000000000000 +>compound 1_5868141785564858207-659006--23--Cyproconazole +>parentmass 292.121361099857 +>ionization [M+H]1+ +>formula C15H18ClN3O +>charge 1 +>rt 436.497000000000 +##fmz 292.121361099857211 +##fid 5868141785564858207 +##des Cyproconazole +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +292.121361099857 1772579.388386697043 +293.123089125011 260903.108379805693 +294.118234104604 585930.221396290231 +295.120342830415 94191.053388591099 +>ms1peaks +50.015030688094 1631.000000000000 +52.005691836328 2833.837890625000 +53.013678352050 13820.645507812500 +53.850930804944 1372.676147460938 +54.009488813193 341215.375000000000 +55.006244952468 6363.858398437500 +55.011195314574 6663.786621093750 +55.054435589179 2093.444580078125 +55.934214796378 6443.966308593750 +56.049418637710 1614.372314453125 +56.942077131072 2603.345458984375 +59.049684010496 67068.679687500000 +60.044674600260 8507.357421875000 +61.039576232541 1618.787597656250 +63.997953270808 4540.612304687500 +64.004984885183 4765.146484375000 +68.011730125352 26984.066406250000 +68.993758540617 13250.065429687500 +69.044639818678 13453.114257812500 +72.936865747985 3009.785888671875 +73.064487442720 1926.000000000000 +76.486106736487 2394.000000000000 +77.012975210189 1331.000000000000 +77.038245950909 6864.013671875000 +79.021170250218 14954.513671875000 +80.049055487900 12273.781250000000 +81.937167726085 8605.721679687500 +82.996581259270 9547.895507812500 +87.054493611252 1308.586669921875 +89.506388403917 1579.000000000000 +90.489379547455 1879.000000000000 +91.053817827625 1210.000000000000 +95.952611673257 2421.652587890625 +97.968325410624 7844.628906250000 +100.075376789744 1408.000000000000 +102.090940410850 1712.000000000000 +104.048827681379 4021.000000000000 +105.032851808396 3043.702148437500 +109.943040230612 1524.000000000000 +113.962743611150 2300.809326171875 +114.091086475065 10732.537109375000 +118.085604757949 6375.129394531250 +122.095612538633 3453.346191406250 +122.963478886657 10149.138671875000 +123.091154033496 1907.152587890625 +123.962085557178 1291.000000000000 +124.964032856960 1524.723510742188 +124.981293760905 5573.300781250000 +132.044243365317 129513.453125000000 +133.047275934233 12024.171875000000 +136.021338396786 1596.000000000000 +136.111611313675 1179.000000000000 +141.090513006913 1389.292724609375 +141.112565247916 1247.203857421875 +141.957978845995 16325.500000000000 +147.090945866648 2556.685302734375 +149.023028218992 6399.154296875000 +150.054262184195 1568.000000000000 +151.096430884077 2664.400390625000 +151.111011940160 2835.027587890625 +155.069438117684 1871.944824218750 +155.105960083325 1401.000000000000 +155.973753152622 4288.000000000000 +158.153627071218 14384.000000000000 +159.156473714741 1627.752929687500 +160.050487288307 38915.000000000000 +161.053611692746 4466.942382812500 +161.095700587134 1743.057495117188 +164.142944501592 1256.052368164062 +167.015735366166 2785.089599609375 +170.096151543720 2652.023193359375 +170.116409887737 1324.376464843750 +170.968993556255 7076.000000000000 +171.137671144810 4912.312011718750 +172.136045264128 1371.000000000000 +173.079830429233 8581.928710937500 +174.991306236853 1198.000000000000 +177.054219725911 1769.000000000000 +178.157947155736 1498.908447265625 +179.106050750592 1934.090454101562 +182.960933723657 1780.061523437500 +182.991388549794 1244.309082031250 +186.221152079128 2287.000000000000 +194.116900036921 2752.000000000000 +195.121615177487 1919.471069335938 +198.184412559940 2140.000000000000 +200.200455656322 1296.554199218750 +209.153704347399 1590.000000000000 +212.888258624179 1535.000000000000 +217.106944592366 24346.000000000000 +218.110517718319 2646.000000000000 +219.095540028475 2644.006591796875 +228.196097140190 1527.811645507812 +236.167749124378 1677.000000000000 +239.089312381813 3327.000000000000 +242.284215148787 1201.000000000000 +246.862288406064 3365.000000000000 +249.184532839914 1860.293334960938 +251.001107206325 2362.000000000000 +252.997444701878 1876.000000000000 +253.916335213075 4093.000000000000 +260.980865788213 46877.000000000000 +261.983931158765 5301.000000000000 +262.976772362746 4418.000000000000 +267.172661485943 1410.000000000000 +277.199859444074 2417.590087890625 +279.093448238935 1888.450561523438 +281.051163936397 1557.000000000000 +292.121170689402 15731.000000000000 +293.123945781771 2615.000000000000 +294.118820607873 4859.000000000000 +295.121821476430 1186.000000000000 +318.013460543863 19020.000000000000 +319.016226586969 2819.000000000000 +320.010792812476 1745.000000000000 +324.021120495162 2522.000000000000 +327.007928037291 3314.077636718750 +329.005428091932 3187.000000000000 +331.002680981835 1140.229492187500 +335.040406311528 1228.000000000000 +339.995783079981 73785.000000000000 +340.998517552508 10283.000000000000 +341.992089047450 7216.000000000000 +351.928943475892 4368.000000000000 +353.926519256680 2362.000000000000 +355.969819970535 3512.076416015625 +363.071778928522 11698.970703125000 +364.073181575102 1981.000000000000 +371.315525399960 1354.000000000000 +379.934529706961 4095.883300781250 +381.932716463007 2062.000000000000 +445.119746997025 2474.000000000000 +446.119291863183 1145.000000000000 +505.853826516954 4858.000000000000 +506.855308046231 1451.000000000000 +519.139330404280 1166.703979492188 +522.880837958116 1970.000000000000 +523.871380297922 1372.000000000000 +529.891671811182 1342.000000000000 +536.165890644769 5714.000000000000 +537.166372879728 2646.000000000000 +538.163391669663 2155.000000000000 +544.339624971493 1155.000000000000 +546.914039373140 3234.000000000000 +547.912958504845 1306.000000000000 +610.184280095073 1860.000000000000 +611.183517202231 1239.000000000000 +657.000223829242 1834.000000000000 +696.940499292838 3022.000000000000 +698.938485246113 2250.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=659 experiment=6 +##m_id Cyproconazole_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=6_0 +##scan 23 +##specref ms_run[1]:sample=1 period=1 cycle=659 experiment=6 +70.040568192781 3615.933349609375 +125.015306520704 1696.000000000000 +138.993130230232 120.000000000000 +292.118132099014 75.000000000000 +>ms1peaks +52.005894908514 3265.400634765625 +53.013510908959 13106.733398437500 +53.850705653871 1327.061035156250 +54.009389058624 348945.000000000000 +55.006169898270 6124.332519531250 +55.011317455070 6538.428710937500 +55.054331627343 2077.732910156250 +55.934133744738 6508.345214843750 +56.049593965189 1999.699707031250 +56.942184704094 2688.283691406250 +59.049605800481 70253.718750000000 +60.044658666294 10706.690429687500 +61.039619044210 1586.278076171875 +63.997756861684 3941.995605468750 +64.005166169614 4907.884765625000 +67.028913163203 1580.000000000000 +68.011642030602 27597.281250000000 +68.993728986678 12929.603515625000 +69.044696634986 12506.645507812500 +72.936667673711 2191.062988281250 +73.064288768235 1852.000000000000 +76.486322585941 2327.304443359375 +77.038204782362 5884.000000000000 +79.020970020200 14096.371093750000 +80.049138765431 11437.409179687500 +81.937010633269 8800.649414062500 +82.996563663943 9775.875976562500 +87.054866657942 1386.671508789062 +89.506477006513 1856.891357421875 +90.489380614180 1867.000000000000 +91.053607705956 1522.000000000000 +95.952400718089 2411.000000000000 +97.968129951793 7534.000000000000 +100.075098492601 1334.000000000000 +102.090723461138 1696.000000000000 +104.049086460790 3045.739257812500 +105.032948258430 2178.018554687500 +109.942760191152 1389.039428710938 +113.963014550647 1955.283325195312 +114.090880342296 9824.000000000000 +118.085478285355 6071.000000000000 +122.095943650184 3414.491943359375 +122.963053449523 10824.022460937500 +123.091014422132 1667.127319335938 +123.961852610233 1273.000000000000 +124.964467047349 2135.799560546875 +124.981051711745 4296.547363281250 +132.043642930226 93077.242187500000 +133.046777995488 9274.231445312500 +136.020768820120 1683.000000000000 +136.110810804565 1296.000000000000 +141.090222902589 1360.714843750000 +141.112627587411 1461.608520507812 +141.935004916839 1940.239746093750 +141.957609246025 17033.816406250000 +147.090484942279 2411.661132812500 +149.022774177869 5733.046386718750 +149.042316567318 2746.710693359375 +150.054248684273 1437.284790039062 +151.095045034366 2698.686279296875 +151.110908763912 3144.476318359375 +155.069769845772 1649.881591796875 +155.105405759277 1860.793457031250 +155.973140596379 4755.245605468750 +158.153359438729 14516.186523437500 +159.156612007249 1486.367431640625 +160.049846075993 24545.988281250000 +161.052607402490 2286.874755859375 +161.095210153424 1778.371337890625 +167.015155408714 1740.000000000000 +170.095595750468 2643.026123046875 +170.968534800983 4638.000000000000 +171.137187033467 8793.664062500000 +172.138659608019 1674.000000000000 +172.168464035175 1208.633911132812 +173.079743164910 7798.492675781250 +174.991345453773 1573.000000000000 +177.053816341336 1417.014038085938 +178.158055093780 1735.947753906250 +179.105704311835 2197.604980468750 +182.961317763038 2211.718750000000 +186.220205393587 1399.000000000000 +194.116470425084 2855.795654296875 +195.121709243913 1774.128417968750 +198.184491575929 2140.000000000000 +200.199765534300 1398.692871093750 +209.152792656657 1425.000000000000 +217.106381802785 24672.529296875000 +218.109726712595 2594.000000000000 +219.095072568829 2421.334228515625 +228.194355078180 1758.423828125000 +236.167326569908 1392.000000000000 +239.087560169956 3393.000000000000 +242.283100716676 1301.000000000000 +246.861853504396 3967.000000000000 +249.184072418419 1674.044555664062 +250.179850228401 1317.625488281250 +250.969009212760 1272.659667968750 +250.998800627422 2485.986083984375 +252.996506036249 1407.000000000000 +253.914744903944 3247.000000000000 +260.980140443968 31189.000000000000 +261.982652125164 3630.000000000000 +262.976320674948 3030.000000000000 +267.169211061356 1310.111816406250 +277.200326399959 5169.000000000000 +279.093304185450 2011.372070312500 +281.050388682144 1561.000000000000 +292.121055360225 111310.531250000000 +293.123630076529 20278.496093750000 +294.118239620053 37417.625000000000 +295.120516544042 6903.191406250000 +299.181966555803 2788.124755859375 +304.298855657172 1458.000000000000 +318.012599323858 12766.560546875000 +319.014697171275 1763.000000000000 +320.008501629176 1292.000000000000 +324.021279180039 2211.000000000000 +327.007286394326 3510.000000000000 +329.004329094240 3020.000000000000 +339.994441786583 55469.000000000000 +340.996800649447 7731.000000000000 +341.991164319056 5376.000000000000 +351.927480336150 4373.000000000000 +353.925190372111 2157.000000000000 +355.923288991607 1875.234497070312 +355.967623747153 2895.083740234375 +363.069819320259 9600.000000000000 +364.071840904280 1502.000000000000 +365.067263835001 1200.000000000000 +379.933765070569 3274.000000000000 +381.930698322663 2082.000000000000 +445.119022397624 2321.740478515625 +505.851287178680 4210.000000000000 +506.853720407640 1284.000000000000 +522.877826294640 1830.000000000000 +529.887917529630 1402.000000000000 +536.163984165691 5143.000000000000 +537.165630799202 2699.000000000000 +538.162716451736 1997.000000000000 +544.338330991241 1339.000000000000 +546.913670520771 2956.903320312500 +547.912049049860 1201.466308593750 +610.182850595719 2143.000000000000 +611.183650714411 1327.000000000000 +647.152176664637 1285.000000000000 +671.046640090612 3328.000000000000 +673.045642862147 3209.000000000000 +696.940422810442 1799.000000000000 +698.936403714808 1431.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=660 experiment=5 +##m_id Cyproconazole_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=660 experiment=5_0 +##scan 31 +##specref ms_run[1]:sample=1 period=1 cycle=660 experiment=5 +69.069680828999 60.000000000000 +69.833468065273 60.000000000000 +70.039800909321 9567.099609375000 +70.641144537874 15.000000000000 +89.039009042006 90.000000000000 +96.981904363605 13.000000000000 +98.999669479829 13.000000000000 +124.645645258446 30.000000000000 +124.666018175052 30.000000000000 +125.014601911838 6743.000000000000 +129.070787391149 30.000000000000 +130.077634043857 45.000000000000 +137.015407395449 30.000000000000 +138.994241947132 309.000000000000 +139.027445850546 45.000000000000 +142.075290059555 45.000000000000 +163.032692292347 45.000000000000 +165.053013026384 30.000000000000 +170.879635830076 13.000000000000 +205.069739102638 13.000000000000 +292.116826310858 217.000000000000 +>ms1peaks +52.005486844196 2797.312255859375 +53.013452941613 13289.114257812500 +53.850392691129 1182.554077148438 +54.009302603618 341601.031250000000 +55.005911181832 5603.758300781250 +55.011355581201 5959.661132812500 +55.054189724209 2205.188476562500 +55.933928601241 6093.526367187500 +56.941939565668 2798.683593750000 +59.049443593556 67299.640625000000 +60.044262774734 8968.761718750000 +61.039204580633 1571.923095703125 +63.997813637547 4075.065429687500 +64.004662670356 4416.795898437500 +68.011501134588 27277.638671875000 +68.993585500338 12264.906250000000 +69.044393197123 13147.085937500000 +72.043949942055 1214.000000000000 +72.936545824901 2386.261962890625 +73.064141392327 1809.102661132812 +76.486217265459 2318.000000000000 +77.037914467348 2784.771240234375 +79.020708818127 18172.382812500000 +80.048894299954 13850.358398437500 +81.936654565436 8646.963867187500 +82.996013274860 9151.881835937500 +87.042952193812 1456.767700195312 +87.054623008241 1774.283325195312 +89.069755450540 1371.091674804688 +89.506205030598 1420.000000000000 +90.488660539027 2076.000000000000 +91.053504137418 1574.000000000000 +95.952180653762 2284.000000000000 +97.967884579650 7862.442871093750 +100.074476020240 1221.000000000000 +102.090415152097 1454.000000000000 +104.048216330484 1263.218750000000 +109.942447219977 1590.828491210938 +113.962324334339 2023.251098632812 +114.090394525983 11631.025390625000 +118.085045416936 6564.007812500000 +122.095214148430 3526.000000000000 +122.962880463908 10844.000000000000 +123.090776414574 1696.206054687500 +123.961832528390 1236.000000000000 +124.981223378162 1673.021850585938 +130.158379717264 1405.000000000000 +132.043434483782 41526.472656250000 +133.046757663549 4137.170898437500 +136.020231843939 1752.000000000000 +139.962610586396 1241.217529296875 +141.090622201525 1287.143798828125 +141.112120261557 1304.199096679688 +141.957439283701 16426.482421875000 +147.090642325371 2533.530273437500 +149.022533327810 5845.030273437500 +149.040994237727 2756.796875000000 +151.095191450521 2425.737792968750 +151.109945034180 2827.097656250000 +155.069776946854 1748.044799804688 +155.105248734220 1748.282226562500 +155.973048592075 4793.413085937500 +158.153052811157 14275.985351562500 +159.139068434260 1227.674072265625 +159.156070191539 1425.673461914062 +160.049271893755 12624.257812500000 +161.053296289892 1271.000000000000 +161.096235386258 1578.421630859375 +164.142270683686 1217.000000000000 +170.094887803481 2717.008544921875 +170.968792401520 2390.000000000000 +171.137329533636 9794.265625000000 +172.136840902698 2122.000000000000 +172.168466786332 1309.672119140625 +173.079514403953 7730.000000000000 +174.990695602365 1337.972656250000 +177.054653270806 1487.000000000000 +178.158403800321 1799.193237304688 +179.105583290233 3646.174560546875 +182.960823278834 1922.372802734375 +182.986018115359 1341.532470703125 +186.220896557034 1469.000000000000 +194.116385994522 3228.431884765625 +195.101721591860 1761.497314453125 +195.120840048138 2139.872070312500 +198.184759772344 2245.000000000000 +200.198358143313 1177.926513671875 +209.152634370621 1389.980712890625 +217.106353356190 24341.000000000000 +218.109655666691 2974.806884765625 +219.095036364843 2223.419921875000 +224.127894084409 1278.478759765625 +228.195273215592 1674.000000000000 +236.167137123771 1456.000000000000 +239.088416675585 3867.606689453125 +242.282513583885 1277.000000000000 +246.861185203855 3901.000000000000 +249.182714411045 1537.000000000000 +250.178392714940 1258.000000000000 +250.999007399485 2502.000000000000 +252.996469033063 1435.000000000000 +253.914671653353 1239.000000000000 +260.979753981104 14440.506835937500 +261.982083120224 1659.000000000000 +262.976384632325 1466.000000000000 +267.171781473257 1284.615478515625 +277.200008538434 5514.000000000000 +279.092542460055 2184.000000000000 +281.050041935527 1782.000000000000 +292.121077385471 225397.000000000000 +293.123076709567 37677.234375000000 +294.118496498528 72202.039062500000 +295.120481083763 12277.000000000000 +296.122922541254 1529.722534179688 +299.182168197771 3169.000000000000 +304.298453938228 1206.488281250000 +318.011978476534 6627.000000000000 +322.257925183826 1680.000000000000 +327.007860740219 3296.000000000000 +329.003921677419 3051.000000000000 +331.002277995733 1209.000000000000 +339.994321798017 30539.392578125000 +340.996727216497 4443.000000000000 +341.991298278029 3214.898193359375 +351.926939354897 2576.000000000000 +353.925624186681 1528.262939453125 +355.967794750582 1676.749389648438 +363.070157834182 5926.000000000000 +379.934179014433 2532.000000000000 +381.930242914518 1263.000000000000 +445.118947651762 2644.000000000000 +505.851615177973 4750.000000000000 +522.877878746579 2136.000000000000 +529.887991001196 1339.000000000000 +536.163681670628 5319.764160156250 +537.164689652602 2801.000000000000 +538.163060633683 2127.000000000000 +544.338383816682 1327.000000000000 +546.914418903411 2791.000000000000 +547.911772088961 1197.000000000000 +610.182643718635 2184.000000000000 +611.184358419061 1263.000000000000 +645.154326732470 4086.000000000000 +646.158388244596 1322.000000000000 +647.153421689114 4193.000000000000 +648.155059129677 1544.000000000000 +649.151941293891 1547.000000000000 +671.046678825629 4046.000000000000 +672.049764904672 1509.000000000000 +673.044229478168 4164.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=661 experiment=4 +##m_id Cyproconazole_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=661 experiment=4_0 +##scan 39 +##specref ms_run[1]:sample=1 period=1 cycle=661 experiment=4 +69.069782720526 75.000000000000 +69.075037200335 72.171691894531 +69.833112312395 75.000000000000 +69.843591471427 60.000000000000 +70.039928634265 13088.292968750000 +70.319666133547 15.000000000000 +89.038675227825 135.000000000000 +98.999711365249 75.000000000000 +110.999837825429 45.000000000000 +124.625194151181 42.994541168213 +124.642697348778 60.000000000000 +125.014756270469 8204.791015625000 +128.059856883403 30.000000000000 +129.068987922921 30.000000000000 +137.001555355407 45.000000000000 +137.012360970077 45.000000000000 +138.995547268225 330.000000000000 +139.030941733198 30.000000000000 +141.069593086757 45.000000000000 +142.076344647709 75.000000000000 +151.025488198283 30.000000000000 +155.057537358319 15.000000000000 +155.084546775978 30.000000000000 +163.031632720579 30.000000000000 +165.052030425682 45.000000000000 +292.123662525593 418.000000000000 +>compound 1_18386993698014176665-675005--113--UNKNOWN +>parentmass 304.118832214819 +>ionization [M+H]1+ +>charge 1 +>rt 446.172000000000 +##fmz 304.118832214819406 +##fid 18386993698014176665 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +304.118832214819 3569184.783728866838 +305.111339121164 309883.178195710818 +>ms1peaks +52.005429962927 2874.067626953125 +53.013488092548 14817.291015625000 +54.009250374962 334494.937500000000 +55.006084606761 5488.883300781250 +55.011047738293 6443.265136718750 +55.054381628314 2385.724365234375 +55.934070669618 5486.966796875000 +56.942036090778 2313.250244140625 +59.049556209203 57988.484375000000 +60.044347260401 9323.001953125000 +61.039167560780 1828.241455078125 +63.997923021227 4927.193359375000 +64.004932691950 5181.531250000000 +68.011552270537 27280.974609375000 +68.993634139472 11798.143554687500 +69.044334270747 12566.409179687500 +72.936570834957 2193.115966796875 +73.063872777826 1681.879882812500 +76.486053959604 2158.190429687500 +79.020753207512 16147.697265625000 +80.048886066869 12139.645507812500 +81.936907500524 8343.286132812500 +82.996250408243 8009.000000000000 +87.042980895665 1166.738403320312 +87.053972860944 1485.116088867188 +89.506705194324 1444.000000000000 +90.488891330057 1645.000000000000 +91.053476545401 1583.000000000000 +95.952210208006 2039.742797851562 +97.968150682366 6945.562500000000 +100.074718244150 1363.000000000000 +102.090306392772 1417.000000000000 +109.942448236827 1253.000000000000 +113.962708637249 2032.000000000000 +114.090792284548 10306.000000000000 +118.084892277491 5540.821289062500 +122.095166173318 3378.000000000000 +122.962913232208 9579.000000000000 +123.091195975991 1531.662963867188 +130.157764407919 1286.000000000000 +136.020428292954 1633.000000000000 +141.090127789620 1346.968627929688 +141.112042976374 1656.172241210938 +141.957142368171 13820.262695312500 +147.089971164701 2287.525390625000 +149.022027180229 4587.050292968750 +149.040978245649 2678.199707031250 +151.095856455214 2104.623291015625 +151.110429192129 2233.988037109375 +155.068837159282 1322.053710937500 +155.973356955881 4212.000000000000 +158.153011960091 10898.886718750000 +161.095284178342 1762.593994140625 +164.141720682546 1224.125244140625 +170.095143568643 2743.236816406250 +173.079445020465 6455.588378906250 +174.990181271009 1164.000000000000 +175.126264328958 1229.927246093750 +178.157011972493 1362.000000000000 +179.105369890054 1931.000000000000 +182.960638968270 1810.076538085938 +182.983125598895 1274.763061523438 +186.016954934375 1958.000000000000 +186.220415397417 1282.000000000000 +193.158240520354 1195.032958984375 +194.115937912419 2861.000000000000 +195.121022485646 2380.102539062500 +198.183707422577 1745.000000000000 +200.199383225092 1357.000000000000 +201.983259096536 4157.000000000000 +217.007242135614 11741.327148437500 +217.105963587093 15482.668945312500 +218.009949414252 1208.000000000000 +218.108958783015 2547.000000000000 +219.093633048806 1319.448730468750 +234.033582693957 12770.000000000000 +235.037603512480 1379.336669921875 +239.087766278998 3286.875732421875 +242.283333142943 1269.000000000000 +245.038366204801 2525.000000000000 +246.860868473188 2768.000000000000 +249.183726045021 1277.861328125000 +250.999502407170 2552.000000000000 +252.995631834554 1836.000000000000 +262.065239894604 21394.767578125000 +263.067572169870 2404.000000000000 +264.061891103771 1243.000000000000 +276.080813947841 32185.000000000000 +277.083963767141 4114.000000000000 +278.078054160446 2217.000000000000 +279.092495265569 1940.000000000000 +281.050419778851 1367.000000000000 +284.163590469925 9332.000000000000 +285.167331910184 2517.000000000000 +289.119964437534 1441.302978515625 +292.119508242518 1546.000000000000 +303.104642799152 3336.000000000000 +303.191168270618 2846.093505859375 +304.118917204532 886697.062500000000 +304.856339026942 1419.656616210938 +304.975022441588 5892.455566406250 +305.107897820025 60098.996093750000 +306.110158464267 52147.246093750000 +307.111260806590 6616.670410156250 +307.247283236566 2744.782226562500 +310.120139525907 4017.412597656250 +320.106832165572 5127.000000000000 +321.110457254103 1231.635253906250 +321.131042046566 1226.668579101562 +326.094185610162 39581.000000000000 +327.007439325330 3479.883544921875 +327.096485748553 6323.979980468750 +328.091424657873 2476.325927734375 +329.002736488496 3916.000000000000 +330.204957173578 17861.789062500000 +331.208137127779 4322.000000000000 +342.068068201427 2858.656982421875 +349.169386508932 18308.152343750000 +350.172289812388 3575.000000000000 +351.169114792649 1326.000000000000 +352.185338388432 1383.838623046875 +372.148023932598 2199.032714843750 +380.334421867930 1500.000000000000 +404.036203084131 8110.000000000000 +405.038280600419 1614.000000000000 +445.117639958471 2103.000000000000 +500.274765830931 9506.000000000000 +501.278189264574 2845.197509765625 +502.287108152553 1738.000000000000 +505.850965822120 2506.000000000000 +536.163265279090 5123.811523437500 +537.164206705990 2452.000000000000 +538.160787955733 1794.000000000000 +544.336478775213 1764.000000000000 +546.913227478942 1570.434814453125 +549.964589119831 1398.000000000000 +607.215848916045 42716.000000000000 +608.219229396365 13004.000000000000 +609.215354074706 6569.000000000000 +610.191475231986 3658.000000000000 +611.187180591379 1650.000000000000 +612.219311132493 2717.000000000000 +613.224098373297 22062.000000000000 +614.227279534381 7018.149414062500 +615.222828016202 3443.000000000000 +623.211028873207 1301.000000000000 +629.198230629944 46218.000000000000 +630.201437914669 14408.000000000000 +631.197842259138 6467.000000000000 +632.198694915122 1400.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=675 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=675 experiment=5_0 +##scan 113 +##specref ms_run[1]:sample=1 period=1 cycle=675 experiment=5 +51.025230191010 60.000000000000 +53.042474404052 45.000000000000 +58.995209811857 285.000000000000 +60.080905436478 1803.923461914062 +65.038735029139 45.000000000000 +77.038622051882 332.000000000000 +78.045973004466 60.000000000000 +79.053817998651 539.000000000000 +79.990848874925 300.000000000000 +91.054001664442 620.000000000000 +93.068645217008 370.000000000000 +95.049052730571 45.000000000000 +97.010676625187 890.000000000000 +103.053787209201 291.000000000000 +104.061084742769 150.000000000000 +105.068334920325 38.785545349121 +107.048476065256 2240.160888671875 +107.072432955012 135.000000000000 +108.055792255651 1061.000000000000 +109.063970513485 264.350006103516 +110.016978522096 165.000000000000 +111.025272603771 75.000000000000 +118.074140251592 45.000000000000 +121.009130624023 548.000000000000 +121.029958953434 60.535709381104 +122.017298486385 980.000000000000 +122.036506966533 227.800430297852 +125.041266230161 262.000000000000 +134.018538775237 60.000000000000 +134.073916170563 45.000000000000 +134.095695488835 45.000000000000 +135.026161726804 534.000000000000 +135.078487450095 90.000000000000 +137.006305675560 313.000000000000 +137.040979968925 1778.926025390625 +138.012727979825 1464.000000000000 +139.020309257361 1024.000000000000 +140.027069020713 150.000000000000 +140.591866048816 30.000000000000 +141.011260927571 75.000000000000 +150.046751311030 105.000000000000 +151.021299475346 150.000000000000 +152.576168311708 60.000000000000 +152.998044511193 75.000000000000 +153.036074179846 6124.000000000000 +154.043709586541 210.000000000000 +154.068241390455 62.952999114990 +154.972722850633 330.000000000000 +155.052161537136 3686.873535156250 +165.043680396210 45.000000000000 +168.986761486121 8191.273437500000 +169.003111638348 7602.300781250000 +170.010033115696 45.000000000000 +173.035848580677 30.000000000000 +180.985431825642 60.000000000000 +181.052453612627 45.000000000000 +181.070315448994 45.000000000000 +183.018664996496 135.000000000000 +183.973342047871 75.000000000000 +184.026572772516 45.000000000000 +184.419112957683 30.000000000000 +184.981576709492 6491.000000000000 +186.996738133410 343.000000000000 +187.039366781676 45.000000000000 +197.034096977050 45.000000000000 +198.015599522243 45.000000000000 +198.997463487937 4190.000000000000 +200.976234887806 1639.719970703125 +200.999328730996 1443.055786132812 +201.375560498466 330.000000000000 +201.984744162441 63752.667968750000 +202.025092005346 214.887084960938 +202.151693094227 45.000000000000 +202.176315801779 45.594470977783 +202.419371448987 60.000000000000 +202.437288231128 45.000000000000 +202.500019618456 60.000000000000 +202.517624485801 48.558765411377 +202.648988098710 45.000000000000 +202.993585993201 150.000000000000 +203.108544868346 30.000000000000 +203.121478592138 45.000000000000 +204.132231430480 45.000000000000 +204.153026361689 45.000000000000 +214.991727371784 945.000000000000 +216.023012287561 843.000000000000 +216.355082188226 442.000000000000 +216.385654222669 90.000000000000 +216.964403576794 59.121311187744 +217.008494855200 125901.000000000000 +217.056166733144 228.620422363281 +217.174442197011 75.000000000000 +217.205900295791 55.864074707031 +217.396324549254 45.000000000000 +217.415518436779 74.666610717773 +217.442451066205 47.380496978760 +217.588006413291 45.000000000000 +217.621801811369 31.066198348999 +217.664328232764 90.000000000000 +217.679728975131 105.000000000000 +217.706002637447 60.000000000000 +217.757983028729 60.000000000000 +217.809934792328 48.510864257812 +217.841984466983 139.269760131836 +217.883101217311 43.148494720459 +217.943854175255 89.818382263184 +217.964694239548 105.000000000000 +218.011068530749 180.000000000000 +218.072232357054 75.000000000000 +218.098922642672 84.849304199219 +218.265989620271 31.124542236328 +218.280034633009 37.702697753906 +218.308801511389 90.247619628906 +218.328355039950 90.000000000000 +218.387581973378 45.000000000000 +218.446704980964 75.000000000000 +218.467978540240 90.000000000000 +218.695018142784 70.259552001953 +218.719948225804 67.364746093750 +218.789254676702 45.000000000000 +218.813580838430 45.000000000000 +218.846289402485 45.000000000000 +218.995968780702 105.000000000000 +219.012218895710 101.918548583984 +219.303339997865 45.000000000000 +219.325838359475 45.000000000000 +219.388058465824 45.000000000000 +219.459153843468 30.000000000000 +219.739233899158 30.000000000000 +220.670213104301 45.000000000000 +220.686553112587 45.000000000000 +227.030058630938 60.000000000000 +229.004458545685 45.000000000000 +229.988914935534 523.873046875000 +230.015305123973 1019.361999511719 +233.326493414012 45.000000000000 +234.034608098264 14349.000000000000 +235.040675886350 60.000000000000 +241.043552600133 60.000000000000 +244.017269590781 45.000000000000 +244.046131119763 33.784996032715 +245.039409146005 1613.000000000000 +258.074029499555 150.000000000000 +259.054432449659 75.000000000000 +262.032514350373 638.202148437500 +262.065722539033 1269.000000000000 +275.250410575562 45.000000000000 +275.276233367382 45.000000000000 +276.082221466818 3389.000000000000 +304.114900229964 1271.000000000000 +>compound 1_11941333258820146302-663003--50--UNKNOWN +>parentmass 313.038703270813 +>ionization [M+H]1+ +>charge 1 +>rt 436.497000000000 +##fmz 313.038703270813244 +##fid 11941333258820146302 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +313.038703270813 90349.665873127466 +>ms1peaks +52.005966180500 2509.332031250000 +53.013507369873 14095.641601562500 +53.850970390711 1246.033935546875 +54.009372281497 342031.000000000000 +55.006163575275 5705.965820312500 +55.011387270805 6127.473144531250 +55.054184206823 1848.058593750000 +55.934334911976 6140.810546875000 +56.049690767818 1330.017089843750 +56.942074959092 2606.667480468750 +59.049518267006 56697.359375000000 +60.044566292185 9567.453125000000 +60.051796148101 5984.580078125000 +61.039393490257 1915.440551757812 +63.997909973617 3748.628417968750 +64.005283923938 4326.699218750000 +68.011628084817 27292.236328125000 +68.993816323075 12618.667968750000 +69.032897101129 1379.142456054688 +69.044540912933 13986.380859375000 +72.936558146637 2579.000000000000 +73.064228849484 1913.000000000000 +76.486180881623 2682.000244140625 +79.021000086474 14334.086914062500 +80.049089873152 11904.342773437500 +81.937137428830 9328.000000000000 +82.996717483329 9530.261718750000 +87.044278019735 1244.984619140625 +87.054474952312 1464.973510742188 +89.506620387415 1797.000000000000 +90.489369315210 1750.000000000000 +91.053371587935 1520.000000000000 +95.952544398364 2306.000000000000 +97.967985008693 7122.677246093750 +98.983597639133 2707.236572265625 +102.090693288494 2155.000000000000 +109.942639865272 1479.000000000000 +113.962988365185 2088.000000000000 +114.090715282838 10161.079101562500 +118.085459870469 7107.342285156250 +122.095676141264 3819.024658203125 +122.963182714449 11743.000000000000 +123.091076294906 1884.834838867188 +123.962710172625 1278.000000000000 +130.158549361780 1309.000000000000 +132.043510097675 6102.050781250000 +136.020884350350 1696.428710937500 +136.110913014003 1219.864746093750 +141.090089283606 1510.582885742188 +141.112164115087 1395.173217773438 +141.957727661927 16172.547851562500 +147.090953742167 2593.000000000000 +149.022660175650 5113.270019531250 +149.042184219595 2270.130126953125 +151.095573062425 2291.701904296875 +151.109764648433 2508.697753906250 +155.069421770644 1304.007690429688 +155.105956399660 1556.186767578125 +155.973291029133 4647.000000000000 +158.153352334475 13909.827148437500 +159.156157365710 1453.476074218750 +160.049315575157 1807.000000000000 +161.095748922100 1676.696289062500 +164.141989249057 1365.831665039062 +170.095477046624 2501.143554687500 +171.138013785490 3982.982177734375 +172.134863309732 1431.708251953125 +173.080523810193 6956.130371093750 +174.991175918913 9969.217773437500 +176.988389097507 3050.117675781250 +177.054118074174 1458.434448242188 +178.157975354817 1551.791381835938 +179.106014386017 6976.000000000000 +182.960744773798 1855.346191406250 +182.979834217019 1800.970458984375 +186.220995397905 2442.000000000000 +194.116040015282 3148.000000000000 +195.104779764897 1691.220825195312 +195.121820949901 2158.996582031250 +198.184910946765 2078.562744140625 +217.106618021168 23378.933593750000 +218.110011440618 2630.000000000000 +219.095176701267 2434.000000000000 +228.195374276500 1663.423095703125 +235.168383933758 1236.068969726562 +236.166825939935 1254.000000000000 +239.088686366357 4311.829589843750 +242.284913917132 1324.000000000000 +246.862288674394 3536.000000000000 +249.184859994698 1408.000000000000 +250.178788935105 1421.692382812500 +250.999929283760 20029.000000000000 +252.003012365740 1411.418090820312 +252.997001503914 12765.000000000000 +254.993768386515 1938.000000000000 +260.980022779583 1808.000000000000 +267.171368540006 1448.377807617188 +277.200433490599 1660.000000000000 +279.093759730917 2119.000000000000 +281.051032806120 1483.000000000000 +291.237715025520 1241.364013671875 +292.121361150912 285183.000000000000 +293.123834428448 45555.277343750000 +294.118427695985 93122.570312500000 +295.120641413580 15470.696289062500 +296.123835906431 1561.000000000000 +313.039035562555 16422.000000000000 +314.041466363413 2766.000000000000 +315.036563511042 10824.000000000000 +316.039700661579 1830.000000000000 +317.034195270562 1773.448120117188 +321.226781744505 2044.000000000000 +327.008089983734 28336.265625000000 +328.011190071085 2858.514404296875 +329.005295881569 27689.000000000000 +330.008649187278 3052.000000000000 +331.002098826780 9057.932617187500 +333.003548365368 1609.000000000000 +335.018062590141 2124.000000000000 +339.950891675362 1270.914672851562 +339.994456530817 4579.000000000000 +348.990164564731 4627.000000000000 +350.986598107700 4290.000000000000 +372.065686169920 4230.000000000000 +374.062221925680 3509.000000000000 +376.059337391009 1282.000000000000 +392.047236888469 1599.000000000000 +395.069603447750 1690.000000000000 +397.066731969223 1427.000000000000 +428.928860183743 1238.358520507812 +430.887744920288 1367.548706054688 +445.120189406834 2253.000000000000 +505.852818670435 4262.000000000000 +506.855243935787 1464.000000000000 +522.879200969200 1903.639038085938 +529.890071522891 1483.417846679688 +536.164962577408 4542.000000000000 +537.166020159870 2688.000000000000 +538.164211996041 1760.000000000000 +544.339325990071 1415.000000000000 +546.913817544760 2912.000000000000 +547.914903230189 1254.000000000000 +610.183749066707 2160.000000000000 +611.183884033885 1283.000000000000 +645.156997893402 7650.000000000000 +646.160667456787 3315.000000000000 +647.154701516229 9174.000000000000 +648.157895170257 3104.000000000000 +649.152380094183 3397.000000000000 +673.045753694998 1272.428222656250 +>ms2peaks +##n_id sample=1 period=1 cycle=663 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=663 experiment=3_0 +##scan 50 +##specref ms_run[1]:sample=1 period=1 cycle=663 experiment=3 +79.054534010328 30.000000000000 +81.069024421900 75.000000000000 +138.997340989450 30.000000000000 +146.973850300653 30.000000000000 +150.993294957568 30.000000000000 +152.064927694190 45.000000000000 +156.961224883657 842.000000000000 +158.975205667710 360.000000000000 +165.069897758503 30.000000000000 +170.975051884785 30.000000000000 +172.953347267476 75.000000000000 +174.969622660121 45.000000000000 +179.085562211052 150.000000000000 +184.954446069391 901.000000000000 +186.974009154470 60.000000000000 +188.019125882175 20.250818252563 +188.041595099939 27.989727020264 +198.970267195566 45.000000000000 +199.003336715238 30.000000000000 +199.022915165548 30.000000000000 +204.033776256140 60.000000000000 +204.069004228345 18.236137390137 +208.993398028951 60.000000000000 +212.950028404695 799.000000000000 +213.043299647071 45.000000000000 +214.054672340147 120.000000000000 +214.964896120028 180.000000000000 +230.962098026426 180.000000000000 +238.999390755164 165.000000000000 +249.024795643907 75.000000000000 +267.035582268648 105.000000000000 +277.017494808075 30.000000000000 +295.029960009017 195.000000000000 +313.033105483710 45.000000000000 +>ms1peaks +52.005453969998 2626.723144531250 +53.013597312446 12728.553710937500 +53.850414409821 1250.853881835938 +54.009329210909 348334.937500000000 +55.006062122532 5392.668457031250 +55.011342055713 6236.111816406250 +55.054021350211 1869.273437500000 +55.934286374440 6315.563964843750 +56.941831842622 2597.011962890625 +59.049520241177 68985.562500000000 +60.044238693811 9277.411132812500 +60.051306561624 7152.463378906250 +61.039638104919 1556.488891601562 +63.997844257749 4543.386718750000 +64.004868648059 4706.500976562500 +68.011536869512 28038.335937500000 +68.993647464953 12595.196289062500 +69.044515645070 12865.375976562500 +72.936647087938 2567.000000000000 +73.064121365067 1769.925781250000 +76.486182586418 2785.377929687500 +79.020888115541 15628.571289062500 +80.049060365715 12153.072265625000 +81.936978966817 8495.000000000000 +82.996309100211 9038.668945312500 +87.043494139885 1178.190917968750 +87.054319172330 1546.054443359375 +89.506956806916 1559.000000000000 +90.488703688296 1817.000000000000 +91.053777911785 1528.745483398438 +95.952341177386 2260.741210937500 +97.968210936145 7024.000000000000 +98.983399057372 5034.887695312500 +100.075304888654 1243.000000000000 +102.090957068479 1525.000000000000 +109.943109012828 1320.928710937500 +113.962992754591 2498.000000000000 +114.090728474154 10512.617187500000 +118.085470631803 6601.458007812500 +122.095607083049 3712.721679687500 +122.962888411087 10607.500976562500 +123.091509718457 1686.104614257812 +132.043186178558 2464.123291015625 +136.020620151667 1645.000000000000 +140.067164786600 1314.000000000000 +141.089863109573 1272.675292968750 +141.111890586678 1562.626220703125 +141.957557081223 15988.394531250000 +147.090173997086 2431.000000000000 +149.022336160605 4523.349121093750 +149.043636850784 1223.066040039062 +151.095789721496 2301.788818359375 +151.111113393103 2538.584228515625 +155.069111807472 1549.374267578125 +155.105759874764 1515.979370117188 +155.973112787773 4487.000000000000 +158.153378740203 12758.589843750000 +159.156448385204 1328.413452148438 +161.095542076597 1436.000000000000 +164.142018358830 1273.736083984375 +170.095175686942 2849.232421875000 +171.138207188731 2555.000000000000 +172.133475837479 1266.057739257812 +173.079557051502 6304.225097656250 +174.991247355031 15122.000000000000 +176.988586706089 4881.000000000000 +178.158242399689 1403.950073242188 +179.105412805866 3814.716552734375 +182.960601426951 1842.280639648438 +182.982966835265 1410.150146484375 +186.220883153188 1802.000000000000 +194.115976643286 3119.000000000000 +195.102214753451 1498.057617187500 +195.120897037407 1858.993774414062 +198.184171488074 2116.000000000000 +217.106332787106 21497.787109375000 +218.109128733639 2613.000000000000 +219.095226750847 2102.304443359375 +224.127626531368 1175.000000000000 +228.195317705032 1672.133422851562 +239.088374855672 3685.309814453125 +242.283185310790 1468.000000000000 +246.860952738993 3049.000000000000 +249.183720846634 1286.295654296875 +250.177140311956 1205.756591796875 +250.999832075601 32001.000000000000 +252.002106420824 2157.000000000000 +252.996924958467 20204.000000000000 +253.999797691244 1411.000000000000 +254.993496356863 3401.000000000000 +279.092906188567 2036.000000000000 +286.179288894577 8400.000000000000 +287.181689656808 1994.078002929688 +287.217541902151 1349.643310546875 +291.235948805059 1485.048828125000 +292.122314491142 439122.000000000000 +292.983059595137 1438.034667968750 +293.122671084767 47692.136718750000 +294.118451514065 133013.562500000000 +295.120454982262 22502.744140625000 +296.122607984390 2357.932373046875 +313.039105768504 33266.000000000000 +314.042149111497 5168.000000000000 +315.036268416268 21007.242187500000 +316.038403197349 3302.000000000000 +317.033014483539 3862.000000000000 +321.227057921370 1381.000000000000 +327.007877449001 47611.566406250000 +328.011115186819 4973.000000000000 +329.004794999861 46547.000000000000 +330.008005603352 4737.000000000000 +331.001868162022 15538.000000000000 +332.004876313775 1480.000000000000 +333.003299668985 2744.071777343750 +335.018886982057 3585.000000000000 +337.016084576435 2205.000000000000 +339.994390073568 1754.000000000000 +348.988792788967 6573.000000000000 +350.986916484867 6721.000000000000 +352.984603835989 2083.000000000000 +354.041095041215 1340.092163085938 +356.039619641072 1269.081298828125 +372.065048824891 6209.586914062500 +374.062468004687 6086.000000000000 +376.059148229590 1968.000000000000 +392.045330940334 2193.000000000000 +395.067648242738 2230.000000000000 +397.066134815272 1581.000000000000 +426.930515343123 1306.000000000000 +426.976513054277 1169.811889648438 +428.927149366436 1298.000000000000 +430.886640350010 1403.000000000000 +445.118913900930 2269.000000000000 +491.969645058197 1379.000000000000 +505.851389825487 3789.000000000000 +522.878326149515 1800.000000000000 +536.163456762234 4427.000000000000 +537.165324404735 2206.000000000000 +538.161529742511 1590.843383789062 +544.337468455008 1195.000000000000 +546.914116937371 2559.000000000000 +547.911876414748 1196.000000000000 +610.180850219782 2080.000000000000 +611.182328195703 1214.000000000000 +645.154717656738 8484.000000000000 +646.158700037782 2782.000000000000 +647.152980374288 9942.000000000000 +648.155555240546 3294.000000000000 +649.150621117204 4284.000000000000 +650.152709955400 1200.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=664 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=4_0 +##scan 58 +##specref ms_run[1]:sample=1 period=1 cycle=664 experiment=4 +67.052860010023 60.000000000000 +67.055622152498 60.000000000000 +81.069428964487 45.000000000000 +81.077587109471 45.000000000000 +103.058281594513 30.000000000000 +110.998196456129 30.000000000000 +111.009859654407 30.000000000000 +138.996284531066 60.000000000000 +139.011800641272 60.000000000000 +150.023220788635 30.000000000000 +152.066111503787 45.000000000000 +153.067329858556 30.000000000000 +156.959221707615 1422.000000000000 +158.975323377537 573.000000000000 +167.998485094510 75.000000000000 +168.054963100567 45.000000000000 +170.978736884857 30.000000000000 +170.989580124746 30.000000000000 +172.952683092322 15.000000000000 +172.994922272365 30.000000000000 +174.970336993994 45.000000000000 +178.078063806293 150.000000000000 +179.083834729450 180.000000000000 +182.975542373838 150.000000000000 +184.954422686375 1843.000000000000 +184.992879568467 48.715236663818 +186.968700625415 75.000000000000 +194.975613857505 30.000000000000 +194.991095982443 30.000000000000 +196.990058954009 60.000000000000 +199.008102021282 45.000000000000 +199.030178886815 45.000000000000 +201.048040457878 30.000000000000 +202.965285319444 45.000000000000 +204.036034755587 90.000000000000 +207.082759367559 30.000000000000 +208.990721337596 30.000000000000 +212.950645803637 1638.000000000000 +212.986769086209 148.526763916016 +213.046844646179 90.000000000000 +213.955156667542 15.000000000000 +214.051741312846 150.000000000000 +214.966808128885 135.000000000000 +217.035226498901 30.000000000000 +223.003713665023 45.000000000000 +224.986874913994 60.000000000000 +230.919675166084 15.000000000000 +230.960902234020 405.000000000000 +232.066177190226 30.000000000000 +239.002766522535 165.000000000000 +239.042628345807 15.000000000000 +242.055948459935 75.000000000000 +249.024370713899 105.000000000000 +266.994560803543 160.405776977539 +267.030177175817 247.000000000000 +277.016316391148 75.000000000000 +295.030764387377 675.000000000000 +313.036686987791 210.000000000000 +>ms1peaks +52.005349834334 2531.576904296875 +52.017818445883 1415.950317382812 +53.013312992683 14436.391601562500 +53.850256514170 1311.865234375000 +54.009237809188 346906.656250000000 +55.005700977113 5493.924316406250 +55.011578128004 6377.684570312500 +55.053978874167 1984.071533203125 +55.933999133980 6168.766601562500 +56.049511919157 2977.762207031250 +56.942056567735 2284.776855468750 +59.049350876787 53629.328125000000 +60.044322757483 8600.164062500000 +61.039156449004 1644.316650390625 +63.997508188870 3394.982910156250 +64.005057234464 4259.679687500000 +67.029035810216 2293.846923828125 +68.011280581573 27100.835937500000 +68.993371510951 13738.876953125000 +69.007497995886 1441.296142578125 +69.044403084909 13070.419921875000 +72.936195718172 2643.000000000000 +73.063931102643 1919.621459960938 +76.486167754556 1986.000000000000 +79.020619039319 14111.753906250000 +80.048823728166 11369.215820312500 +81.936905757296 8703.630859375000 +82.996214707689 8986.651367187500 +87.054271044459 1595.093627929688 +89.505822079267 1760.000000000000 +90.488874903389 1822.018798828125 +91.053163445835 1300.610839843750 +95.952331345900 2696.000000000000 +97.967781752031 7299.724609375000 +98.982987677469 4854.522460937500 +102.090290867080 1906.000000000000 +109.942394870381 1583.000000000000 +113.962086127466 2074.000000000000 +114.090395399108 10058.849609375000 +118.084999014032 6547.758789062500 +122.095088721755 3711.124511718750 +122.962603857586 10794.167968750000 +123.090649527845 1803.942016601562 +123.961855384374 1203.000000000000 +130.157739418261 1256.000000000000 +136.020039379796 2083.000000000000 +136.110849290905 1530.000000000000 +141.089744053815 1237.175415039062 +141.111592847426 1371.696777343750 +141.957218960001 15367.227539062500 +147.090011968413 2463.000000000000 +149.021828990169 4784.995605468750 +149.041466762922 2472.640625000000 +151.095944798794 2940.508300781250 +151.109341918543 3165.085693359375 +155.069344508958 1582.135864257812 +155.105135879836 1693.281616210938 +155.972287468254 4554.340332031250 +158.152759351824 13585.107421875000 +159.156196357366 1465.921386718750 +159.967851357038 1225.276977539062 +161.095405694183 1641.000000000000 +164.141615127090 1478.434814453125 +170.094609622000 2457.688476562500 +171.141467030026 1915.000000000000 +173.079379445344 6273.838867187500 +174.990844938283 15688.865234375000 +176.987639364551 5360.525878906250 +177.052467267277 1475.000000000000 +178.157540067017 1547.000000000000 +179.105091602082 3287.998779296875 +182.959873591311 1986.817871093750 +186.220399692631 1658.000000000000 +194.115345005627 3116.000000000000 +195.120929712058 1968.662841796875 +198.184276303297 2015.000000000000 +217.105977610050 20924.755859375000 +218.108820705353 2495.792236328125 +219.094022022929 1823.679443359375 +228.194066029155 1666.038696289062 +239.087872978056 3722.000000000000 +242.282423819470 1362.000000000000 +246.860857987495 3450.000000000000 +249.182928857496 1266.000000000000 +250.177066939258 1504.335083007812 +250.999117678898 32221.000000000000 +252.001781095835 2314.000000000000 +252.995932699016 21462.000000000000 +253.998953923887 1371.000000000000 +254.993033756740 3403.000000000000 +267.170032496706 1345.000000000000 +279.092268016151 1928.000000000000 +281.050459546987 1487.000000000000 +286.178655880094 23309.207031250000 +287.182133845414 5196.471191406250 +291.235317712341 1559.882568359375 +292.121093988068 399090.000000000000 +292.982663908460 1255.682128906250 +293.023857907805 1542.287597656250 +293.121921829592 49425.335937500000 +294.117639052994 123150.929687500000 +295.119583284786 21162.347656250000 +296.122453171108 2024.725219726562 +304.297977116061 1205.098876953125 +311.183844763032 2282.703613281250 +313.038450493324 32210.287109375000 +314.041319280533 5035.671875000000 +315.035461346507 21071.000000000000 +316.038196392607 3544.000000000000 +317.032926032719 3656.000000000000 +327.007662782866 46713.000000000000 +328.009753952920 4731.131347656250 +329.004141727930 46254.000000000000 +330.006788270317 4440.000000000000 +331.000792355787 15238.000000000000 +332.003743171067 1635.000000000000 +333.001048030235 2840.547363281250 +335.018066518429 3857.000000000000 +337.016490283319 2257.000000000000 +348.988206068721 7382.000000000000 +350.985085465325 7259.000000000000 +352.983081816715 2462.000000000000 +354.041092701990 1411.000000000000 +358.095358680256 1344.000000000000 +372.064528986026 6467.495117187500 +374.061053722203 5695.000000000000 +376.059656060961 2211.000000000000 +392.044067632616 2143.000000000000 +395.066337210837 2288.000000000000 +397.065352026340 1841.000000000000 +428.895605409648 1348.684326171875 +428.927859796300 1412.000000000000 +445.117454275133 2106.000000000000 +491.967681975778 1277.000000000000 +505.850908455770 4139.747558593750 +522.876740252438 1800.000000000000 +536.161867901498 4607.000000000000 +537.162257475039 2465.000000000000 +538.160527239899 1695.000000000000 +544.336437856300 1324.164184570312 +546.911854407175 2375.000000000000 +547.911013918907 1216.000000000000 +610.179211400596 2165.000000000000 +611.181197363117 1284.000000000000 +645.153892760480 7294.000000000000 +646.156182811867 3135.000000000000 +647.151735773867 8987.490234375000 +648.154489817139 3184.000000000000 +649.150180493474 3821.591308593750 +650.151352616891 1194.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=665 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=665 experiment=6_0 +##scan 69 +##specref ms_run[1]:sample=1 period=1 cycle=665 experiment=6 +67.053909584653 45.000000000000 +69.033542873165 13.000000000000 +79.058030256646 30.000000000000 +81.071734674950 30.000000000000 +81.077520980836 30.000000000000 +91.053098777872 13.000000000000 +109.060313103905 13.000000000000 +138.993471049311 30.000000000000 +149.023896935008 30.000000000000 +150.017107851047 13.000000000000 +156.959451948594 749.000000000000 +158.976159750666 460.000000000000 +162.031570235371 30.000000000000 +162.399240446876 13.000000000000 +170.977950756921 45.000000000000 +172.956036470090 75.000000000000 +174.971632752174 120.000000000000 +178.077461386559 45.000000000000 +179.086561839318 165.000000000000 +182.975030642321 45.000000000000 +184.955502967338 896.000000000000 +184.992605516328 30.000000000000 +191.998848071163 30.000000000000 +196.997306173106 60.000000000000 +199.034660593666 45.000000000000 +200.984079860705 30.000000000000 +202.966246576670 45.000000000000 +210.115748455489 13.000000000000 +212.949562579619 1107.000000000000 +214.056205506006 60.000000000000 +214.966968499949 90.000000000000 +215.063547094064 30.000000000000 +217.046765511981 30.000000000000 +223.009125324614 45.000000000000 +225.026448920531 30.000000000000 +230.959952529606 285.000000000000 +239.005060800584 75.000000000000 +239.038323483484 100.378295898438 +248.980307720551 35.114593505859 +249.019654122443 105.000000000000 +252.013840214424 30.000000000000 +252.973787534598 13.000000000000 +267.032662567266 345.000000000000 +277.013441128794 30.000000000000 +295.029124243952 728.000000000000 +313.006618779013 150.000000000000 +313.040296521628 165.000000000000 +>compound 1_5585685219772452827-657005--4--Guthion +>parentmass 318.012862565976 +>ionization [M+H]1+ +>formula C10H12N3O3PS2 +>charge 1 +>rt 431.866000000020 +##fmz 318.012862565976377 +##fid 5585685219772452827 +##des Guthion +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +318.012862565976 47593.132286356151 +>ms1peaks +52.005865355475 2936.356689453125 +53.013723515258 15168.868164062500 +53.850400239168 1357.829345703125 +54.009447090145 347607.156250000000 +55.006110218286 6238.441894531250 +55.011508541956 7268.958007812500 +55.054636618089 2136.000000000000 +55.934309116073 6532.552734375000 +56.942275933353 2612.874023437500 +59.049622158630 56011.429687500000 +60.044524012498 9000.792968750000 +61.039481839151 1786.074829101562 +63.997449394256 3736.165039062500 +64.005109595772 4712.666015625000 +68.011792039005 26707.251953125000 +68.993702477550 13633.019531250000 +69.008646447254 1441.886596679688 +69.044733608562 13552.908203125000 +69.494666168807 1088.000000000000 +72.044289477019 1134.000000000000 +72.936653378507 2379.292724609375 +73.064314657279 1947.000000000000 +76.486410468336 2230.000000000000 +77.038532396207 1590.778686523438 +79.021074679723 14557.214843750000 +80.049121781728 13038.990234375000 +81.937384309880 9136.173828125000 +82.996771559276 9647.291015625000 +87.044032478393 1164.202392578125 +87.055030197874 1937.880737304688 +89.506480817586 1633.000000000000 +90.489144644798 1823.000000000000 +91.053978578614 1481.000000000000 +95.952653475183 2798.568603515625 +97.968242662562 7804.676269531250 +100.075124666224 1357.000000000000 +102.091023963336 2105.000000000000 +109.943015773476 1849.492675781250 +113.963173340819 2146.000000000000 +114.091149027124 11434.439453125000 +118.085562888545 7126.602050781250 +122.095450971812 3351.000000000000 +122.963406396921 11429.592773437500 +123.091816714399 1461.405029296875 +123.962989553704 1162.000000000000 +132.043858137010 23466.287109375000 +133.047312261130 2601.019775390625 +136.020979409517 1763.000000000000 +136.111376584671 1338.000000000000 +141.090631531290 1452.329956054688 +141.112250777587 1933.171752929688 +141.957805111647 16272.520507812500 +142.960130525273 1091.785766601562 +147.090889713370 2561.000000000000 +149.022860382613 8952.703125000000 +149.043461527452 2074.399169921875 +151.096439801801 2539.815917968750 +151.111209143750 2693.475830078125 +155.070028482861 1787.522338867188 +155.105375703160 1554.431030273438 +155.973268704769 4467.000000000000 +158.002234575261 1123.180664062500 +158.153819790011 15565.543945312500 +159.136830576290 1251.366088867188 +159.156929350810 1638.817993164062 +159.968015589745 1144.587158203125 +160.050107538005 10862.000000000000 +161.095753069011 1987.528442382812 +163.130314304873 1321.613403320312 +164.142207413101 1344.506469726562 +170.096003050047 2831.750244140625 +170.116393016687 1241.047485351562 +170.969308188165 1467.000000000000 +171.138824143644 1976.471679687500 +172.132816514555 1070.000000000000 +172.169354072833 1126.623413085938 +173.080592066342 7150.673339843750 +174.127101054123 1093.000000000000 +174.991572624579 1115.259887695312 +175.117966507653 1382.413574218750 +177.053956263481 3086.000000000000 +178.158743604693 1737.946655273438 +179.106488149861 2092.017333984375 +182.961571664514 1566.125366210938 +182.982955367691 1389.804321289062 +186.221312636852 2310.000000000000 +194.116506735598 3012.142089843750 +195.121983568600 1971.532348632812 +198.184492106186 2254.000000000000 +199.168659259112 1074.472778320312 +200.200544607050 1265.000000000000 +209.152957718499 1444.000000000000 +215.126858142678 1195.000000000000 +217.107186196782 24662.302734375000 +218.110233972313 2772.000000000000 +219.095202240315 3180.013427734375 +219.137164883586 1444.293090820312 +224.128646207474 1167.206176757812 +228.196369189320 1732.199340820312 +235.170060948981 1264.538574218750 +236.167946332224 2704.449462890625 +239.089160494599 5259.000000000000 +240.068219796793 1277.484863281250 +240.091769691182 1359.958740234375 +242.284200605489 1137.000000000000 +246.863294404574 3891.000000000000 +249.184938071857 1294.474121093750 +250.177914710678 1312.000000000000 +250.999736865556 2366.000000000000 +251.185303455126 1195.000000000000 +252.996845199048 1725.000000000000 +260.980831135670 9681.000000000000 +262.976934337234 1074.000000000000 +267.172286092444 1268.487426757812 +279.093453473919 1954.000000000000 +281.051187832394 1373.000000000000 +287.889696989575 1142.000000000000 +318.012975056617 4878.000000000000 +327.008528574617 3507.000000000000 +329.005288792022 3151.000000000000 +339.995536258518 21188.000000000000 +340.998304727292 3403.000000000000 +341.991615450972 1965.000000000000 +351.928765172494 2752.000000000000 +353.925863637500 1287.000000000000 +355.970345025132 1233.272216796875 +363.071463720139 4333.000000000000 +371.315937786641 1386.000000000000 +379.934517326720 2414.000000000000 +381.932765584480 1355.000000000000 +430.887891579421 1170.000000000000 +445.119501835711 2373.000000000000 +503.857852657168 1208.000000000000 +505.853144541362 5379.000000000000 +506.854406933930 1813.000000000000 +522.880381915172 2380.000000000000 +523.873038712107 1344.000000000000 +529.890971881918 1718.000000000000 +536.164830382665 5050.000000000000 +537.165530578391 2568.000000000000 +538.164082153377 1889.000000000000 +542.919791547930 1233.000000000000 +544.340309842267 1260.000000000000 +544.916740966050 1184.000000000000 +546.914239791284 3795.000000000000 +547.912822025670 1609.000000000000 +563.944002995814 1077.258789062500 +610.183402350979 1851.000000000000 +611.184706508494 1107.000000000000 +696.940078237106 1408.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=657 experiment=5 +##m_id Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=657 experiment=5_0 +##scan 4 +##specref ms_run[1]:sample=1 period=1 cycle=657 experiment=5 +51.024411650566 166.000000000000 +77.038595873029 3035.000000000000 +78.994852705761 195.000000000000 +102.033579338103 169.000000000000 +104.050175822373 488.000000000000 +105.032352182141 910.895751953125 +124.981761234611 1563.000000000000 +130.038666860551 105.000000000000 +132.043763332558 1142.000000000000 +167.019219324624 150.000000000000 +>ms1peaks +52.005717667707 2536.876953125000 +53.013645918459 13517.719726562500 +53.851091408425 1440.814208984375 +54.009479564739 340518.468750000000 +55.006713705873 6189.195800781250 +55.011648330739 5775.918945312500 +55.054395080163 1937.021850585938 +55.934309790351 6216.487304687500 +56.049851096555 1422.552856445312 +56.942103151176 2497.945800781250 +59.049782018324 63557.187500000000 +60.044617957556 9127.332031250000 +61.039564209817 1916.918579101562 +63.998058629288 4341.631347656250 +64.005180932598 4902.907226562500 +68.011727932833 27051.191406250000 +68.994002789359 13611.511718750000 +69.034264524552 2235.962402343750 +69.044867744672 14147.763671875000 +72.936875253829 3080.500976562500 +73.064425531348 1778.781250000000 +76.486297547963 2075.000000000000 +77.038265451054 5099.881835937500 +79.021270792779 14303.786132812500 +80.049179511142 11132.483398437500 +81.937187525733 8269.017578125000 +82.996616277972 9058.604492187500 +87.055191552618 1226.265625000000 +89.506723502083 2138.000000000000 +90.489274059111 1883.000000000000 +91.053872057085 1250.000000000000 +95.952563443877 2416.907226562500 +97.968351278732 7414.000000000000 +102.091075578098 2124.000000000000 +104.049176798538 2869.822265625000 +105.032824057535 2268.302246093750 +109.942659719793 1552.503417968750 +113.963028919819 2876.313476562500 +114.091047730204 9707.000000000000 +118.085960022478 6202.343750000000 +122.095829000463 3354.874755859375 +122.963603572159 10189.080078125000 +123.091990223840 1658.215576171875 +123.962908276753 1264.000000000000 +124.961981387844 1248.617553710938 +124.981468335431 3929.697021484375 +132.044195947098 93934.070312500000 +133.046929709006 8774.461914062500 +136.020849942089 1733.000000000000 +136.111849813683 1360.000000000000 +139.963062553447 1109.337646484375 +141.090358589210 1395.717041015625 +141.112852312471 1316.060180664062 +141.957905703603 16856.453125000000 +142.959660117555 1253.947509765625 +147.090758649450 2468.091308593750 +149.023008191796 6552.861328125000 +150.054483884674 1381.879394531250 +151.096258773620 2499.016357421875 +151.110632987131 2703.097412109375 +153.126579038194 1175.000000000000 +155.069775153959 1603.251586914062 +155.105765884478 1708.284912109375 +155.973825500886 4965.000000000000 +158.002736417151 1095.759399414062 +158.153601610996 15319.201171875000 +159.156377711765 1693.013305664062 +160.050203671116 29808.187500000000 +161.053148014827 2780.099853515625 +161.095739798824 1801.900268554688 +164.143136174419 1163.970947265625 +167.016142798795 1938.000000000000 +170.095669159809 2557.841796875000 +170.116803885810 1136.247192382812 +170.969513731195 5351.000000000000 +171.138682297569 3310.690673828125 +172.133498266589 1186.970092773438 +172.168816609007 1753.000000000000 +173.079889235839 8137.424804687500 +174.127584523158 1118.000000000000 +177.053398759750 2010.000000000000 +178.158757601913 1500.698242187500 +179.105540802675 2172.262695312500 +182.961283063703 1745.384643554688 +186.221178069795 1622.000000000000 +194.116354222571 3003.000000000000 +195.102160721940 1637.390014648438 +195.121964321705 2114.307128906250 +198.185094857026 2154.000000000000 +209.152949152955 1423.597534179688 +217.106757414349 22820.371093750000 +218.109717212262 2365.715332031250 +219.095322856019 2839.912353515625 +224.127859164514 1268.000000000000 +228.195125596876 1796.750244140625 +235.168738541554 1153.106201171875 +236.167125665018 2147.822998046875 +239.089167868946 3697.000000000000 +242.283752097581 1331.000000000000 +246.862020032552 3643.000000000000 +249.184726675759 1740.000000000000 +250.176839865775 1269.149047851562 +251.000052262976 1835.000000000000 +251.185199846439 1143.344848632812 +252.997000735520 1613.000000000000 +253.915053857069 3181.000000000000 +260.980520936940 34136.089843750000 +261.983107472769 3914.000000000000 +262.975908361642 3711.000000000000 +267.171176133304 1190.000000000000 +279.094069923914 2218.000000000000 +281.050366742298 1525.000000000000 +304.299335403967 1178.000000000000 +318.012807082281 13905.000000000000 +319.015812641865 1771.000000000000 +320.009779889072 1411.312622070312 +324.021497063862 2274.000000000000 +327.008303487350 3194.000000000000 +329.005675073912 3118.000000000000 +339.995324080662 63593.000000000000 +340.998247708453 9047.660156250000 +341.991464705082 6892.000000000000 +351.928380615899 5009.000000000000 +353.925994810456 2303.000000000000 +355.968410053379 3129.565673828125 +363.070877703428 10529.000000000000 +364.073137490148 1819.000000000000 +379.934530374708 4270.000000000000 +381.931407641533 2153.000000000000 +445.120046493581 2353.000000000000 +503.859909772363 1436.000000000000 +505.853063220538 5926.000000000000 +506.854048759295 1904.000000000000 +519.139384687535 1126.000000000000 +522.880368766100 2806.000000000000 +523.877736811317 1418.000000000000 +529.888748439098 1722.000000000000 +536.165143915241 4925.000000000000 +537.165086990853 2707.000000000000 +538.162296228146 1762.000000000000 +542.921174254561 1132.000000000000 +543.918003709155 1152.000000000000 +546.914886995490 3416.000000000000 +547.912219447510 1693.000000000000 +563.943181698806 1223.378784179688 +610.184322938020 2314.000000000000 +611.184296206340 1322.000000000000 +657.001817843383 1409.000000000000 +696.940437510992 3603.000000000000 +698.940217154744 2331.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=658 experiment=6 +##m_id Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=658 experiment=6_0 +##scan 14 +##specref ms_run[1]:sample=1 period=1 cycle=658 experiment=6 +50.014691789931 30.000000000000 +50.024594232484 15.000000000000 +51.023487773864 693.360839843750 +55.057307673128 13.000000000000 +62.017416144800 60.000000000000 +62.022558150102 60.000000000000 +75.021910544523 45.000000000000 +76.969400380676 13.000000000000 +77.038719402888 7559.670898437500 +77.358766992240 13.000000000000 +77.908647248588 30.000000000000 +77.916409786540 30.000000000000 +78.032820819888 30.000000000000 +78.994535162676 491.007476806641 +92.024213095291 30.000000000000 +93.009414078685 30.000000000000 +101.731414730929 13.000000000000 +102.033724528028 301.612030029297 +103.740436291946 30.000000000000 +104.049620996277 2037.000000000000 +105.033096287295 2149.877929687500 +109.009378682469 13.000000000000 +110.990785884171 13.000000000000 +124.609786162675 45.000000000000 +124.982586564713 3771.000000000000 +130.038871325813 312.000000000000 +132.044466950146 3875.000000000000 +132.737736847345 13.000000000000 +133.059399526787 30.000000000000 +134.515630815072 13.000000000000 +135.045638388353 30.000000000000 +137.006358531913 180.000000000000 +151.992732393118 135.000000000000 +167.017809464954 504.000000000000 +167.975239069750 30.000000000000 +168.014364521589 15.000000000000 +182.994146815153 135.000000000000 +>ms1peaks +50.015030688094 1631.000000000000 +52.005691836328 2833.837890625000 +53.013678352050 13820.645507812500 +53.850930804944 1372.676147460938 +54.009488813193 341215.375000000000 +55.006244952468 6363.858398437500 +55.011195314574 6663.786621093750 +55.054435589179 2093.444580078125 +55.934214796378 6443.966308593750 +56.049418637710 1614.372314453125 +56.942077131072 2603.345458984375 +59.049684010496 67068.679687500000 +60.044674600260 8507.357421875000 +61.039576232541 1618.787597656250 +63.997953270808 4540.612304687500 +64.004984885183 4765.146484375000 +68.011730125352 26984.066406250000 +68.993758540617 13250.065429687500 +69.044639818678 13453.114257812500 +72.936865747985 3009.785888671875 +73.064487442720 1926.000000000000 +76.486106736487 2394.000000000000 +77.012975210189 1331.000000000000 +77.038245950909 6864.013671875000 +79.021170250218 14954.513671875000 +80.049055487900 12273.781250000000 +81.937167726085 8605.721679687500 +82.996581259270 9547.895507812500 +87.054493611252 1308.586669921875 +89.506388403917 1579.000000000000 +90.489379547455 1879.000000000000 +91.053817827625 1210.000000000000 +95.952611673257 2421.652587890625 +97.968325410624 7844.628906250000 +100.075376789744 1408.000000000000 +102.090940410850 1712.000000000000 +104.048827681379 4021.000000000000 +105.032851808396 3043.702148437500 +109.943040230612 1524.000000000000 +113.962743611150 2300.809326171875 +114.091086475065 10732.537109375000 +118.085604757949 6375.129394531250 +122.095612538633 3453.346191406250 +122.963478886657 10149.138671875000 +123.091154033496 1907.152587890625 +123.962085557178 1291.000000000000 +124.964032856960 1524.723510742188 +124.981293760905 5573.300781250000 +132.044243365317 129513.453125000000 +133.047275934233 12024.171875000000 +136.021338396786 1596.000000000000 +136.111611313675 1179.000000000000 +141.090513006913 1389.292724609375 +141.112565247916 1247.203857421875 +141.957978845995 16325.500000000000 +147.090945866648 2556.685302734375 +149.023028218992 6399.154296875000 +150.054262184195 1568.000000000000 +151.096430884077 2664.400390625000 +151.111011940160 2835.027587890625 +155.069438117684 1871.944824218750 +155.105960083325 1401.000000000000 +155.973753152622 4288.000000000000 +158.153627071218 14384.000000000000 +159.156473714741 1627.752929687500 +160.050487288307 38915.000000000000 +161.053611692746 4466.942382812500 +161.095700587134 1743.057495117188 +164.142944501592 1256.052368164062 +167.015735366166 2785.089599609375 +170.096151543720 2652.023193359375 +170.116409887737 1324.376464843750 +170.968993556255 7076.000000000000 +171.137671144810 4912.312011718750 +172.136045264128 1371.000000000000 +173.079830429233 8581.928710937500 +174.991306236853 1198.000000000000 +177.054219725911 1769.000000000000 +178.157947155736 1498.908447265625 +179.106050750592 1934.090454101562 +182.960933723657 1780.061523437500 +182.991388549794 1244.309082031250 +186.221152079128 2287.000000000000 +194.116900036921 2752.000000000000 +195.121615177487 1919.471069335938 +198.184412559940 2140.000000000000 +200.200455656322 1296.554199218750 +209.153704347399 1590.000000000000 +212.888258624179 1535.000000000000 +217.106944592366 24346.000000000000 +218.110517718319 2646.000000000000 +219.095540028475 2644.006591796875 +228.196097140190 1527.811645507812 +236.167749124378 1677.000000000000 +239.089312381813 3327.000000000000 +242.284215148787 1201.000000000000 +246.862288406064 3365.000000000000 +249.184532839914 1860.293334960938 +251.001107206325 2362.000000000000 +252.997444701878 1876.000000000000 +253.916335213075 4093.000000000000 +260.980865788213 46877.000000000000 +261.983931158765 5301.000000000000 +262.976772362746 4418.000000000000 +267.172661485943 1410.000000000000 +277.199859444074 2417.590087890625 +279.093448238935 1888.450561523438 +281.051163936397 1557.000000000000 +292.121170689402 15731.000000000000 +293.123945781771 2615.000000000000 +294.118820607873 4859.000000000000 +295.121821476430 1186.000000000000 +318.013460543863 19020.000000000000 +319.016226586969 2819.000000000000 +320.010792812476 1745.000000000000 +324.021120495162 2522.000000000000 +327.007928037291 3314.077636718750 +329.005428091932 3187.000000000000 +331.002680981835 1140.229492187500 +335.040406311528 1228.000000000000 +339.995783079981 73785.000000000000 +340.998517552508 10283.000000000000 +341.992089047450 7216.000000000000 +351.928943475892 4368.000000000000 +353.926519256680 2362.000000000000 +355.969819970535 3512.076416015625 +363.071778928522 11698.970703125000 +364.073181575102 1981.000000000000 +371.315525399960 1354.000000000000 +379.934529706961 4095.883300781250 +381.932716463007 2062.000000000000 +445.119746997025 2474.000000000000 +446.119291863183 1145.000000000000 +505.853826516954 4858.000000000000 +506.855308046231 1451.000000000000 +519.139330404280 1166.703979492188 +522.880837958116 1970.000000000000 +523.871380297922 1372.000000000000 +529.891671811182 1342.000000000000 +536.165890644769 5714.000000000000 +537.166372879728 2646.000000000000 +538.163391669663 2155.000000000000 +544.339624971493 1155.000000000000 +546.914039373140 3234.000000000000 +547.912958504845 1306.000000000000 +610.184280095073 1860.000000000000 +611.183517202231 1239.000000000000 +657.000223829242 1834.000000000000 +696.940499292838 3022.000000000000 +698.938485246113 2250.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=659 experiment=7 +##m_id Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=7_0 +##scan 24 +##specref ms_run[1]:sample=1 period=1 cycle=659 experiment=7 +50.011945356227 45.000000000000 +50.016256671506 49.487056732178 +50.022471395276 30.022994995117 +51.023137253924 713.147644042969 +62.018117926456 60.000000000000 +75.022593594554 90.000000000000 +77.038765619679 6198.346191406250 +78.994159655565 300.000000000000 +95.049659419828 45.000000000000 +102.032654025566 195.000000000000 +104.049320764675 2561.366455078125 +104.717611043490 45.000000000000 +105.033125946638 2057.047363281250 +105.058664010100 164.415649414062 +124.982069879350 3636.000000000000 +130.038883295770 336.000000000000 +132.044268805220 4731.000000000000 +137.005031295070 165.000000000000 +151.991870480462 135.000000000000 +167.017216144522 349.000000000000 +167.970809068710 90.000000000000 +170.968502602363 45.000000000000 +170.979804540922 45.000000000000 +182.992849568269 120.000000000000 +>compound 1_7960809195137357048-676005--122--Fenamiphos +>parentmass 326.094454354613 +>ionization [M+Na]1+ +>formula C13H22NO3PS +>charge 1 +>rt 447.100000000020 +##fmz 326.094454354612708 +##fid 7960809195137357048 +##des Fenamiphos +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +326.094454354613 187407.076838029287 +327.096383244799 30166.116877709566 +>ms1peaks +52.005351813457 2501.610107421875 +53.013412581284 13134.520507812500 +53.850226225992 1302.909057617188 +54.009140063564 338983.656250000000 +55.006042248338 6435.412597656250 +55.011148435189 6609.394042968750 +55.054172395822 1772.104248046875 +55.934029229957 5757.919921875000 +56.941868288709 2705.908203125000 +59.049392394217 65787.757812500000 +60.044197396550 9389.001953125000 +61.039698624921 1629.770751953125 +63.997582420249 4596.096191406250 +64.004915539546 4860.728515625000 +68.011405901665 27484.292968750000 +68.993238795734 11816.172851562500 +69.044514210085 12151.762695312500 +72.936346245282 1770.000000000000 +73.063844648998 1632.810180664062 +76.485866327556 2207.000000000000 +79.020638014668 15456.159179687500 +80.048700307132 11716.706054687500 +81.936658440041 8339.158203125000 +82.995849176432 8191.000000000000 +87.054215388379 1432.329345703125 +89.505806636870 1376.000000000000 +90.488666027165 1798.000000000000 +95.952211902793 2472.000000000000 +97.967974119285 6640.000000000000 +100.074558827800 1418.000000000000 +102.090063528932 1768.000000000000 +109.942148206295 1646.000000000000 +113.962810920920 1728.000976562500 +114.090265101894 9843.087890625000 +118.085166173822 5466.146972656250 +122.095082275611 3591.515380859375 +122.962671452755 9919.435546875000 +123.090603383338 1818.105346679688 +130.157985838236 1433.000000000000 +136.020144210415 1305.642211914062 +141.111768954054 1381.647338867188 +141.957291332652 13999.958984375000 +147.090365251433 2315.564941406250 +149.021998403294 4169.404296875000 +151.095653127576 2632.192382812500 +151.109600618565 2638.503906250000 +155.069049191990 1400.588378906250 +155.105221715370 1306.244873046875 +155.972774632456 3955.750244140625 +158.152847157321 10190.631835937500 +161.094883274868 1469.000000000000 +164.993233307885 1413.000000000000 +170.094756804200 2692.873779296875 +173.079096183490 5464.607421875000 +174.990754641374 1338.000000000000 +175.120920396226 1335.489135742188 +178.157288006504 1567.557739257812 +179.104881581157 1856.000000000000 +182.960071822982 1596.667236328125 +186.016812097735 3128.000000000000 +194.115183195725 3037.019042968750 +195.105676043577 1846.959228515625 +195.121034909827 2138.534667968750 +198.183715433637 1614.000000000000 +201.983396783946 6476.000000000000 +217.007534943089 16000.083984375000 +217.105603079000 12722.193359375000 +218.010461830348 1723.000000000000 +218.108916975941 1918.000000000000 +219.094207015885 1394.000000000000 +234.033666185649 17919.000000000000 +235.036061869219 1699.000000000000 +239.087710708037 2715.000000000000 +245.038087259231 3705.000000000000 +246.860587751512 3017.000000000000 +250.998652800198 2461.000000000000 +252.996040050118 1751.000000000000 +262.065226573716 31878.271484375000 +263.067812997194 3540.000000000000 +264.062744585962 1732.000000000000 +276.080875651007 47441.000000000000 +277.083729023421 6202.904296875000 +278.078049070253 2909.805664062500 +279.092264164105 2269.000000000000 +281.049607531965 1759.000000000000 +284.163709253010 5971.317382812500 +285.167422523505 1450.937500000000 +289.120547785899 45105.261718750000 +290.122834000335 8899.000000000000 +291.118148964330 16223.000000000000 +292.119468760172 3916.748291015625 +303.104211105075 4272.900878906250 +303.190626643079 3701.817626953125 +304.121038021889 1154982.000000000000 +304.680120827865 1361.469604492188 +304.720450396369 1578.193115234375 +304.756696628278 1464.135742187500 +304.826755934771 1415.802856445312 +304.888295222133 4211.749023437500 +304.975939340234 6444.747070312500 +305.112954471951 109660.976562500000 +306.110248734555 72833.000000000000 +307.111946842557 10169.579101562500 +307.247397220322 1757.839477539062 +310.120212483100 5088.000000000000 +320.107070842572 7286.000000000000 +321.109817317563 1634.396606445312 +321.134008500327 1645.504272460938 +326.094135509242 51581.214843750000 +327.006663634739 3305.288085937500 +327.096918826684 8025.063964843750 +328.090879363560 3401.237060546875 +329.002848029289 3721.000000000000 +330.204815446188 11820.952148437500 +331.208232327135 2889.000000000000 +342.067980362905 3189.395019531250 +349.169296376205 25098.000000000000 +350.172883605486 4323.000000000000 +351.167291455015 1724.000000000000 +372.149200119315 2817.477050781250 +404.036004100360 11013.000000000000 +405.038241871311 2224.679687500000 +424.359699824875 1469.000000000000 +445.117347283461 1962.204711914062 +500.274802921042 11554.163085937500 +501.277725760601 3400.000000000000 +502.286539956580 1910.000000000000 +505.850895564320 2188.000000000000 +536.162361057972 4668.000000000000 +537.163239801382 2428.000000000000 +538.161608472883 1869.000000000000 +544.336387601713 1598.000000000000 +546.911505452596 1493.000000000000 +549.965979448424 1640.000000000000 +592.225456903764 1675.000000000000 +607.216655018496 74091.000000000000 +608.219193446659 23449.000000000000 +609.215852555200 11438.528320312500 +610.208425679746 4454.000000000000 +611.188234775837 1805.798706054688 +612.220726308427 4082.000000000000 +613.224505418990 34075.000000000000 +614.227906702716 11171.000000000000 +615.225014693998 5343.000000000000 +623.210784148654 2510.000000000000 +629.198405169302 68640.000000000000 +630.201595235063 21340.328125000000 +631.198284234777 10581.000000000000 +632.198298853566 2483.000000000000 +707.140261218123 1384.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=676 experiment=5 +##m_id Fenamiphos_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=5_0 +##scan 122 +##specref ms_run[1]:sample=1 period=1 cycle=676 experiment=5 +135.110573680588 13.000000000000 +326.090792568903 90.000000000000 +>compound 1_1072340199693961134-657006--5--Guthion +>parentmass 339.995124103413 +>ionization [M+Na]1+ +>formula C10H12N3O3PS2 +>charge 1 +>rt 431.866000000020 +##fmz 339.99512410341282 +##fid 1072340199693961134 +##des Guthion +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +339.995124103413 202334.306264709012 +340.997818750530 28664.112314598762 +>ms1peaks +52.005865355475 2936.356689453125 +53.013723515258 15168.868164062500 +53.850400239168 1357.829345703125 +54.009447090145 347607.156250000000 +55.006110218286 6238.441894531250 +55.011508541956 7268.958007812500 +55.054636618089 2136.000000000000 +55.934309116073 6532.552734375000 +56.942275933353 2612.874023437500 +59.049622158630 56011.429687500000 +60.044524012498 9000.792968750000 +61.039481839151 1786.074829101562 +63.997449394256 3736.165039062500 +64.005109595772 4712.666015625000 +68.011792039005 26707.251953125000 +68.993702477550 13633.019531250000 +69.008646447254 1441.886596679688 +69.044733608562 13552.908203125000 +69.494666168807 1088.000000000000 +72.044289477019 1134.000000000000 +72.936653378507 2379.292724609375 +73.064314657279 1947.000000000000 +76.486410468336 2230.000000000000 +77.038532396207 1590.778686523438 +79.021074679723 14557.214843750000 +80.049121781728 13038.990234375000 +81.937384309880 9136.173828125000 +82.996771559276 9647.291015625000 +87.044032478393 1164.202392578125 +87.055030197874 1937.880737304688 +89.506480817586 1633.000000000000 +90.489144644798 1823.000000000000 +91.053978578614 1481.000000000000 +95.952653475183 2798.568603515625 +97.968242662562 7804.676269531250 +100.075124666224 1357.000000000000 +102.091023963336 2105.000000000000 +109.943015773476 1849.492675781250 +113.963173340819 2146.000000000000 +114.091149027124 11434.439453125000 +118.085562888545 7126.602050781250 +122.095450971812 3351.000000000000 +122.963406396921 11429.592773437500 +123.091816714399 1461.405029296875 +123.962989553704 1162.000000000000 +132.043858137010 23466.287109375000 +133.047312261130 2601.019775390625 +136.020979409517 1763.000000000000 +136.111376584671 1338.000000000000 +141.090631531290 1452.329956054688 +141.112250777587 1933.171752929688 +141.957805111647 16272.520507812500 +142.960130525273 1091.785766601562 +147.090889713370 2561.000000000000 +149.022860382613 8952.703125000000 +149.043461527452 2074.399169921875 +151.096439801801 2539.815917968750 +151.111209143750 2693.475830078125 +155.070028482861 1787.522338867188 +155.105375703160 1554.431030273438 +155.973268704769 4467.000000000000 +158.002234575261 1123.180664062500 +158.153819790011 15565.543945312500 +159.136830576290 1251.366088867188 +159.156929350810 1638.817993164062 +159.968015589745 1144.587158203125 +160.050107538005 10862.000000000000 +161.095753069011 1987.528442382812 +163.130314304873 1321.613403320312 +164.142207413101 1344.506469726562 +170.096003050047 2831.750244140625 +170.116393016687 1241.047485351562 +170.969308188165 1467.000000000000 +171.138824143644 1976.471679687500 +172.132816514555 1070.000000000000 +172.169354072833 1126.623413085938 +173.080592066342 7150.673339843750 +174.127101054123 1093.000000000000 +174.991572624579 1115.259887695312 +175.117966507653 1382.413574218750 +177.053956263481 3086.000000000000 +178.158743604693 1737.946655273438 +179.106488149861 2092.017333984375 +182.961571664514 1566.125366210938 +182.982955367691 1389.804321289062 +186.221312636852 2310.000000000000 +194.116506735598 3012.142089843750 +195.121983568600 1971.532348632812 +198.184492106186 2254.000000000000 +199.168659259112 1074.472778320312 +200.200544607050 1265.000000000000 +209.152957718499 1444.000000000000 +215.126858142678 1195.000000000000 +217.107186196782 24662.302734375000 +218.110233972313 2772.000000000000 +219.095202240315 3180.013427734375 +219.137164883586 1444.293090820312 +224.128646207474 1167.206176757812 +228.196369189320 1732.199340820312 +235.170060948981 1264.538574218750 +236.167946332224 2704.449462890625 +239.089160494599 5259.000000000000 +240.068219796793 1277.484863281250 +240.091769691182 1359.958740234375 +242.284200605489 1137.000000000000 +246.863294404574 3891.000000000000 +249.184938071857 1294.474121093750 +250.177914710678 1312.000000000000 +250.999736865556 2366.000000000000 +251.185303455126 1195.000000000000 +252.996845199048 1725.000000000000 +260.980831135670 9681.000000000000 +262.976934337234 1074.000000000000 +267.172286092444 1268.487426757812 +279.093453473919 1954.000000000000 +281.051187832394 1373.000000000000 +287.889696989575 1142.000000000000 +318.012975056617 4878.000000000000 +327.008528574617 3507.000000000000 +329.005288792022 3151.000000000000 +339.995536258518 21188.000000000000 +340.998304727292 3403.000000000000 +341.991615450972 1965.000000000000 +351.928765172494 2752.000000000000 +353.925863637500 1287.000000000000 +355.970345025132 1233.272216796875 +363.071463720139 4333.000000000000 +371.315937786641 1386.000000000000 +379.934517326720 2414.000000000000 +381.932765584480 1355.000000000000 +430.887891579421 1170.000000000000 +445.119501835711 2373.000000000000 +503.857852657168 1208.000000000000 +505.853144541362 5379.000000000000 +506.854406933930 1813.000000000000 +522.880381915172 2380.000000000000 +523.873038712107 1344.000000000000 +529.890971881918 1718.000000000000 +536.164830382665 5050.000000000000 +537.165530578391 2568.000000000000 +538.164082153377 1889.000000000000 +542.919791547930 1233.000000000000 +544.340309842267 1260.000000000000 +544.916740966050 1184.000000000000 +546.914239791284 3795.000000000000 +547.912822025670 1609.000000000000 +563.944002995814 1077.258789062500 +610.183402350979 1851.000000000000 +611.184706508494 1107.000000000000 +696.940078237106 1408.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=657 experiment=6 +##m_id Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=657 experiment=6_0 +##scan 5 +##specref ms_run[1]:sample=1 period=1 cycle=657 experiment=6 +50.015108090982 30.000000000000 +51.023164211064 180.000000000000 +77.038275757512 1908.000000000000 +95.059280397863 13.000000000000 +102.035255157111 75.000000000000 +104.049402590680 764.000000000000 +105.033036827807 713.000000000000 +124.990392017926 30.000000000000 +132.044138630021 3917.000000000000 +148.024481257446 45.000000000000 +160.052436120329 135.000000000000 +250.873112501629 13.000000000000 +>ms1peaks +52.005717667707 2536.876953125000 +53.013645918459 13517.719726562500 +53.851091408425 1440.814208984375 +54.009479564739 340518.468750000000 +55.006713705873 6189.195800781250 +55.011648330739 5775.918945312500 +55.054395080163 1937.021850585938 +55.934309790351 6216.487304687500 +56.049851096555 1422.552856445312 +56.942103151176 2497.945800781250 +59.049782018324 63557.187500000000 +60.044617957556 9127.332031250000 +61.039564209817 1916.918579101562 +63.998058629288 4341.631347656250 +64.005180932598 4902.907226562500 +68.011727932833 27051.191406250000 +68.994002789359 13611.511718750000 +69.034264524552 2235.962402343750 +69.044867744672 14147.763671875000 +72.936875253829 3080.500976562500 +73.064425531348 1778.781250000000 +76.486297547963 2075.000000000000 +77.038265451054 5099.881835937500 +79.021270792779 14303.786132812500 +80.049179511142 11132.483398437500 +81.937187525733 8269.017578125000 +82.996616277972 9058.604492187500 +87.055191552618 1226.265625000000 +89.506723502083 2138.000000000000 +90.489274059111 1883.000000000000 +91.053872057085 1250.000000000000 +95.952563443877 2416.907226562500 +97.968351278732 7414.000000000000 +102.091075578098 2124.000000000000 +104.049176798538 2869.822265625000 +105.032824057535 2268.302246093750 +109.942659719793 1552.503417968750 +113.963028919819 2876.313476562500 +114.091047730204 9707.000000000000 +118.085960022478 6202.343750000000 +122.095829000463 3354.874755859375 +122.963603572159 10189.080078125000 +123.091990223840 1658.215576171875 +123.962908276753 1264.000000000000 +124.961981387844 1248.617553710938 +124.981468335431 3929.697021484375 +132.044195947098 93934.070312500000 +133.046929709006 8774.461914062500 +136.020849942089 1733.000000000000 +136.111849813683 1360.000000000000 +139.963062553447 1109.337646484375 +141.090358589210 1395.717041015625 +141.112852312471 1316.060180664062 +141.957905703603 16856.453125000000 +142.959660117555 1253.947509765625 +147.090758649450 2468.091308593750 +149.023008191796 6552.861328125000 +150.054483884674 1381.879394531250 +151.096258773620 2499.016357421875 +151.110632987131 2703.097412109375 +153.126579038194 1175.000000000000 +155.069775153959 1603.251586914062 +155.105765884478 1708.284912109375 +155.973825500886 4965.000000000000 +158.002736417151 1095.759399414062 +158.153601610996 15319.201171875000 +159.156377711765 1693.013305664062 +160.050203671116 29808.187500000000 +161.053148014827 2780.099853515625 +161.095739798824 1801.900268554688 +164.143136174419 1163.970947265625 +167.016142798795 1938.000000000000 +170.095669159809 2557.841796875000 +170.116803885810 1136.247192382812 +170.969513731195 5351.000000000000 +171.138682297569 3310.690673828125 +172.133498266589 1186.970092773438 +172.168816609007 1753.000000000000 +173.079889235839 8137.424804687500 +174.127584523158 1118.000000000000 +177.053398759750 2010.000000000000 +178.158757601913 1500.698242187500 +179.105540802675 2172.262695312500 +182.961283063703 1745.384643554688 +186.221178069795 1622.000000000000 +194.116354222571 3003.000000000000 +195.102160721940 1637.390014648438 +195.121964321705 2114.307128906250 +198.185094857026 2154.000000000000 +209.152949152955 1423.597534179688 +217.106757414349 22820.371093750000 +218.109717212262 2365.715332031250 +219.095322856019 2839.912353515625 +224.127859164514 1268.000000000000 +228.195125596876 1796.750244140625 +235.168738541554 1153.106201171875 +236.167125665018 2147.822998046875 +239.089167868946 3697.000000000000 +242.283752097581 1331.000000000000 +246.862020032552 3643.000000000000 +249.184726675759 1740.000000000000 +250.176839865775 1269.149047851562 +251.000052262976 1835.000000000000 +251.185199846439 1143.344848632812 +252.997000735520 1613.000000000000 +253.915053857069 3181.000000000000 +260.980520936940 34136.089843750000 +261.983107472769 3914.000000000000 +262.975908361642 3711.000000000000 +267.171176133304 1190.000000000000 +279.094069923914 2218.000000000000 +281.050366742298 1525.000000000000 +304.299335403967 1178.000000000000 +318.012807082281 13905.000000000000 +319.015812641865 1771.000000000000 +320.009779889072 1411.312622070312 +324.021497063862 2274.000000000000 +327.008303487350 3194.000000000000 +329.005675073912 3118.000000000000 +339.995324080662 63593.000000000000 +340.998247708453 9047.660156250000 +341.991464705082 6892.000000000000 +351.928380615899 5009.000000000000 +353.925994810456 2303.000000000000 +355.968410053379 3129.565673828125 +363.070877703428 10529.000000000000 +364.073137490148 1819.000000000000 +379.934530374708 4270.000000000000 +381.931407641533 2153.000000000000 +445.120046493581 2353.000000000000 +503.859909772363 1436.000000000000 +505.853063220538 5926.000000000000 +506.854048759295 1904.000000000000 +519.139384687535 1126.000000000000 +522.880368766100 2806.000000000000 +523.877736811317 1418.000000000000 +529.888748439098 1722.000000000000 +536.165143915241 4925.000000000000 +537.165086990853 2707.000000000000 +538.162296228146 1762.000000000000 +542.921174254561 1132.000000000000 +543.918003709155 1152.000000000000 +546.914886995490 3416.000000000000 +547.912219447510 1693.000000000000 +563.943181698806 1223.378784179688 +610.184322938020 2314.000000000000 +611.184296206340 1322.000000000000 +657.001817843383 1409.000000000000 +696.940437510992 3603.000000000000 +698.940217154744 2331.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=658 experiment=7 +##m_id Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=658 experiment=7_0 +##scan 15 +##specref ms_run[1]:sample=1 period=1 cycle=658 experiment=7 +50.015107422585 45.000000000000 +51.023257171810 385.000000000000 +76.809444242167 45.000000000000 +76.816396118776 45.000000000000 +77.038638658533 3569.000000000000 +102.033997039434 120.000000000000 +103.741576634459 45.000000000000 +104.049277894383 1381.095214843750 +105.033422442588 1416.438964843750 +124.982582830443 75.000000000000 +130.038279917398 165.000000000000 +132.044560334103 4432.000000000000 +160.049869986071 120.000000000000 +>ms1peaks +50.015030688094 1631.000000000000 +52.005691836328 2833.837890625000 +53.013678352050 13820.645507812500 +53.850930804944 1372.676147460938 +54.009488813193 341215.375000000000 +55.006244952468 6363.858398437500 +55.011195314574 6663.786621093750 +55.054435589179 2093.444580078125 +55.934214796378 6443.966308593750 +56.049418637710 1614.372314453125 +56.942077131072 2603.345458984375 +59.049684010496 67068.679687500000 +60.044674600260 8507.357421875000 +61.039576232541 1618.787597656250 +63.997953270808 4540.612304687500 +64.004984885183 4765.146484375000 +68.011730125352 26984.066406250000 +68.993758540617 13250.065429687500 +69.044639818678 13453.114257812500 +72.936865747985 3009.785888671875 +73.064487442720 1926.000000000000 +76.486106736487 2394.000000000000 +77.012975210189 1331.000000000000 +77.038245950909 6864.013671875000 +79.021170250218 14954.513671875000 +80.049055487900 12273.781250000000 +81.937167726085 8605.721679687500 +82.996581259270 9547.895507812500 +87.054493611252 1308.586669921875 +89.506388403917 1579.000000000000 +90.489379547455 1879.000000000000 +91.053817827625 1210.000000000000 +95.952611673257 2421.652587890625 +97.968325410624 7844.628906250000 +100.075376789744 1408.000000000000 +102.090940410850 1712.000000000000 +104.048827681379 4021.000000000000 +105.032851808396 3043.702148437500 +109.943040230612 1524.000000000000 +113.962743611150 2300.809326171875 +114.091086475065 10732.537109375000 +118.085604757949 6375.129394531250 +122.095612538633 3453.346191406250 +122.963478886657 10149.138671875000 +123.091154033496 1907.152587890625 +123.962085557178 1291.000000000000 +124.964032856960 1524.723510742188 +124.981293760905 5573.300781250000 +132.044243365317 129513.453125000000 +133.047275934233 12024.171875000000 +136.021338396786 1596.000000000000 +136.111611313675 1179.000000000000 +141.090513006913 1389.292724609375 +141.112565247916 1247.203857421875 +141.957978845995 16325.500000000000 +147.090945866648 2556.685302734375 +149.023028218992 6399.154296875000 +150.054262184195 1568.000000000000 +151.096430884077 2664.400390625000 +151.111011940160 2835.027587890625 +155.069438117684 1871.944824218750 +155.105960083325 1401.000000000000 +155.973753152622 4288.000000000000 +158.153627071218 14384.000000000000 +159.156473714741 1627.752929687500 +160.050487288307 38915.000000000000 +161.053611692746 4466.942382812500 +161.095700587134 1743.057495117188 +164.142944501592 1256.052368164062 +167.015735366166 2785.089599609375 +170.096151543720 2652.023193359375 +170.116409887737 1324.376464843750 +170.968993556255 7076.000000000000 +171.137671144810 4912.312011718750 +172.136045264128 1371.000000000000 +173.079830429233 8581.928710937500 +174.991306236853 1198.000000000000 +177.054219725911 1769.000000000000 +178.157947155736 1498.908447265625 +179.106050750592 1934.090454101562 +182.960933723657 1780.061523437500 +182.991388549794 1244.309082031250 +186.221152079128 2287.000000000000 +194.116900036921 2752.000000000000 +195.121615177487 1919.471069335938 +198.184412559940 2140.000000000000 +200.200455656322 1296.554199218750 +209.153704347399 1590.000000000000 +212.888258624179 1535.000000000000 +217.106944592366 24346.000000000000 +218.110517718319 2646.000000000000 +219.095540028475 2644.006591796875 +228.196097140190 1527.811645507812 +236.167749124378 1677.000000000000 +239.089312381813 3327.000000000000 +242.284215148787 1201.000000000000 +246.862288406064 3365.000000000000 +249.184532839914 1860.293334960938 +251.001107206325 2362.000000000000 +252.997444701878 1876.000000000000 +253.916335213075 4093.000000000000 +260.980865788213 46877.000000000000 +261.983931158765 5301.000000000000 +262.976772362746 4418.000000000000 +267.172661485943 1410.000000000000 +277.199859444074 2417.590087890625 +279.093448238935 1888.450561523438 +281.051163936397 1557.000000000000 +292.121170689402 15731.000000000000 +293.123945781771 2615.000000000000 +294.118820607873 4859.000000000000 +295.121821476430 1186.000000000000 +318.013460543863 19020.000000000000 +319.016226586969 2819.000000000000 +320.010792812476 1745.000000000000 +324.021120495162 2522.000000000000 +327.007928037291 3314.077636718750 +329.005428091932 3187.000000000000 +331.002680981835 1140.229492187500 +335.040406311528 1228.000000000000 +339.995783079981 73785.000000000000 +340.998517552508 10283.000000000000 +341.992089047450 7216.000000000000 +351.928943475892 4368.000000000000 +353.926519256680 2362.000000000000 +355.969819970535 3512.076416015625 +363.071778928522 11698.970703125000 +364.073181575102 1981.000000000000 +371.315525399960 1354.000000000000 +379.934529706961 4095.883300781250 +381.932716463007 2062.000000000000 +445.119746997025 2474.000000000000 +446.119291863183 1145.000000000000 +505.853826516954 4858.000000000000 +506.855308046231 1451.000000000000 +519.139330404280 1166.703979492188 +522.880837958116 1970.000000000000 +523.871380297922 1372.000000000000 +529.891671811182 1342.000000000000 +536.165890644769 5714.000000000000 +537.166372879728 2646.000000000000 +538.163391669663 2155.000000000000 +544.339624971493 1155.000000000000 +546.914039373140 3234.000000000000 +547.912958504845 1306.000000000000 +610.184280095073 1860.000000000000 +611.183517202231 1239.000000000000 +657.000223829242 1834.000000000000 +696.940499292838 3022.000000000000 +698.938485246113 2250.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=659 experiment=8 +##m_id Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=8_0 +##scan 25 +##specref ms_run[1]:sample=1 period=1 cycle=659 experiment=8 +50.020070819941 30.000000000000 +51.023482850302 195.000000000000 +77.038364033267 3246.000000000000 +78.033404846471 30.000000000000 +78.552620684994 15.000000000000 +102.032982714874 90.000000000000 +104.048728147669 1394.000000000000 +105.032731936693 1151.000000000000 +124.980669674857 90.000000000000 +130.042013539390 75.000000000000 +131.642901555616 30.000000000000 +132.044319218476 4842.849121093750 +148.019756120458 30.000000000000 +160.051798718236 120.000000000000 +>compound 1_15110953643123771443-674006--105--UNKNOWN +>parentmass 349.169536935035 +>ionization [M+Na]1+ +>charge 1 +>rt 447.100000000020 +##fmz 349.169536935035183 +##fid 15110953643123771443 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +349.169536935035 78624.106478969305 +>ms1peaks +52.005592753043 3006.313964843750 +53.013386604926 14895.982421875000 +53.850307885580 1282.519653320312 +54.009266588925 342199.718750000000 +55.006082581110 6060.072753906250 +55.011283454187 6240.310058593750 +55.054294821572 2210.000000000000 +55.934096145228 5628.309570312500 +56.941759312303 2162.160156250000 +59.049359471853 46694.679687500000 +60.044421789280 9540.689453125000 +61.039479760124 2294.308837890625 +63.997714272448 3712.306396484375 +64.004717741595 3776.877441406250 +68.011627587572 27064.916015625000 +68.993566533187 11389.638671875000 +69.008625246067 1040.924560546875 +69.044535203632 13668.087890625000 +72.936481622578 2454.600341796875 +73.064065589451 1403.865722656250 +76.486273965426 2375.015136718750 +79.020790259171 14203.234375000000 +80.049005926370 10670.580078125000 +81.936823889862 7769.677734375000 +82.996318430269 8831.000000000000 +87.043659684882 1291.933349609375 +87.054507882909 1447.717041015625 +89.506487543125 1968.296386718750 +90.489051431145 1567.000000000000 +91.053400164401 1256.000000000000 +95.952306311885 1977.000000000000 +97.968075016323 6813.626953125000 +100.074949120053 1188.000000000000 +102.090464066418 1830.000000000000 +109.942585550788 1505.090454101562 +113.962587921756 2250.229736328125 +114.090562200242 10307.702148437500 +118.085082878297 6730.000000000000 +122.095605127592 3465.000000000000 +122.963039812214 10185.000000000000 +123.091494988172 1608.787231445312 +129.051393255556 1096.195678710938 +130.157964856700 1224.000000000000 +136.020696393521 1628.173095703125 +136.111265586312 1351.884765625000 +137.963028699523 1044.000000000000 +141.090735684411 1400.241577148438 +141.111884779659 1559.751831054688 +141.936149934788 2056.103759765625 +141.957562608877 15536.687500000000 +147.090844143576 2684.000000000000 +149.022219076913 4357.918945312500 +149.040987249104 1837.193115234375 +151.095349881837 2305.082275390625 +151.109939199155 2576.997802734375 +155.068952001479 1217.608398437500 +155.105783696987 1630.887817382812 +155.972951860043 4015.000000000000 +158.153089325142 12131.025390625000 +159.156361011225 1282.655029296875 +161.095571014168 1849.739868164062 +164.142332600548 1475.398193359375 +170.095084317194 2525.529541015625 +171.146419276332 1492.000000000000 +172.132296924472 1198.192871093750 +173.080359168822 7163.493164062500 +174.127015852864 1059.000000000000 +174.990991861896 1587.000000000000 +178.157781317469 1624.536987304688 +179.105994436857 1966.000000000000 +182.960688878508 2338.556152343750 +182.982210678536 2178.232421875000 +186.220605721634 1746.000000000000 +194.115986578552 3414.184814453125 +195.121368448944 2440.554443359375 +198.184661469947 1850.538574218750 +200.200431422851 1250.850830078125 +201.983565637695 1125.000000000000 +217.006778563847 3269.000000000000 +217.106257896227 20478.425781250000 +218.109387671986 2700.000000000000 +219.094811619683 1568.384521484375 +224.126330250006 1136.363037109375 +228.195256821021 1364.000000000000 +234.034555602122 3162.000000000000 +235.168379942276 1059.765869140625 +239.088123273064 4617.123535156250 +242.283687547927 1626.000000000000 +246.861503474727 3165.000000000000 +249.183966936445 1338.000000000000 +250.178157580094 1268.000000000000 +250.999499019254 3169.000000000000 +251.184919733032 1121.084228515625 +252.996470645480 2204.000000000000 +262.065339439714 5824.345214843750 +267.170259991556 1568.463745117188 +276.081091674263 8173.000000000000 +277.057665923216 1209.618164062500 +277.085219951598 1293.623413085938 +279.093583842250 1859.000000000000 +281.050436828814 1462.000000000000 +284.164194797510 15720.000000000000 +285.167199045233 4022.000000000000 +286.177305853522 1891.670776367188 +292.120375414143 1944.000000000000 +303.190300317299 1143.297241210938 +304.113551407962 233981.000000000000 +305.115237199332 34039.113281250000 +306.110943955948 13933.000000000000 +307.113098422247 1919.696899414062 +307.246808467596 3300.572753906250 +310.120295757069 1681.000000000000 +320.107169971093 1195.785766601562 +326.095118441765 16572.000000000000 +327.007733661441 3760.000000000000 +327.095761410498 3082.000000000000 +328.091343004556 1205.000000000000 +329.005017718870 3936.000000000000 +330.206156493086 31473.623046875000 +331.001131359041 1283.000000000000 +331.208781030804 7087.107910156250 +332.212762979446 1049.000000000000 +342.069329790769 1871.000000000000 +349.169872251691 6112.673339843750 +350.172892076873 1285.000000000000 +352.188381138816 3463.990966796875 +352.237855065072 1571.586547851562 +380.335730124158 1272.000000000000 +404.036775645443 2150.000000000000 +445.119594711322 2089.000000000000 +487.229352410180 1300.347412109375 +500.276727311162 8288.133789062500 +501.279823879484 2533.000000000000 +502.288704966210 1392.000000000000 +505.852309070026 2882.000000000000 +522.878554007503 1334.599853515625 +536.164536908876 5057.000000000000 +537.165016352661 2456.000000000000 +538.163523094599 1972.255615234375 +544.338584253074 1675.149536132812 +546.914933234641 1855.000000000000 +607.218843523736 2732.000000000000 +610.184293153428 2142.000000000000 +611.183428881164 1140.000000000000 +612.185574985429 1243.000000000000 +613.226429565287 4419.000000000000 +614.228332015276 1213.785766601562 +629.199480533100 8990.000000000000 +630.203842344410 2729.000000000000 +631.198645508739 1426.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=674 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=674 experiment=6_0 +##scan 105 +##specref ms_run[1]:sample=1 period=1 cycle=674 experiment=6 +60.081311873120 317.000000000000 +107.048591987939 75.000000000000 +121.011185515683 45.000000000000 +137.042863316042 135.000000000000 +138.016928731083 75.000000000000 +139.019366132232 45.000000000000 +153.036359085879 180.000000000000 +155.052447162542 210.000000000000 +168.986017376512 270.000000000000 +184.982182920189 90.000000000000 +198.994924698980 120.000000000000 +200.998143970587 75.000000000000 +201.984368682258 2676.000000000000 +216.021457924153 75.000000000000 +216.350770868740 105.000000000000 +216.432740599583 30.000000000000 +216.450991207642 30.000000000000 +217.008052190453 11994.411132812500 +230.014504527888 75.000000000000 +233.328955599542 45.000000000000 +234.033967852197 2770.000000000000 +245.037925257354 135.000000000000 +262.065875378587 437.000000000000 +276.082025735516 1394.000000000000 +304.112103688826 1171.000000000000 +>ms1peaks +52.005429962927 2874.067626953125 +53.013488092548 14817.291015625000 +54.009250374962 334494.937500000000 +55.006084606761 5488.883300781250 +55.011047738293 6443.265136718750 +55.054381628314 2385.724365234375 +55.934070669618 5486.966796875000 +56.942036090778 2313.250244140625 +59.049556209203 57988.484375000000 +60.044347260401 9323.001953125000 +61.039167560780 1828.241455078125 +63.997923021227 4927.193359375000 +64.004932691950 5181.531250000000 +68.011552270537 27280.974609375000 +68.993634139472 11798.143554687500 +69.044334270747 12566.409179687500 +72.936570834957 2193.115966796875 +73.063872777826 1681.879882812500 +76.486053959604 2158.190429687500 +79.020753207512 16147.697265625000 +80.048886066869 12139.645507812500 +81.936907500524 8343.286132812500 +82.996250408243 8009.000000000000 +87.042980895665 1166.738403320312 +87.053972860944 1485.116088867188 +89.506705194324 1444.000000000000 +90.488891330057 1645.000000000000 +91.053476545401 1583.000000000000 +95.952210208006 2039.742797851562 +97.968150682366 6945.562500000000 +100.074718244150 1363.000000000000 +102.090306392772 1417.000000000000 +109.942448236827 1253.000000000000 +113.962708637249 2032.000000000000 +114.090792284548 10306.000000000000 +118.084892277491 5540.821289062500 +122.095166173318 3378.000000000000 +122.962913232208 9579.000000000000 +123.091195975991 1531.662963867188 +130.157764407919 1286.000000000000 +136.020428292954 1633.000000000000 +141.090127789620 1346.968627929688 +141.112042976374 1656.172241210938 +141.957142368171 13820.262695312500 +147.089971164701 2287.525390625000 +149.022027180229 4587.050292968750 +149.040978245649 2678.199707031250 +151.095856455214 2104.623291015625 +151.110429192129 2233.988037109375 +155.068837159282 1322.053710937500 +155.973356955881 4212.000000000000 +158.153011960091 10898.886718750000 +161.095284178342 1762.593994140625 +164.141720682546 1224.125244140625 +170.095143568643 2743.236816406250 +173.079445020465 6455.588378906250 +174.990181271009 1164.000000000000 +175.126264328958 1229.927246093750 +178.157011972493 1362.000000000000 +179.105369890054 1931.000000000000 +182.960638968270 1810.076538085938 +182.983125598895 1274.763061523438 +186.016954934375 1958.000000000000 +186.220415397417 1282.000000000000 +193.158240520354 1195.032958984375 +194.115937912419 2861.000000000000 +195.121022485646 2380.102539062500 +198.183707422577 1745.000000000000 +200.199383225092 1357.000000000000 +201.983259096536 4157.000000000000 +217.007242135614 11741.327148437500 +217.105963587093 15482.668945312500 +218.009949414252 1208.000000000000 +218.108958783015 2547.000000000000 +219.093633048806 1319.448730468750 +234.033582693957 12770.000000000000 +235.037603512480 1379.336669921875 +239.087766278998 3286.875732421875 +242.283333142943 1269.000000000000 +245.038366204801 2525.000000000000 +246.860868473188 2768.000000000000 +249.183726045021 1277.861328125000 +250.999502407170 2552.000000000000 +252.995631834554 1836.000000000000 +262.065239894604 21394.767578125000 +263.067572169870 2404.000000000000 +264.061891103771 1243.000000000000 +276.080813947841 32185.000000000000 +277.083963767141 4114.000000000000 +278.078054160446 2217.000000000000 +279.092495265569 1940.000000000000 +281.050419778851 1367.000000000000 +284.163590469925 9332.000000000000 +285.167331910184 2517.000000000000 +289.119964437534 1441.302978515625 +292.119508242518 1546.000000000000 +303.104642799152 3336.000000000000 +303.191168270618 2846.093505859375 +304.118917204532 886697.062500000000 +304.856339026942 1419.656616210938 +304.975022441588 5892.455566406250 +305.107897820025 60098.996093750000 +306.110158464267 52147.246093750000 +307.111260806590 6616.670410156250 +307.247283236566 2744.782226562500 +310.120139525907 4017.412597656250 +320.106832165572 5127.000000000000 +321.110457254103 1231.635253906250 +321.131042046566 1226.668579101562 +326.094185610162 39581.000000000000 +327.007439325330 3479.883544921875 +327.096485748553 6323.979980468750 +328.091424657873 2476.325927734375 +329.002736488496 3916.000000000000 +330.204957173578 17861.789062500000 +331.208137127779 4322.000000000000 +342.068068201427 2858.656982421875 +349.169386508932 18308.152343750000 +350.172289812388 3575.000000000000 +351.169114792649 1326.000000000000 +352.185338388432 1383.838623046875 +372.148023932598 2199.032714843750 +380.334421867930 1500.000000000000 +404.036203084131 8110.000000000000 +405.038280600419 1614.000000000000 +445.117639958471 2103.000000000000 +500.274765830931 9506.000000000000 +501.278189264574 2845.197509765625 +502.287108152553 1738.000000000000 +505.850965822120 2506.000000000000 +536.163265279090 5123.811523437500 +537.164206705990 2452.000000000000 +538.160787955733 1794.000000000000 +544.336478775213 1764.000000000000 +546.913227478942 1570.434814453125 +549.964589119831 1398.000000000000 +607.215848916045 42716.000000000000 +608.219229396365 13004.000000000000 +609.215354074706 6569.000000000000 +610.191475231986 3658.000000000000 +611.187180591379 1650.000000000000 +612.219311132493 2717.000000000000 +613.224098373297 22062.000000000000 +614.227279534381 7018.149414062500 +615.222828016202 3443.000000000000 +623.211028873207 1301.000000000000 +629.198230629944 46218.000000000000 +630.201437914669 14408.000000000000 +631.197842259138 6467.000000000000 +632.198694915122 1400.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=675 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=675 experiment=6_0 +##scan 114 +##specref ms_run[1]:sample=1 period=1 cycle=675 experiment=6 +58.996001750623 30.000000000000 +60.080603176850 312.000000000000 +79.054209126712 30.000000000000 +108.054653787627 60.000000000000 +108.065739487326 56.225082397461 +109.010792405487 30.000000000000 +121.009796723678 30.000000000000 +121.019361963549 30.000000000000 +137.041178917357 135.000000000000 +138.011633501269 60.000000000000 +138.020572409930 60.000000000000 +139.020685086527 75.000000000000 +153.036669947981 330.000000000000 +155.028529627766 71.037872314453 +155.050885009520 255.000000000000 +168.986193427166 335.790893554688 +169.005494842977 263.783813476562 +180.983729756425 30.000000000000 +184.979757717870 180.000000000000 +186.996465097648 45.000000000000 +197.044969171046 13.000000000000 +198.995507284397 330.000000000000 +200.977071763483 60.000000000000 +201.005388168102 51.036884307861 +201.378265734807 45.000000000000 +201.983900875679 3766.254394531250 +214.062947226188 30.000000000000 +216.024647971071 75.000000000000 +216.044892485375 75.000000000000 +216.350618341967 75.000000000000 +217.008093074677 19212.000000000000 +218.543211108378 30.000000000000 +218.552176214816 30.000000000000 +219.007942777136 30.000000000000 +230.017030272807 180.000000000000 +233.289535001227 15.000000000000 +233.960096828681 13.000000000000 +234.034328458175 4563.000000000000 +234.394676822829 13.000000000000 +235.044702856826 30.000000000000 +244.034141805200 13.000000000000 +245.040864912952 461.000000000000 +258.070168801048 60.000000000000 +262.065305326236 869.000000000000 +276.082158135887 2140.000000000000 +277.085594725098 45.000000000000 +277.901531191057 45.000000000000 +277.943555976348 30.000000000000 +303.179510395725 13.000000000000 +304.112709846410 2392.000000000000 +305.112381425482 30.000000000000 +307.656160100874 13.000000000000 +348.985330011267 30.000000000000 +>ms1peaks +52.005351813457 2501.610107421875 +53.013412581284 13134.520507812500 +53.850226225992 1302.909057617188 +54.009140063564 338983.656250000000 +55.006042248338 6435.412597656250 +55.011148435189 6609.394042968750 +55.054172395822 1772.104248046875 +55.934029229957 5757.919921875000 +56.941868288709 2705.908203125000 +59.049392394217 65787.757812500000 +60.044197396550 9389.001953125000 +61.039698624921 1629.770751953125 +63.997582420249 4596.096191406250 +64.004915539546 4860.728515625000 +68.011405901665 27484.292968750000 +68.993238795734 11816.172851562500 +69.044514210085 12151.762695312500 +72.936346245282 1770.000000000000 +73.063844648998 1632.810180664062 +76.485866327556 2207.000000000000 +79.020638014668 15456.159179687500 +80.048700307132 11716.706054687500 +81.936658440041 8339.158203125000 +82.995849176432 8191.000000000000 +87.054215388379 1432.329345703125 +89.505806636870 1376.000000000000 +90.488666027165 1798.000000000000 +95.952211902793 2472.000000000000 +97.967974119285 6640.000000000000 +100.074558827800 1418.000000000000 +102.090063528932 1768.000000000000 +109.942148206295 1646.000000000000 +113.962810920920 1728.000976562500 +114.090265101894 9843.087890625000 +118.085166173822 5466.146972656250 +122.095082275611 3591.515380859375 +122.962671452755 9919.435546875000 +123.090603383338 1818.105346679688 +130.157985838236 1433.000000000000 +136.020144210415 1305.642211914062 +141.111768954054 1381.647338867188 +141.957291332652 13999.958984375000 +147.090365251433 2315.564941406250 +149.021998403294 4169.404296875000 +151.095653127576 2632.192382812500 +151.109600618565 2638.503906250000 +155.069049191990 1400.588378906250 +155.105221715370 1306.244873046875 +155.972774632456 3955.750244140625 +158.152847157321 10190.631835937500 +161.094883274868 1469.000000000000 +164.993233307885 1413.000000000000 +170.094756804200 2692.873779296875 +173.079096183490 5464.607421875000 +174.990754641374 1338.000000000000 +175.120920396226 1335.489135742188 +178.157288006504 1567.557739257812 +179.104881581157 1856.000000000000 +182.960071822982 1596.667236328125 +186.016812097735 3128.000000000000 +194.115183195725 3037.019042968750 +195.105676043577 1846.959228515625 +195.121034909827 2138.534667968750 +198.183715433637 1614.000000000000 +201.983396783946 6476.000000000000 +217.007534943089 16000.083984375000 +217.105603079000 12722.193359375000 +218.010461830348 1723.000000000000 +218.108916975941 1918.000000000000 +219.094207015885 1394.000000000000 +234.033666185649 17919.000000000000 +235.036061869219 1699.000000000000 +239.087710708037 2715.000000000000 +245.038087259231 3705.000000000000 +246.860587751512 3017.000000000000 +250.998652800198 2461.000000000000 +252.996040050118 1751.000000000000 +262.065226573716 31878.271484375000 +263.067812997194 3540.000000000000 +264.062744585962 1732.000000000000 +276.080875651007 47441.000000000000 +277.083729023421 6202.904296875000 +278.078049070253 2909.805664062500 +279.092264164105 2269.000000000000 +281.049607531965 1759.000000000000 +284.163709253010 5971.317382812500 +285.167422523505 1450.937500000000 +289.120547785899 45105.261718750000 +290.122834000335 8899.000000000000 +291.118148964330 16223.000000000000 +292.119468760172 3916.748291015625 +303.104211105075 4272.900878906250 +303.190626643079 3701.817626953125 +304.121038021889 1154982.000000000000 +304.680120827865 1361.469604492188 +304.720450396369 1578.193115234375 +304.756696628278 1464.135742187500 +304.826755934771 1415.802856445312 +304.888295222133 4211.749023437500 +304.975939340234 6444.747070312500 +305.112954471951 109660.976562500000 +306.110248734555 72833.000000000000 +307.111946842557 10169.579101562500 +307.247397220322 1757.839477539062 +310.120212483100 5088.000000000000 +320.107070842572 7286.000000000000 +321.109817317563 1634.396606445312 +321.134008500327 1645.504272460938 +326.094135509242 51581.214843750000 +327.006663634739 3305.288085937500 +327.096918826684 8025.063964843750 +328.090879363560 3401.237060546875 +329.002848029289 3721.000000000000 +330.204815446188 11820.952148437500 +331.208232327135 2889.000000000000 +342.067980362905 3189.395019531250 +349.169296376205 25098.000000000000 +350.172883605486 4323.000000000000 +351.167291455015 1724.000000000000 +372.149200119315 2817.477050781250 +404.036004100360 11013.000000000000 +405.038241871311 2224.679687500000 +424.359699824875 1469.000000000000 +445.117347283461 1962.204711914062 +500.274802921042 11554.163085937500 +501.277725760601 3400.000000000000 +502.286539956580 1910.000000000000 +505.850895564320 2188.000000000000 +536.162361057972 4668.000000000000 +537.163239801382 2428.000000000000 +538.161608472883 1869.000000000000 +544.336387601713 1598.000000000000 +546.911505452596 1493.000000000000 +549.965979448424 1640.000000000000 +592.225456903764 1675.000000000000 +607.216655018496 74091.000000000000 +608.219193446659 23449.000000000000 +609.215852555200 11438.528320312500 +610.208425679746 4454.000000000000 +611.188234775837 1805.798706054688 +612.220726308427 4082.000000000000 +613.224505418990 34075.000000000000 +614.227906702716 11171.000000000000 +615.225014693998 5343.000000000000 +623.210784148654 2510.000000000000 +629.198405169302 68640.000000000000 +630.201595235063 21340.328125000000 +631.198284234777 10581.000000000000 +632.198298853566 2483.000000000000 +707.140261218123 1384.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=676 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=6_0 +##scan 123 +##specref ms_run[1]:sample=1 period=1 cycle=676 experiment=6 +60.080804667174 433.000000000000 +77.037138854585 30.000000000000 +77.044660163015 30.000000000000 +79.051436344945 30.000000000000 +79.987786684964 45.000000000000 +79.995145870102 45.000000000000 +91.053912185659 45.000000000000 +103.055533984494 45.000000000000 +107.047730443211 150.000000000000 +108.056269079190 30.000000000000 +121.009504971189 30.000000000000 +125.040363278974 45.000000000000 +137.042600268373 120.000000000000 +138.019111040995 75.000000000000 +139.020855944901 105.000000000000 +140.031859103509 30.000000000000 +150.070308181449 30.000000000000 +153.035568142921 438.000000000000 +154.041169236265 30.000000000000 +155.050251278454 292.000000000000 +168.985995519890 388.000000000000 +184.982127385526 240.000000000000 +186.996395915972 90.000000000000 +187.034875102026 15.000000000000 +198.997821411773 180.000000000000 +200.977311045020 120.000000000000 +201.984671750322 4516.000000000000 +214.059766225802 30.000000000000 +214.073341606216 30.000000000000 +214.995982481649 45.000000000000 +216.024223244159 75.000000000000 +216.352099910034 45.000000000000 +217.008225956243 19597.000000000000 +217.159059425024 30.000000000000 +217.172831358415 30.000000000000 +217.680866309640 30.000000000000 +217.701180241721 30.000000000000 +217.946417478232 30.000000000000 +218.595765379496 30.000000000000 +219.010234249981 30.000000000000 +230.014065437955 45.000000000000 +233.336055274841 45.000000000000 +234.034165917597 4691.000000000000 +234.071698687435 208.209503173828 +234.991297986214 30.000000000000 +235.014754835894 45.000000000000 +235.038214028110 30.000000000000 +245.039792758223 315.000000000000 +258.068699435792 120.000000000000 +262.065919000015 870.000000000000 +276.081990706357 2323.384521484375 +303.209442753655 30.000000000000 +304.112289160302 3220.247314453125 +>compound 1_3034601138604610277-657008--7--UNKNOWN +>parentmass 363.070775069452 +>ionization [M+Na]1+ +>charge 1 +>rt 431.866000000020 +##fmz 363.07077506945177 +##fid 3034601138604610277 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +363.070775069452 38114.593385922941 +>ms1peaks +52.005865355475 2936.356689453125 +53.013723515258 15168.868164062500 +53.850400239168 1357.829345703125 +54.009447090145 347607.156250000000 +55.006110218286 6238.441894531250 +55.011508541956 7268.958007812500 +55.054636618089 2136.000000000000 +55.934309116073 6532.552734375000 +56.942275933353 2612.874023437500 +59.049622158630 56011.429687500000 +60.044524012498 9000.792968750000 +61.039481839151 1786.074829101562 +63.997449394256 3736.165039062500 +64.005109595772 4712.666015625000 +68.011792039005 26707.251953125000 +68.993702477550 13633.019531250000 +69.008646447254 1441.886596679688 +69.044733608562 13552.908203125000 +69.494666168807 1088.000000000000 +72.044289477019 1134.000000000000 +72.936653378507 2379.292724609375 +73.064314657279 1947.000000000000 +76.486410468336 2230.000000000000 +77.038532396207 1590.778686523438 +79.021074679723 14557.214843750000 +80.049121781728 13038.990234375000 +81.937384309880 9136.173828125000 +82.996771559276 9647.291015625000 +87.044032478393 1164.202392578125 +87.055030197874 1937.880737304688 +89.506480817586 1633.000000000000 +90.489144644798 1823.000000000000 +91.053978578614 1481.000000000000 +95.952653475183 2798.568603515625 +97.968242662562 7804.676269531250 +100.075124666224 1357.000000000000 +102.091023963336 2105.000000000000 +109.943015773476 1849.492675781250 +113.963173340819 2146.000000000000 +114.091149027124 11434.439453125000 +118.085562888545 7126.602050781250 +122.095450971812 3351.000000000000 +122.963406396921 11429.592773437500 +123.091816714399 1461.405029296875 +123.962989553704 1162.000000000000 +132.043858137010 23466.287109375000 +133.047312261130 2601.019775390625 +136.020979409517 1763.000000000000 +136.111376584671 1338.000000000000 +141.090631531290 1452.329956054688 +141.112250777587 1933.171752929688 +141.957805111647 16272.520507812500 +142.960130525273 1091.785766601562 +147.090889713370 2561.000000000000 +149.022860382613 8952.703125000000 +149.043461527452 2074.399169921875 +151.096439801801 2539.815917968750 +151.111209143750 2693.475830078125 +155.070028482861 1787.522338867188 +155.105375703160 1554.431030273438 +155.973268704769 4467.000000000000 +158.002234575261 1123.180664062500 +158.153819790011 15565.543945312500 +159.136830576290 1251.366088867188 +159.156929350810 1638.817993164062 +159.968015589745 1144.587158203125 +160.050107538005 10862.000000000000 +161.095753069011 1987.528442382812 +163.130314304873 1321.613403320312 +164.142207413101 1344.506469726562 +170.096003050047 2831.750244140625 +170.116393016687 1241.047485351562 +170.969308188165 1467.000000000000 +171.138824143644 1976.471679687500 +172.132816514555 1070.000000000000 +172.169354072833 1126.623413085938 +173.080592066342 7150.673339843750 +174.127101054123 1093.000000000000 +174.991572624579 1115.259887695312 +175.117966507653 1382.413574218750 +177.053956263481 3086.000000000000 +178.158743604693 1737.946655273438 +179.106488149861 2092.017333984375 +182.961571664514 1566.125366210938 +182.982955367691 1389.804321289062 +186.221312636852 2310.000000000000 +194.116506735598 3012.142089843750 +195.121983568600 1971.532348632812 +198.184492106186 2254.000000000000 +199.168659259112 1074.472778320312 +200.200544607050 1265.000000000000 +209.152957718499 1444.000000000000 +215.126858142678 1195.000000000000 +217.107186196782 24662.302734375000 +218.110233972313 2772.000000000000 +219.095202240315 3180.013427734375 +219.137164883586 1444.293090820312 +224.128646207474 1167.206176757812 +228.196369189320 1732.199340820312 +235.170060948981 1264.538574218750 +236.167946332224 2704.449462890625 +239.089160494599 5259.000000000000 +240.068219796793 1277.484863281250 +240.091769691182 1359.958740234375 +242.284200605489 1137.000000000000 +246.863294404574 3891.000000000000 +249.184938071857 1294.474121093750 +250.177914710678 1312.000000000000 +250.999736865556 2366.000000000000 +251.185303455126 1195.000000000000 +252.996845199048 1725.000000000000 +260.980831135670 9681.000000000000 +262.976934337234 1074.000000000000 +267.172286092444 1268.487426757812 +279.093453473919 1954.000000000000 +281.051187832394 1373.000000000000 +287.889696989575 1142.000000000000 +318.012975056617 4878.000000000000 +327.008528574617 3507.000000000000 +329.005288792022 3151.000000000000 +339.995536258518 21188.000000000000 +340.998304727292 3403.000000000000 +341.991615450972 1965.000000000000 +351.928765172494 2752.000000000000 +353.925863637500 1287.000000000000 +355.970345025132 1233.272216796875 +363.071463720139 4333.000000000000 +371.315937786641 1386.000000000000 +379.934517326720 2414.000000000000 +381.932765584480 1355.000000000000 +430.887891579421 1170.000000000000 +445.119501835711 2373.000000000000 +503.857852657168 1208.000000000000 +505.853144541362 5379.000000000000 +506.854406933930 1813.000000000000 +522.880381915172 2380.000000000000 +523.873038712107 1344.000000000000 +529.890971881918 1718.000000000000 +536.164830382665 5050.000000000000 +537.165530578391 2568.000000000000 +538.164082153377 1889.000000000000 +542.919791547930 1233.000000000000 +544.340309842267 1260.000000000000 +544.916740966050 1184.000000000000 +546.914239791284 3795.000000000000 +547.912822025670 1609.000000000000 +563.944002995814 1077.258789062500 +610.183402350979 1851.000000000000 +611.184706508494 1107.000000000000 +696.940078237106 1408.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=657 experiment=8 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=657 experiment=8_0 +##scan 7 +##specref ms_run[1]:sample=1 period=1 cycle=657 experiment=8 +51.023327393106 30.000000000000 +77.037828076161 230.000000000000 +77.047112591606 188.054351806641 +104.051039199103 135.000000000000 +105.033428602011 150.000000000000 +124.983684040858 90.000000000000 +132.044015045267 690.740539550781 +167.013583750308 30.000000000000 +172.867381277642 30.000000000000 +>ms1peaks +52.005717667707 2536.876953125000 +53.013645918459 13517.719726562500 +53.851091408425 1440.814208984375 +54.009479564739 340518.468750000000 +55.006713705873 6189.195800781250 +55.011648330739 5775.918945312500 +55.054395080163 1937.021850585938 +55.934309790351 6216.487304687500 +56.049851096555 1422.552856445312 +56.942103151176 2497.945800781250 +59.049782018324 63557.187500000000 +60.044617957556 9127.332031250000 +61.039564209817 1916.918579101562 +63.998058629288 4341.631347656250 +64.005180932598 4902.907226562500 +68.011727932833 27051.191406250000 +68.994002789359 13611.511718750000 +69.034264524552 2235.962402343750 +69.044867744672 14147.763671875000 +72.936875253829 3080.500976562500 +73.064425531348 1778.781250000000 +76.486297547963 2075.000000000000 +77.038265451054 5099.881835937500 +79.021270792779 14303.786132812500 +80.049179511142 11132.483398437500 +81.937187525733 8269.017578125000 +82.996616277972 9058.604492187500 +87.055191552618 1226.265625000000 +89.506723502083 2138.000000000000 +90.489274059111 1883.000000000000 +91.053872057085 1250.000000000000 +95.952563443877 2416.907226562500 +97.968351278732 7414.000000000000 +102.091075578098 2124.000000000000 +104.049176798538 2869.822265625000 +105.032824057535 2268.302246093750 +109.942659719793 1552.503417968750 +113.963028919819 2876.313476562500 +114.091047730204 9707.000000000000 +118.085960022478 6202.343750000000 +122.095829000463 3354.874755859375 +122.963603572159 10189.080078125000 +123.091990223840 1658.215576171875 +123.962908276753 1264.000000000000 +124.961981387844 1248.617553710938 +124.981468335431 3929.697021484375 +132.044195947098 93934.070312500000 +133.046929709006 8774.461914062500 +136.020849942089 1733.000000000000 +136.111849813683 1360.000000000000 +139.963062553447 1109.337646484375 +141.090358589210 1395.717041015625 +141.112852312471 1316.060180664062 +141.957905703603 16856.453125000000 +142.959660117555 1253.947509765625 +147.090758649450 2468.091308593750 +149.023008191796 6552.861328125000 +150.054483884674 1381.879394531250 +151.096258773620 2499.016357421875 +151.110632987131 2703.097412109375 +153.126579038194 1175.000000000000 +155.069775153959 1603.251586914062 +155.105765884478 1708.284912109375 +155.973825500886 4965.000000000000 +158.002736417151 1095.759399414062 +158.153601610996 15319.201171875000 +159.156377711765 1693.013305664062 +160.050203671116 29808.187500000000 +161.053148014827 2780.099853515625 +161.095739798824 1801.900268554688 +164.143136174419 1163.970947265625 +167.016142798795 1938.000000000000 +170.095669159809 2557.841796875000 +170.116803885810 1136.247192382812 +170.969513731195 5351.000000000000 +171.138682297569 3310.690673828125 +172.133498266589 1186.970092773438 +172.168816609007 1753.000000000000 +173.079889235839 8137.424804687500 +174.127584523158 1118.000000000000 +177.053398759750 2010.000000000000 +178.158757601913 1500.698242187500 +179.105540802675 2172.262695312500 +182.961283063703 1745.384643554688 +186.221178069795 1622.000000000000 +194.116354222571 3003.000000000000 +195.102160721940 1637.390014648438 +195.121964321705 2114.307128906250 +198.185094857026 2154.000000000000 +209.152949152955 1423.597534179688 +217.106757414349 22820.371093750000 +218.109717212262 2365.715332031250 +219.095322856019 2839.912353515625 +224.127859164514 1268.000000000000 +228.195125596876 1796.750244140625 +235.168738541554 1153.106201171875 +236.167125665018 2147.822998046875 +239.089167868946 3697.000000000000 +242.283752097581 1331.000000000000 +246.862020032552 3643.000000000000 +249.184726675759 1740.000000000000 +250.176839865775 1269.149047851562 +251.000052262976 1835.000000000000 +251.185199846439 1143.344848632812 +252.997000735520 1613.000000000000 +253.915053857069 3181.000000000000 +260.980520936940 34136.089843750000 +261.983107472769 3914.000000000000 +262.975908361642 3711.000000000000 +267.171176133304 1190.000000000000 +279.094069923914 2218.000000000000 +281.050366742298 1525.000000000000 +304.299335403967 1178.000000000000 +318.012807082281 13905.000000000000 +319.015812641865 1771.000000000000 +320.009779889072 1411.312622070312 +324.021497063862 2274.000000000000 +327.008303487350 3194.000000000000 +329.005675073912 3118.000000000000 +339.995324080662 63593.000000000000 +340.998247708453 9047.660156250000 +341.991464705082 6892.000000000000 +351.928380615899 5009.000000000000 +353.925994810456 2303.000000000000 +355.968410053379 3129.565673828125 +363.070877703428 10529.000000000000 +364.073137490148 1819.000000000000 +379.934530374708 4270.000000000000 +381.931407641533 2153.000000000000 +445.120046493581 2353.000000000000 +503.859909772363 1436.000000000000 +505.853063220538 5926.000000000000 +506.854048759295 1904.000000000000 +519.139384687535 1126.000000000000 +522.880368766100 2806.000000000000 +523.877736811317 1418.000000000000 +529.888748439098 1722.000000000000 +536.165143915241 4925.000000000000 +537.165086990853 2707.000000000000 +538.162296228146 1762.000000000000 +542.921174254561 1132.000000000000 +543.918003709155 1152.000000000000 +546.914886995490 3416.000000000000 +547.912219447510 1693.000000000000 +563.943181698806 1223.378784179688 +610.184322938020 2314.000000000000 +611.184296206340 1322.000000000000 +657.001817843383 1409.000000000000 +696.940437510992 3603.000000000000 +698.940217154744 2331.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=658 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=658 experiment=9_0 +##scan 17 +##specref ms_run[1]:sample=1 period=1 cycle=658 experiment=9 +77.039588173559 315.000000000000 +104.048667587430 90.000000000000 +105.034213515052 266.000000000000 +124.982932191415 120.000000000000 +132.045552020292 1052.000000000000 +134.069001291881 15.000000000000 +160.052154319404 75.000000000000 +260.988397593186 30.000000000000 +>ms1peaks +50.015030688094 1631.000000000000 +52.005691836328 2833.837890625000 +53.013678352050 13820.645507812500 +53.850930804944 1372.676147460938 +54.009488813193 341215.375000000000 +55.006244952468 6363.858398437500 +55.011195314574 6663.786621093750 +55.054435589179 2093.444580078125 +55.934214796378 6443.966308593750 +56.049418637710 1614.372314453125 +56.942077131072 2603.345458984375 +59.049684010496 67068.679687500000 +60.044674600260 8507.357421875000 +61.039576232541 1618.787597656250 +63.997953270808 4540.612304687500 +64.004984885183 4765.146484375000 +68.011730125352 26984.066406250000 +68.993758540617 13250.065429687500 +69.044639818678 13453.114257812500 +72.936865747985 3009.785888671875 +73.064487442720 1926.000000000000 +76.486106736487 2394.000000000000 +77.012975210189 1331.000000000000 +77.038245950909 6864.013671875000 +79.021170250218 14954.513671875000 +80.049055487900 12273.781250000000 +81.937167726085 8605.721679687500 +82.996581259270 9547.895507812500 +87.054493611252 1308.586669921875 +89.506388403917 1579.000000000000 +90.489379547455 1879.000000000000 +91.053817827625 1210.000000000000 +95.952611673257 2421.652587890625 +97.968325410624 7844.628906250000 +100.075376789744 1408.000000000000 +102.090940410850 1712.000000000000 +104.048827681379 4021.000000000000 +105.032851808396 3043.702148437500 +109.943040230612 1524.000000000000 +113.962743611150 2300.809326171875 +114.091086475065 10732.537109375000 +118.085604757949 6375.129394531250 +122.095612538633 3453.346191406250 +122.963478886657 10149.138671875000 +123.091154033496 1907.152587890625 +123.962085557178 1291.000000000000 +124.964032856960 1524.723510742188 +124.981293760905 5573.300781250000 +132.044243365317 129513.453125000000 +133.047275934233 12024.171875000000 +136.021338396786 1596.000000000000 +136.111611313675 1179.000000000000 +141.090513006913 1389.292724609375 +141.112565247916 1247.203857421875 +141.957978845995 16325.500000000000 +147.090945866648 2556.685302734375 +149.023028218992 6399.154296875000 +150.054262184195 1568.000000000000 +151.096430884077 2664.400390625000 +151.111011940160 2835.027587890625 +155.069438117684 1871.944824218750 +155.105960083325 1401.000000000000 +155.973753152622 4288.000000000000 +158.153627071218 14384.000000000000 +159.156473714741 1627.752929687500 +160.050487288307 38915.000000000000 +161.053611692746 4466.942382812500 +161.095700587134 1743.057495117188 +164.142944501592 1256.052368164062 +167.015735366166 2785.089599609375 +170.096151543720 2652.023193359375 +170.116409887737 1324.376464843750 +170.968993556255 7076.000000000000 +171.137671144810 4912.312011718750 +172.136045264128 1371.000000000000 +173.079830429233 8581.928710937500 +174.991306236853 1198.000000000000 +177.054219725911 1769.000000000000 +178.157947155736 1498.908447265625 +179.106050750592 1934.090454101562 +182.960933723657 1780.061523437500 +182.991388549794 1244.309082031250 +186.221152079128 2287.000000000000 +194.116900036921 2752.000000000000 +195.121615177487 1919.471069335938 +198.184412559940 2140.000000000000 +200.200455656322 1296.554199218750 +209.153704347399 1590.000000000000 +212.888258624179 1535.000000000000 +217.106944592366 24346.000000000000 +218.110517718319 2646.000000000000 +219.095540028475 2644.006591796875 +228.196097140190 1527.811645507812 +236.167749124378 1677.000000000000 +239.089312381813 3327.000000000000 +242.284215148787 1201.000000000000 +246.862288406064 3365.000000000000 +249.184532839914 1860.293334960938 +251.001107206325 2362.000000000000 +252.997444701878 1876.000000000000 +253.916335213075 4093.000000000000 +260.980865788213 46877.000000000000 +261.983931158765 5301.000000000000 +262.976772362746 4418.000000000000 +267.172661485943 1410.000000000000 +277.199859444074 2417.590087890625 +279.093448238935 1888.450561523438 +281.051163936397 1557.000000000000 +292.121170689402 15731.000000000000 +293.123945781771 2615.000000000000 +294.118820607873 4859.000000000000 +295.121821476430 1186.000000000000 +318.013460543863 19020.000000000000 +319.016226586969 2819.000000000000 +320.010792812476 1745.000000000000 +324.021120495162 2522.000000000000 +327.007928037291 3314.077636718750 +329.005428091932 3187.000000000000 +331.002680981835 1140.229492187500 +335.040406311528 1228.000000000000 +339.995783079981 73785.000000000000 +340.998517552508 10283.000000000000 +341.992089047450 7216.000000000000 +351.928943475892 4368.000000000000 +353.926519256680 2362.000000000000 +355.969819970535 3512.076416015625 +363.071778928522 11698.970703125000 +364.073181575102 1981.000000000000 +371.315525399960 1354.000000000000 +379.934529706961 4095.883300781250 +381.932716463007 2062.000000000000 +445.119746997025 2474.000000000000 +446.119291863183 1145.000000000000 +505.853826516954 4858.000000000000 +506.855308046231 1451.000000000000 +519.139330404280 1166.703979492188 +522.880837958116 1970.000000000000 +523.871380297922 1372.000000000000 +529.891671811182 1342.000000000000 +536.165890644769 5714.000000000000 +537.166372879728 2646.000000000000 +538.163391669663 2155.000000000000 +544.339624971493 1155.000000000000 +546.914039373140 3234.000000000000 +547.912958504845 1306.000000000000 +610.184280095073 1860.000000000000 +611.183517202231 1239.000000000000 +657.000223829242 1834.000000000000 +696.940499292838 3022.000000000000 +698.938485246113 2250.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=659 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=9_0 +##scan 26 +##specref ms_run[1]:sample=1 period=1 cycle=659 experiment=9 +77.038879416695 240.000000000000 +104.047502330176 150.000000000000 +105.032936494768 150.000000000000 +105.045515734250 116.539550781250 +124.982386965946 30.000000000000 +130.038678184319 30.000000000000 +130.049262402724 30.000000000000 +132.044440689304 739.000000000000 +160.052657174434 75.000000000000 +182.992309980599 30.000000000000 +>compound 1_16459302675638519057-664006--60--UNKNOWN +>parentmass 372.064975852221 +>ionization [M+Na]1+ +>charge 1 +>rt 437.422999999980 +##fmz 372.064975852221096 +##fid 16459302675638519057 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +372.064975852221 23380.927388863765 +>ms1peaks +52.005453969998 2626.723144531250 +53.013597312446 12728.553710937500 +53.850414409821 1250.853881835938 +54.009329210909 348334.937500000000 +55.006062122532 5392.668457031250 +55.011342055713 6236.111816406250 +55.054021350211 1869.273437500000 +55.934286374440 6315.563964843750 +56.941831842622 2597.011962890625 +59.049520241177 68985.562500000000 +60.044238693811 9277.411132812500 +60.051306561624 7152.463378906250 +61.039638104919 1556.488891601562 +63.997844257749 4543.386718750000 +64.004868648059 4706.500976562500 +68.011536869512 28038.335937500000 +68.993647464953 12595.196289062500 +69.044515645070 12865.375976562500 +72.936647087938 2567.000000000000 +73.064121365067 1769.925781250000 +76.486182586418 2785.377929687500 +79.020888115541 15628.571289062500 +80.049060365715 12153.072265625000 +81.936978966817 8495.000000000000 +82.996309100211 9038.668945312500 +87.043494139885 1178.190917968750 +87.054319172330 1546.054443359375 +89.506956806916 1559.000000000000 +90.488703688296 1817.000000000000 +91.053777911785 1528.745483398438 +95.952341177386 2260.741210937500 +97.968210936145 7024.000000000000 +98.983399057372 5034.887695312500 +100.075304888654 1243.000000000000 +102.090957068479 1525.000000000000 +109.943109012828 1320.928710937500 +113.962992754591 2498.000000000000 +114.090728474154 10512.617187500000 +118.085470631803 6601.458007812500 +122.095607083049 3712.721679687500 +122.962888411087 10607.500976562500 +123.091509718457 1686.104614257812 +132.043186178558 2464.123291015625 +136.020620151667 1645.000000000000 +140.067164786600 1314.000000000000 +141.089863109573 1272.675292968750 +141.111890586678 1562.626220703125 +141.957557081223 15988.394531250000 +147.090173997086 2431.000000000000 +149.022336160605 4523.349121093750 +149.043636850784 1223.066040039062 +151.095789721496 2301.788818359375 +151.111113393103 2538.584228515625 +155.069111807472 1549.374267578125 +155.105759874764 1515.979370117188 +155.973112787773 4487.000000000000 +158.153378740203 12758.589843750000 +159.156448385204 1328.413452148438 +161.095542076597 1436.000000000000 +164.142018358830 1273.736083984375 +170.095175686942 2849.232421875000 +171.138207188731 2555.000000000000 +172.133475837479 1266.057739257812 +173.079557051502 6304.225097656250 +174.991247355031 15122.000000000000 +176.988586706089 4881.000000000000 +178.158242399689 1403.950073242188 +179.105412805866 3814.716552734375 +182.960601426951 1842.280639648438 +182.982966835265 1410.150146484375 +186.220883153188 1802.000000000000 +194.115976643286 3119.000000000000 +195.102214753451 1498.057617187500 +195.120897037407 1858.993774414062 +198.184171488074 2116.000000000000 +217.106332787106 21497.787109375000 +218.109128733639 2613.000000000000 +219.095226750847 2102.304443359375 +224.127626531368 1175.000000000000 +228.195317705032 1672.133422851562 +239.088374855672 3685.309814453125 +242.283185310790 1468.000000000000 +246.860952738993 3049.000000000000 +249.183720846634 1286.295654296875 +250.177140311956 1205.756591796875 +250.999832075601 32001.000000000000 +252.002106420824 2157.000000000000 +252.996924958467 20204.000000000000 +253.999797691244 1411.000000000000 +254.993496356863 3401.000000000000 +279.092906188567 2036.000000000000 +286.179288894577 8400.000000000000 +287.181689656808 1994.078002929688 +287.217541902151 1349.643310546875 +291.235948805059 1485.048828125000 +292.122314491142 439122.000000000000 +292.983059595137 1438.034667968750 +293.122671084767 47692.136718750000 +294.118451514065 133013.562500000000 +295.120454982262 22502.744140625000 +296.122607984390 2357.932373046875 +313.039105768504 33266.000000000000 +314.042149111497 5168.000000000000 +315.036268416268 21007.242187500000 +316.038403197349 3302.000000000000 +317.033014483539 3862.000000000000 +321.227057921370 1381.000000000000 +327.007877449001 47611.566406250000 +328.011115186819 4973.000000000000 +329.004794999861 46547.000000000000 +330.008005603352 4737.000000000000 +331.001868162022 15538.000000000000 +332.004876313775 1480.000000000000 +333.003299668985 2744.071777343750 +335.018886982057 3585.000000000000 +337.016084576435 2205.000000000000 +339.994390073568 1754.000000000000 +348.988792788967 6573.000000000000 +350.986916484867 6721.000000000000 +352.984603835989 2083.000000000000 +354.041095041215 1340.092163085938 +356.039619641072 1269.081298828125 +372.065048824891 6209.586914062500 +374.062468004687 6086.000000000000 +376.059148229590 1968.000000000000 +392.045330940334 2193.000000000000 +395.067648242738 2230.000000000000 +397.066134815272 1581.000000000000 +426.930515343123 1306.000000000000 +426.976513054277 1169.811889648438 +428.927149366436 1298.000000000000 +430.886640350010 1403.000000000000 +445.118913900930 2269.000000000000 +491.969645058197 1379.000000000000 +505.851389825487 3789.000000000000 +522.878326149515 1800.000000000000 +536.163456762234 4427.000000000000 +537.165324404735 2206.000000000000 +538.161529742511 1590.843383789062 +544.337468455008 1195.000000000000 +546.914116937371 2559.000000000000 +547.911876414748 1196.000000000000 +610.180850219782 2080.000000000000 +611.182328195703 1214.000000000000 +645.154717656738 8484.000000000000 +646.158700037782 2782.000000000000 +647.152980374288 9942.000000000000 +648.155555240546 3294.000000000000 +649.150621117204 4284.000000000000 +650.152709955400 1200.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=664 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=6_0 +##scan 60 +##specref ms_run[1]:sample=1 period=1 cycle=664 experiment=6 +80.972953153785 13.000000000000 +98.982914422980 431.000000000000 +129.050346989349 13.000000000000 +174.989442978594 105.000000000000 +>compound 1_12237362536485158566-690002--189--Fluopicolide +>parentmass 382.973869490197 +>ionization [M+H]1+ +>formula C14H8Cl3F3N2O +>charge 1 +>rt 461.815000000020 +##fmz 382.973869490196876 +##fid 12237362536485158566 +##des Fluopicolide +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +382.973869490197 1566560.194702931913 +383.974085388476 215156.515593794087 +384.971182227280 1515411.090952950995 +385.971445846469 217515.636160165188 +386.966617270822 496455.906171257608 +387.969500648600 70588.742014634801 +388.966369635235 66477.465492693751 +>ms1peaks +52.005210101745 2880.326171875000 +53.013244764978 14536.934570312500 +53.849926196038 1299.180541992188 +54.009062191468 337463.656250000000 +55.005782184426 6018.867675781250 +55.011130257419 6291.486816406250 +55.053977714849 2564.656250000000 +55.934045390685 5149.269042968750 +56.049252844183 1522.427001953125 +56.941603012839 2038.434204101562 +59.049303582077 66746.156250000000 +60.044155103878 10569.948242187500 +61.039339551811 1535.741943359375 +63.997382781260 3987.302490234375 +64.004764366709 4495.057128906250 +67.029012182241 1196.788085937500 +68.011241243102 27618.355468750000 +68.993215053966 11211.009765625000 +69.007933522035 1110.942382812500 +69.030952972722 1208.401123046875 +69.044122956537 14957.959960937500 +70.047392494398 1056.000000000000 +72.936253799388 1911.266845703125 +73.064074433437 1870.000000000000 +76.485837613149 2263.000000000000 +79.020585106505 16188.393554687500 +80.048658040907 12759.203125000000 +81.936455171914 7130.960449218750 +82.995989890540 8094.847167968750 +83.084419311590 1600.000000000000 +87.043278684781 1486.388549804688 +87.053817622777 1603.334838867188 +89.069749088361 1018.981018066406 +89.505979323008 1330.000000000000 +90.488509802564 1298.000000000000 +91.053061548451 1458.197998046875 +95.952010042584 2034.000000000000 +97.967845663329 6727.871582031250 +100.074557176530 1242.297607421875 +102.090456966796 1808.000000000000 +109.942605580563 1304.000000000000 +113.961995665745 1783.000000000000 +114.090136653414 11099.125976562500 +118.084578873938 6589.014160156250 +122.095225690220 3753.473632812500 +122.962554906366 9321.000000000000 +123.090771458381 1894.498779296875 +123.959613404275 1190.405883789062 +129.051729705624 1153.000000000000 +130.157564325932 1454.000000000000 +136.020001066212 1765.000000000000 +136.111173027530 1401.000000000000 +140.066639527938 1028.000000000000 +141.089745096835 1563.539672851562 +141.111484223018 1201.726074218750 +141.934455898498 1853.158203125000 +141.957169463850 15166.348632812500 +147.090458533503 2770.000000000000 +149.021900848308 4662.361816406250 +149.040700354547 2059.066162109375 +151.095497123421 2745.510253906250 +151.109864345448 3167.984130859375 +155.069134838044 1226.075561523438 +155.104965175783 5033.305175781250 +155.972604697841 3923.406005859375 +158.152845331544 12425.991210937500 +159.155757881201 1277.437866210938 +159.967768899180 1071.000000000000 +161.095020040845 1890.000000000000 +164.141534807567 1672.000000000000 +170.094937863069 2534.239013671875 +171.145574254043 1674.000000000000 +172.132621534302 1231.000000000000 +173.079595798653 7293.703125000000 +174.126503889229 1050.000000000000 +174.990271465623 1245.000000000000 +175.121004452465 1328.734497070312 +177.053009667276 1263.687377929688 +178.157674087207 1448.371459960938 +179.105287566263 2170.352783203125 +182.960459644363 2471.043212890625 +182.982288944426 1163.013549804688 +183.079109532841 6225.136718750000 +184.081105483367 1022.846374511719 +186.219653891550 1284.000000000000 +194.115456511691 3794.229980468750 +195.099541191905 1349.889038085938 +195.121523296283 2229.914550781250 +198.183976447015 2341.000000000000 +199.168630322872 1033.270751953125 +200.199814752449 1084.000000000000 +215.080651017155 1832.000000000000 +217.106027886947 23780.771484375000 +218.109364414939 2635.000000000000 +219.094316037445 1318.440917968750 +221.152166294283 1164.883911132812 +224.126348349948 1477.977416992188 +227.126868766390 14694.514648437500 +227.161495790859 1160.310546875000 +228.130201807144 2153.737548828125 +228.194384410156 1676.000000000000 +233.134961623018 1118.406982421875 +235.167077858732 1294.375976562500 +239.087617137075 5289.139648437500 +242.282321574347 2010.184570312500 +246.860834293952 3268.000000000000 +249.108707735736 7477.228027343750 +249.183052414364 1165.512939453125 +250.176352588420 1357.000000000000 +250.998215553850 2416.000000000000 +251.183857770360 1222.461791992188 +252.995780678787 1689.000000000000 +267.170841081571 1457.286621093750 +279.092420733858 2225.000000000000 +281.050010295874 1569.000000000000 +289.119147717746 1566.258178710938 +294.135329652932 4503.000000000000 +295.188814348578 2271.450439453125 +296.132567161201 1627.334594726562 +304.111668221270 3004.000000000000 +309.233650475700 1074.000000000000 +327.007272430691 3551.831542968750 +329.003127675682 3321.000000000000 +330.204917561574 2224.000000000000 +331.001391515662 1115.000000000000 +367.244150717722 1652.779052734375 +371.099010574269 1011.000000000000 +382.971173512741 7099.000000000000 +383.975115565599 1219.000000000000 +384.968741898502 6715.411132812500 +385.970680131379 1240.000000000000 +386.965633977078 2382.000000000000 +430.884821512900 1145.000000000000 +445.117845109390 2209.000000000000 +500.274546729878 1889.000000000000 +502.290379415694 1910.427490234375 +505.850981337320 1612.000000000000 +519.134856069604 1068.000000000000 +520.338024852892 1339.000000000000 +524.367950184351 1991.705444335938 +536.162415980276 5397.000000000000 +537.164195256501 2408.000000000000 +538.161390635714 2020.000000000000 +542.322588022880 3070.203369140625 +543.324833448983 1285.000000000000 +544.336359438462 3205.019042968750 +546.911641444659 1057.000000000000 +610.180489575856 2193.000000000000 +611.181108891135 1384.000000000000 +684.198238488602 1003.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=690 experiment=2 +##m_id Fluopicolide_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=690 experiment=2_0 +##scan 189 +##specref ms_run[1]:sample=1 period=1 cycle=690 experiment=2 +74.014827458225 8.000000000000 +108.983366207722 26.000000000000 +109.989618691772 4.000000000000 +123.979816140963 2.000000000000 +132.018313553585 6.000000000000 +144.519211201056 4.000000000000 +144.529614141667 4.000000000000 +144.959898296654 481.000000000000 +146.983453232469 2.000000000000 +153.877690540072 2.000000000000 +158.021510503175 10.000000000000 +159.026979232729 6.000000000000 +172.435617385246 34.000000000000 +172.483826110428 3.604490280151 +172.502325907959 3.796431541443 +172.955133300395 5827.000000000000 +173.017652697274 4.000000000000 +173.102323528288 8.000000000000 +173.119342430749 7.952377319336 +173.169183183190 4.000000000000 +173.183867564746 4.000000000000 +173.958949059484 6.000000000000 +173.992189755989 19.000000000000 +174.292784929592 4.000000000000 +174.303838341920 4.000000000000 +174.498056923622 4.000000000000 +174.507993062891 4.000000000000 +174.601446376462 4.000000000000 +174.618843037831 4.000000000000 +174.847046208074 2.000000000000 +175.359849884359 2.000000000000 +175.469734656576 4.000000000000 +175.486021571205 6.000000000000 +175.497515908935 4.000000000000 +189.699838262997 2.000000000000 +193.998191877080 288.000000000000 +212.011275243780 14.000000000000 +212.886974994315 2.000000000000 +234.188215950907 2.000000000000 +235.803102855284 2.000000000000 +237.057303951399 2.000000000000 +282.803853588561 8.000000000000 +282.826910729405 8.000000000000 +327.069830102971 2.000000000000 +334.802573876047 2.000000000000 +364.963080105351 179.000000000000 +371.709130079698 2.000000000000 +376.326026715934 2.000000000000 +382.972744466787 67.000000000000 +383.976807274218 4.000000000000 +>ms1peaks +52.005460768039 2632.474609375000 +52.018216605071 1453.331787109375 +53.013504878262 13629.050781250000 +53.849980694050 1426.347900390625 +54.009228946889 336414.500000000000 +55.006192155745 5923.077148437500 +55.011510780469 6201.034179687500 +55.054252354012 2748.183837890625 +55.934342759512 5029.362792968750 +56.049718574756 3820.462890625000 +56.941798954376 2040.369384765625 +59.049450389379 63100.214843750000 +60.044446622738 10277.622070312500 +61.039574586144 1639.209472656250 +63.997833501230 3457.696044921875 +64.005356757182 3922.083740234375 +67.028813659264 2927.124267578125 +68.011568906879 27184.011718750000 +68.993799166752 11291.774414062500 +69.008782671073 1110.820922851562 +69.044422525384 14576.621093750000 +72.044090470135 1069.000000000000 +72.936647746103 1867.645996093750 +73.064241969654 1890.270141601562 +76.486566607142 2154.000000000000 +79.021060621858 16402.000000000000 +80.048912504147 11908.904296875000 +81.936948519663 7659.439453125000 +82.996456601784 7432.041015625000 +83.084846425827 2619.000000000000 +87.044234628717 1642.456787109375 +87.054412582263 1764.396362304688 +89.070136748709 1188.329101562500 +89.506769824945 1309.000000000000 +90.489346677114 1261.775878906250 +91.053422064295 1599.987548828125 +95.952556829344 1954.000000000000 +97.967937653882 6272.680175781250 +100.074820050407 1313.661132812500 +102.090442487468 2018.000000000000 +109.942993258045 1292.210815429688 +113.962358113491 1857.055419921875 +114.090543897348 10782.883789062500 +118.085193271831 6439.585937500000 +122.095576433333 3719.300781250000 +122.963045289522 8831.000000000000 +123.090127906704 2032.145874023438 +123.961671902554 1039.000000000000 +130.158410860949 1108.000000000000 +136.020580299746 1385.000000000000 +136.110973601797 1208.185180664062 +137.963495288748 1038.000000000000 +138.970185164931 1044.000000000000 +141.090483230390 1714.842407226562 +141.112072140860 1217.862182617188 +141.957625571099 14848.524414062500 +142.959933648058 1183.193115234375 +147.090750731097 2692.000000000000 +149.022586318358 4677.753906250000 +151.095818189897 2463.614501953125 +151.109403980113 2852.661376953125 +155.069856888985 1644.906494140625 +155.105634666236 8124.955078125000 +155.973077442175 3878.003173828125 +158.095390272769 1041.850830078125 +158.153110530602 11433.902343750000 +159.156138029756 1255.307250976562 +159.968790133864 1084.000000000000 +161.096047015176 1855.838989257812 +163.131292514217 1081.046264648438 +164.142338808225 1538.000000000000 +170.095249905282 2481.923583984375 +170.114818729424 1586.174682617188 +171.144577817449 1465.000000000000 +172.133060054694 1132.135253906250 +173.080138735239 6781.958007812500 +174.126750381227 1146.000000000000 +174.990894555098 1459.000000000000 +175.124197631539 1158.163574218750 +177.054313185370 1050.000000000000 +178.158439439061 1351.589477539062 +179.106069845588 2217.652832031250 +182.960683036176 2721.000000000000 +183.079572975077 3558.392822265625 +186.220577305634 1472.000000000000 +194.115833443496 3200.611816406250 +195.099867813526 1492.162719726562 +195.121670053083 2089.949218750000 +198.184355819996 2036.034667968750 +199.185771412889 1053.000000000000 +200.199994101328 1045.000000000000 +217.106066147047 23700.000000000000 +218.109880969704 2669.000000000000 +219.095458161270 1180.932006835938 +224.126383591275 1239.964111328125 +227.127075688130 24915.439453125000 +228.130566679052 3475.000000000000 +228.195672567193 1184.000000000000 +233.135519600916 1606.236083984375 +235.167213939552 1131.541503906250 +239.088391913188 5292.000000000000 +242.283165125348 1763.000000000000 +246.861456391400 2687.000000000000 +249.108966407852 11636.693359375000 +250.113738299007 1549.000000000000 +250.178629966588 1340.000000000000 +250.999377894033 2470.000000000000 +252.996369939032 1431.000000000000 +267.169859968301 1516.000000000000 +279.093360326372 2198.000000000000 +281.049935707172 1718.359741210938 +289.120421172109 1505.223999023438 +294.135805745070 1954.000000000000 +295.190643010298 1597.599243164062 +304.112579156761 2114.000000000000 +327.007179750003 3429.369384765625 +327.051990179871 1964.440551757812 +329.004854748166 3098.000000000000 +330.205970450676 2139.970947265625 +331.001810666775 1124.000000000000 +367.245375431034 1096.678710937500 +371.099956255100 1145.000000000000 +371.315850471733 1077.000000000000 +382.972477955693 57862.191406250000 +383.973581113624 9390.000000000000 +384.969379705317 56829.000000000000 +385.971610318225 8858.000000000000 +386.966433781431 18577.000000000000 +387.968684254304 3112.000000000000 +388.968200016670 2893.000000000000 +404.953693248965 4478.000000000000 +406.950549247024 5007.000000000000 +408.948134552343 1602.000000000000 +430.886087934454 1034.000000000000 +445.119126674486 2384.000000000000 +446.119450710310 1082.000000000000 +500.276347970652 1519.000000000000 +502.291527770051 2163.919189453125 +505.851373232660 1515.000000000000 +520.336525060874 1398.000000000000 +524.368789804896 2012.000000000000 +526.290251526751 1047.306762695312 +536.163216797749 5403.000000000000 +537.165736905426 2653.000000000000 +538.162249785514 1911.000000000000 +542.322969125465 2655.288330078125 +544.337954764480 2683.000000000000 +546.913572609430 1216.000000000000 +610.182763261579 2011.580444335938 +611.182765882529 1285.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=691 experiment=5 +##m_id Fluopicolide_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=691 experiment=5_0 +##scan 194 +##specref ms_run[1]:sample=1 period=1 cycle=691 experiment=5 +94.434175767174 13.000000000000 +100.470091159134 13.000000000000 +108.984100401010 150.000000000000 +144.959636504415 2258.000000000000 +158.020256143752 30.000000000000 +158.027675425270 30.000000000000 +172.435894581249 75.000000000000 +172.469065092596 30.000000000000 +172.719677895769 30.000000000000 +172.955388574782 28821.000000000000 +173.655714669105 13.000000000000 +173.745544595693 15.000000000000 +173.779716942753 30.000000000000 +173.952141059980 45.000000000000 +173.968506193653 60.000000000000 +173.991228893118 75.000000000000 +174.021679641905 30.000000000000 +174.065013627237 30.000000000000 +174.082566814628 30.000000000000 +175.410680683511 30.000000000000 +175.428157974081 30.000000000000 +181.987621311304 13.000000000000 +193.997014592663 1490.000000000000 +261.818816423649 13.000000000000 +364.963188973205 1040.000000000000 +382.971132691434 382.000000000000 +>compound 1_0-657002--1--UNKNOWN +>parentmass 132.043858137010 +>charge 1 +>rt 430.017000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +132.043858137010 23466.287109375000 +133.047312261130 2601.019775390625 +>ms1peaks +52.005865355475 2936.356689453125 +53.013723515258 15168.868164062500 +53.850400239168 1357.829345703125 +54.009447090145 347607.156250000000 +55.006110218286 6238.441894531250 +55.011508541956 7268.958007812500 +55.054636618089 2136.000000000000 +55.934309116073 6532.552734375000 +56.942275933353 2612.874023437500 +59.049622158630 56011.429687500000 +60.044524012498 9000.792968750000 +61.039481839151 1786.074829101562 +63.997449394256 3736.165039062500 +64.005109595772 4712.666015625000 +68.011792039005 26707.251953125000 +68.993702477550 13633.019531250000 +69.008646447254 1441.886596679688 +69.044733608562 13552.908203125000 +69.494666168807 1088.000000000000 +72.044289477019 1134.000000000000 +72.936653378507 2379.292724609375 +73.064314657279 1947.000000000000 +76.486410468336 2230.000000000000 +77.038532396207 1590.778686523438 +79.021074679723 14557.214843750000 +80.049121781728 13038.990234375000 +81.937384309880 9136.173828125000 +82.996771559276 9647.291015625000 +87.044032478393 1164.202392578125 +87.055030197874 1937.880737304688 +89.506480817586 1633.000000000000 +90.489144644798 1823.000000000000 +91.053978578614 1481.000000000000 +95.952653475183 2798.568603515625 +97.968242662562 7804.676269531250 +100.075124666224 1357.000000000000 +102.091023963336 2105.000000000000 +109.943015773476 1849.492675781250 +113.963173340819 2146.000000000000 +114.091149027124 11434.439453125000 +118.085562888545 7126.602050781250 +122.095450971812 3351.000000000000 +122.963406396921 11429.592773437500 +123.091816714399 1461.405029296875 +123.962989553704 1162.000000000000 +132.043858137010 23466.287109375000 +133.047312261130 2601.019775390625 +136.020979409517 1763.000000000000 +136.111376584671 1338.000000000000 +141.090631531290 1452.329956054688 +141.112250777587 1933.171752929688 +141.957805111647 16272.520507812500 +142.960130525273 1091.785766601562 +147.090889713370 2561.000000000000 +149.022860382613 8952.703125000000 +149.043461527452 2074.399169921875 +151.096439801801 2539.815917968750 +151.111209143750 2693.475830078125 +155.070028482861 1787.522338867188 +155.105375703160 1554.431030273438 +155.973268704769 4467.000000000000 +158.002234575261 1123.180664062500 +158.153819790011 15565.543945312500 +159.136830576290 1251.366088867188 +159.156929350810 1638.817993164062 +159.968015589745 1144.587158203125 +160.050107538005 10862.000000000000 +161.095753069011 1987.528442382812 +163.130314304873 1321.613403320312 +164.142207413101 1344.506469726562 +170.096003050047 2831.750244140625 +170.116393016687 1241.047485351562 +170.969308188165 1467.000000000000 +171.138824143644 1976.471679687500 +172.132816514555 1070.000000000000 +172.169354072833 1126.623413085938 +173.080592066342 7150.673339843750 +174.127101054123 1093.000000000000 +174.991572624579 1115.259887695312 +175.117966507653 1382.413574218750 +177.053956263481 3086.000000000000 +178.158743604693 1737.946655273438 +179.106488149861 2092.017333984375 +182.961571664514 1566.125366210938 +182.982955367691 1389.804321289062 +186.221312636852 2310.000000000000 +194.116506735598 3012.142089843750 +195.121983568600 1971.532348632812 +198.184492106186 2254.000000000000 +199.168659259112 1074.472778320312 +200.200544607050 1265.000000000000 +209.152957718499 1444.000000000000 +215.126858142678 1195.000000000000 +217.107186196782 24662.302734375000 +218.110233972313 2772.000000000000 +219.095202240315 3180.013427734375 +219.137164883586 1444.293090820312 +224.128646207474 1167.206176757812 +228.196369189320 1732.199340820312 +235.170060948981 1264.538574218750 +236.167946332224 2704.449462890625 +239.089160494599 5259.000000000000 +240.068219796793 1277.484863281250 +240.091769691182 1359.958740234375 +242.284200605489 1137.000000000000 +246.863294404574 3891.000000000000 +249.184938071857 1294.474121093750 +250.177914710678 1312.000000000000 +250.999736865556 2366.000000000000 +251.185303455126 1195.000000000000 +252.996845199048 1725.000000000000 +260.980831135670 9681.000000000000 +262.976934337234 1074.000000000000 +267.172286092444 1268.487426757812 +279.093453473919 1954.000000000000 +281.051187832394 1373.000000000000 +287.889696989575 1142.000000000000 +318.012975056617 4878.000000000000 +327.008528574617 3507.000000000000 +329.005288792022 3151.000000000000 +339.995536258518 21188.000000000000 +340.998304727292 3403.000000000000 +341.991615450972 1965.000000000000 +351.928765172494 2752.000000000000 +353.925863637500 1287.000000000000 +355.970345025132 1233.272216796875 +363.071463720139 4333.000000000000 +371.315937786641 1386.000000000000 +379.934517326720 2414.000000000000 +381.932765584480 1355.000000000000 +430.887891579421 1170.000000000000 +445.119501835711 2373.000000000000 +503.857852657168 1208.000000000000 +505.853144541362 5379.000000000000 +506.854406933930 1813.000000000000 +522.880381915172 2380.000000000000 +523.873038712107 1344.000000000000 +529.890971881918 1718.000000000000 +536.164830382665 5050.000000000000 +537.165530578391 2568.000000000000 +538.164082153377 1889.000000000000 +542.919791547930 1233.000000000000 +544.340309842267 1260.000000000000 +544.916740966050 1184.000000000000 +546.914239791284 3795.000000000000 +547.912822025670 1609.000000000000 +563.944002995814 1077.258789062500 +610.183402350979 1851.000000000000 +611.184706508494 1107.000000000000 +696.940078237106 1408.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=657 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=657 experiment=2_0 +##scan 1 +##specref ms_run[1]:sample=1 period=1 cycle=657 experiment=2 +50.015415002242 285.000000000000 +50.024474711894 43.822067260742 +51.023566728983 1814.975830078125 +62.928566360931 105.000000000000 +62.937551196842 52.369979858398 +72.936146643831 45.000000000000 +74.013642948272 30.000000000000 +76.018649722394 41.022171020508 +76.027663080483 30.493232727051 +77.038265131706 1602.420654296875 +77.546097840113 15.000000000000 +78.033179671526 60.000000000000 +78.041594464593 66.191909790039 +90.907137934653 30.000000000000 +102.033220379487 45.000000000000 +105.033879384179 135.000000000000 +105.044793254630 150.000000000000 +132.043198806346 105.000000000000 +236.366584652741 45.000000000000 +236.388458999412 60.000000000000 +236.404846292349 30.000000000000 +236.594201849365 45.000000000000 +237.198497347044 30.000000000000 +237.420981046975 45.000000000000 +237.763714672555 30.000000000000 +238.561382715078 30.000000000000 +238.585152114913 30.000000000000 +238.932774788501 30.000000000000 +238.947927581425 30.000000000000 +239.065826120421 30.000000000000 +239.168882320178 30.000000000000 +239.274636674623 30.000000000000 +239.482625210385 30.000000000000 +239.888162749805 45.000000000000 +240.876925861072 30.000000000000 +241.019589710602 51.692695617676 +241.046851620655 45.000000000000 +241.213372384277 60.000000000000 +241.415325628952 45.000000000000 +241.673460861643 60.000000000000 +241.831052758284 51.677196502686 +241.857446198850 60.000000000000 +242.139773131637 30.000000000000 +242.254004019201 30.000000000000 +242.275309955933 30.000000000000 +242.552758402666 30.000000000000 +243.482197040812 30.000000000000 +243.694516378858 30.000000000000 +243.802137184468 30.000000000000 +243.817598785760 30.000000000000 +243.906705592654 30.000000000000 +244.011091487072 30.000000000000 +244.310474843896 30.000000000000 +>compound 1_0-657003--2--UNKNOWN +>parentmass 160.050107538005 +>charge 1 +>rt 430.017000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +160.050107538005 10862.000000000000 +>ms1peaks +52.005865355475 2936.356689453125 +53.013723515258 15168.868164062500 +53.850400239168 1357.829345703125 +54.009447090145 347607.156250000000 +55.006110218286 6238.441894531250 +55.011508541956 7268.958007812500 +55.054636618089 2136.000000000000 +55.934309116073 6532.552734375000 +56.942275933353 2612.874023437500 +59.049622158630 56011.429687500000 +60.044524012498 9000.792968750000 +61.039481839151 1786.074829101562 +63.997449394256 3736.165039062500 +64.005109595772 4712.666015625000 +68.011792039005 26707.251953125000 +68.993702477550 13633.019531250000 +69.008646447254 1441.886596679688 +69.044733608562 13552.908203125000 +69.494666168807 1088.000000000000 +72.044289477019 1134.000000000000 +72.936653378507 2379.292724609375 +73.064314657279 1947.000000000000 +76.486410468336 2230.000000000000 +77.038532396207 1590.778686523438 +79.021074679723 14557.214843750000 +80.049121781728 13038.990234375000 +81.937384309880 9136.173828125000 +82.996771559276 9647.291015625000 +87.044032478393 1164.202392578125 +87.055030197874 1937.880737304688 +89.506480817586 1633.000000000000 +90.489144644798 1823.000000000000 +91.053978578614 1481.000000000000 +95.952653475183 2798.568603515625 +97.968242662562 7804.676269531250 +100.075124666224 1357.000000000000 +102.091023963336 2105.000000000000 +109.943015773476 1849.492675781250 +113.963173340819 2146.000000000000 +114.091149027124 11434.439453125000 +118.085562888545 7126.602050781250 +122.095450971812 3351.000000000000 +122.963406396921 11429.592773437500 +123.091816714399 1461.405029296875 +123.962989553704 1162.000000000000 +132.043858137010 23466.287109375000 +133.047312261130 2601.019775390625 +136.020979409517 1763.000000000000 +136.111376584671 1338.000000000000 +141.090631531290 1452.329956054688 +141.112250777587 1933.171752929688 +141.957805111647 16272.520507812500 +142.960130525273 1091.785766601562 +147.090889713370 2561.000000000000 +149.022860382613 8952.703125000000 +149.043461527452 2074.399169921875 +151.096439801801 2539.815917968750 +151.111209143750 2693.475830078125 +155.070028482861 1787.522338867188 +155.105375703160 1554.431030273438 +155.973268704769 4467.000000000000 +158.002234575261 1123.180664062500 +158.153819790011 15565.543945312500 +159.136830576290 1251.366088867188 +159.156929350810 1638.817993164062 +159.968015589745 1144.587158203125 +160.050107538005 10862.000000000000 +161.095753069011 1987.528442382812 +163.130314304873 1321.613403320312 +164.142207413101 1344.506469726562 +170.096003050047 2831.750244140625 +170.116393016687 1241.047485351562 +170.969308188165 1467.000000000000 +171.138824143644 1976.471679687500 +172.132816514555 1070.000000000000 +172.169354072833 1126.623413085938 +173.080592066342 7150.673339843750 +174.127101054123 1093.000000000000 +174.991572624579 1115.259887695312 +175.117966507653 1382.413574218750 +177.053956263481 3086.000000000000 +178.158743604693 1737.946655273438 +179.106488149861 2092.017333984375 +182.961571664514 1566.125366210938 +182.982955367691 1389.804321289062 +186.221312636852 2310.000000000000 +194.116506735598 3012.142089843750 +195.121983568600 1971.532348632812 +198.184492106186 2254.000000000000 +199.168659259112 1074.472778320312 +200.200544607050 1265.000000000000 +209.152957718499 1444.000000000000 +215.126858142678 1195.000000000000 +217.107186196782 24662.302734375000 +218.110233972313 2772.000000000000 +219.095202240315 3180.013427734375 +219.137164883586 1444.293090820312 +224.128646207474 1167.206176757812 +228.196369189320 1732.199340820312 +235.170060948981 1264.538574218750 +236.167946332224 2704.449462890625 +239.089160494599 5259.000000000000 +240.068219796793 1277.484863281250 +240.091769691182 1359.958740234375 +242.284200605489 1137.000000000000 +246.863294404574 3891.000000000000 +249.184938071857 1294.474121093750 +250.177914710678 1312.000000000000 +250.999736865556 2366.000000000000 +251.185303455126 1195.000000000000 +252.996845199048 1725.000000000000 +260.980831135670 9681.000000000000 +262.976934337234 1074.000000000000 +267.172286092444 1268.487426757812 +279.093453473919 1954.000000000000 +281.051187832394 1373.000000000000 +287.889696989575 1142.000000000000 +318.012975056617 4878.000000000000 +327.008528574617 3507.000000000000 +329.005288792022 3151.000000000000 +339.995536258518 21188.000000000000 +340.998304727292 3403.000000000000 +341.991615450972 1965.000000000000 +351.928765172494 2752.000000000000 +353.925863637500 1287.000000000000 +355.970345025132 1233.272216796875 +363.071463720139 4333.000000000000 +371.315937786641 1386.000000000000 +379.934517326720 2414.000000000000 +381.932765584480 1355.000000000000 +430.887891579421 1170.000000000000 +445.119501835711 2373.000000000000 +503.857852657168 1208.000000000000 +505.853144541362 5379.000000000000 +506.854406933930 1813.000000000000 +522.880381915172 2380.000000000000 +523.873038712107 1344.000000000000 +529.890971881918 1718.000000000000 +536.164830382665 5050.000000000000 +537.165530578391 2568.000000000000 +538.164082153377 1889.000000000000 +542.919791547930 1233.000000000000 +544.340309842267 1260.000000000000 +544.916740966050 1184.000000000000 +546.914239791284 3795.000000000000 +547.912822025670 1609.000000000000 +563.944002995814 1077.258789062500 +610.183402350979 1851.000000000000 +611.184706508494 1107.000000000000 +696.940078237106 1408.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=657 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=657 experiment=3_0 +##scan 2 +##specref ms_run[1]:sample=1 period=1 cycle=657 experiment=3 +50.014504904608 45.000000000000 +50.019318522027 60.000000000000 +50.874572145106 13.000000000000 +51.022846415128 363.000000000000 +56.941938051381 90.000000000000 +72.934684093877 30.000000000000 +77.039186107043 528.420654296875 +77.269697464798 13.000000000000 +141.967115723970 30.000000000000 +>compound 1_0-657004--3--UNKNOWN +>parentmass 260.980831135670 +>charge 1 +>rt 430.017000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +260.980831135670 9681.000000000000 +>ms1peaks +52.005865355475 2936.356689453125 +53.013723515258 15168.868164062500 +53.850400239168 1357.829345703125 +54.009447090145 347607.156250000000 +55.006110218286 6238.441894531250 +55.011508541956 7268.958007812500 +55.054636618089 2136.000000000000 +55.934309116073 6532.552734375000 +56.942275933353 2612.874023437500 +59.049622158630 56011.429687500000 +60.044524012498 9000.792968750000 +61.039481839151 1786.074829101562 +63.997449394256 3736.165039062500 +64.005109595772 4712.666015625000 +68.011792039005 26707.251953125000 +68.993702477550 13633.019531250000 +69.008646447254 1441.886596679688 +69.044733608562 13552.908203125000 +69.494666168807 1088.000000000000 +72.044289477019 1134.000000000000 +72.936653378507 2379.292724609375 +73.064314657279 1947.000000000000 +76.486410468336 2230.000000000000 +77.038532396207 1590.778686523438 +79.021074679723 14557.214843750000 +80.049121781728 13038.990234375000 +81.937384309880 9136.173828125000 +82.996771559276 9647.291015625000 +87.044032478393 1164.202392578125 +87.055030197874 1937.880737304688 +89.506480817586 1633.000000000000 +90.489144644798 1823.000000000000 +91.053978578614 1481.000000000000 +95.952653475183 2798.568603515625 +97.968242662562 7804.676269531250 +100.075124666224 1357.000000000000 +102.091023963336 2105.000000000000 +109.943015773476 1849.492675781250 +113.963173340819 2146.000000000000 +114.091149027124 11434.439453125000 +118.085562888545 7126.602050781250 +122.095450971812 3351.000000000000 +122.963406396921 11429.592773437500 +123.091816714399 1461.405029296875 +123.962989553704 1162.000000000000 +132.043858137010 23466.287109375000 +133.047312261130 2601.019775390625 +136.020979409517 1763.000000000000 +136.111376584671 1338.000000000000 +141.090631531290 1452.329956054688 +141.112250777587 1933.171752929688 +141.957805111647 16272.520507812500 +142.960130525273 1091.785766601562 +147.090889713370 2561.000000000000 +149.022860382613 8952.703125000000 +149.043461527452 2074.399169921875 +151.096439801801 2539.815917968750 +151.111209143750 2693.475830078125 +155.070028482861 1787.522338867188 +155.105375703160 1554.431030273438 +155.973268704769 4467.000000000000 +158.002234575261 1123.180664062500 +158.153819790011 15565.543945312500 +159.136830576290 1251.366088867188 +159.156929350810 1638.817993164062 +159.968015589745 1144.587158203125 +160.050107538005 10862.000000000000 +161.095753069011 1987.528442382812 +163.130314304873 1321.613403320312 +164.142207413101 1344.506469726562 +170.096003050047 2831.750244140625 +170.116393016687 1241.047485351562 +170.969308188165 1467.000000000000 +171.138824143644 1976.471679687500 +172.132816514555 1070.000000000000 +172.169354072833 1126.623413085938 +173.080592066342 7150.673339843750 +174.127101054123 1093.000000000000 +174.991572624579 1115.259887695312 +175.117966507653 1382.413574218750 +177.053956263481 3086.000000000000 +178.158743604693 1737.946655273438 +179.106488149861 2092.017333984375 +182.961571664514 1566.125366210938 +182.982955367691 1389.804321289062 +186.221312636852 2310.000000000000 +194.116506735598 3012.142089843750 +195.121983568600 1971.532348632812 +198.184492106186 2254.000000000000 +199.168659259112 1074.472778320312 +200.200544607050 1265.000000000000 +209.152957718499 1444.000000000000 +215.126858142678 1195.000000000000 +217.107186196782 24662.302734375000 +218.110233972313 2772.000000000000 +219.095202240315 3180.013427734375 +219.137164883586 1444.293090820312 +224.128646207474 1167.206176757812 +228.196369189320 1732.199340820312 +235.170060948981 1264.538574218750 +236.167946332224 2704.449462890625 +239.089160494599 5259.000000000000 +240.068219796793 1277.484863281250 +240.091769691182 1359.958740234375 +242.284200605489 1137.000000000000 +246.863294404574 3891.000000000000 +249.184938071857 1294.474121093750 +250.177914710678 1312.000000000000 +250.999736865556 2366.000000000000 +251.185303455126 1195.000000000000 +252.996845199048 1725.000000000000 +260.980831135670 9681.000000000000 +262.976934337234 1074.000000000000 +267.172286092444 1268.487426757812 +279.093453473919 1954.000000000000 +281.051187832394 1373.000000000000 +287.889696989575 1142.000000000000 +318.012975056617 4878.000000000000 +327.008528574617 3507.000000000000 +329.005288792022 3151.000000000000 +339.995536258518 21188.000000000000 +340.998304727292 3403.000000000000 +341.991615450972 1965.000000000000 +351.928765172494 2752.000000000000 +353.925863637500 1287.000000000000 +355.970345025132 1233.272216796875 +363.071463720139 4333.000000000000 +371.315937786641 1386.000000000000 +379.934517326720 2414.000000000000 +381.932765584480 1355.000000000000 +430.887891579421 1170.000000000000 +445.119501835711 2373.000000000000 +503.857852657168 1208.000000000000 +505.853144541362 5379.000000000000 +506.854406933930 1813.000000000000 +522.880381915172 2380.000000000000 +523.873038712107 1344.000000000000 +529.890971881918 1718.000000000000 +536.164830382665 5050.000000000000 +537.165530578391 2568.000000000000 +538.164082153377 1889.000000000000 +542.919791547930 1233.000000000000 +544.340309842267 1260.000000000000 +544.916740966050 1184.000000000000 +546.914239791284 3795.000000000000 +547.912822025670 1609.000000000000 +563.944002995814 1077.258789062500 +610.183402350979 1851.000000000000 +611.184706508494 1107.000000000000 +696.940078237106 1408.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=657 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=657 experiment=4_0 +##scan 3 +##specref ms_run[1]:sample=1 period=1 cycle=657 experiment=4 +78.994270447800 90.000000000000 +124.981451470272 320.000000000000 +151.991667583953 60.000000000000 +167.015142055345 60.000000000000 +167.967957766024 45.000000000000 +>compound 1_0-657007--6--UNKNOWN +>parentmass 351.928765172494 +>charge 1 +>rt 430.017000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +351.928765172494 2752.000000000000 +>ms1peaks +52.005865355475 2936.356689453125 +53.013723515258 15168.868164062500 +53.850400239168 1357.829345703125 +54.009447090145 347607.156250000000 +55.006110218286 6238.441894531250 +55.011508541956 7268.958007812500 +55.054636618089 2136.000000000000 +55.934309116073 6532.552734375000 +56.942275933353 2612.874023437500 +59.049622158630 56011.429687500000 +60.044524012498 9000.792968750000 +61.039481839151 1786.074829101562 +63.997449394256 3736.165039062500 +64.005109595772 4712.666015625000 +68.011792039005 26707.251953125000 +68.993702477550 13633.019531250000 +69.008646447254 1441.886596679688 +69.044733608562 13552.908203125000 +69.494666168807 1088.000000000000 +72.044289477019 1134.000000000000 +72.936653378507 2379.292724609375 +73.064314657279 1947.000000000000 +76.486410468336 2230.000000000000 +77.038532396207 1590.778686523438 +79.021074679723 14557.214843750000 +80.049121781728 13038.990234375000 +81.937384309880 9136.173828125000 +82.996771559276 9647.291015625000 +87.044032478393 1164.202392578125 +87.055030197874 1937.880737304688 +89.506480817586 1633.000000000000 +90.489144644798 1823.000000000000 +91.053978578614 1481.000000000000 +95.952653475183 2798.568603515625 +97.968242662562 7804.676269531250 +100.075124666224 1357.000000000000 +102.091023963336 2105.000000000000 +109.943015773476 1849.492675781250 +113.963173340819 2146.000000000000 +114.091149027124 11434.439453125000 +118.085562888545 7126.602050781250 +122.095450971812 3351.000000000000 +122.963406396921 11429.592773437500 +123.091816714399 1461.405029296875 +123.962989553704 1162.000000000000 +132.043858137010 23466.287109375000 +133.047312261130 2601.019775390625 +136.020979409517 1763.000000000000 +136.111376584671 1338.000000000000 +141.090631531290 1452.329956054688 +141.112250777587 1933.171752929688 +141.957805111647 16272.520507812500 +142.960130525273 1091.785766601562 +147.090889713370 2561.000000000000 +149.022860382613 8952.703125000000 +149.043461527452 2074.399169921875 +151.096439801801 2539.815917968750 +151.111209143750 2693.475830078125 +155.070028482861 1787.522338867188 +155.105375703160 1554.431030273438 +155.973268704769 4467.000000000000 +158.002234575261 1123.180664062500 +158.153819790011 15565.543945312500 +159.136830576290 1251.366088867188 +159.156929350810 1638.817993164062 +159.968015589745 1144.587158203125 +160.050107538005 10862.000000000000 +161.095753069011 1987.528442382812 +163.130314304873 1321.613403320312 +164.142207413101 1344.506469726562 +170.096003050047 2831.750244140625 +170.116393016687 1241.047485351562 +170.969308188165 1467.000000000000 +171.138824143644 1976.471679687500 +172.132816514555 1070.000000000000 +172.169354072833 1126.623413085938 +173.080592066342 7150.673339843750 +174.127101054123 1093.000000000000 +174.991572624579 1115.259887695312 +175.117966507653 1382.413574218750 +177.053956263481 3086.000000000000 +178.158743604693 1737.946655273438 +179.106488149861 2092.017333984375 +182.961571664514 1566.125366210938 +182.982955367691 1389.804321289062 +186.221312636852 2310.000000000000 +194.116506735598 3012.142089843750 +195.121983568600 1971.532348632812 +198.184492106186 2254.000000000000 +199.168659259112 1074.472778320312 +200.200544607050 1265.000000000000 +209.152957718499 1444.000000000000 +215.126858142678 1195.000000000000 +217.107186196782 24662.302734375000 +218.110233972313 2772.000000000000 +219.095202240315 3180.013427734375 +219.137164883586 1444.293090820312 +224.128646207474 1167.206176757812 +228.196369189320 1732.199340820312 +235.170060948981 1264.538574218750 +236.167946332224 2704.449462890625 +239.089160494599 5259.000000000000 +240.068219796793 1277.484863281250 +240.091769691182 1359.958740234375 +242.284200605489 1137.000000000000 +246.863294404574 3891.000000000000 +249.184938071857 1294.474121093750 +250.177914710678 1312.000000000000 +250.999736865556 2366.000000000000 +251.185303455126 1195.000000000000 +252.996845199048 1725.000000000000 +260.980831135670 9681.000000000000 +262.976934337234 1074.000000000000 +267.172286092444 1268.487426757812 +279.093453473919 1954.000000000000 +281.051187832394 1373.000000000000 +287.889696989575 1142.000000000000 +318.012975056617 4878.000000000000 +327.008528574617 3507.000000000000 +329.005288792022 3151.000000000000 +339.995536258518 21188.000000000000 +340.998304727292 3403.000000000000 +341.991615450972 1965.000000000000 +351.928765172494 2752.000000000000 +353.925863637500 1287.000000000000 +355.970345025132 1233.272216796875 +363.071463720139 4333.000000000000 +371.315937786641 1386.000000000000 +379.934517326720 2414.000000000000 +381.932765584480 1355.000000000000 +430.887891579421 1170.000000000000 +445.119501835711 2373.000000000000 +503.857852657168 1208.000000000000 +505.853144541362 5379.000000000000 +506.854406933930 1813.000000000000 +522.880381915172 2380.000000000000 +523.873038712107 1344.000000000000 +529.890971881918 1718.000000000000 +536.164830382665 5050.000000000000 +537.165530578391 2568.000000000000 +538.164082153377 1889.000000000000 +542.919791547930 1233.000000000000 +544.340309842267 1260.000000000000 +544.916740966050 1184.000000000000 +546.914239791284 3795.000000000000 +547.912822025670 1609.000000000000 +563.944002995814 1077.258789062500 +610.183402350979 1851.000000000000 +611.184706508494 1107.000000000000 +696.940078237106 1408.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=657 experiment=7 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=657 experiment=7_0 +##scan 6 +##specref ms_run[1]:sample=1 period=1 cycle=657 experiment=7 +92.964282264079 13.000000000000 +152.979473626362 13.000000000000 +188.918277240583 45.000000000000 +209.941982292814 30.000000000000 +279.078049395214 13.000000000000 +306.234950585609 13.000000000000 +>compound 1_0-657009--8--UNKNOWN +>parentmass 546.914239791284 +>charge 1 +>rt 430.017000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +546.914239791284 3795.000000000000 +>ms1peaks +52.005865355475 2936.356689453125 +53.013723515258 15168.868164062500 +53.850400239168 1357.829345703125 +54.009447090145 347607.156250000000 +55.006110218286 6238.441894531250 +55.011508541956 7268.958007812500 +55.054636618089 2136.000000000000 +55.934309116073 6532.552734375000 +56.942275933353 2612.874023437500 +59.049622158630 56011.429687500000 +60.044524012498 9000.792968750000 +61.039481839151 1786.074829101562 +63.997449394256 3736.165039062500 +64.005109595772 4712.666015625000 +68.011792039005 26707.251953125000 +68.993702477550 13633.019531250000 +69.008646447254 1441.886596679688 +69.044733608562 13552.908203125000 +69.494666168807 1088.000000000000 +72.044289477019 1134.000000000000 +72.936653378507 2379.292724609375 +73.064314657279 1947.000000000000 +76.486410468336 2230.000000000000 +77.038532396207 1590.778686523438 +79.021074679723 14557.214843750000 +80.049121781728 13038.990234375000 +81.937384309880 9136.173828125000 +82.996771559276 9647.291015625000 +87.044032478393 1164.202392578125 +87.055030197874 1937.880737304688 +89.506480817586 1633.000000000000 +90.489144644798 1823.000000000000 +91.053978578614 1481.000000000000 +95.952653475183 2798.568603515625 +97.968242662562 7804.676269531250 +100.075124666224 1357.000000000000 +102.091023963336 2105.000000000000 +109.943015773476 1849.492675781250 +113.963173340819 2146.000000000000 +114.091149027124 11434.439453125000 +118.085562888545 7126.602050781250 +122.095450971812 3351.000000000000 +122.963406396921 11429.592773437500 +123.091816714399 1461.405029296875 +123.962989553704 1162.000000000000 +132.043858137010 23466.287109375000 +133.047312261130 2601.019775390625 +136.020979409517 1763.000000000000 +136.111376584671 1338.000000000000 +141.090631531290 1452.329956054688 +141.112250777587 1933.171752929688 +141.957805111647 16272.520507812500 +142.960130525273 1091.785766601562 +147.090889713370 2561.000000000000 +149.022860382613 8952.703125000000 +149.043461527452 2074.399169921875 +151.096439801801 2539.815917968750 +151.111209143750 2693.475830078125 +155.070028482861 1787.522338867188 +155.105375703160 1554.431030273438 +155.973268704769 4467.000000000000 +158.002234575261 1123.180664062500 +158.153819790011 15565.543945312500 +159.136830576290 1251.366088867188 +159.156929350810 1638.817993164062 +159.968015589745 1144.587158203125 +160.050107538005 10862.000000000000 +161.095753069011 1987.528442382812 +163.130314304873 1321.613403320312 +164.142207413101 1344.506469726562 +170.096003050047 2831.750244140625 +170.116393016687 1241.047485351562 +170.969308188165 1467.000000000000 +171.138824143644 1976.471679687500 +172.132816514555 1070.000000000000 +172.169354072833 1126.623413085938 +173.080592066342 7150.673339843750 +174.127101054123 1093.000000000000 +174.991572624579 1115.259887695312 +175.117966507653 1382.413574218750 +177.053956263481 3086.000000000000 +178.158743604693 1737.946655273438 +179.106488149861 2092.017333984375 +182.961571664514 1566.125366210938 +182.982955367691 1389.804321289062 +186.221312636852 2310.000000000000 +194.116506735598 3012.142089843750 +195.121983568600 1971.532348632812 +198.184492106186 2254.000000000000 +199.168659259112 1074.472778320312 +200.200544607050 1265.000000000000 +209.152957718499 1444.000000000000 +215.126858142678 1195.000000000000 +217.107186196782 24662.302734375000 +218.110233972313 2772.000000000000 +219.095202240315 3180.013427734375 +219.137164883586 1444.293090820312 +224.128646207474 1167.206176757812 +228.196369189320 1732.199340820312 +235.170060948981 1264.538574218750 +236.167946332224 2704.449462890625 +239.089160494599 5259.000000000000 +240.068219796793 1277.484863281250 +240.091769691182 1359.958740234375 +242.284200605489 1137.000000000000 +246.863294404574 3891.000000000000 +249.184938071857 1294.474121093750 +250.177914710678 1312.000000000000 +250.999736865556 2366.000000000000 +251.185303455126 1195.000000000000 +252.996845199048 1725.000000000000 +260.980831135670 9681.000000000000 +262.976934337234 1074.000000000000 +267.172286092444 1268.487426757812 +279.093453473919 1954.000000000000 +281.051187832394 1373.000000000000 +287.889696989575 1142.000000000000 +318.012975056617 4878.000000000000 +327.008528574617 3507.000000000000 +329.005288792022 3151.000000000000 +339.995536258518 21188.000000000000 +340.998304727292 3403.000000000000 +341.991615450972 1965.000000000000 +351.928765172494 2752.000000000000 +353.925863637500 1287.000000000000 +355.970345025132 1233.272216796875 +363.071463720139 4333.000000000000 +371.315937786641 1386.000000000000 +379.934517326720 2414.000000000000 +381.932765584480 1355.000000000000 +430.887891579421 1170.000000000000 +445.119501835711 2373.000000000000 +503.857852657168 1208.000000000000 +505.853144541362 5379.000000000000 +506.854406933930 1813.000000000000 +522.880381915172 2380.000000000000 +523.873038712107 1344.000000000000 +529.890971881918 1718.000000000000 +536.164830382665 5050.000000000000 +537.165530578391 2568.000000000000 +538.164082153377 1889.000000000000 +542.919791547930 1233.000000000000 +544.340309842267 1260.000000000000 +544.916740966050 1184.000000000000 +546.914239791284 3795.000000000000 +547.912822025670 1609.000000000000 +563.944002995814 1077.258789062500 +610.183402350979 1851.000000000000 +611.184706508494 1107.000000000000 +696.940078237106 1408.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=657 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=657 experiment=9_0 +##scan 8 +##specref ms_run[1]:sample=1 period=1 cycle=657 experiment=9 +290.887820344896 30.000000000000 +297.830664328927 30.000000000000 +297.860339107230 30.000000000000 +300.913318707665 45.000000000000 +302.435794711402 13.000000000000 +313.918910872313 30.000000000000 +356.844075856555 265.000000000000 +357.857587076699 30.000000000000 +401.844271469061 30.000000000000 +460.860438443741 60.000000000000 +505.854728055991 60.000000000000 +>compound 1_0-658002--10--UNKNOWN +>parentmass 132.044195947098 +>charge 1 +>rt 430.939999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +132.044195947098 93934.070312500000 +>ms1peaks +52.005717667707 2536.876953125000 +53.013645918459 13517.719726562500 +53.851091408425 1440.814208984375 +54.009479564739 340518.468750000000 +55.006713705873 6189.195800781250 +55.011648330739 5775.918945312500 +55.054395080163 1937.021850585938 +55.934309790351 6216.487304687500 +56.049851096555 1422.552856445312 +56.942103151176 2497.945800781250 +59.049782018324 63557.187500000000 +60.044617957556 9127.332031250000 +61.039564209817 1916.918579101562 +63.998058629288 4341.631347656250 +64.005180932598 4902.907226562500 +68.011727932833 27051.191406250000 +68.994002789359 13611.511718750000 +69.034264524552 2235.962402343750 +69.044867744672 14147.763671875000 +72.936875253829 3080.500976562500 +73.064425531348 1778.781250000000 +76.486297547963 2075.000000000000 +77.038265451054 5099.881835937500 +79.021270792779 14303.786132812500 +80.049179511142 11132.483398437500 +81.937187525733 8269.017578125000 +82.996616277972 9058.604492187500 +87.055191552618 1226.265625000000 +89.506723502083 2138.000000000000 +90.489274059111 1883.000000000000 +91.053872057085 1250.000000000000 +95.952563443877 2416.907226562500 +97.968351278732 7414.000000000000 +102.091075578098 2124.000000000000 +104.049176798538 2869.822265625000 +105.032824057535 2268.302246093750 +109.942659719793 1552.503417968750 +113.963028919819 2876.313476562500 +114.091047730204 9707.000000000000 +118.085960022478 6202.343750000000 +122.095829000463 3354.874755859375 +122.963603572159 10189.080078125000 +123.091990223840 1658.215576171875 +123.962908276753 1264.000000000000 +124.961981387844 1248.617553710938 +124.981468335431 3929.697021484375 +132.044195947098 93934.070312500000 +133.046929709006 8774.461914062500 +136.020849942089 1733.000000000000 +136.111849813683 1360.000000000000 +139.963062553447 1109.337646484375 +141.090358589210 1395.717041015625 +141.112852312471 1316.060180664062 +141.957905703603 16856.453125000000 +142.959660117555 1253.947509765625 +147.090758649450 2468.091308593750 +149.023008191796 6552.861328125000 +150.054483884674 1381.879394531250 +151.096258773620 2499.016357421875 +151.110632987131 2703.097412109375 +153.126579038194 1175.000000000000 +155.069775153959 1603.251586914062 +155.105765884478 1708.284912109375 +155.973825500886 4965.000000000000 +158.002736417151 1095.759399414062 +158.153601610996 15319.201171875000 +159.156377711765 1693.013305664062 +160.050203671116 29808.187500000000 +161.053148014827 2780.099853515625 +161.095739798824 1801.900268554688 +164.143136174419 1163.970947265625 +167.016142798795 1938.000000000000 +170.095669159809 2557.841796875000 +170.116803885810 1136.247192382812 +170.969513731195 5351.000000000000 +171.138682297569 3310.690673828125 +172.133498266589 1186.970092773438 +172.168816609007 1753.000000000000 +173.079889235839 8137.424804687500 +174.127584523158 1118.000000000000 +177.053398759750 2010.000000000000 +178.158757601913 1500.698242187500 +179.105540802675 2172.262695312500 +182.961283063703 1745.384643554688 +186.221178069795 1622.000000000000 +194.116354222571 3003.000000000000 +195.102160721940 1637.390014648438 +195.121964321705 2114.307128906250 +198.185094857026 2154.000000000000 +209.152949152955 1423.597534179688 +217.106757414349 22820.371093750000 +218.109717212262 2365.715332031250 +219.095322856019 2839.912353515625 +224.127859164514 1268.000000000000 +228.195125596876 1796.750244140625 +235.168738541554 1153.106201171875 +236.167125665018 2147.822998046875 +239.089167868946 3697.000000000000 +242.283752097581 1331.000000000000 +246.862020032552 3643.000000000000 +249.184726675759 1740.000000000000 +250.176839865775 1269.149047851562 +251.000052262976 1835.000000000000 +251.185199846439 1143.344848632812 +252.997000735520 1613.000000000000 +253.915053857069 3181.000000000000 +260.980520936940 34136.089843750000 +261.983107472769 3914.000000000000 +262.975908361642 3711.000000000000 +267.171176133304 1190.000000000000 +279.094069923914 2218.000000000000 +281.050366742298 1525.000000000000 +304.299335403967 1178.000000000000 +318.012807082281 13905.000000000000 +319.015812641865 1771.000000000000 +320.009779889072 1411.312622070312 +324.021497063862 2274.000000000000 +327.008303487350 3194.000000000000 +329.005675073912 3118.000000000000 +339.995324080662 63593.000000000000 +340.998247708453 9047.660156250000 +341.991464705082 6892.000000000000 +351.928380615899 5009.000000000000 +353.925994810456 2303.000000000000 +355.968410053379 3129.565673828125 +363.070877703428 10529.000000000000 +364.073137490148 1819.000000000000 +379.934530374708 4270.000000000000 +381.931407641533 2153.000000000000 +445.120046493581 2353.000000000000 +503.859909772363 1436.000000000000 +505.853063220538 5926.000000000000 +506.854048759295 1904.000000000000 +519.139384687535 1126.000000000000 +522.880368766100 2806.000000000000 +523.877736811317 1418.000000000000 +529.888748439098 1722.000000000000 +536.165143915241 4925.000000000000 +537.165086990853 2707.000000000000 +538.162296228146 1762.000000000000 +542.921174254561 1132.000000000000 +543.918003709155 1152.000000000000 +546.914886995490 3416.000000000000 +547.912219447510 1693.000000000000 +563.943181698806 1223.378784179688 +610.184322938020 2314.000000000000 +611.184296206340 1322.000000000000 +657.001817843383 1409.000000000000 +696.940437510992 3603.000000000000 +698.940217154744 2331.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=658 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=658 experiment=2_0 +##scan 10 +##specref ms_run[1]:sample=1 period=1 cycle=658 experiment=2 +50.015165475480 1250.000000000000 +51.023463812880 4679.426269531250 +52.026754245056 120.000000000000 +62.929776022273 120.000000000000 +74.021084721128 60.000000000000 +75.023851813769 60.000000000000 +75.034042258539 45.907085418701 +76.019641569926 120.000000000000 +77.038970411957 4387.440917968750 +77.052046304853 310.789520263672 +77.061493073389 45.000000000000 +78.031873532333 95.631401062012 +78.042618006558 150.000000000000 +102.032089682936 60.000000000000 +104.049886917122 135.000000000000 +105.033508227470 315.000000000000 +130.030742806830 60.000000000000 +130.038270993802 60.000000000000 +132.045117165303 240.000000000000 +>compound 1_0-658003--11--UNKNOWN +>parentmass 160.050203671116 +>charge 1 +>rt 430.939999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +160.050203671116 29808.187500000000 +>ms1peaks +52.005717667707 2536.876953125000 +53.013645918459 13517.719726562500 +53.851091408425 1440.814208984375 +54.009479564739 340518.468750000000 +55.006713705873 6189.195800781250 +55.011648330739 5775.918945312500 +55.054395080163 1937.021850585938 +55.934309790351 6216.487304687500 +56.049851096555 1422.552856445312 +56.942103151176 2497.945800781250 +59.049782018324 63557.187500000000 +60.044617957556 9127.332031250000 +61.039564209817 1916.918579101562 +63.998058629288 4341.631347656250 +64.005180932598 4902.907226562500 +68.011727932833 27051.191406250000 +68.994002789359 13611.511718750000 +69.034264524552 2235.962402343750 +69.044867744672 14147.763671875000 +72.936875253829 3080.500976562500 +73.064425531348 1778.781250000000 +76.486297547963 2075.000000000000 +77.038265451054 5099.881835937500 +79.021270792779 14303.786132812500 +80.049179511142 11132.483398437500 +81.937187525733 8269.017578125000 +82.996616277972 9058.604492187500 +87.055191552618 1226.265625000000 +89.506723502083 2138.000000000000 +90.489274059111 1883.000000000000 +91.053872057085 1250.000000000000 +95.952563443877 2416.907226562500 +97.968351278732 7414.000000000000 +102.091075578098 2124.000000000000 +104.049176798538 2869.822265625000 +105.032824057535 2268.302246093750 +109.942659719793 1552.503417968750 +113.963028919819 2876.313476562500 +114.091047730204 9707.000000000000 +118.085960022478 6202.343750000000 +122.095829000463 3354.874755859375 +122.963603572159 10189.080078125000 +123.091990223840 1658.215576171875 +123.962908276753 1264.000000000000 +124.961981387844 1248.617553710938 +124.981468335431 3929.697021484375 +132.044195947098 93934.070312500000 +133.046929709006 8774.461914062500 +136.020849942089 1733.000000000000 +136.111849813683 1360.000000000000 +139.963062553447 1109.337646484375 +141.090358589210 1395.717041015625 +141.112852312471 1316.060180664062 +141.957905703603 16856.453125000000 +142.959660117555 1253.947509765625 +147.090758649450 2468.091308593750 +149.023008191796 6552.861328125000 +150.054483884674 1381.879394531250 +151.096258773620 2499.016357421875 +151.110632987131 2703.097412109375 +153.126579038194 1175.000000000000 +155.069775153959 1603.251586914062 +155.105765884478 1708.284912109375 +155.973825500886 4965.000000000000 +158.002736417151 1095.759399414062 +158.153601610996 15319.201171875000 +159.156377711765 1693.013305664062 +160.050203671116 29808.187500000000 +161.053148014827 2780.099853515625 +161.095739798824 1801.900268554688 +164.143136174419 1163.970947265625 +167.016142798795 1938.000000000000 +170.095669159809 2557.841796875000 +170.116803885810 1136.247192382812 +170.969513731195 5351.000000000000 +171.138682297569 3310.690673828125 +172.133498266589 1186.970092773438 +172.168816609007 1753.000000000000 +173.079889235839 8137.424804687500 +174.127584523158 1118.000000000000 +177.053398759750 2010.000000000000 +178.158757601913 1500.698242187500 +179.105540802675 2172.262695312500 +182.961283063703 1745.384643554688 +186.221178069795 1622.000000000000 +194.116354222571 3003.000000000000 +195.102160721940 1637.390014648438 +195.121964321705 2114.307128906250 +198.185094857026 2154.000000000000 +209.152949152955 1423.597534179688 +217.106757414349 22820.371093750000 +218.109717212262 2365.715332031250 +219.095322856019 2839.912353515625 +224.127859164514 1268.000000000000 +228.195125596876 1796.750244140625 +235.168738541554 1153.106201171875 +236.167125665018 2147.822998046875 +239.089167868946 3697.000000000000 +242.283752097581 1331.000000000000 +246.862020032552 3643.000000000000 +249.184726675759 1740.000000000000 +250.176839865775 1269.149047851562 +251.000052262976 1835.000000000000 +251.185199846439 1143.344848632812 +252.997000735520 1613.000000000000 +253.915053857069 3181.000000000000 +260.980520936940 34136.089843750000 +261.983107472769 3914.000000000000 +262.975908361642 3711.000000000000 +267.171176133304 1190.000000000000 +279.094069923914 2218.000000000000 +281.050366742298 1525.000000000000 +304.299335403967 1178.000000000000 +318.012807082281 13905.000000000000 +319.015812641865 1771.000000000000 +320.009779889072 1411.312622070312 +324.021497063862 2274.000000000000 +327.008303487350 3194.000000000000 +329.005675073912 3118.000000000000 +339.995324080662 63593.000000000000 +340.998247708453 9047.660156250000 +341.991464705082 6892.000000000000 +351.928380615899 5009.000000000000 +353.925994810456 2303.000000000000 +355.968410053379 3129.565673828125 +363.070877703428 10529.000000000000 +364.073137490148 1819.000000000000 +379.934530374708 4270.000000000000 +381.931407641533 2153.000000000000 +445.120046493581 2353.000000000000 +503.859909772363 1436.000000000000 +505.853063220538 5926.000000000000 +506.854048759295 1904.000000000000 +519.139384687535 1126.000000000000 +522.880368766100 2806.000000000000 +523.877736811317 1418.000000000000 +529.888748439098 1722.000000000000 +536.165143915241 4925.000000000000 +537.165086990853 2707.000000000000 +538.162296228146 1762.000000000000 +542.921174254561 1132.000000000000 +543.918003709155 1152.000000000000 +546.914886995490 3416.000000000000 +547.912219447510 1693.000000000000 +563.943181698806 1223.378784179688 +610.184322938020 2314.000000000000 +611.184296206340 1322.000000000000 +657.001817843383 1409.000000000000 +696.940437510992 3603.000000000000 +698.940217154744 2331.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=658 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=658 experiment=3_0 +##scan 11 +##specref ms_run[1]:sample=1 period=1 cycle=658 experiment=3 +50.000549506599 19.416494369507 +50.007678769020 23.997817993164 +50.017972224964 165.000000000000 +51.023261721307 1659.817749023438 +55.934947062739 30.000000000000 +55.943791529530 15.000000000000 +56.942758461933 60.000000000000 +72.938382531295 30.000000000000 +75.022596683330 30.000000000000 +77.038948532128 1661.000000000000 +78.034500212369 45.000000000000 +78.043126278161 55.031566619873 +102.034063362310 90.000000000000 +105.034914035691 75.000000000000 +105.045001283267 75.000000000000 +130.039992259140 74.195045471191 +130.053680546923 60.000000000000 +>compound 1_0-658004--12--UNKNOWN +>parentmass 170.969513731195 +>charge 1 +>rt 430.939999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +170.969513731195 5351.000000000000 +>ms1peaks +52.005717667707 2536.876953125000 +53.013645918459 13517.719726562500 +53.851091408425 1440.814208984375 +54.009479564739 340518.468750000000 +55.006713705873 6189.195800781250 +55.011648330739 5775.918945312500 +55.054395080163 1937.021850585938 +55.934309790351 6216.487304687500 +56.049851096555 1422.552856445312 +56.942103151176 2497.945800781250 +59.049782018324 63557.187500000000 +60.044617957556 9127.332031250000 +61.039564209817 1916.918579101562 +63.998058629288 4341.631347656250 +64.005180932598 4902.907226562500 +68.011727932833 27051.191406250000 +68.994002789359 13611.511718750000 +69.034264524552 2235.962402343750 +69.044867744672 14147.763671875000 +72.936875253829 3080.500976562500 +73.064425531348 1778.781250000000 +76.486297547963 2075.000000000000 +77.038265451054 5099.881835937500 +79.021270792779 14303.786132812500 +80.049179511142 11132.483398437500 +81.937187525733 8269.017578125000 +82.996616277972 9058.604492187500 +87.055191552618 1226.265625000000 +89.506723502083 2138.000000000000 +90.489274059111 1883.000000000000 +91.053872057085 1250.000000000000 +95.952563443877 2416.907226562500 +97.968351278732 7414.000000000000 +102.091075578098 2124.000000000000 +104.049176798538 2869.822265625000 +105.032824057535 2268.302246093750 +109.942659719793 1552.503417968750 +113.963028919819 2876.313476562500 +114.091047730204 9707.000000000000 +118.085960022478 6202.343750000000 +122.095829000463 3354.874755859375 +122.963603572159 10189.080078125000 +123.091990223840 1658.215576171875 +123.962908276753 1264.000000000000 +124.961981387844 1248.617553710938 +124.981468335431 3929.697021484375 +132.044195947098 93934.070312500000 +133.046929709006 8774.461914062500 +136.020849942089 1733.000000000000 +136.111849813683 1360.000000000000 +139.963062553447 1109.337646484375 +141.090358589210 1395.717041015625 +141.112852312471 1316.060180664062 +141.957905703603 16856.453125000000 +142.959660117555 1253.947509765625 +147.090758649450 2468.091308593750 +149.023008191796 6552.861328125000 +150.054483884674 1381.879394531250 +151.096258773620 2499.016357421875 +151.110632987131 2703.097412109375 +153.126579038194 1175.000000000000 +155.069775153959 1603.251586914062 +155.105765884478 1708.284912109375 +155.973825500886 4965.000000000000 +158.002736417151 1095.759399414062 +158.153601610996 15319.201171875000 +159.156377711765 1693.013305664062 +160.050203671116 29808.187500000000 +161.053148014827 2780.099853515625 +161.095739798824 1801.900268554688 +164.143136174419 1163.970947265625 +167.016142798795 1938.000000000000 +170.095669159809 2557.841796875000 +170.116803885810 1136.247192382812 +170.969513731195 5351.000000000000 +171.138682297569 3310.690673828125 +172.133498266589 1186.970092773438 +172.168816609007 1753.000000000000 +173.079889235839 8137.424804687500 +174.127584523158 1118.000000000000 +177.053398759750 2010.000000000000 +178.158757601913 1500.698242187500 +179.105540802675 2172.262695312500 +182.961283063703 1745.384643554688 +186.221178069795 1622.000000000000 +194.116354222571 3003.000000000000 +195.102160721940 1637.390014648438 +195.121964321705 2114.307128906250 +198.185094857026 2154.000000000000 +209.152949152955 1423.597534179688 +217.106757414349 22820.371093750000 +218.109717212262 2365.715332031250 +219.095322856019 2839.912353515625 +224.127859164514 1268.000000000000 +228.195125596876 1796.750244140625 +235.168738541554 1153.106201171875 +236.167125665018 2147.822998046875 +239.089167868946 3697.000000000000 +242.283752097581 1331.000000000000 +246.862020032552 3643.000000000000 +249.184726675759 1740.000000000000 +250.176839865775 1269.149047851562 +251.000052262976 1835.000000000000 +251.185199846439 1143.344848632812 +252.997000735520 1613.000000000000 +253.915053857069 3181.000000000000 +260.980520936940 34136.089843750000 +261.983107472769 3914.000000000000 +262.975908361642 3711.000000000000 +267.171176133304 1190.000000000000 +279.094069923914 2218.000000000000 +281.050366742298 1525.000000000000 +304.299335403967 1178.000000000000 +318.012807082281 13905.000000000000 +319.015812641865 1771.000000000000 +320.009779889072 1411.312622070312 +324.021497063862 2274.000000000000 +327.008303487350 3194.000000000000 +329.005675073912 3118.000000000000 +339.995324080662 63593.000000000000 +340.998247708453 9047.660156250000 +341.991464705082 6892.000000000000 +351.928380615899 5009.000000000000 +353.925994810456 2303.000000000000 +355.968410053379 3129.565673828125 +363.070877703428 10529.000000000000 +364.073137490148 1819.000000000000 +379.934530374708 4270.000000000000 +381.931407641533 2153.000000000000 +445.120046493581 2353.000000000000 +503.859909772363 1436.000000000000 +505.853063220538 5926.000000000000 +506.854048759295 1904.000000000000 +519.139384687535 1126.000000000000 +522.880368766100 2806.000000000000 +523.877736811317 1418.000000000000 +529.888748439098 1722.000000000000 +536.165143915241 4925.000000000000 +537.165086990853 2707.000000000000 +538.162296228146 1762.000000000000 +542.921174254561 1132.000000000000 +543.918003709155 1152.000000000000 +546.914886995490 3416.000000000000 +547.912219447510 1693.000000000000 +563.943181698806 1223.378784179688 +610.184322938020 2314.000000000000 +611.184296206340 1322.000000000000 +657.001817843383 1409.000000000000 +696.940437510992 3603.000000000000 +698.940217154744 2331.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=658 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=658 experiment=4_0 +##scan 12 +##specref ms_run[1]:sample=1 period=1 cycle=658 experiment=4 +51.939949248191 30.000000000000 +55.054830450184 30.000000000000 +69.067255631228 13.000000000000 +72.044778791888 30.000000000000 +78.993063364372 60.000000000000 +83.084510468780 30.000000000000 +88.985248761352 13.000000000000 +89.908171661637 13.000000000000 +93.011376570627 45.000000000000 +94.056360529085 30.000000000000 +124.982421070470 75.000000000000 +>compound 1_0-658005--13--UNKNOWN +>parentmass 260.980520936940 +>charge 1 +>rt 430.939999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +260.980520936940 34136.089843750000 +>ms1peaks +52.005717667707 2536.876953125000 +53.013645918459 13517.719726562500 +53.851091408425 1440.814208984375 +54.009479564739 340518.468750000000 +55.006713705873 6189.195800781250 +55.011648330739 5775.918945312500 +55.054395080163 1937.021850585938 +55.934309790351 6216.487304687500 +56.049851096555 1422.552856445312 +56.942103151176 2497.945800781250 +59.049782018324 63557.187500000000 +60.044617957556 9127.332031250000 +61.039564209817 1916.918579101562 +63.998058629288 4341.631347656250 +64.005180932598 4902.907226562500 +68.011727932833 27051.191406250000 +68.994002789359 13611.511718750000 +69.034264524552 2235.962402343750 +69.044867744672 14147.763671875000 +72.936875253829 3080.500976562500 +73.064425531348 1778.781250000000 +76.486297547963 2075.000000000000 +77.038265451054 5099.881835937500 +79.021270792779 14303.786132812500 +80.049179511142 11132.483398437500 +81.937187525733 8269.017578125000 +82.996616277972 9058.604492187500 +87.055191552618 1226.265625000000 +89.506723502083 2138.000000000000 +90.489274059111 1883.000000000000 +91.053872057085 1250.000000000000 +95.952563443877 2416.907226562500 +97.968351278732 7414.000000000000 +102.091075578098 2124.000000000000 +104.049176798538 2869.822265625000 +105.032824057535 2268.302246093750 +109.942659719793 1552.503417968750 +113.963028919819 2876.313476562500 +114.091047730204 9707.000000000000 +118.085960022478 6202.343750000000 +122.095829000463 3354.874755859375 +122.963603572159 10189.080078125000 +123.091990223840 1658.215576171875 +123.962908276753 1264.000000000000 +124.961981387844 1248.617553710938 +124.981468335431 3929.697021484375 +132.044195947098 93934.070312500000 +133.046929709006 8774.461914062500 +136.020849942089 1733.000000000000 +136.111849813683 1360.000000000000 +139.963062553447 1109.337646484375 +141.090358589210 1395.717041015625 +141.112852312471 1316.060180664062 +141.957905703603 16856.453125000000 +142.959660117555 1253.947509765625 +147.090758649450 2468.091308593750 +149.023008191796 6552.861328125000 +150.054483884674 1381.879394531250 +151.096258773620 2499.016357421875 +151.110632987131 2703.097412109375 +153.126579038194 1175.000000000000 +155.069775153959 1603.251586914062 +155.105765884478 1708.284912109375 +155.973825500886 4965.000000000000 +158.002736417151 1095.759399414062 +158.153601610996 15319.201171875000 +159.156377711765 1693.013305664062 +160.050203671116 29808.187500000000 +161.053148014827 2780.099853515625 +161.095739798824 1801.900268554688 +164.143136174419 1163.970947265625 +167.016142798795 1938.000000000000 +170.095669159809 2557.841796875000 +170.116803885810 1136.247192382812 +170.969513731195 5351.000000000000 +171.138682297569 3310.690673828125 +172.133498266589 1186.970092773438 +172.168816609007 1753.000000000000 +173.079889235839 8137.424804687500 +174.127584523158 1118.000000000000 +177.053398759750 2010.000000000000 +178.158757601913 1500.698242187500 +179.105540802675 2172.262695312500 +182.961283063703 1745.384643554688 +186.221178069795 1622.000000000000 +194.116354222571 3003.000000000000 +195.102160721940 1637.390014648438 +195.121964321705 2114.307128906250 +198.185094857026 2154.000000000000 +209.152949152955 1423.597534179688 +217.106757414349 22820.371093750000 +218.109717212262 2365.715332031250 +219.095322856019 2839.912353515625 +224.127859164514 1268.000000000000 +228.195125596876 1796.750244140625 +235.168738541554 1153.106201171875 +236.167125665018 2147.822998046875 +239.089167868946 3697.000000000000 +242.283752097581 1331.000000000000 +246.862020032552 3643.000000000000 +249.184726675759 1740.000000000000 +250.176839865775 1269.149047851562 +251.000052262976 1835.000000000000 +251.185199846439 1143.344848632812 +252.997000735520 1613.000000000000 +253.915053857069 3181.000000000000 +260.980520936940 34136.089843750000 +261.983107472769 3914.000000000000 +262.975908361642 3711.000000000000 +267.171176133304 1190.000000000000 +279.094069923914 2218.000000000000 +281.050366742298 1525.000000000000 +304.299335403967 1178.000000000000 +318.012807082281 13905.000000000000 +319.015812641865 1771.000000000000 +320.009779889072 1411.312622070312 +324.021497063862 2274.000000000000 +327.008303487350 3194.000000000000 +329.005675073912 3118.000000000000 +339.995324080662 63593.000000000000 +340.998247708453 9047.660156250000 +341.991464705082 6892.000000000000 +351.928380615899 5009.000000000000 +353.925994810456 2303.000000000000 +355.968410053379 3129.565673828125 +363.070877703428 10529.000000000000 +364.073137490148 1819.000000000000 +379.934530374708 4270.000000000000 +381.931407641533 2153.000000000000 +445.120046493581 2353.000000000000 +503.859909772363 1436.000000000000 +505.853063220538 5926.000000000000 +506.854048759295 1904.000000000000 +519.139384687535 1126.000000000000 +522.880368766100 2806.000000000000 +523.877736811317 1418.000000000000 +529.888748439098 1722.000000000000 +536.165143915241 4925.000000000000 +537.165086990853 2707.000000000000 +538.162296228146 1762.000000000000 +542.921174254561 1132.000000000000 +543.918003709155 1152.000000000000 +546.914886995490 3416.000000000000 +547.912219447510 1693.000000000000 +563.943181698806 1223.378784179688 +610.184322938020 2314.000000000000 +611.184296206340 1322.000000000000 +657.001817843383 1409.000000000000 +696.940437510992 3603.000000000000 +698.940217154744 2331.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=658 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=658 experiment=5_0 +##scan 13 +##specref ms_run[1]:sample=1 period=1 cycle=658 experiment=5 +62.018433615912 45.000000000000 +62.999560176952 30.000000000000 +78.994234236028 309.650909423828 +93.009991019875 45.000000000000 +124.981777144557 1225.000000000000 +136.001703293989 30.000000000000 +137.004941794890 75.000000000000 +151.995082084157 210.000000000000 +167.016342549556 210.000000000000 +167.975948042555 75.000000000000 +182.992473591235 90.000000000000 +>compound 1_0-658008--16--UNKNOWN +>parentmass 351.928380615899 +>charge 1 +>rt 430.939999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +351.928380615899 5009.000000000000 +>ms1peaks +52.005717667707 2536.876953125000 +53.013645918459 13517.719726562500 +53.851091408425 1440.814208984375 +54.009479564739 340518.468750000000 +55.006713705873 6189.195800781250 +55.011648330739 5775.918945312500 +55.054395080163 1937.021850585938 +55.934309790351 6216.487304687500 +56.049851096555 1422.552856445312 +56.942103151176 2497.945800781250 +59.049782018324 63557.187500000000 +60.044617957556 9127.332031250000 +61.039564209817 1916.918579101562 +63.998058629288 4341.631347656250 +64.005180932598 4902.907226562500 +68.011727932833 27051.191406250000 +68.994002789359 13611.511718750000 +69.034264524552 2235.962402343750 +69.044867744672 14147.763671875000 +72.936875253829 3080.500976562500 +73.064425531348 1778.781250000000 +76.486297547963 2075.000000000000 +77.038265451054 5099.881835937500 +79.021270792779 14303.786132812500 +80.049179511142 11132.483398437500 +81.937187525733 8269.017578125000 +82.996616277972 9058.604492187500 +87.055191552618 1226.265625000000 +89.506723502083 2138.000000000000 +90.489274059111 1883.000000000000 +91.053872057085 1250.000000000000 +95.952563443877 2416.907226562500 +97.968351278732 7414.000000000000 +102.091075578098 2124.000000000000 +104.049176798538 2869.822265625000 +105.032824057535 2268.302246093750 +109.942659719793 1552.503417968750 +113.963028919819 2876.313476562500 +114.091047730204 9707.000000000000 +118.085960022478 6202.343750000000 +122.095829000463 3354.874755859375 +122.963603572159 10189.080078125000 +123.091990223840 1658.215576171875 +123.962908276753 1264.000000000000 +124.961981387844 1248.617553710938 +124.981468335431 3929.697021484375 +132.044195947098 93934.070312500000 +133.046929709006 8774.461914062500 +136.020849942089 1733.000000000000 +136.111849813683 1360.000000000000 +139.963062553447 1109.337646484375 +141.090358589210 1395.717041015625 +141.112852312471 1316.060180664062 +141.957905703603 16856.453125000000 +142.959660117555 1253.947509765625 +147.090758649450 2468.091308593750 +149.023008191796 6552.861328125000 +150.054483884674 1381.879394531250 +151.096258773620 2499.016357421875 +151.110632987131 2703.097412109375 +153.126579038194 1175.000000000000 +155.069775153959 1603.251586914062 +155.105765884478 1708.284912109375 +155.973825500886 4965.000000000000 +158.002736417151 1095.759399414062 +158.153601610996 15319.201171875000 +159.156377711765 1693.013305664062 +160.050203671116 29808.187500000000 +161.053148014827 2780.099853515625 +161.095739798824 1801.900268554688 +164.143136174419 1163.970947265625 +167.016142798795 1938.000000000000 +170.095669159809 2557.841796875000 +170.116803885810 1136.247192382812 +170.969513731195 5351.000000000000 +171.138682297569 3310.690673828125 +172.133498266589 1186.970092773438 +172.168816609007 1753.000000000000 +173.079889235839 8137.424804687500 +174.127584523158 1118.000000000000 +177.053398759750 2010.000000000000 +178.158757601913 1500.698242187500 +179.105540802675 2172.262695312500 +182.961283063703 1745.384643554688 +186.221178069795 1622.000000000000 +194.116354222571 3003.000000000000 +195.102160721940 1637.390014648438 +195.121964321705 2114.307128906250 +198.185094857026 2154.000000000000 +209.152949152955 1423.597534179688 +217.106757414349 22820.371093750000 +218.109717212262 2365.715332031250 +219.095322856019 2839.912353515625 +224.127859164514 1268.000000000000 +228.195125596876 1796.750244140625 +235.168738541554 1153.106201171875 +236.167125665018 2147.822998046875 +239.089167868946 3697.000000000000 +242.283752097581 1331.000000000000 +246.862020032552 3643.000000000000 +249.184726675759 1740.000000000000 +250.176839865775 1269.149047851562 +251.000052262976 1835.000000000000 +251.185199846439 1143.344848632812 +252.997000735520 1613.000000000000 +253.915053857069 3181.000000000000 +260.980520936940 34136.089843750000 +261.983107472769 3914.000000000000 +262.975908361642 3711.000000000000 +267.171176133304 1190.000000000000 +279.094069923914 2218.000000000000 +281.050366742298 1525.000000000000 +304.299335403967 1178.000000000000 +318.012807082281 13905.000000000000 +319.015812641865 1771.000000000000 +320.009779889072 1411.312622070312 +324.021497063862 2274.000000000000 +327.008303487350 3194.000000000000 +329.005675073912 3118.000000000000 +339.995324080662 63593.000000000000 +340.998247708453 9047.660156250000 +341.991464705082 6892.000000000000 +351.928380615899 5009.000000000000 +353.925994810456 2303.000000000000 +355.968410053379 3129.565673828125 +363.070877703428 10529.000000000000 +364.073137490148 1819.000000000000 +379.934530374708 4270.000000000000 +381.931407641533 2153.000000000000 +445.120046493581 2353.000000000000 +503.859909772363 1436.000000000000 +505.853063220538 5926.000000000000 +506.854048759295 1904.000000000000 +519.139384687535 1126.000000000000 +522.880368766100 2806.000000000000 +523.877736811317 1418.000000000000 +529.888748439098 1722.000000000000 +536.165143915241 4925.000000000000 +537.165086990853 2707.000000000000 +538.162296228146 1762.000000000000 +542.921174254561 1132.000000000000 +543.918003709155 1152.000000000000 +546.914886995490 3416.000000000000 +547.912219447510 1693.000000000000 +563.943181698806 1223.378784179688 +610.184322938020 2314.000000000000 +611.184296206340 1322.000000000000 +657.001817843383 1409.000000000000 +696.940437510992 3603.000000000000 +698.940217154744 2331.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=658 experiment=8 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=658 experiment=8_0 +##scan 16 +##specref ms_run[1]:sample=1 period=1 cycle=658 experiment=8 +132.041411012430 45.000000000000 +215.930891084475 45.000000000000 +216.924999760429 30.000000000000 +282.161332115821 30.000000000000 +351.933034998352 60.000000000000 +>compound 1_0-659002--19--UNKNOWN +>parentmass 132.044243365317 +>charge 1 +>rt 431.866000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +132.044243365317 129513.453125000000 +>ms1peaks +50.015030688094 1631.000000000000 +52.005691836328 2833.837890625000 +53.013678352050 13820.645507812500 +53.850930804944 1372.676147460938 +54.009488813193 341215.375000000000 +55.006244952468 6363.858398437500 +55.011195314574 6663.786621093750 +55.054435589179 2093.444580078125 +55.934214796378 6443.966308593750 +56.049418637710 1614.372314453125 +56.942077131072 2603.345458984375 +59.049684010496 67068.679687500000 +60.044674600260 8507.357421875000 +61.039576232541 1618.787597656250 +63.997953270808 4540.612304687500 +64.004984885183 4765.146484375000 +68.011730125352 26984.066406250000 +68.993758540617 13250.065429687500 +69.044639818678 13453.114257812500 +72.936865747985 3009.785888671875 +73.064487442720 1926.000000000000 +76.486106736487 2394.000000000000 +77.012975210189 1331.000000000000 +77.038245950909 6864.013671875000 +79.021170250218 14954.513671875000 +80.049055487900 12273.781250000000 +81.937167726085 8605.721679687500 +82.996581259270 9547.895507812500 +87.054493611252 1308.586669921875 +89.506388403917 1579.000000000000 +90.489379547455 1879.000000000000 +91.053817827625 1210.000000000000 +95.952611673257 2421.652587890625 +97.968325410624 7844.628906250000 +100.075376789744 1408.000000000000 +102.090940410850 1712.000000000000 +104.048827681379 4021.000000000000 +105.032851808396 3043.702148437500 +109.943040230612 1524.000000000000 +113.962743611150 2300.809326171875 +114.091086475065 10732.537109375000 +118.085604757949 6375.129394531250 +122.095612538633 3453.346191406250 +122.963478886657 10149.138671875000 +123.091154033496 1907.152587890625 +123.962085557178 1291.000000000000 +124.964032856960 1524.723510742188 +124.981293760905 5573.300781250000 +132.044243365317 129513.453125000000 +133.047275934233 12024.171875000000 +136.021338396786 1596.000000000000 +136.111611313675 1179.000000000000 +141.090513006913 1389.292724609375 +141.112565247916 1247.203857421875 +141.957978845995 16325.500000000000 +147.090945866648 2556.685302734375 +149.023028218992 6399.154296875000 +150.054262184195 1568.000000000000 +151.096430884077 2664.400390625000 +151.111011940160 2835.027587890625 +155.069438117684 1871.944824218750 +155.105960083325 1401.000000000000 +155.973753152622 4288.000000000000 +158.153627071218 14384.000000000000 +159.156473714741 1627.752929687500 +160.050487288307 38915.000000000000 +161.053611692746 4466.942382812500 +161.095700587134 1743.057495117188 +164.142944501592 1256.052368164062 +167.015735366166 2785.089599609375 +170.096151543720 2652.023193359375 +170.116409887737 1324.376464843750 +170.968993556255 7076.000000000000 +171.137671144810 4912.312011718750 +172.136045264128 1371.000000000000 +173.079830429233 8581.928710937500 +174.991306236853 1198.000000000000 +177.054219725911 1769.000000000000 +178.157947155736 1498.908447265625 +179.106050750592 1934.090454101562 +182.960933723657 1780.061523437500 +182.991388549794 1244.309082031250 +186.221152079128 2287.000000000000 +194.116900036921 2752.000000000000 +195.121615177487 1919.471069335938 +198.184412559940 2140.000000000000 +200.200455656322 1296.554199218750 +209.153704347399 1590.000000000000 +212.888258624179 1535.000000000000 +217.106944592366 24346.000000000000 +218.110517718319 2646.000000000000 +219.095540028475 2644.006591796875 +228.196097140190 1527.811645507812 +236.167749124378 1677.000000000000 +239.089312381813 3327.000000000000 +242.284215148787 1201.000000000000 +246.862288406064 3365.000000000000 +249.184532839914 1860.293334960938 +251.001107206325 2362.000000000000 +252.997444701878 1876.000000000000 +253.916335213075 4093.000000000000 +260.980865788213 46877.000000000000 +261.983931158765 5301.000000000000 +262.976772362746 4418.000000000000 +267.172661485943 1410.000000000000 +277.199859444074 2417.590087890625 +279.093448238935 1888.450561523438 +281.051163936397 1557.000000000000 +292.121170689402 15731.000000000000 +293.123945781771 2615.000000000000 +294.118820607873 4859.000000000000 +295.121821476430 1186.000000000000 +318.013460543863 19020.000000000000 +319.016226586969 2819.000000000000 +320.010792812476 1745.000000000000 +324.021120495162 2522.000000000000 +327.007928037291 3314.077636718750 +329.005428091932 3187.000000000000 +331.002680981835 1140.229492187500 +335.040406311528 1228.000000000000 +339.995783079981 73785.000000000000 +340.998517552508 10283.000000000000 +341.992089047450 7216.000000000000 +351.928943475892 4368.000000000000 +353.926519256680 2362.000000000000 +355.969819970535 3512.076416015625 +363.071778928522 11698.970703125000 +364.073181575102 1981.000000000000 +371.315525399960 1354.000000000000 +379.934529706961 4095.883300781250 +381.932716463007 2062.000000000000 +445.119746997025 2474.000000000000 +446.119291863183 1145.000000000000 +505.853826516954 4858.000000000000 +506.855308046231 1451.000000000000 +519.139330404280 1166.703979492188 +522.880837958116 1970.000000000000 +523.871380297922 1372.000000000000 +529.891671811182 1342.000000000000 +536.165890644769 5714.000000000000 +537.166372879728 2646.000000000000 +538.163391669663 2155.000000000000 +544.339624971493 1155.000000000000 +546.914039373140 3234.000000000000 +547.912958504845 1306.000000000000 +610.184280095073 1860.000000000000 +611.183517202231 1239.000000000000 +657.000223829242 1834.000000000000 +696.940499292838 3022.000000000000 +698.938485246113 2250.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=659 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=2_0 +##scan 19 +##specref ms_run[1]:sample=1 period=1 cycle=659 experiment=2 +50.015684933400 782.296936035156 +51.023476325043 5238.444335937500 +52.019660740259 45.000000000000 +52.027188221199 105.486495971680 +62.930593774696 45.000000000000 +63.022428787821 75.000000000000 +74.014590526065 105.000000000000 +75.022725050754 75.000000000000 +76.017779952496 120.000000000000 +77.038582522704 6592.706054687500 +78.040220421887 60.000000000000 +102.033634726357 60.000000000000 +104.049860668558 165.000000000000 +105.032887544235 427.000000000000 +105.045829320505 316.610382080078 +130.041154011737 60.000000000000 +132.046355654990 135.000000000000 +>compound 1_0-659003--20--UNKNOWN +>parentmass 160.050487288307 +>charge 1 +>rt 431.866000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +160.050487288307 38915.000000000000 +>ms1peaks +50.015030688094 1631.000000000000 +52.005691836328 2833.837890625000 +53.013678352050 13820.645507812500 +53.850930804944 1372.676147460938 +54.009488813193 341215.375000000000 +55.006244952468 6363.858398437500 +55.011195314574 6663.786621093750 +55.054435589179 2093.444580078125 +55.934214796378 6443.966308593750 +56.049418637710 1614.372314453125 +56.942077131072 2603.345458984375 +59.049684010496 67068.679687500000 +60.044674600260 8507.357421875000 +61.039576232541 1618.787597656250 +63.997953270808 4540.612304687500 +64.004984885183 4765.146484375000 +68.011730125352 26984.066406250000 +68.993758540617 13250.065429687500 +69.044639818678 13453.114257812500 +72.936865747985 3009.785888671875 +73.064487442720 1926.000000000000 +76.486106736487 2394.000000000000 +77.012975210189 1331.000000000000 +77.038245950909 6864.013671875000 +79.021170250218 14954.513671875000 +80.049055487900 12273.781250000000 +81.937167726085 8605.721679687500 +82.996581259270 9547.895507812500 +87.054493611252 1308.586669921875 +89.506388403917 1579.000000000000 +90.489379547455 1879.000000000000 +91.053817827625 1210.000000000000 +95.952611673257 2421.652587890625 +97.968325410624 7844.628906250000 +100.075376789744 1408.000000000000 +102.090940410850 1712.000000000000 +104.048827681379 4021.000000000000 +105.032851808396 3043.702148437500 +109.943040230612 1524.000000000000 +113.962743611150 2300.809326171875 +114.091086475065 10732.537109375000 +118.085604757949 6375.129394531250 +122.095612538633 3453.346191406250 +122.963478886657 10149.138671875000 +123.091154033496 1907.152587890625 +123.962085557178 1291.000000000000 +124.964032856960 1524.723510742188 +124.981293760905 5573.300781250000 +132.044243365317 129513.453125000000 +133.047275934233 12024.171875000000 +136.021338396786 1596.000000000000 +136.111611313675 1179.000000000000 +141.090513006913 1389.292724609375 +141.112565247916 1247.203857421875 +141.957978845995 16325.500000000000 +147.090945866648 2556.685302734375 +149.023028218992 6399.154296875000 +150.054262184195 1568.000000000000 +151.096430884077 2664.400390625000 +151.111011940160 2835.027587890625 +155.069438117684 1871.944824218750 +155.105960083325 1401.000000000000 +155.973753152622 4288.000000000000 +158.153627071218 14384.000000000000 +159.156473714741 1627.752929687500 +160.050487288307 38915.000000000000 +161.053611692746 4466.942382812500 +161.095700587134 1743.057495117188 +164.142944501592 1256.052368164062 +167.015735366166 2785.089599609375 +170.096151543720 2652.023193359375 +170.116409887737 1324.376464843750 +170.968993556255 7076.000000000000 +171.137671144810 4912.312011718750 +172.136045264128 1371.000000000000 +173.079830429233 8581.928710937500 +174.991306236853 1198.000000000000 +177.054219725911 1769.000000000000 +178.157947155736 1498.908447265625 +179.106050750592 1934.090454101562 +182.960933723657 1780.061523437500 +182.991388549794 1244.309082031250 +186.221152079128 2287.000000000000 +194.116900036921 2752.000000000000 +195.121615177487 1919.471069335938 +198.184412559940 2140.000000000000 +200.200455656322 1296.554199218750 +209.153704347399 1590.000000000000 +212.888258624179 1535.000000000000 +217.106944592366 24346.000000000000 +218.110517718319 2646.000000000000 +219.095540028475 2644.006591796875 +228.196097140190 1527.811645507812 +236.167749124378 1677.000000000000 +239.089312381813 3327.000000000000 +242.284215148787 1201.000000000000 +246.862288406064 3365.000000000000 +249.184532839914 1860.293334960938 +251.001107206325 2362.000000000000 +252.997444701878 1876.000000000000 +253.916335213075 4093.000000000000 +260.980865788213 46877.000000000000 +261.983931158765 5301.000000000000 +262.976772362746 4418.000000000000 +267.172661485943 1410.000000000000 +277.199859444074 2417.590087890625 +279.093448238935 1888.450561523438 +281.051163936397 1557.000000000000 +292.121170689402 15731.000000000000 +293.123945781771 2615.000000000000 +294.118820607873 4859.000000000000 +295.121821476430 1186.000000000000 +318.013460543863 19020.000000000000 +319.016226586969 2819.000000000000 +320.010792812476 1745.000000000000 +324.021120495162 2522.000000000000 +327.007928037291 3314.077636718750 +329.005428091932 3187.000000000000 +331.002680981835 1140.229492187500 +335.040406311528 1228.000000000000 +339.995783079981 73785.000000000000 +340.998517552508 10283.000000000000 +341.992089047450 7216.000000000000 +351.928943475892 4368.000000000000 +353.926519256680 2362.000000000000 +355.969819970535 3512.076416015625 +363.071778928522 11698.970703125000 +364.073181575102 1981.000000000000 +371.315525399960 1354.000000000000 +379.934529706961 4095.883300781250 +381.932716463007 2062.000000000000 +445.119746997025 2474.000000000000 +446.119291863183 1145.000000000000 +505.853826516954 4858.000000000000 +506.855308046231 1451.000000000000 +519.139330404280 1166.703979492188 +522.880837958116 1970.000000000000 +523.871380297922 1372.000000000000 +529.891671811182 1342.000000000000 +536.165890644769 5714.000000000000 +537.166372879728 2646.000000000000 +538.163391669663 2155.000000000000 +544.339624971493 1155.000000000000 +546.914039373140 3234.000000000000 +547.912958504845 1306.000000000000 +610.184280095073 1860.000000000000 +611.183517202231 1239.000000000000 +657.000223829242 1834.000000000000 +696.940499292838 3022.000000000000 +698.938485246113 2250.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=659 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=3_0 +##scan 20 +##specref ms_run[1]:sample=1 period=1 cycle=659 experiment=3 +50.015300938071 165.000000000000 +50.023432814222 26.121423721313 +51.023560643128 1567.000000000000 +52.024436323526 30.000000000000 +55.934703320231 30.000000000000 +55.938250623348 30.000000000000 +56.934648956307 30.000000000000 +56.943545244569 105.000000000000 +75.009914112122 15.000000000000 +75.024485681270 45.000000000000 +76.024872027539 60.000000000000 +77.015824971891 15.000000000000 +77.038700302945 1461.000000000000 +78.033265752833 30.000000000000 +102.032787662102 75.000000000000 +105.035190696906 165.000000000000 +105.040853889502 193.226303100586 +105.051692243839 90.000000000000 +130.038254747999 30.000000000000 +>compound 1_0-659004--21--UNKNOWN +>parentmass 170.968993556255 +>charge 1 +>rt 431.866000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +170.968993556255 7076.000000000000 +>ms1peaks +50.015030688094 1631.000000000000 +52.005691836328 2833.837890625000 +53.013678352050 13820.645507812500 +53.850930804944 1372.676147460938 +54.009488813193 341215.375000000000 +55.006244952468 6363.858398437500 +55.011195314574 6663.786621093750 +55.054435589179 2093.444580078125 +55.934214796378 6443.966308593750 +56.049418637710 1614.372314453125 +56.942077131072 2603.345458984375 +59.049684010496 67068.679687500000 +60.044674600260 8507.357421875000 +61.039576232541 1618.787597656250 +63.997953270808 4540.612304687500 +64.004984885183 4765.146484375000 +68.011730125352 26984.066406250000 +68.993758540617 13250.065429687500 +69.044639818678 13453.114257812500 +72.936865747985 3009.785888671875 +73.064487442720 1926.000000000000 +76.486106736487 2394.000000000000 +77.012975210189 1331.000000000000 +77.038245950909 6864.013671875000 +79.021170250218 14954.513671875000 +80.049055487900 12273.781250000000 +81.937167726085 8605.721679687500 +82.996581259270 9547.895507812500 +87.054493611252 1308.586669921875 +89.506388403917 1579.000000000000 +90.489379547455 1879.000000000000 +91.053817827625 1210.000000000000 +95.952611673257 2421.652587890625 +97.968325410624 7844.628906250000 +100.075376789744 1408.000000000000 +102.090940410850 1712.000000000000 +104.048827681379 4021.000000000000 +105.032851808396 3043.702148437500 +109.943040230612 1524.000000000000 +113.962743611150 2300.809326171875 +114.091086475065 10732.537109375000 +118.085604757949 6375.129394531250 +122.095612538633 3453.346191406250 +122.963478886657 10149.138671875000 +123.091154033496 1907.152587890625 +123.962085557178 1291.000000000000 +124.964032856960 1524.723510742188 +124.981293760905 5573.300781250000 +132.044243365317 129513.453125000000 +133.047275934233 12024.171875000000 +136.021338396786 1596.000000000000 +136.111611313675 1179.000000000000 +141.090513006913 1389.292724609375 +141.112565247916 1247.203857421875 +141.957978845995 16325.500000000000 +147.090945866648 2556.685302734375 +149.023028218992 6399.154296875000 +150.054262184195 1568.000000000000 +151.096430884077 2664.400390625000 +151.111011940160 2835.027587890625 +155.069438117684 1871.944824218750 +155.105960083325 1401.000000000000 +155.973753152622 4288.000000000000 +158.153627071218 14384.000000000000 +159.156473714741 1627.752929687500 +160.050487288307 38915.000000000000 +161.053611692746 4466.942382812500 +161.095700587134 1743.057495117188 +164.142944501592 1256.052368164062 +167.015735366166 2785.089599609375 +170.096151543720 2652.023193359375 +170.116409887737 1324.376464843750 +170.968993556255 7076.000000000000 +171.137671144810 4912.312011718750 +172.136045264128 1371.000000000000 +173.079830429233 8581.928710937500 +174.991306236853 1198.000000000000 +177.054219725911 1769.000000000000 +178.157947155736 1498.908447265625 +179.106050750592 1934.090454101562 +182.960933723657 1780.061523437500 +182.991388549794 1244.309082031250 +186.221152079128 2287.000000000000 +194.116900036921 2752.000000000000 +195.121615177487 1919.471069335938 +198.184412559940 2140.000000000000 +200.200455656322 1296.554199218750 +209.153704347399 1590.000000000000 +212.888258624179 1535.000000000000 +217.106944592366 24346.000000000000 +218.110517718319 2646.000000000000 +219.095540028475 2644.006591796875 +228.196097140190 1527.811645507812 +236.167749124378 1677.000000000000 +239.089312381813 3327.000000000000 +242.284215148787 1201.000000000000 +246.862288406064 3365.000000000000 +249.184532839914 1860.293334960938 +251.001107206325 2362.000000000000 +252.997444701878 1876.000000000000 +253.916335213075 4093.000000000000 +260.980865788213 46877.000000000000 +261.983931158765 5301.000000000000 +262.976772362746 4418.000000000000 +267.172661485943 1410.000000000000 +277.199859444074 2417.590087890625 +279.093448238935 1888.450561523438 +281.051163936397 1557.000000000000 +292.121170689402 15731.000000000000 +293.123945781771 2615.000000000000 +294.118820607873 4859.000000000000 +295.121821476430 1186.000000000000 +318.013460543863 19020.000000000000 +319.016226586969 2819.000000000000 +320.010792812476 1745.000000000000 +324.021120495162 2522.000000000000 +327.007928037291 3314.077636718750 +329.005428091932 3187.000000000000 +331.002680981835 1140.229492187500 +335.040406311528 1228.000000000000 +339.995783079981 73785.000000000000 +340.998517552508 10283.000000000000 +341.992089047450 7216.000000000000 +351.928943475892 4368.000000000000 +353.926519256680 2362.000000000000 +355.969819970535 3512.076416015625 +363.071778928522 11698.970703125000 +364.073181575102 1981.000000000000 +371.315525399960 1354.000000000000 +379.934529706961 4095.883300781250 +381.932716463007 2062.000000000000 +445.119746997025 2474.000000000000 +446.119291863183 1145.000000000000 +505.853826516954 4858.000000000000 +506.855308046231 1451.000000000000 +519.139330404280 1166.703979492188 +522.880837958116 1970.000000000000 +523.871380297922 1372.000000000000 +529.891671811182 1342.000000000000 +536.165890644769 5714.000000000000 +537.166372879728 2646.000000000000 +538.163391669663 2155.000000000000 +544.339624971493 1155.000000000000 +546.914039373140 3234.000000000000 +547.912958504845 1306.000000000000 +610.184280095073 1860.000000000000 +611.183517202231 1239.000000000000 +657.000223829242 1834.000000000000 +696.940499292838 3022.000000000000 +698.938485246113 2250.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=659 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=4_0 +##scan 21 +##specref ms_run[1]:sample=1 period=1 cycle=659 experiment=4 +55.054145525042 45.000000000000 +67.054325993411 30.000000000000 +69.068379525266 30.000000000000 +69.075332528705 30.000000000000 +72.043433360441 45.000000000000 +72.049851746112 45.000000000000 +72.936671815931 30.000000000000 +78.995629325717 30.000000000000 +124.980821138791 120.000000000000 +124.996031391239 105.000000000000 +>compound 1_0-659005--22--UNKNOWN +>parentmass 260.980865788213 +>charge 1 +>rt 431.866000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +260.980865788213 46877.000000000000 +>ms1peaks +50.015030688094 1631.000000000000 +52.005691836328 2833.837890625000 +53.013678352050 13820.645507812500 +53.850930804944 1372.676147460938 +54.009488813193 341215.375000000000 +55.006244952468 6363.858398437500 +55.011195314574 6663.786621093750 +55.054435589179 2093.444580078125 +55.934214796378 6443.966308593750 +56.049418637710 1614.372314453125 +56.942077131072 2603.345458984375 +59.049684010496 67068.679687500000 +60.044674600260 8507.357421875000 +61.039576232541 1618.787597656250 +63.997953270808 4540.612304687500 +64.004984885183 4765.146484375000 +68.011730125352 26984.066406250000 +68.993758540617 13250.065429687500 +69.044639818678 13453.114257812500 +72.936865747985 3009.785888671875 +73.064487442720 1926.000000000000 +76.486106736487 2394.000000000000 +77.012975210189 1331.000000000000 +77.038245950909 6864.013671875000 +79.021170250218 14954.513671875000 +80.049055487900 12273.781250000000 +81.937167726085 8605.721679687500 +82.996581259270 9547.895507812500 +87.054493611252 1308.586669921875 +89.506388403917 1579.000000000000 +90.489379547455 1879.000000000000 +91.053817827625 1210.000000000000 +95.952611673257 2421.652587890625 +97.968325410624 7844.628906250000 +100.075376789744 1408.000000000000 +102.090940410850 1712.000000000000 +104.048827681379 4021.000000000000 +105.032851808396 3043.702148437500 +109.943040230612 1524.000000000000 +113.962743611150 2300.809326171875 +114.091086475065 10732.537109375000 +118.085604757949 6375.129394531250 +122.095612538633 3453.346191406250 +122.963478886657 10149.138671875000 +123.091154033496 1907.152587890625 +123.962085557178 1291.000000000000 +124.964032856960 1524.723510742188 +124.981293760905 5573.300781250000 +132.044243365317 129513.453125000000 +133.047275934233 12024.171875000000 +136.021338396786 1596.000000000000 +136.111611313675 1179.000000000000 +141.090513006913 1389.292724609375 +141.112565247916 1247.203857421875 +141.957978845995 16325.500000000000 +147.090945866648 2556.685302734375 +149.023028218992 6399.154296875000 +150.054262184195 1568.000000000000 +151.096430884077 2664.400390625000 +151.111011940160 2835.027587890625 +155.069438117684 1871.944824218750 +155.105960083325 1401.000000000000 +155.973753152622 4288.000000000000 +158.153627071218 14384.000000000000 +159.156473714741 1627.752929687500 +160.050487288307 38915.000000000000 +161.053611692746 4466.942382812500 +161.095700587134 1743.057495117188 +164.142944501592 1256.052368164062 +167.015735366166 2785.089599609375 +170.096151543720 2652.023193359375 +170.116409887737 1324.376464843750 +170.968993556255 7076.000000000000 +171.137671144810 4912.312011718750 +172.136045264128 1371.000000000000 +173.079830429233 8581.928710937500 +174.991306236853 1198.000000000000 +177.054219725911 1769.000000000000 +178.157947155736 1498.908447265625 +179.106050750592 1934.090454101562 +182.960933723657 1780.061523437500 +182.991388549794 1244.309082031250 +186.221152079128 2287.000000000000 +194.116900036921 2752.000000000000 +195.121615177487 1919.471069335938 +198.184412559940 2140.000000000000 +200.200455656322 1296.554199218750 +209.153704347399 1590.000000000000 +212.888258624179 1535.000000000000 +217.106944592366 24346.000000000000 +218.110517718319 2646.000000000000 +219.095540028475 2644.006591796875 +228.196097140190 1527.811645507812 +236.167749124378 1677.000000000000 +239.089312381813 3327.000000000000 +242.284215148787 1201.000000000000 +246.862288406064 3365.000000000000 +249.184532839914 1860.293334960938 +251.001107206325 2362.000000000000 +252.997444701878 1876.000000000000 +253.916335213075 4093.000000000000 +260.980865788213 46877.000000000000 +261.983931158765 5301.000000000000 +262.976772362746 4418.000000000000 +267.172661485943 1410.000000000000 +277.199859444074 2417.590087890625 +279.093448238935 1888.450561523438 +281.051163936397 1557.000000000000 +292.121170689402 15731.000000000000 +293.123945781771 2615.000000000000 +294.118820607873 4859.000000000000 +295.121821476430 1186.000000000000 +318.013460543863 19020.000000000000 +319.016226586969 2819.000000000000 +320.010792812476 1745.000000000000 +324.021120495162 2522.000000000000 +327.007928037291 3314.077636718750 +329.005428091932 3187.000000000000 +331.002680981835 1140.229492187500 +335.040406311528 1228.000000000000 +339.995783079981 73785.000000000000 +340.998517552508 10283.000000000000 +341.992089047450 7216.000000000000 +351.928943475892 4368.000000000000 +353.926519256680 2362.000000000000 +355.969819970535 3512.076416015625 +363.071778928522 11698.970703125000 +364.073181575102 1981.000000000000 +371.315525399960 1354.000000000000 +379.934529706961 4095.883300781250 +381.932716463007 2062.000000000000 +445.119746997025 2474.000000000000 +446.119291863183 1145.000000000000 +505.853826516954 4858.000000000000 +506.855308046231 1451.000000000000 +519.139330404280 1166.703979492188 +522.880837958116 1970.000000000000 +523.871380297922 1372.000000000000 +529.891671811182 1342.000000000000 +536.165890644769 5714.000000000000 +537.166372879728 2646.000000000000 +538.163391669663 2155.000000000000 +544.339624971493 1155.000000000000 +546.914039373140 3234.000000000000 +547.912958504845 1306.000000000000 +610.184280095073 1860.000000000000 +611.183517202231 1239.000000000000 +657.000223829242 1834.000000000000 +696.940499292838 3022.000000000000 +698.938485246113 2250.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=659 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=5_0 +##scan 22 +##specref ms_run[1]:sample=1 period=1 cycle=659 experiment=5 +62.016790701025 30.000000000000 +78.994568832211 561.000000000000 +109.012111223247 45.000000000000 +109.019923324024 45.000000000000 +124.982037010262 1167.000000000000 +137.004013733819 45.000000000000 +151.991334988917 180.000000000000 +167.016403926681 240.000000000000 +182.993550986921 30.000000000000 +>compound 1_0-660002--28--UNKNOWN +>parentmass 104.049086460790 +>charge 1 +>rt 432.790999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +104.049086460790 3045.739257812500 +>ms1peaks +52.005894908514 3265.400634765625 +53.013510908959 13106.733398437500 +53.850705653871 1327.061035156250 +54.009389058624 348945.000000000000 +55.006169898270 6124.332519531250 +55.011317455070 6538.428710937500 +55.054331627343 2077.732910156250 +55.934133744738 6508.345214843750 +56.049593965189 1999.699707031250 +56.942184704094 2688.283691406250 +59.049605800481 70253.718750000000 +60.044658666294 10706.690429687500 +61.039619044210 1586.278076171875 +63.997756861684 3941.995605468750 +64.005166169614 4907.884765625000 +67.028913163203 1580.000000000000 +68.011642030602 27597.281250000000 +68.993728986678 12929.603515625000 +69.044696634986 12506.645507812500 +72.936667673711 2191.062988281250 +73.064288768235 1852.000000000000 +76.486322585941 2327.304443359375 +77.038204782362 5884.000000000000 +79.020970020200 14096.371093750000 +80.049138765431 11437.409179687500 +81.937010633269 8800.649414062500 +82.996563663943 9775.875976562500 +87.054866657942 1386.671508789062 +89.506477006513 1856.891357421875 +90.489380614180 1867.000000000000 +91.053607705956 1522.000000000000 +95.952400718089 2411.000000000000 +97.968129951793 7534.000000000000 +100.075098492601 1334.000000000000 +102.090723461138 1696.000000000000 +104.049086460790 3045.739257812500 +105.032948258430 2178.018554687500 +109.942760191152 1389.039428710938 +113.963014550647 1955.283325195312 +114.090880342296 9824.000000000000 +118.085478285355 6071.000000000000 +122.095943650184 3414.491943359375 +122.963053449523 10824.022460937500 +123.091014422132 1667.127319335938 +123.961852610233 1273.000000000000 +124.964467047349 2135.799560546875 +124.981051711745 4296.547363281250 +132.043642930226 93077.242187500000 +133.046777995488 9274.231445312500 +136.020768820120 1683.000000000000 +136.110810804565 1296.000000000000 +141.090222902589 1360.714843750000 +141.112627587411 1461.608520507812 +141.935004916839 1940.239746093750 +141.957609246025 17033.816406250000 +147.090484942279 2411.661132812500 +149.022774177869 5733.046386718750 +149.042316567318 2746.710693359375 +150.054248684273 1437.284790039062 +151.095045034366 2698.686279296875 +151.110908763912 3144.476318359375 +155.069769845772 1649.881591796875 +155.105405759277 1860.793457031250 +155.973140596379 4755.245605468750 +158.153359438729 14516.186523437500 +159.156612007249 1486.367431640625 +160.049846075993 24545.988281250000 +161.052607402490 2286.874755859375 +161.095210153424 1778.371337890625 +167.015155408714 1740.000000000000 +170.095595750468 2643.026123046875 +170.968534800983 4638.000000000000 +171.137187033467 8793.664062500000 +172.138659608019 1674.000000000000 +172.168464035175 1208.633911132812 +173.079743164910 7798.492675781250 +174.991345453773 1573.000000000000 +177.053816341336 1417.014038085938 +178.158055093780 1735.947753906250 +179.105704311835 2197.604980468750 +182.961317763038 2211.718750000000 +186.220205393587 1399.000000000000 +194.116470425084 2855.795654296875 +195.121709243913 1774.128417968750 +198.184491575929 2140.000000000000 +200.199765534300 1398.692871093750 +209.152792656657 1425.000000000000 +217.106381802785 24672.529296875000 +218.109726712595 2594.000000000000 +219.095072568829 2421.334228515625 +228.194355078180 1758.423828125000 +236.167326569908 1392.000000000000 +239.087560169956 3393.000000000000 +242.283100716676 1301.000000000000 +246.861853504396 3967.000000000000 +249.184072418419 1674.044555664062 +250.179850228401 1317.625488281250 +250.969009212760 1272.659667968750 +250.998800627422 2485.986083984375 +252.996506036249 1407.000000000000 +253.914744903944 3247.000000000000 +260.980140443968 31189.000000000000 +261.982652125164 3630.000000000000 +262.976320674948 3030.000000000000 +267.169211061356 1310.111816406250 +277.200326399959 5169.000000000000 +279.093304185450 2011.372070312500 +281.050388682144 1561.000000000000 +292.121055360225 111310.531250000000 +293.123630076529 20278.496093750000 +294.118239620053 37417.625000000000 +295.120516544042 6903.191406250000 +299.181966555803 2788.124755859375 +304.298855657172 1458.000000000000 +318.012599323858 12766.560546875000 +319.014697171275 1763.000000000000 +320.008501629176 1292.000000000000 +324.021279180039 2211.000000000000 +327.007286394326 3510.000000000000 +329.004329094240 3020.000000000000 +339.994441786583 55469.000000000000 +340.996800649447 7731.000000000000 +341.991164319056 5376.000000000000 +351.927480336150 4373.000000000000 +353.925190372111 2157.000000000000 +355.923288991607 1875.234497070312 +355.967623747153 2895.083740234375 +363.069819320259 9600.000000000000 +364.071840904280 1502.000000000000 +365.067263835001 1200.000000000000 +379.933765070569 3274.000000000000 +381.930698322663 2082.000000000000 +445.119022397624 2321.740478515625 +505.851287178680 4210.000000000000 +506.853720407640 1284.000000000000 +522.877826294640 1830.000000000000 +529.887917529630 1402.000000000000 +536.163984165691 5143.000000000000 +537.165630799202 2699.000000000000 +538.162716451736 1997.000000000000 +544.338330991241 1339.000000000000 +546.913670520771 2956.903320312500 +547.912049049860 1201.466308593750 +610.182850595719 2143.000000000000 +611.183650714411 1327.000000000000 +647.152176664637 1285.000000000000 +671.046640090612 3328.000000000000 +673.045642862147 3209.000000000000 +696.940422810442 1799.000000000000 +698.936403714808 1431.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=660 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=660 experiment=2_0 +##scan 28 +##specref ms_run[1]:sample=1 period=1 cycle=660 experiment=2 +51.023095335618 120.000000000000 +>compound 1_0-660003--29--UNKNOWN +>parentmass 124.981051711745 +>charge 1 +>rt 432.790999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +124.981051711745 4296.547363281250 +>ms1peaks +52.005894908514 3265.400634765625 +53.013510908959 13106.733398437500 +53.850705653871 1327.061035156250 +54.009389058624 348945.000000000000 +55.006169898270 6124.332519531250 +55.011317455070 6538.428710937500 +55.054331627343 2077.732910156250 +55.934133744738 6508.345214843750 +56.049593965189 1999.699707031250 +56.942184704094 2688.283691406250 +59.049605800481 70253.718750000000 +60.044658666294 10706.690429687500 +61.039619044210 1586.278076171875 +63.997756861684 3941.995605468750 +64.005166169614 4907.884765625000 +67.028913163203 1580.000000000000 +68.011642030602 27597.281250000000 +68.993728986678 12929.603515625000 +69.044696634986 12506.645507812500 +72.936667673711 2191.062988281250 +73.064288768235 1852.000000000000 +76.486322585941 2327.304443359375 +77.038204782362 5884.000000000000 +79.020970020200 14096.371093750000 +80.049138765431 11437.409179687500 +81.937010633269 8800.649414062500 +82.996563663943 9775.875976562500 +87.054866657942 1386.671508789062 +89.506477006513 1856.891357421875 +90.489380614180 1867.000000000000 +91.053607705956 1522.000000000000 +95.952400718089 2411.000000000000 +97.968129951793 7534.000000000000 +100.075098492601 1334.000000000000 +102.090723461138 1696.000000000000 +104.049086460790 3045.739257812500 +105.032948258430 2178.018554687500 +109.942760191152 1389.039428710938 +113.963014550647 1955.283325195312 +114.090880342296 9824.000000000000 +118.085478285355 6071.000000000000 +122.095943650184 3414.491943359375 +122.963053449523 10824.022460937500 +123.091014422132 1667.127319335938 +123.961852610233 1273.000000000000 +124.964467047349 2135.799560546875 +124.981051711745 4296.547363281250 +132.043642930226 93077.242187500000 +133.046777995488 9274.231445312500 +136.020768820120 1683.000000000000 +136.110810804565 1296.000000000000 +141.090222902589 1360.714843750000 +141.112627587411 1461.608520507812 +141.935004916839 1940.239746093750 +141.957609246025 17033.816406250000 +147.090484942279 2411.661132812500 +149.022774177869 5733.046386718750 +149.042316567318 2746.710693359375 +150.054248684273 1437.284790039062 +151.095045034366 2698.686279296875 +151.110908763912 3144.476318359375 +155.069769845772 1649.881591796875 +155.105405759277 1860.793457031250 +155.973140596379 4755.245605468750 +158.153359438729 14516.186523437500 +159.156612007249 1486.367431640625 +160.049846075993 24545.988281250000 +161.052607402490 2286.874755859375 +161.095210153424 1778.371337890625 +167.015155408714 1740.000000000000 +170.095595750468 2643.026123046875 +170.968534800983 4638.000000000000 +171.137187033467 8793.664062500000 +172.138659608019 1674.000000000000 +172.168464035175 1208.633911132812 +173.079743164910 7798.492675781250 +174.991345453773 1573.000000000000 +177.053816341336 1417.014038085938 +178.158055093780 1735.947753906250 +179.105704311835 2197.604980468750 +182.961317763038 2211.718750000000 +186.220205393587 1399.000000000000 +194.116470425084 2855.795654296875 +195.121709243913 1774.128417968750 +198.184491575929 2140.000000000000 +200.199765534300 1398.692871093750 +209.152792656657 1425.000000000000 +217.106381802785 24672.529296875000 +218.109726712595 2594.000000000000 +219.095072568829 2421.334228515625 +228.194355078180 1758.423828125000 +236.167326569908 1392.000000000000 +239.087560169956 3393.000000000000 +242.283100716676 1301.000000000000 +246.861853504396 3967.000000000000 +249.184072418419 1674.044555664062 +250.179850228401 1317.625488281250 +250.969009212760 1272.659667968750 +250.998800627422 2485.986083984375 +252.996506036249 1407.000000000000 +253.914744903944 3247.000000000000 +260.980140443968 31189.000000000000 +261.982652125164 3630.000000000000 +262.976320674948 3030.000000000000 +267.169211061356 1310.111816406250 +277.200326399959 5169.000000000000 +279.093304185450 2011.372070312500 +281.050388682144 1561.000000000000 +292.121055360225 111310.531250000000 +293.123630076529 20278.496093750000 +294.118239620053 37417.625000000000 +295.120516544042 6903.191406250000 +299.181966555803 2788.124755859375 +304.298855657172 1458.000000000000 +318.012599323858 12766.560546875000 +319.014697171275 1763.000000000000 +320.008501629176 1292.000000000000 +324.021279180039 2211.000000000000 +327.007286394326 3510.000000000000 +329.004329094240 3020.000000000000 +339.994441786583 55469.000000000000 +340.996800649447 7731.000000000000 +341.991164319056 5376.000000000000 +351.927480336150 4373.000000000000 +353.925190372111 2157.000000000000 +355.923288991607 1875.234497070312 +355.967623747153 2895.083740234375 +363.069819320259 9600.000000000000 +364.071840904280 1502.000000000000 +365.067263835001 1200.000000000000 +379.933765070569 3274.000000000000 +381.930698322663 2082.000000000000 +445.119022397624 2321.740478515625 +505.851287178680 4210.000000000000 +506.853720407640 1284.000000000000 +522.877826294640 1830.000000000000 +529.887917529630 1402.000000000000 +536.163984165691 5143.000000000000 +537.165630799202 2699.000000000000 +538.162716451736 1997.000000000000 +544.338330991241 1339.000000000000 +546.913670520771 2956.903320312500 +547.912049049860 1201.466308593750 +610.182850595719 2143.000000000000 +611.183650714411 1327.000000000000 +647.152176664637 1285.000000000000 +671.046640090612 3328.000000000000 +673.045642862147 3209.000000000000 +696.940422810442 1799.000000000000 +698.936403714808 1431.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=660 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=660 experiment=3_0 +##scan 29 +##specref ms_run[1]:sample=1 period=1 cycle=660 experiment=3 +56.934367146454 45.000000000000 +56.941247949358 30.000000000000 +57.935581136683 75.000000000000 +>compound 1_0-660004--30--UNKNOWN +>parentmass 253.914744903944 +>charge 1 +>rt 432.790999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +253.914744903944 3247.000000000000 +>ms1peaks +52.005894908514 3265.400634765625 +53.013510908959 13106.733398437500 +53.850705653871 1327.061035156250 +54.009389058624 348945.000000000000 +55.006169898270 6124.332519531250 +55.011317455070 6538.428710937500 +55.054331627343 2077.732910156250 +55.934133744738 6508.345214843750 +56.049593965189 1999.699707031250 +56.942184704094 2688.283691406250 +59.049605800481 70253.718750000000 +60.044658666294 10706.690429687500 +61.039619044210 1586.278076171875 +63.997756861684 3941.995605468750 +64.005166169614 4907.884765625000 +67.028913163203 1580.000000000000 +68.011642030602 27597.281250000000 +68.993728986678 12929.603515625000 +69.044696634986 12506.645507812500 +72.936667673711 2191.062988281250 +73.064288768235 1852.000000000000 +76.486322585941 2327.304443359375 +77.038204782362 5884.000000000000 +79.020970020200 14096.371093750000 +80.049138765431 11437.409179687500 +81.937010633269 8800.649414062500 +82.996563663943 9775.875976562500 +87.054866657942 1386.671508789062 +89.506477006513 1856.891357421875 +90.489380614180 1867.000000000000 +91.053607705956 1522.000000000000 +95.952400718089 2411.000000000000 +97.968129951793 7534.000000000000 +100.075098492601 1334.000000000000 +102.090723461138 1696.000000000000 +104.049086460790 3045.739257812500 +105.032948258430 2178.018554687500 +109.942760191152 1389.039428710938 +113.963014550647 1955.283325195312 +114.090880342296 9824.000000000000 +118.085478285355 6071.000000000000 +122.095943650184 3414.491943359375 +122.963053449523 10824.022460937500 +123.091014422132 1667.127319335938 +123.961852610233 1273.000000000000 +124.964467047349 2135.799560546875 +124.981051711745 4296.547363281250 +132.043642930226 93077.242187500000 +133.046777995488 9274.231445312500 +136.020768820120 1683.000000000000 +136.110810804565 1296.000000000000 +141.090222902589 1360.714843750000 +141.112627587411 1461.608520507812 +141.935004916839 1940.239746093750 +141.957609246025 17033.816406250000 +147.090484942279 2411.661132812500 +149.022774177869 5733.046386718750 +149.042316567318 2746.710693359375 +150.054248684273 1437.284790039062 +151.095045034366 2698.686279296875 +151.110908763912 3144.476318359375 +155.069769845772 1649.881591796875 +155.105405759277 1860.793457031250 +155.973140596379 4755.245605468750 +158.153359438729 14516.186523437500 +159.156612007249 1486.367431640625 +160.049846075993 24545.988281250000 +161.052607402490 2286.874755859375 +161.095210153424 1778.371337890625 +167.015155408714 1740.000000000000 +170.095595750468 2643.026123046875 +170.968534800983 4638.000000000000 +171.137187033467 8793.664062500000 +172.138659608019 1674.000000000000 +172.168464035175 1208.633911132812 +173.079743164910 7798.492675781250 +174.991345453773 1573.000000000000 +177.053816341336 1417.014038085938 +178.158055093780 1735.947753906250 +179.105704311835 2197.604980468750 +182.961317763038 2211.718750000000 +186.220205393587 1399.000000000000 +194.116470425084 2855.795654296875 +195.121709243913 1774.128417968750 +198.184491575929 2140.000000000000 +200.199765534300 1398.692871093750 +209.152792656657 1425.000000000000 +217.106381802785 24672.529296875000 +218.109726712595 2594.000000000000 +219.095072568829 2421.334228515625 +228.194355078180 1758.423828125000 +236.167326569908 1392.000000000000 +239.087560169956 3393.000000000000 +242.283100716676 1301.000000000000 +246.861853504396 3967.000000000000 +249.184072418419 1674.044555664062 +250.179850228401 1317.625488281250 +250.969009212760 1272.659667968750 +250.998800627422 2485.986083984375 +252.996506036249 1407.000000000000 +253.914744903944 3247.000000000000 +260.980140443968 31189.000000000000 +261.982652125164 3630.000000000000 +262.976320674948 3030.000000000000 +267.169211061356 1310.111816406250 +277.200326399959 5169.000000000000 +279.093304185450 2011.372070312500 +281.050388682144 1561.000000000000 +292.121055360225 111310.531250000000 +293.123630076529 20278.496093750000 +294.118239620053 37417.625000000000 +295.120516544042 6903.191406250000 +299.181966555803 2788.124755859375 +304.298855657172 1458.000000000000 +318.012599323858 12766.560546875000 +319.014697171275 1763.000000000000 +320.008501629176 1292.000000000000 +324.021279180039 2211.000000000000 +327.007286394326 3510.000000000000 +329.004329094240 3020.000000000000 +339.994441786583 55469.000000000000 +340.996800649447 7731.000000000000 +341.991164319056 5376.000000000000 +351.927480336150 4373.000000000000 +353.925190372111 2157.000000000000 +355.923288991607 1875.234497070312 +355.967623747153 2895.083740234375 +363.069819320259 9600.000000000000 +364.071840904280 1502.000000000000 +365.067263835001 1200.000000000000 +379.933765070569 3274.000000000000 +381.930698322663 2082.000000000000 +445.119022397624 2321.740478515625 +505.851287178680 4210.000000000000 +506.853720407640 1284.000000000000 +522.877826294640 1830.000000000000 +529.887917529630 1402.000000000000 +536.163984165691 5143.000000000000 +537.165630799202 2699.000000000000 +538.162716451736 1997.000000000000 +544.338330991241 1339.000000000000 +546.913670520771 2956.903320312500 +547.912049049860 1201.466308593750 +610.182850595719 2143.000000000000 +611.183650714411 1327.000000000000 +647.152176664637 1285.000000000000 +671.046640090612 3328.000000000000 +673.045642862147 3209.000000000000 +696.940422810442 1799.000000000000 +698.936403714808 1431.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=660 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=660 experiment=4_0 +##scan 30 +##specref ms_run[1]:sample=1 period=1 cycle=660 experiment=4 +150.851403748292 298.000000000000 +182.874872183224 150.000000000000 +>compound 1_0-660006--32--UNKNOWN +>parentmass 351.927480336150 +>charge 1 +>rt 432.790999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +351.927480336150 4373.000000000000 +>ms1peaks +52.005894908514 3265.400634765625 +53.013510908959 13106.733398437500 +53.850705653871 1327.061035156250 +54.009389058624 348945.000000000000 +55.006169898270 6124.332519531250 +55.011317455070 6538.428710937500 +55.054331627343 2077.732910156250 +55.934133744738 6508.345214843750 +56.049593965189 1999.699707031250 +56.942184704094 2688.283691406250 +59.049605800481 70253.718750000000 +60.044658666294 10706.690429687500 +61.039619044210 1586.278076171875 +63.997756861684 3941.995605468750 +64.005166169614 4907.884765625000 +67.028913163203 1580.000000000000 +68.011642030602 27597.281250000000 +68.993728986678 12929.603515625000 +69.044696634986 12506.645507812500 +72.936667673711 2191.062988281250 +73.064288768235 1852.000000000000 +76.486322585941 2327.304443359375 +77.038204782362 5884.000000000000 +79.020970020200 14096.371093750000 +80.049138765431 11437.409179687500 +81.937010633269 8800.649414062500 +82.996563663943 9775.875976562500 +87.054866657942 1386.671508789062 +89.506477006513 1856.891357421875 +90.489380614180 1867.000000000000 +91.053607705956 1522.000000000000 +95.952400718089 2411.000000000000 +97.968129951793 7534.000000000000 +100.075098492601 1334.000000000000 +102.090723461138 1696.000000000000 +104.049086460790 3045.739257812500 +105.032948258430 2178.018554687500 +109.942760191152 1389.039428710938 +113.963014550647 1955.283325195312 +114.090880342296 9824.000000000000 +118.085478285355 6071.000000000000 +122.095943650184 3414.491943359375 +122.963053449523 10824.022460937500 +123.091014422132 1667.127319335938 +123.961852610233 1273.000000000000 +124.964467047349 2135.799560546875 +124.981051711745 4296.547363281250 +132.043642930226 93077.242187500000 +133.046777995488 9274.231445312500 +136.020768820120 1683.000000000000 +136.110810804565 1296.000000000000 +141.090222902589 1360.714843750000 +141.112627587411 1461.608520507812 +141.935004916839 1940.239746093750 +141.957609246025 17033.816406250000 +147.090484942279 2411.661132812500 +149.022774177869 5733.046386718750 +149.042316567318 2746.710693359375 +150.054248684273 1437.284790039062 +151.095045034366 2698.686279296875 +151.110908763912 3144.476318359375 +155.069769845772 1649.881591796875 +155.105405759277 1860.793457031250 +155.973140596379 4755.245605468750 +158.153359438729 14516.186523437500 +159.156612007249 1486.367431640625 +160.049846075993 24545.988281250000 +161.052607402490 2286.874755859375 +161.095210153424 1778.371337890625 +167.015155408714 1740.000000000000 +170.095595750468 2643.026123046875 +170.968534800983 4638.000000000000 +171.137187033467 8793.664062500000 +172.138659608019 1674.000000000000 +172.168464035175 1208.633911132812 +173.079743164910 7798.492675781250 +174.991345453773 1573.000000000000 +177.053816341336 1417.014038085938 +178.158055093780 1735.947753906250 +179.105704311835 2197.604980468750 +182.961317763038 2211.718750000000 +186.220205393587 1399.000000000000 +194.116470425084 2855.795654296875 +195.121709243913 1774.128417968750 +198.184491575929 2140.000000000000 +200.199765534300 1398.692871093750 +209.152792656657 1425.000000000000 +217.106381802785 24672.529296875000 +218.109726712595 2594.000000000000 +219.095072568829 2421.334228515625 +228.194355078180 1758.423828125000 +236.167326569908 1392.000000000000 +239.087560169956 3393.000000000000 +242.283100716676 1301.000000000000 +246.861853504396 3967.000000000000 +249.184072418419 1674.044555664062 +250.179850228401 1317.625488281250 +250.969009212760 1272.659667968750 +250.998800627422 2485.986083984375 +252.996506036249 1407.000000000000 +253.914744903944 3247.000000000000 +260.980140443968 31189.000000000000 +261.982652125164 3630.000000000000 +262.976320674948 3030.000000000000 +267.169211061356 1310.111816406250 +277.200326399959 5169.000000000000 +279.093304185450 2011.372070312500 +281.050388682144 1561.000000000000 +292.121055360225 111310.531250000000 +293.123630076529 20278.496093750000 +294.118239620053 37417.625000000000 +295.120516544042 6903.191406250000 +299.181966555803 2788.124755859375 +304.298855657172 1458.000000000000 +318.012599323858 12766.560546875000 +319.014697171275 1763.000000000000 +320.008501629176 1292.000000000000 +324.021279180039 2211.000000000000 +327.007286394326 3510.000000000000 +329.004329094240 3020.000000000000 +339.994441786583 55469.000000000000 +340.996800649447 7731.000000000000 +341.991164319056 5376.000000000000 +351.927480336150 4373.000000000000 +353.925190372111 2157.000000000000 +355.923288991607 1875.234497070312 +355.967623747153 2895.083740234375 +363.069819320259 9600.000000000000 +364.071840904280 1502.000000000000 +365.067263835001 1200.000000000000 +379.933765070569 3274.000000000000 +381.930698322663 2082.000000000000 +445.119022397624 2321.740478515625 +505.851287178680 4210.000000000000 +506.853720407640 1284.000000000000 +522.877826294640 1830.000000000000 +529.887917529630 1402.000000000000 +536.163984165691 5143.000000000000 +537.165630799202 2699.000000000000 +538.162716451736 1997.000000000000 +544.338330991241 1339.000000000000 +546.913670520771 2956.903320312500 +547.912049049860 1201.466308593750 +610.182850595719 2143.000000000000 +611.183650714411 1327.000000000000 +647.152176664637 1285.000000000000 +671.046640090612 3328.000000000000 +673.045642862147 3209.000000000000 +696.940422810442 1799.000000000000 +698.936403714808 1431.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=660 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=660 experiment=6_0 +##scan 32 +##specref ms_run[1]:sample=1 period=1 cycle=660 experiment=6 +81.071578582130 13.000000000000 +125.015139058731 30.000000000000 +188.922621292832 30.000000000000 +198.931691566578 30.000000000000 +215.925863286823 13.000000000000 +232.899496436580 13.000000000000 +248.917848318342 13.000000000000 +>compound 1_0-660007--33--UNKNOWN +>parentmass 355.967623747153 +>charge 1 +>rt 432.790999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +355.967623747153 2895.083740234375 +>ms1peaks +52.005894908514 3265.400634765625 +53.013510908959 13106.733398437500 +53.850705653871 1327.061035156250 +54.009389058624 348945.000000000000 +55.006169898270 6124.332519531250 +55.011317455070 6538.428710937500 +55.054331627343 2077.732910156250 +55.934133744738 6508.345214843750 +56.049593965189 1999.699707031250 +56.942184704094 2688.283691406250 +59.049605800481 70253.718750000000 +60.044658666294 10706.690429687500 +61.039619044210 1586.278076171875 +63.997756861684 3941.995605468750 +64.005166169614 4907.884765625000 +67.028913163203 1580.000000000000 +68.011642030602 27597.281250000000 +68.993728986678 12929.603515625000 +69.044696634986 12506.645507812500 +72.936667673711 2191.062988281250 +73.064288768235 1852.000000000000 +76.486322585941 2327.304443359375 +77.038204782362 5884.000000000000 +79.020970020200 14096.371093750000 +80.049138765431 11437.409179687500 +81.937010633269 8800.649414062500 +82.996563663943 9775.875976562500 +87.054866657942 1386.671508789062 +89.506477006513 1856.891357421875 +90.489380614180 1867.000000000000 +91.053607705956 1522.000000000000 +95.952400718089 2411.000000000000 +97.968129951793 7534.000000000000 +100.075098492601 1334.000000000000 +102.090723461138 1696.000000000000 +104.049086460790 3045.739257812500 +105.032948258430 2178.018554687500 +109.942760191152 1389.039428710938 +113.963014550647 1955.283325195312 +114.090880342296 9824.000000000000 +118.085478285355 6071.000000000000 +122.095943650184 3414.491943359375 +122.963053449523 10824.022460937500 +123.091014422132 1667.127319335938 +123.961852610233 1273.000000000000 +124.964467047349 2135.799560546875 +124.981051711745 4296.547363281250 +132.043642930226 93077.242187500000 +133.046777995488 9274.231445312500 +136.020768820120 1683.000000000000 +136.110810804565 1296.000000000000 +141.090222902589 1360.714843750000 +141.112627587411 1461.608520507812 +141.935004916839 1940.239746093750 +141.957609246025 17033.816406250000 +147.090484942279 2411.661132812500 +149.022774177869 5733.046386718750 +149.042316567318 2746.710693359375 +150.054248684273 1437.284790039062 +151.095045034366 2698.686279296875 +151.110908763912 3144.476318359375 +155.069769845772 1649.881591796875 +155.105405759277 1860.793457031250 +155.973140596379 4755.245605468750 +158.153359438729 14516.186523437500 +159.156612007249 1486.367431640625 +160.049846075993 24545.988281250000 +161.052607402490 2286.874755859375 +161.095210153424 1778.371337890625 +167.015155408714 1740.000000000000 +170.095595750468 2643.026123046875 +170.968534800983 4638.000000000000 +171.137187033467 8793.664062500000 +172.138659608019 1674.000000000000 +172.168464035175 1208.633911132812 +173.079743164910 7798.492675781250 +174.991345453773 1573.000000000000 +177.053816341336 1417.014038085938 +178.158055093780 1735.947753906250 +179.105704311835 2197.604980468750 +182.961317763038 2211.718750000000 +186.220205393587 1399.000000000000 +194.116470425084 2855.795654296875 +195.121709243913 1774.128417968750 +198.184491575929 2140.000000000000 +200.199765534300 1398.692871093750 +209.152792656657 1425.000000000000 +217.106381802785 24672.529296875000 +218.109726712595 2594.000000000000 +219.095072568829 2421.334228515625 +228.194355078180 1758.423828125000 +236.167326569908 1392.000000000000 +239.087560169956 3393.000000000000 +242.283100716676 1301.000000000000 +246.861853504396 3967.000000000000 +249.184072418419 1674.044555664062 +250.179850228401 1317.625488281250 +250.969009212760 1272.659667968750 +250.998800627422 2485.986083984375 +252.996506036249 1407.000000000000 +253.914744903944 3247.000000000000 +260.980140443968 31189.000000000000 +261.982652125164 3630.000000000000 +262.976320674948 3030.000000000000 +267.169211061356 1310.111816406250 +277.200326399959 5169.000000000000 +279.093304185450 2011.372070312500 +281.050388682144 1561.000000000000 +292.121055360225 111310.531250000000 +293.123630076529 20278.496093750000 +294.118239620053 37417.625000000000 +295.120516544042 6903.191406250000 +299.181966555803 2788.124755859375 +304.298855657172 1458.000000000000 +318.012599323858 12766.560546875000 +319.014697171275 1763.000000000000 +320.008501629176 1292.000000000000 +324.021279180039 2211.000000000000 +327.007286394326 3510.000000000000 +329.004329094240 3020.000000000000 +339.994441786583 55469.000000000000 +340.996800649447 7731.000000000000 +341.991164319056 5376.000000000000 +351.927480336150 4373.000000000000 +353.925190372111 2157.000000000000 +355.923288991607 1875.234497070312 +355.967623747153 2895.083740234375 +363.069819320259 9600.000000000000 +364.071840904280 1502.000000000000 +365.067263835001 1200.000000000000 +379.933765070569 3274.000000000000 +381.930698322663 2082.000000000000 +445.119022397624 2321.740478515625 +505.851287178680 4210.000000000000 +506.853720407640 1284.000000000000 +522.877826294640 1830.000000000000 +529.887917529630 1402.000000000000 +536.163984165691 5143.000000000000 +537.165630799202 2699.000000000000 +538.162716451736 1997.000000000000 +544.338330991241 1339.000000000000 +546.913670520771 2956.903320312500 +547.912049049860 1201.466308593750 +610.182850595719 2143.000000000000 +611.183650714411 1327.000000000000 +647.152176664637 1285.000000000000 +671.046640090612 3328.000000000000 +673.045642862147 3209.000000000000 +696.940422810442 1799.000000000000 +698.936403714808 1431.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=660 experiment=7 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=660 experiment=7_0 +##scan 33 +##specref ms_run[1]:sample=1 period=1 cycle=660 experiment=7 +161.094948222414 75.000000000000 +249.184994365580 30.000000000000 +>compound 1_0-660008--34--UNKNOWN +>parentmass 379.933765070569 +>charge 1 +>rt 432.790999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +379.933765070569 3274.000000000000 +>ms1peaks +52.005894908514 3265.400634765625 +53.013510908959 13106.733398437500 +53.850705653871 1327.061035156250 +54.009389058624 348945.000000000000 +55.006169898270 6124.332519531250 +55.011317455070 6538.428710937500 +55.054331627343 2077.732910156250 +55.934133744738 6508.345214843750 +56.049593965189 1999.699707031250 +56.942184704094 2688.283691406250 +59.049605800481 70253.718750000000 +60.044658666294 10706.690429687500 +61.039619044210 1586.278076171875 +63.997756861684 3941.995605468750 +64.005166169614 4907.884765625000 +67.028913163203 1580.000000000000 +68.011642030602 27597.281250000000 +68.993728986678 12929.603515625000 +69.044696634986 12506.645507812500 +72.936667673711 2191.062988281250 +73.064288768235 1852.000000000000 +76.486322585941 2327.304443359375 +77.038204782362 5884.000000000000 +79.020970020200 14096.371093750000 +80.049138765431 11437.409179687500 +81.937010633269 8800.649414062500 +82.996563663943 9775.875976562500 +87.054866657942 1386.671508789062 +89.506477006513 1856.891357421875 +90.489380614180 1867.000000000000 +91.053607705956 1522.000000000000 +95.952400718089 2411.000000000000 +97.968129951793 7534.000000000000 +100.075098492601 1334.000000000000 +102.090723461138 1696.000000000000 +104.049086460790 3045.739257812500 +105.032948258430 2178.018554687500 +109.942760191152 1389.039428710938 +113.963014550647 1955.283325195312 +114.090880342296 9824.000000000000 +118.085478285355 6071.000000000000 +122.095943650184 3414.491943359375 +122.963053449523 10824.022460937500 +123.091014422132 1667.127319335938 +123.961852610233 1273.000000000000 +124.964467047349 2135.799560546875 +124.981051711745 4296.547363281250 +132.043642930226 93077.242187500000 +133.046777995488 9274.231445312500 +136.020768820120 1683.000000000000 +136.110810804565 1296.000000000000 +141.090222902589 1360.714843750000 +141.112627587411 1461.608520507812 +141.935004916839 1940.239746093750 +141.957609246025 17033.816406250000 +147.090484942279 2411.661132812500 +149.022774177869 5733.046386718750 +149.042316567318 2746.710693359375 +150.054248684273 1437.284790039062 +151.095045034366 2698.686279296875 +151.110908763912 3144.476318359375 +155.069769845772 1649.881591796875 +155.105405759277 1860.793457031250 +155.973140596379 4755.245605468750 +158.153359438729 14516.186523437500 +159.156612007249 1486.367431640625 +160.049846075993 24545.988281250000 +161.052607402490 2286.874755859375 +161.095210153424 1778.371337890625 +167.015155408714 1740.000000000000 +170.095595750468 2643.026123046875 +170.968534800983 4638.000000000000 +171.137187033467 8793.664062500000 +172.138659608019 1674.000000000000 +172.168464035175 1208.633911132812 +173.079743164910 7798.492675781250 +174.991345453773 1573.000000000000 +177.053816341336 1417.014038085938 +178.158055093780 1735.947753906250 +179.105704311835 2197.604980468750 +182.961317763038 2211.718750000000 +186.220205393587 1399.000000000000 +194.116470425084 2855.795654296875 +195.121709243913 1774.128417968750 +198.184491575929 2140.000000000000 +200.199765534300 1398.692871093750 +209.152792656657 1425.000000000000 +217.106381802785 24672.529296875000 +218.109726712595 2594.000000000000 +219.095072568829 2421.334228515625 +228.194355078180 1758.423828125000 +236.167326569908 1392.000000000000 +239.087560169956 3393.000000000000 +242.283100716676 1301.000000000000 +246.861853504396 3967.000000000000 +249.184072418419 1674.044555664062 +250.179850228401 1317.625488281250 +250.969009212760 1272.659667968750 +250.998800627422 2485.986083984375 +252.996506036249 1407.000000000000 +253.914744903944 3247.000000000000 +260.980140443968 31189.000000000000 +261.982652125164 3630.000000000000 +262.976320674948 3030.000000000000 +267.169211061356 1310.111816406250 +277.200326399959 5169.000000000000 +279.093304185450 2011.372070312500 +281.050388682144 1561.000000000000 +292.121055360225 111310.531250000000 +293.123630076529 20278.496093750000 +294.118239620053 37417.625000000000 +295.120516544042 6903.191406250000 +299.181966555803 2788.124755859375 +304.298855657172 1458.000000000000 +318.012599323858 12766.560546875000 +319.014697171275 1763.000000000000 +320.008501629176 1292.000000000000 +324.021279180039 2211.000000000000 +327.007286394326 3510.000000000000 +329.004329094240 3020.000000000000 +339.994441786583 55469.000000000000 +340.996800649447 7731.000000000000 +341.991164319056 5376.000000000000 +351.927480336150 4373.000000000000 +353.925190372111 2157.000000000000 +355.923288991607 1875.234497070312 +355.967623747153 2895.083740234375 +363.069819320259 9600.000000000000 +364.071840904280 1502.000000000000 +365.067263835001 1200.000000000000 +379.933765070569 3274.000000000000 +381.930698322663 2082.000000000000 +445.119022397624 2321.740478515625 +505.851287178680 4210.000000000000 +506.853720407640 1284.000000000000 +522.877826294640 1830.000000000000 +529.887917529630 1402.000000000000 +536.163984165691 5143.000000000000 +537.165630799202 2699.000000000000 +538.162716451736 1997.000000000000 +544.338330991241 1339.000000000000 +546.913670520771 2956.903320312500 +547.912049049860 1201.466308593750 +610.182850595719 2143.000000000000 +611.183650714411 1327.000000000000 +647.152176664637 1285.000000000000 +671.046640090612 3328.000000000000 +673.045642862147 3209.000000000000 +696.940422810442 1799.000000000000 +698.936403714808 1431.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=660 experiment=8 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=660 experiment=8_0 +##scan 34 +##specref ms_run[1]:sample=1 period=1 cycle=660 experiment=8 +77.038400992655 13.000000000000 +93.008038800226 45.000000000000 +104.052610528955 30.000000000000 +110.934028957951 13.000000000000 +124.990932131726 13.000000000000 +132.048785523388 30.000000000000 +148.022413441678 13.000000000000 +157.052815679658 13.000000000000 +188.917655606726 60.000000000000 +215.930861887584 30.000000000000 +>compound 1_0-660009--35--UNKNOWN +>parentmass 671.046640090612 +>charge 1 +>rt 432.790999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +671.046640090612 3328.000000000000 +>ms1peaks +52.005894908514 3265.400634765625 +53.013510908959 13106.733398437500 +53.850705653871 1327.061035156250 +54.009389058624 348945.000000000000 +55.006169898270 6124.332519531250 +55.011317455070 6538.428710937500 +55.054331627343 2077.732910156250 +55.934133744738 6508.345214843750 +56.049593965189 1999.699707031250 +56.942184704094 2688.283691406250 +59.049605800481 70253.718750000000 +60.044658666294 10706.690429687500 +61.039619044210 1586.278076171875 +63.997756861684 3941.995605468750 +64.005166169614 4907.884765625000 +67.028913163203 1580.000000000000 +68.011642030602 27597.281250000000 +68.993728986678 12929.603515625000 +69.044696634986 12506.645507812500 +72.936667673711 2191.062988281250 +73.064288768235 1852.000000000000 +76.486322585941 2327.304443359375 +77.038204782362 5884.000000000000 +79.020970020200 14096.371093750000 +80.049138765431 11437.409179687500 +81.937010633269 8800.649414062500 +82.996563663943 9775.875976562500 +87.054866657942 1386.671508789062 +89.506477006513 1856.891357421875 +90.489380614180 1867.000000000000 +91.053607705956 1522.000000000000 +95.952400718089 2411.000000000000 +97.968129951793 7534.000000000000 +100.075098492601 1334.000000000000 +102.090723461138 1696.000000000000 +104.049086460790 3045.739257812500 +105.032948258430 2178.018554687500 +109.942760191152 1389.039428710938 +113.963014550647 1955.283325195312 +114.090880342296 9824.000000000000 +118.085478285355 6071.000000000000 +122.095943650184 3414.491943359375 +122.963053449523 10824.022460937500 +123.091014422132 1667.127319335938 +123.961852610233 1273.000000000000 +124.964467047349 2135.799560546875 +124.981051711745 4296.547363281250 +132.043642930226 93077.242187500000 +133.046777995488 9274.231445312500 +136.020768820120 1683.000000000000 +136.110810804565 1296.000000000000 +141.090222902589 1360.714843750000 +141.112627587411 1461.608520507812 +141.935004916839 1940.239746093750 +141.957609246025 17033.816406250000 +147.090484942279 2411.661132812500 +149.022774177869 5733.046386718750 +149.042316567318 2746.710693359375 +150.054248684273 1437.284790039062 +151.095045034366 2698.686279296875 +151.110908763912 3144.476318359375 +155.069769845772 1649.881591796875 +155.105405759277 1860.793457031250 +155.973140596379 4755.245605468750 +158.153359438729 14516.186523437500 +159.156612007249 1486.367431640625 +160.049846075993 24545.988281250000 +161.052607402490 2286.874755859375 +161.095210153424 1778.371337890625 +167.015155408714 1740.000000000000 +170.095595750468 2643.026123046875 +170.968534800983 4638.000000000000 +171.137187033467 8793.664062500000 +172.138659608019 1674.000000000000 +172.168464035175 1208.633911132812 +173.079743164910 7798.492675781250 +174.991345453773 1573.000000000000 +177.053816341336 1417.014038085938 +178.158055093780 1735.947753906250 +179.105704311835 2197.604980468750 +182.961317763038 2211.718750000000 +186.220205393587 1399.000000000000 +194.116470425084 2855.795654296875 +195.121709243913 1774.128417968750 +198.184491575929 2140.000000000000 +200.199765534300 1398.692871093750 +209.152792656657 1425.000000000000 +217.106381802785 24672.529296875000 +218.109726712595 2594.000000000000 +219.095072568829 2421.334228515625 +228.194355078180 1758.423828125000 +236.167326569908 1392.000000000000 +239.087560169956 3393.000000000000 +242.283100716676 1301.000000000000 +246.861853504396 3967.000000000000 +249.184072418419 1674.044555664062 +250.179850228401 1317.625488281250 +250.969009212760 1272.659667968750 +250.998800627422 2485.986083984375 +252.996506036249 1407.000000000000 +253.914744903944 3247.000000000000 +260.980140443968 31189.000000000000 +261.982652125164 3630.000000000000 +262.976320674948 3030.000000000000 +267.169211061356 1310.111816406250 +277.200326399959 5169.000000000000 +279.093304185450 2011.372070312500 +281.050388682144 1561.000000000000 +292.121055360225 111310.531250000000 +293.123630076529 20278.496093750000 +294.118239620053 37417.625000000000 +295.120516544042 6903.191406250000 +299.181966555803 2788.124755859375 +304.298855657172 1458.000000000000 +318.012599323858 12766.560546875000 +319.014697171275 1763.000000000000 +320.008501629176 1292.000000000000 +324.021279180039 2211.000000000000 +327.007286394326 3510.000000000000 +329.004329094240 3020.000000000000 +339.994441786583 55469.000000000000 +340.996800649447 7731.000000000000 +341.991164319056 5376.000000000000 +351.927480336150 4373.000000000000 +353.925190372111 2157.000000000000 +355.923288991607 1875.234497070312 +355.967623747153 2895.083740234375 +363.069819320259 9600.000000000000 +364.071840904280 1502.000000000000 +365.067263835001 1200.000000000000 +379.933765070569 3274.000000000000 +381.930698322663 2082.000000000000 +445.119022397624 2321.740478515625 +505.851287178680 4210.000000000000 +506.853720407640 1284.000000000000 +522.877826294640 1830.000000000000 +529.887917529630 1402.000000000000 +536.163984165691 5143.000000000000 +537.165630799202 2699.000000000000 +538.162716451736 1997.000000000000 +544.338330991241 1339.000000000000 +546.913670520771 2956.903320312500 +547.912049049860 1201.466308593750 +610.182850595719 2143.000000000000 +611.183650714411 1327.000000000000 +647.152176664637 1285.000000000000 +671.046640090612 3328.000000000000 +673.045642862147 3209.000000000000 +696.940422810442 1799.000000000000 +698.936403714808 1431.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=660 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=660 experiment=9_0 +##scan 35 +##specref ms_run[1]:sample=1 period=1 cycle=660 experiment=9 +132.045075030038 60.000000000000 +209.952700754335 15.000000000000 +215.930298294557 105.000000000000 +227.925487255539 13.000000000000 +241.966988126378 30.000000000000 +243.942689713958 30.000000000000 +295.917493331121 30.000000000000 +351.929334312329 575.000000000000 +379.933352013020 30.000000000000 +379.971207208409 30.000000000000 +>compound 1_0-661002--37--UNKNOWN +>parentmass 171.137329533636 +>charge 1 +>rt 433.717000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +171.137329533636 9794.265625000000 +>ms1peaks +52.005486844196 2797.312255859375 +53.013452941613 13289.114257812500 +53.850392691129 1182.554077148438 +54.009302603618 341601.031250000000 +55.005911181832 5603.758300781250 +55.011355581201 5959.661132812500 +55.054189724209 2205.188476562500 +55.933928601241 6093.526367187500 +56.941939565668 2798.683593750000 +59.049443593556 67299.640625000000 +60.044262774734 8968.761718750000 +61.039204580633 1571.923095703125 +63.997813637547 4075.065429687500 +64.004662670356 4416.795898437500 +68.011501134588 27277.638671875000 +68.993585500338 12264.906250000000 +69.044393197123 13147.085937500000 +72.043949942055 1214.000000000000 +72.936545824901 2386.261962890625 +73.064141392327 1809.102661132812 +76.486217265459 2318.000000000000 +77.037914467348 2784.771240234375 +79.020708818127 18172.382812500000 +80.048894299954 13850.358398437500 +81.936654565436 8646.963867187500 +82.996013274860 9151.881835937500 +87.042952193812 1456.767700195312 +87.054623008241 1774.283325195312 +89.069755450540 1371.091674804688 +89.506205030598 1420.000000000000 +90.488660539027 2076.000000000000 +91.053504137418 1574.000000000000 +95.952180653762 2284.000000000000 +97.967884579650 7862.442871093750 +100.074476020240 1221.000000000000 +102.090415152097 1454.000000000000 +104.048216330484 1263.218750000000 +109.942447219977 1590.828491210938 +113.962324334339 2023.251098632812 +114.090394525983 11631.025390625000 +118.085045416936 6564.007812500000 +122.095214148430 3526.000000000000 +122.962880463908 10844.000000000000 +123.090776414574 1696.206054687500 +123.961832528390 1236.000000000000 +124.981223378162 1673.021850585938 +130.158379717264 1405.000000000000 +132.043434483782 41526.472656250000 +133.046757663549 4137.170898437500 +136.020231843939 1752.000000000000 +139.962610586396 1241.217529296875 +141.090622201525 1287.143798828125 +141.112120261557 1304.199096679688 +141.957439283701 16426.482421875000 +147.090642325371 2533.530273437500 +149.022533327810 5845.030273437500 +149.040994237727 2756.796875000000 +151.095191450521 2425.737792968750 +151.109945034180 2827.097656250000 +155.069776946854 1748.044799804688 +155.105248734220 1748.282226562500 +155.973048592075 4793.413085937500 +158.153052811157 14275.985351562500 +159.139068434260 1227.674072265625 +159.156070191539 1425.673461914062 +160.049271893755 12624.257812500000 +161.053296289892 1271.000000000000 +161.096235386258 1578.421630859375 +164.142270683686 1217.000000000000 +170.094887803481 2717.008544921875 +170.968792401520 2390.000000000000 +171.137329533636 9794.265625000000 +172.136840902698 2122.000000000000 +172.168466786332 1309.672119140625 +173.079514403953 7730.000000000000 +174.990695602365 1337.972656250000 +177.054653270806 1487.000000000000 +178.158403800321 1799.193237304688 +179.105583290233 3646.174560546875 +182.960823278834 1922.372802734375 +182.986018115359 1341.532470703125 +186.220896557034 1469.000000000000 +194.116385994522 3228.431884765625 +195.101721591860 1761.497314453125 +195.120840048138 2139.872070312500 +198.184759772344 2245.000000000000 +200.198358143313 1177.926513671875 +209.152634370621 1389.980712890625 +217.106353356190 24341.000000000000 +218.109655666691 2974.806884765625 +219.095036364843 2223.419921875000 +224.127894084409 1278.478759765625 +228.195273215592 1674.000000000000 +236.167137123771 1456.000000000000 +239.088416675585 3867.606689453125 +242.282513583885 1277.000000000000 +246.861185203855 3901.000000000000 +249.182714411045 1537.000000000000 +250.178392714940 1258.000000000000 +250.999007399485 2502.000000000000 +252.996469033063 1435.000000000000 +253.914671653353 1239.000000000000 +260.979753981104 14440.506835937500 +261.982083120224 1659.000000000000 +262.976384632325 1466.000000000000 +267.171781473257 1284.615478515625 +277.200008538434 5514.000000000000 +279.092542460055 2184.000000000000 +281.050041935527 1782.000000000000 +292.121077385471 225397.000000000000 +293.123076709567 37677.234375000000 +294.118496498528 72202.039062500000 +295.120481083763 12277.000000000000 +296.122922541254 1529.722534179688 +299.182168197771 3169.000000000000 +304.298453938228 1206.488281250000 +318.011978476534 6627.000000000000 +322.257925183826 1680.000000000000 +327.007860740219 3296.000000000000 +329.003921677419 3051.000000000000 +331.002277995733 1209.000000000000 +339.994321798017 30539.392578125000 +340.996727216497 4443.000000000000 +341.991298278029 3214.898193359375 +351.926939354897 2576.000000000000 +353.925624186681 1528.262939453125 +355.967794750582 1676.749389648438 +363.070157834182 5926.000000000000 +379.934179014433 2532.000000000000 +381.930242914518 1263.000000000000 +445.118947651762 2644.000000000000 +505.851615177973 4750.000000000000 +522.877878746579 2136.000000000000 +529.887991001196 1339.000000000000 +536.163681670628 5319.764160156250 +537.164689652602 2801.000000000000 +538.163060633683 2127.000000000000 +544.338383816682 1327.000000000000 +546.914418903411 2791.000000000000 +547.911772088961 1197.000000000000 +610.182643718635 2184.000000000000 +611.184358419061 1263.000000000000 +645.154326732470 4086.000000000000 +646.158388244596 1322.000000000000 +647.153421689114 4193.000000000000 +648.155059129677 1544.000000000000 +649.151941293891 1547.000000000000 +671.046678825629 4046.000000000000 +672.049764904672 1509.000000000000 +673.044229478168 4164.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=661 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=661 experiment=2_0 +##scan 37 +##specref ms_run[1]:sample=1 period=1 cycle=661 experiment=2 +55.054126973401 60.000000000000 +56.055312067439 13.000000000000 +60.988401024091 13.000000000000 +67.052157228521 13.000000000000 +72.043995913709 30.000000000000 +72.936981743619 30.000000000000 +73.047124126098 13.000000000000 +78.994584928562 30.000000000000 +88.905920960920 30.000000000000 +>compound 1_0-661003--38--UNKNOWN +>parentmass 277.200008538434 +>charge 1 +>rt 433.717000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +277.200008538434 5514.000000000000 +>ms1peaks +52.005486844196 2797.312255859375 +53.013452941613 13289.114257812500 +53.850392691129 1182.554077148438 +54.009302603618 341601.031250000000 +55.005911181832 5603.758300781250 +55.011355581201 5959.661132812500 +55.054189724209 2205.188476562500 +55.933928601241 6093.526367187500 +56.941939565668 2798.683593750000 +59.049443593556 67299.640625000000 +60.044262774734 8968.761718750000 +61.039204580633 1571.923095703125 +63.997813637547 4075.065429687500 +64.004662670356 4416.795898437500 +68.011501134588 27277.638671875000 +68.993585500338 12264.906250000000 +69.044393197123 13147.085937500000 +72.043949942055 1214.000000000000 +72.936545824901 2386.261962890625 +73.064141392327 1809.102661132812 +76.486217265459 2318.000000000000 +77.037914467348 2784.771240234375 +79.020708818127 18172.382812500000 +80.048894299954 13850.358398437500 +81.936654565436 8646.963867187500 +82.996013274860 9151.881835937500 +87.042952193812 1456.767700195312 +87.054623008241 1774.283325195312 +89.069755450540 1371.091674804688 +89.506205030598 1420.000000000000 +90.488660539027 2076.000000000000 +91.053504137418 1574.000000000000 +95.952180653762 2284.000000000000 +97.967884579650 7862.442871093750 +100.074476020240 1221.000000000000 +102.090415152097 1454.000000000000 +104.048216330484 1263.218750000000 +109.942447219977 1590.828491210938 +113.962324334339 2023.251098632812 +114.090394525983 11631.025390625000 +118.085045416936 6564.007812500000 +122.095214148430 3526.000000000000 +122.962880463908 10844.000000000000 +123.090776414574 1696.206054687500 +123.961832528390 1236.000000000000 +124.981223378162 1673.021850585938 +130.158379717264 1405.000000000000 +132.043434483782 41526.472656250000 +133.046757663549 4137.170898437500 +136.020231843939 1752.000000000000 +139.962610586396 1241.217529296875 +141.090622201525 1287.143798828125 +141.112120261557 1304.199096679688 +141.957439283701 16426.482421875000 +147.090642325371 2533.530273437500 +149.022533327810 5845.030273437500 +149.040994237727 2756.796875000000 +151.095191450521 2425.737792968750 +151.109945034180 2827.097656250000 +155.069776946854 1748.044799804688 +155.105248734220 1748.282226562500 +155.973048592075 4793.413085937500 +158.153052811157 14275.985351562500 +159.139068434260 1227.674072265625 +159.156070191539 1425.673461914062 +160.049271893755 12624.257812500000 +161.053296289892 1271.000000000000 +161.096235386258 1578.421630859375 +164.142270683686 1217.000000000000 +170.094887803481 2717.008544921875 +170.968792401520 2390.000000000000 +171.137329533636 9794.265625000000 +172.136840902698 2122.000000000000 +172.168466786332 1309.672119140625 +173.079514403953 7730.000000000000 +174.990695602365 1337.972656250000 +177.054653270806 1487.000000000000 +178.158403800321 1799.193237304688 +179.105583290233 3646.174560546875 +182.960823278834 1922.372802734375 +182.986018115359 1341.532470703125 +186.220896557034 1469.000000000000 +194.116385994522 3228.431884765625 +195.101721591860 1761.497314453125 +195.120840048138 2139.872070312500 +198.184759772344 2245.000000000000 +200.198358143313 1177.926513671875 +209.152634370621 1389.980712890625 +217.106353356190 24341.000000000000 +218.109655666691 2974.806884765625 +219.095036364843 2223.419921875000 +224.127894084409 1278.478759765625 +228.195273215592 1674.000000000000 +236.167137123771 1456.000000000000 +239.088416675585 3867.606689453125 +242.282513583885 1277.000000000000 +246.861185203855 3901.000000000000 +249.182714411045 1537.000000000000 +250.178392714940 1258.000000000000 +250.999007399485 2502.000000000000 +252.996469033063 1435.000000000000 +253.914671653353 1239.000000000000 +260.979753981104 14440.506835937500 +261.982083120224 1659.000000000000 +262.976384632325 1466.000000000000 +267.171781473257 1284.615478515625 +277.200008538434 5514.000000000000 +279.092542460055 2184.000000000000 +281.050041935527 1782.000000000000 +292.121077385471 225397.000000000000 +293.123076709567 37677.234375000000 +294.118496498528 72202.039062500000 +295.120481083763 12277.000000000000 +296.122922541254 1529.722534179688 +299.182168197771 3169.000000000000 +304.298453938228 1206.488281250000 +318.011978476534 6627.000000000000 +322.257925183826 1680.000000000000 +327.007860740219 3296.000000000000 +329.003921677419 3051.000000000000 +331.002277995733 1209.000000000000 +339.994321798017 30539.392578125000 +340.996727216497 4443.000000000000 +341.991298278029 3214.898193359375 +351.926939354897 2576.000000000000 +353.925624186681 1528.262939453125 +355.967794750582 1676.749389648438 +363.070157834182 5926.000000000000 +379.934179014433 2532.000000000000 +381.930242914518 1263.000000000000 +445.118947651762 2644.000000000000 +505.851615177973 4750.000000000000 +522.877878746579 2136.000000000000 +529.887991001196 1339.000000000000 +536.163681670628 5319.764160156250 +537.164689652602 2801.000000000000 +538.163060633683 2127.000000000000 +544.338383816682 1327.000000000000 +546.914418903411 2791.000000000000 +547.911772088961 1197.000000000000 +610.182643718635 2184.000000000000 +611.184358419061 1263.000000000000 +645.154326732470 4086.000000000000 +646.158388244596 1322.000000000000 +647.153421689114 4193.000000000000 +648.155059129677 1544.000000000000 +649.151941293891 1547.000000000000 +671.046678825629 4046.000000000000 +672.049764904672 1509.000000000000 +673.044229478168 4164.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=661 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=661 experiment=3_0 +##scan 38 +##specref ms_run[1]:sample=1 period=1 cycle=661 experiment=3 +57.070116320209 30.000000000000 +171.137956393748 180.000000000000 +173.873502965422 30.000000000000 +>compound 1_0-661005--40--UNKNOWN +>parentmass 299.182168197771 +>charge 1 +>rt 433.717000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +299.182168197771 3169.000000000000 +>ms1peaks +52.005486844196 2797.312255859375 +53.013452941613 13289.114257812500 +53.850392691129 1182.554077148438 +54.009302603618 341601.031250000000 +55.005911181832 5603.758300781250 +55.011355581201 5959.661132812500 +55.054189724209 2205.188476562500 +55.933928601241 6093.526367187500 +56.941939565668 2798.683593750000 +59.049443593556 67299.640625000000 +60.044262774734 8968.761718750000 +61.039204580633 1571.923095703125 +63.997813637547 4075.065429687500 +64.004662670356 4416.795898437500 +68.011501134588 27277.638671875000 +68.993585500338 12264.906250000000 +69.044393197123 13147.085937500000 +72.043949942055 1214.000000000000 +72.936545824901 2386.261962890625 +73.064141392327 1809.102661132812 +76.486217265459 2318.000000000000 +77.037914467348 2784.771240234375 +79.020708818127 18172.382812500000 +80.048894299954 13850.358398437500 +81.936654565436 8646.963867187500 +82.996013274860 9151.881835937500 +87.042952193812 1456.767700195312 +87.054623008241 1774.283325195312 +89.069755450540 1371.091674804688 +89.506205030598 1420.000000000000 +90.488660539027 2076.000000000000 +91.053504137418 1574.000000000000 +95.952180653762 2284.000000000000 +97.967884579650 7862.442871093750 +100.074476020240 1221.000000000000 +102.090415152097 1454.000000000000 +104.048216330484 1263.218750000000 +109.942447219977 1590.828491210938 +113.962324334339 2023.251098632812 +114.090394525983 11631.025390625000 +118.085045416936 6564.007812500000 +122.095214148430 3526.000000000000 +122.962880463908 10844.000000000000 +123.090776414574 1696.206054687500 +123.961832528390 1236.000000000000 +124.981223378162 1673.021850585938 +130.158379717264 1405.000000000000 +132.043434483782 41526.472656250000 +133.046757663549 4137.170898437500 +136.020231843939 1752.000000000000 +139.962610586396 1241.217529296875 +141.090622201525 1287.143798828125 +141.112120261557 1304.199096679688 +141.957439283701 16426.482421875000 +147.090642325371 2533.530273437500 +149.022533327810 5845.030273437500 +149.040994237727 2756.796875000000 +151.095191450521 2425.737792968750 +151.109945034180 2827.097656250000 +155.069776946854 1748.044799804688 +155.105248734220 1748.282226562500 +155.973048592075 4793.413085937500 +158.153052811157 14275.985351562500 +159.139068434260 1227.674072265625 +159.156070191539 1425.673461914062 +160.049271893755 12624.257812500000 +161.053296289892 1271.000000000000 +161.096235386258 1578.421630859375 +164.142270683686 1217.000000000000 +170.094887803481 2717.008544921875 +170.968792401520 2390.000000000000 +171.137329533636 9794.265625000000 +172.136840902698 2122.000000000000 +172.168466786332 1309.672119140625 +173.079514403953 7730.000000000000 +174.990695602365 1337.972656250000 +177.054653270806 1487.000000000000 +178.158403800321 1799.193237304688 +179.105583290233 3646.174560546875 +182.960823278834 1922.372802734375 +182.986018115359 1341.532470703125 +186.220896557034 1469.000000000000 +194.116385994522 3228.431884765625 +195.101721591860 1761.497314453125 +195.120840048138 2139.872070312500 +198.184759772344 2245.000000000000 +200.198358143313 1177.926513671875 +209.152634370621 1389.980712890625 +217.106353356190 24341.000000000000 +218.109655666691 2974.806884765625 +219.095036364843 2223.419921875000 +224.127894084409 1278.478759765625 +228.195273215592 1674.000000000000 +236.167137123771 1456.000000000000 +239.088416675585 3867.606689453125 +242.282513583885 1277.000000000000 +246.861185203855 3901.000000000000 +249.182714411045 1537.000000000000 +250.178392714940 1258.000000000000 +250.999007399485 2502.000000000000 +252.996469033063 1435.000000000000 +253.914671653353 1239.000000000000 +260.979753981104 14440.506835937500 +261.982083120224 1659.000000000000 +262.976384632325 1466.000000000000 +267.171781473257 1284.615478515625 +277.200008538434 5514.000000000000 +279.092542460055 2184.000000000000 +281.050041935527 1782.000000000000 +292.121077385471 225397.000000000000 +293.123076709567 37677.234375000000 +294.118496498528 72202.039062500000 +295.120481083763 12277.000000000000 +296.122922541254 1529.722534179688 +299.182168197771 3169.000000000000 +304.298453938228 1206.488281250000 +318.011978476534 6627.000000000000 +322.257925183826 1680.000000000000 +327.007860740219 3296.000000000000 +329.003921677419 3051.000000000000 +331.002277995733 1209.000000000000 +339.994321798017 30539.392578125000 +340.996727216497 4443.000000000000 +341.991298278029 3214.898193359375 +351.926939354897 2576.000000000000 +353.925624186681 1528.262939453125 +355.967794750582 1676.749389648438 +363.070157834182 5926.000000000000 +379.934179014433 2532.000000000000 +381.930242914518 1263.000000000000 +445.118947651762 2644.000000000000 +505.851615177973 4750.000000000000 +522.877878746579 2136.000000000000 +529.887991001196 1339.000000000000 +536.163681670628 5319.764160156250 +537.164689652602 2801.000000000000 +538.163060633683 2127.000000000000 +544.338383816682 1327.000000000000 +546.914418903411 2791.000000000000 +547.911772088961 1197.000000000000 +610.182643718635 2184.000000000000 +611.184358419061 1263.000000000000 +645.154326732470 4086.000000000000 +646.158388244596 1322.000000000000 +647.153421689114 4193.000000000000 +648.155059129677 1544.000000000000 +649.151941293891 1547.000000000000 +671.046678825629 4046.000000000000 +672.049764904672 1509.000000000000 +673.044229478168 4164.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=661 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=661 experiment=5_0 +##scan 40 +##specref ms_run[1]:sample=1 period=1 cycle=661 experiment=5 +267.022502481564 60.000000000000 +>compound 1_0-661008--41--UNKNOWN +>parentmass 645.154326732470 +>charge 1 +>rt 433.717000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +645.154326732470 4086.000000000000 +>ms1peaks +52.005486844196 2797.312255859375 +53.013452941613 13289.114257812500 +53.850392691129 1182.554077148438 +54.009302603618 341601.031250000000 +55.005911181832 5603.758300781250 +55.011355581201 5959.661132812500 +55.054189724209 2205.188476562500 +55.933928601241 6093.526367187500 +56.941939565668 2798.683593750000 +59.049443593556 67299.640625000000 +60.044262774734 8968.761718750000 +61.039204580633 1571.923095703125 +63.997813637547 4075.065429687500 +64.004662670356 4416.795898437500 +68.011501134588 27277.638671875000 +68.993585500338 12264.906250000000 +69.044393197123 13147.085937500000 +72.043949942055 1214.000000000000 +72.936545824901 2386.261962890625 +73.064141392327 1809.102661132812 +76.486217265459 2318.000000000000 +77.037914467348 2784.771240234375 +79.020708818127 18172.382812500000 +80.048894299954 13850.358398437500 +81.936654565436 8646.963867187500 +82.996013274860 9151.881835937500 +87.042952193812 1456.767700195312 +87.054623008241 1774.283325195312 +89.069755450540 1371.091674804688 +89.506205030598 1420.000000000000 +90.488660539027 2076.000000000000 +91.053504137418 1574.000000000000 +95.952180653762 2284.000000000000 +97.967884579650 7862.442871093750 +100.074476020240 1221.000000000000 +102.090415152097 1454.000000000000 +104.048216330484 1263.218750000000 +109.942447219977 1590.828491210938 +113.962324334339 2023.251098632812 +114.090394525983 11631.025390625000 +118.085045416936 6564.007812500000 +122.095214148430 3526.000000000000 +122.962880463908 10844.000000000000 +123.090776414574 1696.206054687500 +123.961832528390 1236.000000000000 +124.981223378162 1673.021850585938 +130.158379717264 1405.000000000000 +132.043434483782 41526.472656250000 +133.046757663549 4137.170898437500 +136.020231843939 1752.000000000000 +139.962610586396 1241.217529296875 +141.090622201525 1287.143798828125 +141.112120261557 1304.199096679688 +141.957439283701 16426.482421875000 +147.090642325371 2533.530273437500 +149.022533327810 5845.030273437500 +149.040994237727 2756.796875000000 +151.095191450521 2425.737792968750 +151.109945034180 2827.097656250000 +155.069776946854 1748.044799804688 +155.105248734220 1748.282226562500 +155.973048592075 4793.413085937500 +158.153052811157 14275.985351562500 +159.139068434260 1227.674072265625 +159.156070191539 1425.673461914062 +160.049271893755 12624.257812500000 +161.053296289892 1271.000000000000 +161.096235386258 1578.421630859375 +164.142270683686 1217.000000000000 +170.094887803481 2717.008544921875 +170.968792401520 2390.000000000000 +171.137329533636 9794.265625000000 +172.136840902698 2122.000000000000 +172.168466786332 1309.672119140625 +173.079514403953 7730.000000000000 +174.990695602365 1337.972656250000 +177.054653270806 1487.000000000000 +178.158403800321 1799.193237304688 +179.105583290233 3646.174560546875 +182.960823278834 1922.372802734375 +182.986018115359 1341.532470703125 +186.220896557034 1469.000000000000 +194.116385994522 3228.431884765625 +195.101721591860 1761.497314453125 +195.120840048138 2139.872070312500 +198.184759772344 2245.000000000000 +200.198358143313 1177.926513671875 +209.152634370621 1389.980712890625 +217.106353356190 24341.000000000000 +218.109655666691 2974.806884765625 +219.095036364843 2223.419921875000 +224.127894084409 1278.478759765625 +228.195273215592 1674.000000000000 +236.167137123771 1456.000000000000 +239.088416675585 3867.606689453125 +242.282513583885 1277.000000000000 +246.861185203855 3901.000000000000 +249.182714411045 1537.000000000000 +250.178392714940 1258.000000000000 +250.999007399485 2502.000000000000 +252.996469033063 1435.000000000000 +253.914671653353 1239.000000000000 +260.979753981104 14440.506835937500 +261.982083120224 1659.000000000000 +262.976384632325 1466.000000000000 +267.171781473257 1284.615478515625 +277.200008538434 5514.000000000000 +279.092542460055 2184.000000000000 +281.050041935527 1782.000000000000 +292.121077385471 225397.000000000000 +293.123076709567 37677.234375000000 +294.118496498528 72202.039062500000 +295.120481083763 12277.000000000000 +296.122922541254 1529.722534179688 +299.182168197771 3169.000000000000 +304.298453938228 1206.488281250000 +318.011978476534 6627.000000000000 +322.257925183826 1680.000000000000 +327.007860740219 3296.000000000000 +329.003921677419 3051.000000000000 +331.002277995733 1209.000000000000 +339.994321798017 30539.392578125000 +340.996727216497 4443.000000000000 +341.991298278029 3214.898193359375 +351.926939354897 2576.000000000000 +353.925624186681 1528.262939453125 +355.967794750582 1676.749389648438 +363.070157834182 5926.000000000000 +379.934179014433 2532.000000000000 +381.930242914518 1263.000000000000 +445.118947651762 2644.000000000000 +505.851615177973 4750.000000000000 +522.877878746579 2136.000000000000 +529.887991001196 1339.000000000000 +536.163681670628 5319.764160156250 +537.164689652602 2801.000000000000 +538.163060633683 2127.000000000000 +544.338383816682 1327.000000000000 +546.914418903411 2791.000000000000 +547.911772088961 1197.000000000000 +610.182643718635 2184.000000000000 +611.184358419061 1263.000000000000 +645.154326732470 4086.000000000000 +646.158388244596 1322.000000000000 +647.153421689114 4193.000000000000 +648.155059129677 1544.000000000000 +649.151941293891 1547.000000000000 +671.046678825629 4046.000000000000 +672.049764904672 1509.000000000000 +673.044229478168 4164.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=661 experiment=8 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=661 experiment=8_0 +##scan 41 +##specref ms_run[1]:sample=1 period=1 cycle=661 experiment=8 +336.032082553299 180.000000000000 +354.045887866375 699.000000000000 +645.158440945669 255.000000000000 +>compound 1_0-661009--42--UNKNOWN +>parentmass 671.046678825629 +>charge 1 +>rt 433.717000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +671.046678825629 4046.000000000000 +672.049764904672 1509.000000000000 +>ms1peaks +52.005486844196 2797.312255859375 +53.013452941613 13289.114257812500 +53.850392691129 1182.554077148438 +54.009302603618 341601.031250000000 +55.005911181832 5603.758300781250 +55.011355581201 5959.661132812500 +55.054189724209 2205.188476562500 +55.933928601241 6093.526367187500 +56.941939565668 2798.683593750000 +59.049443593556 67299.640625000000 +60.044262774734 8968.761718750000 +61.039204580633 1571.923095703125 +63.997813637547 4075.065429687500 +64.004662670356 4416.795898437500 +68.011501134588 27277.638671875000 +68.993585500338 12264.906250000000 +69.044393197123 13147.085937500000 +72.043949942055 1214.000000000000 +72.936545824901 2386.261962890625 +73.064141392327 1809.102661132812 +76.486217265459 2318.000000000000 +77.037914467348 2784.771240234375 +79.020708818127 18172.382812500000 +80.048894299954 13850.358398437500 +81.936654565436 8646.963867187500 +82.996013274860 9151.881835937500 +87.042952193812 1456.767700195312 +87.054623008241 1774.283325195312 +89.069755450540 1371.091674804688 +89.506205030598 1420.000000000000 +90.488660539027 2076.000000000000 +91.053504137418 1574.000000000000 +95.952180653762 2284.000000000000 +97.967884579650 7862.442871093750 +100.074476020240 1221.000000000000 +102.090415152097 1454.000000000000 +104.048216330484 1263.218750000000 +109.942447219977 1590.828491210938 +113.962324334339 2023.251098632812 +114.090394525983 11631.025390625000 +118.085045416936 6564.007812500000 +122.095214148430 3526.000000000000 +122.962880463908 10844.000000000000 +123.090776414574 1696.206054687500 +123.961832528390 1236.000000000000 +124.981223378162 1673.021850585938 +130.158379717264 1405.000000000000 +132.043434483782 41526.472656250000 +133.046757663549 4137.170898437500 +136.020231843939 1752.000000000000 +139.962610586396 1241.217529296875 +141.090622201525 1287.143798828125 +141.112120261557 1304.199096679688 +141.957439283701 16426.482421875000 +147.090642325371 2533.530273437500 +149.022533327810 5845.030273437500 +149.040994237727 2756.796875000000 +151.095191450521 2425.737792968750 +151.109945034180 2827.097656250000 +155.069776946854 1748.044799804688 +155.105248734220 1748.282226562500 +155.973048592075 4793.413085937500 +158.153052811157 14275.985351562500 +159.139068434260 1227.674072265625 +159.156070191539 1425.673461914062 +160.049271893755 12624.257812500000 +161.053296289892 1271.000000000000 +161.096235386258 1578.421630859375 +164.142270683686 1217.000000000000 +170.094887803481 2717.008544921875 +170.968792401520 2390.000000000000 +171.137329533636 9794.265625000000 +172.136840902698 2122.000000000000 +172.168466786332 1309.672119140625 +173.079514403953 7730.000000000000 +174.990695602365 1337.972656250000 +177.054653270806 1487.000000000000 +178.158403800321 1799.193237304688 +179.105583290233 3646.174560546875 +182.960823278834 1922.372802734375 +182.986018115359 1341.532470703125 +186.220896557034 1469.000000000000 +194.116385994522 3228.431884765625 +195.101721591860 1761.497314453125 +195.120840048138 2139.872070312500 +198.184759772344 2245.000000000000 +200.198358143313 1177.926513671875 +209.152634370621 1389.980712890625 +217.106353356190 24341.000000000000 +218.109655666691 2974.806884765625 +219.095036364843 2223.419921875000 +224.127894084409 1278.478759765625 +228.195273215592 1674.000000000000 +236.167137123771 1456.000000000000 +239.088416675585 3867.606689453125 +242.282513583885 1277.000000000000 +246.861185203855 3901.000000000000 +249.182714411045 1537.000000000000 +250.178392714940 1258.000000000000 +250.999007399485 2502.000000000000 +252.996469033063 1435.000000000000 +253.914671653353 1239.000000000000 +260.979753981104 14440.506835937500 +261.982083120224 1659.000000000000 +262.976384632325 1466.000000000000 +267.171781473257 1284.615478515625 +277.200008538434 5514.000000000000 +279.092542460055 2184.000000000000 +281.050041935527 1782.000000000000 +292.121077385471 225397.000000000000 +293.123076709567 37677.234375000000 +294.118496498528 72202.039062500000 +295.120481083763 12277.000000000000 +296.122922541254 1529.722534179688 +299.182168197771 3169.000000000000 +304.298453938228 1206.488281250000 +318.011978476534 6627.000000000000 +322.257925183826 1680.000000000000 +327.007860740219 3296.000000000000 +329.003921677419 3051.000000000000 +331.002277995733 1209.000000000000 +339.994321798017 30539.392578125000 +340.996727216497 4443.000000000000 +341.991298278029 3214.898193359375 +351.926939354897 2576.000000000000 +353.925624186681 1528.262939453125 +355.967794750582 1676.749389648438 +363.070157834182 5926.000000000000 +379.934179014433 2532.000000000000 +381.930242914518 1263.000000000000 +445.118947651762 2644.000000000000 +505.851615177973 4750.000000000000 +522.877878746579 2136.000000000000 +529.887991001196 1339.000000000000 +536.163681670628 5319.764160156250 +537.164689652602 2801.000000000000 +538.163060633683 2127.000000000000 +544.338383816682 1327.000000000000 +546.914418903411 2791.000000000000 +547.911772088961 1197.000000000000 +610.182643718635 2184.000000000000 +611.184358419061 1263.000000000000 +645.154326732470 4086.000000000000 +646.158388244596 1322.000000000000 +647.153421689114 4193.000000000000 +648.155059129677 1544.000000000000 +649.151941293891 1547.000000000000 +671.046678825629 4046.000000000000 +672.049764904672 1509.000000000000 +673.044229478168 4164.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=661 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=661 experiment=9_0 +##scan 42 +##specref ms_run[1]:sample=1 period=1 cycle=661 experiment=9 +132.044360950479 45.000000000000 +198.929356968611 13.000000000000 +215.932468819012 75.000000000000 +243.936721402497 30.000000000000 +292.897804521671 45.000000000000 +296.925538722782 30.000000000000 +305.944412546327 13.000000000000 +351.929820518156 550.000000000000 +>compound 1_0-662002--44--UNKNOWN +>parentmass 395.068920996882 +>charge 1 +>rt 434.644000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +395.068920996882 1393.000000000000 +>ms1peaks +52.005619971544 2868.924316406250 +53.013626758479 15517.225585937500 +53.850198684085 1306.466552734375 +54.009455637414 347190.343750000000 +55.005852998941 5408.673828125000 +55.011340638134 6294.821777343750 +55.054331409012 2287.876708984375 +55.934276302981 6088.493164062500 +56.049611939377 1303.000000000000 +56.942183855942 2248.690917968750 +59.049668892653 58332.753906250000 +60.044410399376 9555.736328125000 +61.039859624613 2285.231201171875 +61.047565318545 1412.572753906250 +63.997926632311 4869.690429687500 +64.005070485828 5061.671875000000 +68.011612619473 26166.705078125000 +68.993940190776 13597.881835937500 +69.044643346983 13622.998046875000 +72.936817778709 2490.000000000000 +73.064323773787 1898.000000000000 +76.486168290219 2589.881835937500 +77.037917344036 1166.000000000000 +79.020976204714 14359.524414062500 +80.049086811816 11200.334960937500 +81.937123457333 8916.551757812500 +82.996597708283 9606.731445312500 +87.054211158765 1709.380249023438 +89.506529077942 1677.579467773438 +90.488709770268 1839.000000000000 +91.053746899511 1385.000000000000 +95.952345721258 2220.636962890625 +97.968335149083 7665.471679687500 +100.075245170106 1470.000000000000 +102.091210277475 2129.000000000000 +109.943024793110 1495.000000000000 +113.962850208870 2370.901855468750 +114.090998028958 11338.424804687500 +118.085629511707 7241.961914062500 +122.095655396081 3517.866455078125 +122.963397098816 11180.203125000000 +123.091986139169 1718.697021484375 +123.962012519152 1156.000000000000 +130.158398873332 1284.000000000000 +132.043365551604 16054.902343750000 +133.046736557240 1554.686889648438 +136.020953831915 1663.000000000000 +136.111690191692 1458.000000000000 +141.090571574442 1356.679443359375 +141.111969398206 1508.873413085938 +141.957754684218 16253.752929687500 +142.959109560212 1257.000000000000 +147.090592660524 2334.000000000000 +149.022922810080 4924.312011718750 +149.044154127725 1624.280761718750 +151.077238578663 1241.405883789062 +151.096099445415 2811.134277343750 +151.110911811468 2755.069335937500 +153.126543469127 1197.000000000000 +155.069074554388 1644.209716796875 +155.106522781764 1724.000000000000 +155.973756817392 4858.000000000000 +158.153411215039 13571.562500000000 +159.156521733298 1438.622314453125 +159.969052827239 1173.000000000000 +160.049853047069 6039.000000000000 +161.095474801406 1536.000000000000 +164.142982515454 1325.256713867188 +170.095832751217 2575.989990234375 +170.118615587336 1143.736083984375 +171.137332256244 7221.275390625000 +172.135168711042 1818.587890625000 +172.168548245108 1130.258056640625 +173.080526756051 7626.000000000000 +174.128180990381 1268.000000000000 +174.991074078541 2689.000000000000 +177.053474162561 1542.000000000000 +178.158227079464 1590.000000000000 +179.105675621931 6564.306640625000 +180.108363067116 1112.432739257812 +182.960684510514 1746.039062500000 +186.221467270526 1783.000000000000 +194.116223460583 3271.894775390625 +195.103058328345 1548.885864257812 +195.121163629464 1978.875610351562 +198.184851980288 2163.000000000000 +217.106463272486 22916.730468750000 +218.109369425491 2815.000000000000 +219.094951255367 2417.630126953125 +223.063533684134 1163.051147460938 +224.127008680729 1347.111083984375 +228.194978416391 1823.135620117188 +239.088910319306 4372.000000000000 +242.283851659051 1439.000000000000 +246.862004049781 3614.000000000000 +249.184343134700 1319.000000000000 +250.177626745483 1517.000000000000 +251.000192722755 5349.000000000000 +252.996537563492 3311.000000000000 +260.979723254531 6036.000000000000 +267.172888668337 1629.000000000000 +277.200459264940 3763.000000000000 +279.092801580084 2210.000000000000 +281.050340945059 1505.000000000000 +292.121394674630 223463.312500000000 +293.123678844874 37244.414062500000 +294.118727019850 72349.000000000000 +295.120801964456 13234.699218750000 +296.123693407425 1142.168212890625 +299.183031927639 2040.384643554688 +304.298672942450 1257.265014648438 +313.039453485601 2029.000000000000 +315.036487220481 1245.000000000000 +318.012264297452 3228.000000000000 +322.257627652589 1286.923828125000 +327.008314255252 8546.000000000000 +329.004869369746 7597.000000000000 +331.001726848134 2689.000000000000 +339.994768303561 13115.000000000000 +340.996413024238 1878.000000000000 +341.991672781264 1155.000000000000 +348.989002691846 1131.000000000000 +351.928143211389 1226.000000000000 +363.069604437683 2542.000000000000 +372.066265915938 1350.000000000000 +372.093977422513 1384.438232421875 +379.934475958043 1258.000000000000 +392.045434731573 1278.000000000000 +395.068920996882 1393.000000000000 +445.121248938517 2203.000000000000 +505.852906465283 4354.000000000000 +506.852300462823 1384.000000000000 +522.878257983247 1658.000000000000 +523.874535929923 1366.000000000000 +529.890814020884 1412.000000000000 +536.164597718931 5578.000000000000 +537.165350038450 2083.371093750000 +538.162757655305 1663.000000000000 +544.339007559620 1297.000000000000 +546.915501042648 2403.000000000000 +547.913876040424 1320.000000000000 +610.182690652914 2060.000000000000 +611.183593920178 1202.338012695312 +645.156830666215 4838.000000000000 +646.159647200242 1639.000000000000 +647.154424391907 5365.000000000000 +648.156498599768 1846.161254882812 +649.154510273270 2279.000000000000 +671.048282134270 2667.000000000000 +673.046260223844 2015.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=662 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=662 experiment=2_0 +##scan 44 +##specref ms_run[1]:sample=1 period=1 cycle=662 experiment=2 +69.045201223357 40.000000000000 +131.959553181301 31.000000000000 +137.133037555271 6.000000000000 +163.027633404674 6.000000000000 +167.090245316507 6.000000000000 +199.942295849446 16.000000000000 +240.969767381681 39.000000000000 +266.970884772710 54.000000000000 +267.001442967414 62.000000000000 +283.964507020502 46.000000000000 +318.068281699418 16.000000000000 +336.029833311234 68.000000000000 +354.042082386970 93.000000000000 +476.988960477588 6.000000000000 +>compound 1_0-662003--45--UNKNOWN +>parentmass 449.154393512052 +>charge 1 +>rt 434.644000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005619971544 2868.924316406250 +53.013626758479 15517.225585937500 +53.850198684085 1306.466552734375 +54.009455637414 347190.343750000000 +55.005852998941 5408.673828125000 +55.011340638134 6294.821777343750 +55.054331409012 2287.876708984375 +55.934276302981 6088.493164062500 +56.049611939377 1303.000000000000 +56.942183855942 2248.690917968750 +59.049668892653 58332.753906250000 +60.044410399376 9555.736328125000 +61.039859624613 2285.231201171875 +61.047565318545 1412.572753906250 +63.997926632311 4869.690429687500 +64.005070485828 5061.671875000000 +68.011612619473 26166.705078125000 +68.993940190776 13597.881835937500 +69.044643346983 13622.998046875000 +72.936817778709 2490.000000000000 +73.064323773787 1898.000000000000 +76.486168290219 2589.881835937500 +77.037917344036 1166.000000000000 +79.020976204714 14359.524414062500 +80.049086811816 11200.334960937500 +81.937123457333 8916.551757812500 +82.996597708283 9606.731445312500 +87.054211158765 1709.380249023438 +89.506529077942 1677.579467773438 +90.488709770268 1839.000000000000 +91.053746899511 1385.000000000000 +95.952345721258 2220.636962890625 +97.968335149083 7665.471679687500 +100.075245170106 1470.000000000000 +102.091210277475 2129.000000000000 +109.943024793110 1495.000000000000 +113.962850208870 2370.901855468750 +114.090998028958 11338.424804687500 +118.085629511707 7241.961914062500 +122.095655396081 3517.866455078125 +122.963397098816 11180.203125000000 +123.091986139169 1718.697021484375 +123.962012519152 1156.000000000000 +130.158398873332 1284.000000000000 +132.043365551604 16054.902343750000 +133.046736557240 1554.686889648438 +136.020953831915 1663.000000000000 +136.111690191692 1458.000000000000 +141.090571574442 1356.679443359375 +141.111969398206 1508.873413085938 +141.957754684218 16253.752929687500 +142.959109560212 1257.000000000000 +147.090592660524 2334.000000000000 +149.022922810080 4924.312011718750 +149.044154127725 1624.280761718750 +151.077238578663 1241.405883789062 +151.096099445415 2811.134277343750 +151.110911811468 2755.069335937500 +153.126543469127 1197.000000000000 +155.069074554388 1644.209716796875 +155.106522781764 1724.000000000000 +155.973756817392 4858.000000000000 +158.153411215039 13571.562500000000 +159.156521733298 1438.622314453125 +159.969052827239 1173.000000000000 +160.049853047069 6039.000000000000 +161.095474801406 1536.000000000000 +164.142982515454 1325.256713867188 +170.095832751217 2575.989990234375 +170.118615587336 1143.736083984375 +171.137332256244 7221.275390625000 +172.135168711042 1818.587890625000 +172.168548245108 1130.258056640625 +173.080526756051 7626.000000000000 +174.128180990381 1268.000000000000 +174.991074078541 2689.000000000000 +177.053474162561 1542.000000000000 +178.158227079464 1590.000000000000 +179.105675621931 6564.306640625000 +180.108363067116 1112.432739257812 +182.960684510514 1746.039062500000 +186.221467270526 1783.000000000000 +194.116223460583 3271.894775390625 +195.103058328345 1548.885864257812 +195.121163629464 1978.875610351562 +198.184851980288 2163.000000000000 +217.106463272486 22916.730468750000 +218.109369425491 2815.000000000000 +219.094951255367 2417.630126953125 +223.063533684134 1163.051147460938 +224.127008680729 1347.111083984375 +228.194978416391 1823.135620117188 +239.088910319306 4372.000000000000 +242.283851659051 1439.000000000000 +246.862004049781 3614.000000000000 +249.184343134700 1319.000000000000 +250.177626745483 1517.000000000000 +251.000192722755 5349.000000000000 +252.996537563492 3311.000000000000 +260.979723254531 6036.000000000000 +267.172888668337 1629.000000000000 +277.200459264940 3763.000000000000 +279.092801580084 2210.000000000000 +281.050340945059 1505.000000000000 +292.121394674630 223463.312500000000 +293.123678844874 37244.414062500000 +294.118727019850 72349.000000000000 +295.120801964456 13234.699218750000 +296.123693407425 1142.168212890625 +299.183031927639 2040.384643554688 +304.298672942450 1257.265014648438 +313.039453485601 2029.000000000000 +315.036487220481 1245.000000000000 +318.012264297452 3228.000000000000 +322.257627652589 1286.923828125000 +327.008314255252 8546.000000000000 +329.004869369746 7597.000000000000 +331.001726848134 2689.000000000000 +339.994768303561 13115.000000000000 +340.996413024238 1878.000000000000 +341.991672781264 1155.000000000000 +348.989002691846 1131.000000000000 +351.928143211389 1226.000000000000 +363.069604437683 2542.000000000000 +372.066265915938 1350.000000000000 +372.093977422513 1384.438232421875 +379.934475958043 1258.000000000000 +392.045434731573 1278.000000000000 +395.068920996882 1393.000000000000 +445.121248938517 2203.000000000000 +505.852906465283 4354.000000000000 +506.852300462823 1384.000000000000 +522.878257983247 1658.000000000000 +523.874535929923 1366.000000000000 +529.890814020884 1412.000000000000 +536.164597718931 5578.000000000000 +537.165350038450 2083.371093750000 +538.162757655305 1663.000000000000 +544.339007559620 1297.000000000000 +546.915501042648 2403.000000000000 +547.913876040424 1320.000000000000 +610.182690652914 2060.000000000000 +611.183593920178 1202.338012695312 +645.156830666215 4838.000000000000 +646.159647200242 1639.000000000000 +647.154424391907 5365.000000000000 +648.156498599768 1846.161254882812 +649.154510273270 2279.000000000000 +671.048282134270 2667.000000000000 +673.046260223844 2015.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=662 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=662 experiment=3_0 +##scan 45 +##specref ms_run[1]:sample=1 period=1 cycle=662 experiment=3 +147.066126280386 6.000000000000 +159.976098174475 6.000000000000 +161.026756196110 8.000000000000 +173.011455384830 6.000000000000 +227.044922241699 6.000000000000 +239.044605815469 16.000000000000 +239.059765700566 16.000000000000 +285.149983831385 6.000000000000 +343.045712821721 6.000000000000 +367.102596690006 24.000000000000 +>compound 1_0-662004--46--UNKNOWN +>parentmass 491.968666926117 +>charge 1 +>rt 434.644000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005619971544 2868.924316406250 +53.013626758479 15517.225585937500 +53.850198684085 1306.466552734375 +54.009455637414 347190.343750000000 +55.005852998941 5408.673828125000 +55.011340638134 6294.821777343750 +55.054331409012 2287.876708984375 +55.934276302981 6088.493164062500 +56.049611939377 1303.000000000000 +56.942183855942 2248.690917968750 +59.049668892653 58332.753906250000 +60.044410399376 9555.736328125000 +61.039859624613 2285.231201171875 +61.047565318545 1412.572753906250 +63.997926632311 4869.690429687500 +64.005070485828 5061.671875000000 +68.011612619473 26166.705078125000 +68.993940190776 13597.881835937500 +69.044643346983 13622.998046875000 +72.936817778709 2490.000000000000 +73.064323773787 1898.000000000000 +76.486168290219 2589.881835937500 +77.037917344036 1166.000000000000 +79.020976204714 14359.524414062500 +80.049086811816 11200.334960937500 +81.937123457333 8916.551757812500 +82.996597708283 9606.731445312500 +87.054211158765 1709.380249023438 +89.506529077942 1677.579467773438 +90.488709770268 1839.000000000000 +91.053746899511 1385.000000000000 +95.952345721258 2220.636962890625 +97.968335149083 7665.471679687500 +100.075245170106 1470.000000000000 +102.091210277475 2129.000000000000 +109.943024793110 1495.000000000000 +113.962850208870 2370.901855468750 +114.090998028958 11338.424804687500 +118.085629511707 7241.961914062500 +122.095655396081 3517.866455078125 +122.963397098816 11180.203125000000 +123.091986139169 1718.697021484375 +123.962012519152 1156.000000000000 +130.158398873332 1284.000000000000 +132.043365551604 16054.902343750000 +133.046736557240 1554.686889648438 +136.020953831915 1663.000000000000 +136.111690191692 1458.000000000000 +141.090571574442 1356.679443359375 +141.111969398206 1508.873413085938 +141.957754684218 16253.752929687500 +142.959109560212 1257.000000000000 +147.090592660524 2334.000000000000 +149.022922810080 4924.312011718750 +149.044154127725 1624.280761718750 +151.077238578663 1241.405883789062 +151.096099445415 2811.134277343750 +151.110911811468 2755.069335937500 +153.126543469127 1197.000000000000 +155.069074554388 1644.209716796875 +155.106522781764 1724.000000000000 +155.973756817392 4858.000000000000 +158.153411215039 13571.562500000000 +159.156521733298 1438.622314453125 +159.969052827239 1173.000000000000 +160.049853047069 6039.000000000000 +161.095474801406 1536.000000000000 +164.142982515454 1325.256713867188 +170.095832751217 2575.989990234375 +170.118615587336 1143.736083984375 +171.137332256244 7221.275390625000 +172.135168711042 1818.587890625000 +172.168548245108 1130.258056640625 +173.080526756051 7626.000000000000 +174.128180990381 1268.000000000000 +174.991074078541 2689.000000000000 +177.053474162561 1542.000000000000 +178.158227079464 1590.000000000000 +179.105675621931 6564.306640625000 +180.108363067116 1112.432739257812 +182.960684510514 1746.039062500000 +186.221467270526 1783.000000000000 +194.116223460583 3271.894775390625 +195.103058328345 1548.885864257812 +195.121163629464 1978.875610351562 +198.184851980288 2163.000000000000 +217.106463272486 22916.730468750000 +218.109369425491 2815.000000000000 +219.094951255367 2417.630126953125 +223.063533684134 1163.051147460938 +224.127008680729 1347.111083984375 +228.194978416391 1823.135620117188 +239.088910319306 4372.000000000000 +242.283851659051 1439.000000000000 +246.862004049781 3614.000000000000 +249.184343134700 1319.000000000000 +250.177626745483 1517.000000000000 +251.000192722755 5349.000000000000 +252.996537563492 3311.000000000000 +260.979723254531 6036.000000000000 +267.172888668337 1629.000000000000 +277.200459264940 3763.000000000000 +279.092801580084 2210.000000000000 +281.050340945059 1505.000000000000 +292.121394674630 223463.312500000000 +293.123678844874 37244.414062500000 +294.118727019850 72349.000000000000 +295.120801964456 13234.699218750000 +296.123693407425 1142.168212890625 +299.183031927639 2040.384643554688 +304.298672942450 1257.265014648438 +313.039453485601 2029.000000000000 +315.036487220481 1245.000000000000 +318.012264297452 3228.000000000000 +322.257627652589 1286.923828125000 +327.008314255252 8546.000000000000 +329.004869369746 7597.000000000000 +331.001726848134 2689.000000000000 +339.994768303561 13115.000000000000 +340.996413024238 1878.000000000000 +341.991672781264 1155.000000000000 +348.989002691846 1131.000000000000 +351.928143211389 1226.000000000000 +363.069604437683 2542.000000000000 +372.066265915938 1350.000000000000 +372.093977422513 1384.438232421875 +379.934475958043 1258.000000000000 +392.045434731573 1278.000000000000 +395.068920996882 1393.000000000000 +445.121248938517 2203.000000000000 +505.852906465283 4354.000000000000 +506.852300462823 1384.000000000000 +522.878257983247 1658.000000000000 +523.874535929923 1366.000000000000 +529.890814020884 1412.000000000000 +536.164597718931 5578.000000000000 +537.165350038450 2083.371093750000 +538.162757655305 1663.000000000000 +544.339007559620 1297.000000000000 +546.915501042648 2403.000000000000 +547.913876040424 1320.000000000000 +610.182690652914 2060.000000000000 +611.183593920178 1202.338012695312 +645.156830666215 4838.000000000000 +646.159647200242 1639.000000000000 +647.154424391907 5365.000000000000 +648.156498599768 1846.161254882812 +649.154510273270 2279.000000000000 +671.048282134270 2667.000000000000 +673.046260223844 2015.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=662 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=662 experiment=4_0 +##scan 46 +##specref ms_run[1]:sample=1 period=1 cycle=662 experiment=4 +338.956039786047 6.000000000000 +>compound 1_0-662005--47--UNKNOWN +>parentmass 647.154424391907 +>charge 1 +>rt 434.644000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +647.154424391907 5365.000000000000 +>ms1peaks +52.005619971544 2868.924316406250 +53.013626758479 15517.225585937500 +53.850198684085 1306.466552734375 +54.009455637414 347190.343750000000 +55.005852998941 5408.673828125000 +55.011340638134 6294.821777343750 +55.054331409012 2287.876708984375 +55.934276302981 6088.493164062500 +56.049611939377 1303.000000000000 +56.942183855942 2248.690917968750 +59.049668892653 58332.753906250000 +60.044410399376 9555.736328125000 +61.039859624613 2285.231201171875 +61.047565318545 1412.572753906250 +63.997926632311 4869.690429687500 +64.005070485828 5061.671875000000 +68.011612619473 26166.705078125000 +68.993940190776 13597.881835937500 +69.044643346983 13622.998046875000 +72.936817778709 2490.000000000000 +73.064323773787 1898.000000000000 +76.486168290219 2589.881835937500 +77.037917344036 1166.000000000000 +79.020976204714 14359.524414062500 +80.049086811816 11200.334960937500 +81.937123457333 8916.551757812500 +82.996597708283 9606.731445312500 +87.054211158765 1709.380249023438 +89.506529077942 1677.579467773438 +90.488709770268 1839.000000000000 +91.053746899511 1385.000000000000 +95.952345721258 2220.636962890625 +97.968335149083 7665.471679687500 +100.075245170106 1470.000000000000 +102.091210277475 2129.000000000000 +109.943024793110 1495.000000000000 +113.962850208870 2370.901855468750 +114.090998028958 11338.424804687500 +118.085629511707 7241.961914062500 +122.095655396081 3517.866455078125 +122.963397098816 11180.203125000000 +123.091986139169 1718.697021484375 +123.962012519152 1156.000000000000 +130.158398873332 1284.000000000000 +132.043365551604 16054.902343750000 +133.046736557240 1554.686889648438 +136.020953831915 1663.000000000000 +136.111690191692 1458.000000000000 +141.090571574442 1356.679443359375 +141.111969398206 1508.873413085938 +141.957754684218 16253.752929687500 +142.959109560212 1257.000000000000 +147.090592660524 2334.000000000000 +149.022922810080 4924.312011718750 +149.044154127725 1624.280761718750 +151.077238578663 1241.405883789062 +151.096099445415 2811.134277343750 +151.110911811468 2755.069335937500 +153.126543469127 1197.000000000000 +155.069074554388 1644.209716796875 +155.106522781764 1724.000000000000 +155.973756817392 4858.000000000000 +158.153411215039 13571.562500000000 +159.156521733298 1438.622314453125 +159.969052827239 1173.000000000000 +160.049853047069 6039.000000000000 +161.095474801406 1536.000000000000 +164.142982515454 1325.256713867188 +170.095832751217 2575.989990234375 +170.118615587336 1143.736083984375 +171.137332256244 7221.275390625000 +172.135168711042 1818.587890625000 +172.168548245108 1130.258056640625 +173.080526756051 7626.000000000000 +174.128180990381 1268.000000000000 +174.991074078541 2689.000000000000 +177.053474162561 1542.000000000000 +178.158227079464 1590.000000000000 +179.105675621931 6564.306640625000 +180.108363067116 1112.432739257812 +182.960684510514 1746.039062500000 +186.221467270526 1783.000000000000 +194.116223460583 3271.894775390625 +195.103058328345 1548.885864257812 +195.121163629464 1978.875610351562 +198.184851980288 2163.000000000000 +217.106463272486 22916.730468750000 +218.109369425491 2815.000000000000 +219.094951255367 2417.630126953125 +223.063533684134 1163.051147460938 +224.127008680729 1347.111083984375 +228.194978416391 1823.135620117188 +239.088910319306 4372.000000000000 +242.283851659051 1439.000000000000 +246.862004049781 3614.000000000000 +249.184343134700 1319.000000000000 +250.177626745483 1517.000000000000 +251.000192722755 5349.000000000000 +252.996537563492 3311.000000000000 +260.979723254531 6036.000000000000 +267.172888668337 1629.000000000000 +277.200459264940 3763.000000000000 +279.092801580084 2210.000000000000 +281.050340945059 1505.000000000000 +292.121394674630 223463.312500000000 +293.123678844874 37244.414062500000 +294.118727019850 72349.000000000000 +295.120801964456 13234.699218750000 +296.123693407425 1142.168212890625 +299.183031927639 2040.384643554688 +304.298672942450 1257.265014648438 +313.039453485601 2029.000000000000 +315.036487220481 1245.000000000000 +318.012264297452 3228.000000000000 +322.257627652589 1286.923828125000 +327.008314255252 8546.000000000000 +329.004869369746 7597.000000000000 +331.001726848134 2689.000000000000 +339.994768303561 13115.000000000000 +340.996413024238 1878.000000000000 +341.991672781264 1155.000000000000 +348.989002691846 1131.000000000000 +351.928143211389 1226.000000000000 +363.069604437683 2542.000000000000 +372.066265915938 1350.000000000000 +372.093977422513 1384.438232421875 +379.934475958043 1258.000000000000 +392.045434731573 1278.000000000000 +395.068920996882 1393.000000000000 +445.121248938517 2203.000000000000 +505.852906465283 4354.000000000000 +506.852300462823 1384.000000000000 +522.878257983247 1658.000000000000 +523.874535929923 1366.000000000000 +529.890814020884 1412.000000000000 +536.164597718931 5578.000000000000 +537.165350038450 2083.371093750000 +538.162757655305 1663.000000000000 +544.339007559620 1297.000000000000 +546.915501042648 2403.000000000000 +547.913876040424 1320.000000000000 +610.182690652914 2060.000000000000 +611.183593920178 1202.338012695312 +645.156830666215 4838.000000000000 +646.159647200242 1639.000000000000 +647.154424391907 5365.000000000000 +648.156498599768 1846.161254882812 +649.154510273270 2279.000000000000 +671.048282134270 2667.000000000000 +673.046260223844 2015.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=662 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=662 experiment=5_0 +##scan 47 +##specref ms_run[1]:sample=1 period=1 cycle=662 experiment=5 +203.076628798793 16.000000000000 +203.089507643509 16.000000000000 +266.984887770009 32.000000000000 +266.993947608827 32.000000000000 +268.996679091902 54.000000000000 +283.964545183828 23.000000000000 +285.964024113963 40.000000000000 +336.028004543941 99.000000000000 +337.983278357196 77.810935974121 +338.031706063310 169.000000000000 +354.043787496435 476.000000000000 +355.041263036732 39.000000000000 +356.041960679948 1007.000000000000 +356.097610668179 60.964313507080 +647.154616006882 261.000000000000 +>compound 1_0-663002--49--UNKNOWN +>parentmass 192.173979598132 +>charge 1 +>rt 435.568999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005966180500 2509.332031250000 +53.013507369873 14095.641601562500 +53.850970390711 1246.033935546875 +54.009372281497 342031.000000000000 +55.006163575275 5705.965820312500 +55.011387270805 6127.473144531250 +55.054184206823 1848.058593750000 +55.934334911976 6140.810546875000 +56.049690767818 1330.017089843750 +56.942074959092 2606.667480468750 +59.049518267006 56697.359375000000 +60.044566292185 9567.453125000000 +60.051796148101 5984.580078125000 +61.039393490257 1915.440551757812 +63.997909973617 3748.628417968750 +64.005283923938 4326.699218750000 +68.011628084817 27292.236328125000 +68.993816323075 12618.667968750000 +69.032897101129 1379.142456054688 +69.044540912933 13986.380859375000 +72.936558146637 2579.000000000000 +73.064228849484 1913.000000000000 +76.486180881623 2682.000244140625 +79.021000086474 14334.086914062500 +80.049089873152 11904.342773437500 +81.937137428830 9328.000000000000 +82.996717483329 9530.261718750000 +87.044278019735 1244.984619140625 +87.054474952312 1464.973510742188 +89.506620387415 1797.000000000000 +90.489369315210 1750.000000000000 +91.053371587935 1520.000000000000 +95.952544398364 2306.000000000000 +97.967985008693 7122.677246093750 +98.983597639133 2707.236572265625 +102.090693288494 2155.000000000000 +109.942639865272 1479.000000000000 +113.962988365185 2088.000000000000 +114.090715282838 10161.079101562500 +118.085459870469 7107.342285156250 +122.095676141264 3819.024658203125 +122.963182714449 11743.000000000000 +123.091076294906 1884.834838867188 +123.962710172625 1278.000000000000 +130.158549361780 1309.000000000000 +132.043510097675 6102.050781250000 +136.020884350350 1696.428710937500 +136.110913014003 1219.864746093750 +141.090089283606 1510.582885742188 +141.112164115087 1395.173217773438 +141.957727661927 16172.547851562500 +147.090953742167 2593.000000000000 +149.022660175650 5113.270019531250 +149.042184219595 2270.130126953125 +151.095573062425 2291.701904296875 +151.109764648433 2508.697753906250 +155.069421770644 1304.007690429688 +155.105956399660 1556.186767578125 +155.973291029133 4647.000000000000 +158.153352334475 13909.827148437500 +159.156157365710 1453.476074218750 +160.049315575157 1807.000000000000 +161.095748922100 1676.696289062500 +164.141989249057 1365.831665039062 +170.095477046624 2501.143554687500 +171.138013785490 3982.982177734375 +172.134863309732 1431.708251953125 +173.080523810193 6956.130371093750 +174.991175918913 9969.217773437500 +176.988389097507 3050.117675781250 +177.054118074174 1458.434448242188 +178.157975354817 1551.791381835938 +179.106014386017 6976.000000000000 +182.960744773798 1855.346191406250 +182.979834217019 1800.970458984375 +186.220995397905 2442.000000000000 +194.116040015282 3148.000000000000 +195.104779764897 1691.220825195312 +195.121820949901 2158.996582031250 +198.184910946765 2078.562744140625 +217.106618021168 23378.933593750000 +218.110011440618 2630.000000000000 +219.095176701267 2434.000000000000 +228.195374276500 1663.423095703125 +235.168383933758 1236.068969726562 +236.166825939935 1254.000000000000 +239.088686366357 4311.829589843750 +242.284913917132 1324.000000000000 +246.862288674394 3536.000000000000 +249.184859994698 1408.000000000000 +250.178788935105 1421.692382812500 +250.999929283760 20029.000000000000 +252.003012365740 1411.418090820312 +252.997001503914 12765.000000000000 +254.993768386515 1938.000000000000 +260.980022779583 1808.000000000000 +267.171368540006 1448.377807617188 +277.200433490599 1660.000000000000 +279.093759730917 2119.000000000000 +281.051032806120 1483.000000000000 +291.237715025520 1241.364013671875 +292.121361150912 285183.000000000000 +293.123834428448 45555.277343750000 +294.118427695985 93122.570312500000 +295.120641413580 15470.696289062500 +296.123835906431 1561.000000000000 +313.039035562555 16422.000000000000 +314.041466363413 2766.000000000000 +315.036563511042 10824.000000000000 +316.039700661579 1830.000000000000 +317.034195270562 1773.448120117188 +321.226781744505 2044.000000000000 +327.008089983734 28336.265625000000 +328.011190071085 2858.514404296875 +329.005295881569 27689.000000000000 +330.008649187278 3052.000000000000 +331.002098826780 9057.932617187500 +333.003548365368 1609.000000000000 +335.018062590141 2124.000000000000 +339.950891675362 1270.914672851562 +339.994456530817 4579.000000000000 +348.990164564731 4627.000000000000 +350.986598107700 4290.000000000000 +372.065686169920 4230.000000000000 +374.062221925680 3509.000000000000 +376.059337391009 1282.000000000000 +392.047236888469 1599.000000000000 +395.069603447750 1690.000000000000 +397.066731969223 1427.000000000000 +428.928860183743 1238.358520507812 +430.887744920288 1367.548706054688 +445.120189406834 2253.000000000000 +505.852818670435 4262.000000000000 +506.855243935787 1464.000000000000 +522.879200969200 1903.639038085938 +529.890071522891 1483.417846679688 +536.164962577408 4542.000000000000 +537.166020159870 2688.000000000000 +538.164211996041 1760.000000000000 +544.339325990071 1415.000000000000 +546.913817544760 2912.000000000000 +547.914903230189 1254.000000000000 +610.183749066707 2160.000000000000 +611.183884033885 1283.000000000000 +645.156997893402 7650.000000000000 +646.160667456787 3315.000000000000 +647.154701516229 9174.000000000000 +648.157895170257 3104.000000000000 +649.152380094183 3397.000000000000 +673.045753694998 1272.428222656250 +>ms2peaks +##n_id sample=1 period=1 cycle=663 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=663 experiment=2_0 +##scan 49 +##specref ms_run[1]:sample=1 period=1 cycle=663 experiment=2 +69.070724544271 30.000000000000 +133.068999638192 30.000000000000 +192.175678549586 30.000000000000 +>compound 1_0-663004--51--UNKNOWN +>parentmass 370.001363664809 +>charge 1 +>rt 435.568999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005966180500 2509.332031250000 +53.013507369873 14095.641601562500 +53.850970390711 1246.033935546875 +54.009372281497 342031.000000000000 +55.006163575275 5705.965820312500 +55.011387270805 6127.473144531250 +55.054184206823 1848.058593750000 +55.934334911976 6140.810546875000 +56.049690767818 1330.017089843750 +56.942074959092 2606.667480468750 +59.049518267006 56697.359375000000 +60.044566292185 9567.453125000000 +60.051796148101 5984.580078125000 +61.039393490257 1915.440551757812 +63.997909973617 3748.628417968750 +64.005283923938 4326.699218750000 +68.011628084817 27292.236328125000 +68.993816323075 12618.667968750000 +69.032897101129 1379.142456054688 +69.044540912933 13986.380859375000 +72.936558146637 2579.000000000000 +73.064228849484 1913.000000000000 +76.486180881623 2682.000244140625 +79.021000086474 14334.086914062500 +80.049089873152 11904.342773437500 +81.937137428830 9328.000000000000 +82.996717483329 9530.261718750000 +87.044278019735 1244.984619140625 +87.054474952312 1464.973510742188 +89.506620387415 1797.000000000000 +90.489369315210 1750.000000000000 +91.053371587935 1520.000000000000 +95.952544398364 2306.000000000000 +97.967985008693 7122.677246093750 +98.983597639133 2707.236572265625 +102.090693288494 2155.000000000000 +109.942639865272 1479.000000000000 +113.962988365185 2088.000000000000 +114.090715282838 10161.079101562500 +118.085459870469 7107.342285156250 +122.095676141264 3819.024658203125 +122.963182714449 11743.000000000000 +123.091076294906 1884.834838867188 +123.962710172625 1278.000000000000 +130.158549361780 1309.000000000000 +132.043510097675 6102.050781250000 +136.020884350350 1696.428710937500 +136.110913014003 1219.864746093750 +141.090089283606 1510.582885742188 +141.112164115087 1395.173217773438 +141.957727661927 16172.547851562500 +147.090953742167 2593.000000000000 +149.022660175650 5113.270019531250 +149.042184219595 2270.130126953125 +151.095573062425 2291.701904296875 +151.109764648433 2508.697753906250 +155.069421770644 1304.007690429688 +155.105956399660 1556.186767578125 +155.973291029133 4647.000000000000 +158.153352334475 13909.827148437500 +159.156157365710 1453.476074218750 +160.049315575157 1807.000000000000 +161.095748922100 1676.696289062500 +164.141989249057 1365.831665039062 +170.095477046624 2501.143554687500 +171.138013785490 3982.982177734375 +172.134863309732 1431.708251953125 +173.080523810193 6956.130371093750 +174.991175918913 9969.217773437500 +176.988389097507 3050.117675781250 +177.054118074174 1458.434448242188 +178.157975354817 1551.791381835938 +179.106014386017 6976.000000000000 +182.960744773798 1855.346191406250 +182.979834217019 1800.970458984375 +186.220995397905 2442.000000000000 +194.116040015282 3148.000000000000 +195.104779764897 1691.220825195312 +195.121820949901 2158.996582031250 +198.184910946765 2078.562744140625 +217.106618021168 23378.933593750000 +218.110011440618 2630.000000000000 +219.095176701267 2434.000000000000 +228.195374276500 1663.423095703125 +235.168383933758 1236.068969726562 +236.166825939935 1254.000000000000 +239.088686366357 4311.829589843750 +242.284913917132 1324.000000000000 +246.862288674394 3536.000000000000 +249.184859994698 1408.000000000000 +250.178788935105 1421.692382812500 +250.999929283760 20029.000000000000 +252.003012365740 1411.418090820312 +252.997001503914 12765.000000000000 +254.993768386515 1938.000000000000 +260.980022779583 1808.000000000000 +267.171368540006 1448.377807617188 +277.200433490599 1660.000000000000 +279.093759730917 2119.000000000000 +281.051032806120 1483.000000000000 +291.237715025520 1241.364013671875 +292.121361150912 285183.000000000000 +293.123834428448 45555.277343750000 +294.118427695985 93122.570312500000 +295.120641413580 15470.696289062500 +296.123835906431 1561.000000000000 +313.039035562555 16422.000000000000 +314.041466363413 2766.000000000000 +315.036563511042 10824.000000000000 +316.039700661579 1830.000000000000 +317.034195270562 1773.448120117188 +321.226781744505 2044.000000000000 +327.008089983734 28336.265625000000 +328.011190071085 2858.514404296875 +329.005295881569 27689.000000000000 +330.008649187278 3052.000000000000 +331.002098826780 9057.932617187500 +333.003548365368 1609.000000000000 +335.018062590141 2124.000000000000 +339.950891675362 1270.914672851562 +339.994456530817 4579.000000000000 +348.990164564731 4627.000000000000 +350.986598107700 4290.000000000000 +372.065686169920 4230.000000000000 +374.062221925680 3509.000000000000 +376.059337391009 1282.000000000000 +392.047236888469 1599.000000000000 +395.069603447750 1690.000000000000 +397.066731969223 1427.000000000000 +428.928860183743 1238.358520507812 +430.887744920288 1367.548706054688 +445.120189406834 2253.000000000000 +505.852818670435 4262.000000000000 +506.855243935787 1464.000000000000 +522.879200969200 1903.639038085938 +529.890071522891 1483.417846679688 +536.164962577408 4542.000000000000 +537.166020159870 2688.000000000000 +538.164211996041 1760.000000000000 +544.339325990071 1415.000000000000 +546.913817544760 2912.000000000000 +547.914903230189 1254.000000000000 +610.183749066707 2160.000000000000 +611.183884033885 1283.000000000000 +645.156997893402 7650.000000000000 +646.160667456787 3315.000000000000 +647.154701516229 9174.000000000000 +648.157895170257 3104.000000000000 +649.152380094183 3397.000000000000 +673.045753694998 1272.428222656250 +>ms2peaks +##n_id sample=1 period=1 cycle=663 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=663 experiment=4_0 +##scan 51 +##specref ms_run[1]:sample=1 period=1 cycle=663 experiment=4 +70.042034041168 13.000000000000 +132.040889110567 30.000000000000 +339.399913718878 13.000000000000 +>compound 1_0-663005--52--UNKNOWN +>parentmass 392.047236888469 +>charge 1 +>rt 435.568999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +392.047236888469 1599.000000000000 +>ms1peaks +52.005966180500 2509.332031250000 +53.013507369873 14095.641601562500 +53.850970390711 1246.033935546875 +54.009372281497 342031.000000000000 +55.006163575275 5705.965820312500 +55.011387270805 6127.473144531250 +55.054184206823 1848.058593750000 +55.934334911976 6140.810546875000 +56.049690767818 1330.017089843750 +56.942074959092 2606.667480468750 +59.049518267006 56697.359375000000 +60.044566292185 9567.453125000000 +60.051796148101 5984.580078125000 +61.039393490257 1915.440551757812 +63.997909973617 3748.628417968750 +64.005283923938 4326.699218750000 +68.011628084817 27292.236328125000 +68.993816323075 12618.667968750000 +69.032897101129 1379.142456054688 +69.044540912933 13986.380859375000 +72.936558146637 2579.000000000000 +73.064228849484 1913.000000000000 +76.486180881623 2682.000244140625 +79.021000086474 14334.086914062500 +80.049089873152 11904.342773437500 +81.937137428830 9328.000000000000 +82.996717483329 9530.261718750000 +87.044278019735 1244.984619140625 +87.054474952312 1464.973510742188 +89.506620387415 1797.000000000000 +90.489369315210 1750.000000000000 +91.053371587935 1520.000000000000 +95.952544398364 2306.000000000000 +97.967985008693 7122.677246093750 +98.983597639133 2707.236572265625 +102.090693288494 2155.000000000000 +109.942639865272 1479.000000000000 +113.962988365185 2088.000000000000 +114.090715282838 10161.079101562500 +118.085459870469 7107.342285156250 +122.095676141264 3819.024658203125 +122.963182714449 11743.000000000000 +123.091076294906 1884.834838867188 +123.962710172625 1278.000000000000 +130.158549361780 1309.000000000000 +132.043510097675 6102.050781250000 +136.020884350350 1696.428710937500 +136.110913014003 1219.864746093750 +141.090089283606 1510.582885742188 +141.112164115087 1395.173217773438 +141.957727661927 16172.547851562500 +147.090953742167 2593.000000000000 +149.022660175650 5113.270019531250 +149.042184219595 2270.130126953125 +151.095573062425 2291.701904296875 +151.109764648433 2508.697753906250 +155.069421770644 1304.007690429688 +155.105956399660 1556.186767578125 +155.973291029133 4647.000000000000 +158.153352334475 13909.827148437500 +159.156157365710 1453.476074218750 +160.049315575157 1807.000000000000 +161.095748922100 1676.696289062500 +164.141989249057 1365.831665039062 +170.095477046624 2501.143554687500 +171.138013785490 3982.982177734375 +172.134863309732 1431.708251953125 +173.080523810193 6956.130371093750 +174.991175918913 9969.217773437500 +176.988389097507 3050.117675781250 +177.054118074174 1458.434448242188 +178.157975354817 1551.791381835938 +179.106014386017 6976.000000000000 +182.960744773798 1855.346191406250 +182.979834217019 1800.970458984375 +186.220995397905 2442.000000000000 +194.116040015282 3148.000000000000 +195.104779764897 1691.220825195312 +195.121820949901 2158.996582031250 +198.184910946765 2078.562744140625 +217.106618021168 23378.933593750000 +218.110011440618 2630.000000000000 +219.095176701267 2434.000000000000 +228.195374276500 1663.423095703125 +235.168383933758 1236.068969726562 +236.166825939935 1254.000000000000 +239.088686366357 4311.829589843750 +242.284913917132 1324.000000000000 +246.862288674394 3536.000000000000 +249.184859994698 1408.000000000000 +250.178788935105 1421.692382812500 +250.999929283760 20029.000000000000 +252.003012365740 1411.418090820312 +252.997001503914 12765.000000000000 +254.993768386515 1938.000000000000 +260.980022779583 1808.000000000000 +267.171368540006 1448.377807617188 +277.200433490599 1660.000000000000 +279.093759730917 2119.000000000000 +281.051032806120 1483.000000000000 +291.237715025520 1241.364013671875 +292.121361150912 285183.000000000000 +293.123834428448 45555.277343750000 +294.118427695985 93122.570312500000 +295.120641413580 15470.696289062500 +296.123835906431 1561.000000000000 +313.039035562555 16422.000000000000 +314.041466363413 2766.000000000000 +315.036563511042 10824.000000000000 +316.039700661579 1830.000000000000 +317.034195270562 1773.448120117188 +321.226781744505 2044.000000000000 +327.008089983734 28336.265625000000 +328.011190071085 2858.514404296875 +329.005295881569 27689.000000000000 +330.008649187278 3052.000000000000 +331.002098826780 9057.932617187500 +333.003548365368 1609.000000000000 +335.018062590141 2124.000000000000 +339.950891675362 1270.914672851562 +339.994456530817 4579.000000000000 +348.990164564731 4627.000000000000 +350.986598107700 4290.000000000000 +372.065686169920 4230.000000000000 +374.062221925680 3509.000000000000 +376.059337391009 1282.000000000000 +392.047236888469 1599.000000000000 +395.069603447750 1690.000000000000 +397.066731969223 1427.000000000000 +428.928860183743 1238.358520507812 +430.887744920288 1367.548706054688 +445.120189406834 2253.000000000000 +505.852818670435 4262.000000000000 +506.855243935787 1464.000000000000 +522.879200969200 1903.639038085938 +529.890071522891 1483.417846679688 +536.164962577408 4542.000000000000 +537.166020159870 2688.000000000000 +538.164211996041 1760.000000000000 +544.339325990071 1415.000000000000 +546.913817544760 2912.000000000000 +547.914903230189 1254.000000000000 +610.183749066707 2160.000000000000 +611.183884033885 1283.000000000000 +645.156997893402 7650.000000000000 +646.160667456787 3315.000000000000 +647.154701516229 9174.000000000000 +648.157895170257 3104.000000000000 +649.152380094183 3397.000000000000 +673.045753694998 1272.428222656250 +>ms2peaks +##n_id sample=1 period=1 cycle=663 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=663 experiment=5_0 +##scan 52 +##specref ms_run[1]:sample=1 period=1 cycle=663 experiment=5 +196.944269665891 60.000000000000 +200.799302685752 30.000000000000 +287.109367638317 13.000000000000 +351.004463556543 45.000000000000 +>compound 1_0-663006--53--UNKNOWN +>parentmass 397.066731969223 +>charge 1 +>rt 435.568999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +397.066731969223 1427.000000000000 +>ms1peaks +52.005966180500 2509.332031250000 +53.013507369873 14095.641601562500 +53.850970390711 1246.033935546875 +54.009372281497 342031.000000000000 +55.006163575275 5705.965820312500 +55.011387270805 6127.473144531250 +55.054184206823 1848.058593750000 +55.934334911976 6140.810546875000 +56.049690767818 1330.017089843750 +56.942074959092 2606.667480468750 +59.049518267006 56697.359375000000 +60.044566292185 9567.453125000000 +60.051796148101 5984.580078125000 +61.039393490257 1915.440551757812 +63.997909973617 3748.628417968750 +64.005283923938 4326.699218750000 +68.011628084817 27292.236328125000 +68.993816323075 12618.667968750000 +69.032897101129 1379.142456054688 +69.044540912933 13986.380859375000 +72.936558146637 2579.000000000000 +73.064228849484 1913.000000000000 +76.486180881623 2682.000244140625 +79.021000086474 14334.086914062500 +80.049089873152 11904.342773437500 +81.937137428830 9328.000000000000 +82.996717483329 9530.261718750000 +87.044278019735 1244.984619140625 +87.054474952312 1464.973510742188 +89.506620387415 1797.000000000000 +90.489369315210 1750.000000000000 +91.053371587935 1520.000000000000 +95.952544398364 2306.000000000000 +97.967985008693 7122.677246093750 +98.983597639133 2707.236572265625 +102.090693288494 2155.000000000000 +109.942639865272 1479.000000000000 +113.962988365185 2088.000000000000 +114.090715282838 10161.079101562500 +118.085459870469 7107.342285156250 +122.095676141264 3819.024658203125 +122.963182714449 11743.000000000000 +123.091076294906 1884.834838867188 +123.962710172625 1278.000000000000 +130.158549361780 1309.000000000000 +132.043510097675 6102.050781250000 +136.020884350350 1696.428710937500 +136.110913014003 1219.864746093750 +141.090089283606 1510.582885742188 +141.112164115087 1395.173217773438 +141.957727661927 16172.547851562500 +147.090953742167 2593.000000000000 +149.022660175650 5113.270019531250 +149.042184219595 2270.130126953125 +151.095573062425 2291.701904296875 +151.109764648433 2508.697753906250 +155.069421770644 1304.007690429688 +155.105956399660 1556.186767578125 +155.973291029133 4647.000000000000 +158.153352334475 13909.827148437500 +159.156157365710 1453.476074218750 +160.049315575157 1807.000000000000 +161.095748922100 1676.696289062500 +164.141989249057 1365.831665039062 +170.095477046624 2501.143554687500 +171.138013785490 3982.982177734375 +172.134863309732 1431.708251953125 +173.080523810193 6956.130371093750 +174.991175918913 9969.217773437500 +176.988389097507 3050.117675781250 +177.054118074174 1458.434448242188 +178.157975354817 1551.791381835938 +179.106014386017 6976.000000000000 +182.960744773798 1855.346191406250 +182.979834217019 1800.970458984375 +186.220995397905 2442.000000000000 +194.116040015282 3148.000000000000 +195.104779764897 1691.220825195312 +195.121820949901 2158.996582031250 +198.184910946765 2078.562744140625 +217.106618021168 23378.933593750000 +218.110011440618 2630.000000000000 +219.095176701267 2434.000000000000 +228.195374276500 1663.423095703125 +235.168383933758 1236.068969726562 +236.166825939935 1254.000000000000 +239.088686366357 4311.829589843750 +242.284913917132 1324.000000000000 +246.862288674394 3536.000000000000 +249.184859994698 1408.000000000000 +250.178788935105 1421.692382812500 +250.999929283760 20029.000000000000 +252.003012365740 1411.418090820312 +252.997001503914 12765.000000000000 +254.993768386515 1938.000000000000 +260.980022779583 1808.000000000000 +267.171368540006 1448.377807617188 +277.200433490599 1660.000000000000 +279.093759730917 2119.000000000000 +281.051032806120 1483.000000000000 +291.237715025520 1241.364013671875 +292.121361150912 285183.000000000000 +293.123834428448 45555.277343750000 +294.118427695985 93122.570312500000 +295.120641413580 15470.696289062500 +296.123835906431 1561.000000000000 +313.039035562555 16422.000000000000 +314.041466363413 2766.000000000000 +315.036563511042 10824.000000000000 +316.039700661579 1830.000000000000 +317.034195270562 1773.448120117188 +321.226781744505 2044.000000000000 +327.008089983734 28336.265625000000 +328.011190071085 2858.514404296875 +329.005295881569 27689.000000000000 +330.008649187278 3052.000000000000 +331.002098826780 9057.932617187500 +333.003548365368 1609.000000000000 +335.018062590141 2124.000000000000 +339.950891675362 1270.914672851562 +339.994456530817 4579.000000000000 +348.990164564731 4627.000000000000 +350.986598107700 4290.000000000000 +372.065686169920 4230.000000000000 +374.062221925680 3509.000000000000 +376.059337391009 1282.000000000000 +392.047236888469 1599.000000000000 +395.069603447750 1690.000000000000 +397.066731969223 1427.000000000000 +428.928860183743 1238.358520507812 +430.887744920288 1367.548706054688 +445.120189406834 2253.000000000000 +505.852818670435 4262.000000000000 +506.855243935787 1464.000000000000 +522.879200969200 1903.639038085938 +529.890071522891 1483.417846679688 +536.164962577408 4542.000000000000 +537.166020159870 2688.000000000000 +538.164211996041 1760.000000000000 +544.339325990071 1415.000000000000 +546.913817544760 2912.000000000000 +547.914903230189 1254.000000000000 +610.183749066707 2160.000000000000 +611.183884033885 1283.000000000000 +645.156997893402 7650.000000000000 +646.160667456787 3315.000000000000 +647.154701516229 9174.000000000000 +648.157895170257 3104.000000000000 +649.152380094183 3397.000000000000 +673.045753694998 1272.428222656250 +>ms2peaks +##n_id sample=1 period=1 cycle=663 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=663 experiment=6_0 +##scan 53 +##specref ms_run[1]:sample=1 period=1 cycle=663 experiment=6 +69.044210683165 90.000000000000 +266.979525618837 45.000000000000 +268.995691760962 225.000000000000 +285.961374389564 45.000000000000 +295.975889045146 30.000000000000 +295.994659435108 30.000000000000 +338.029878392992 105.000000000000 +356.042561221922 150.000000000000 +>compound 1_0-663008--54--UNKNOWN +>parentmass 647.154701516229 +>charge 1 +>rt 435.568999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +647.154701516229 9174.000000000000 +648.157895170257 3104.000000000000 +>ms1peaks +52.005966180500 2509.332031250000 +53.013507369873 14095.641601562500 +53.850970390711 1246.033935546875 +54.009372281497 342031.000000000000 +55.006163575275 5705.965820312500 +55.011387270805 6127.473144531250 +55.054184206823 1848.058593750000 +55.934334911976 6140.810546875000 +56.049690767818 1330.017089843750 +56.942074959092 2606.667480468750 +59.049518267006 56697.359375000000 +60.044566292185 9567.453125000000 +60.051796148101 5984.580078125000 +61.039393490257 1915.440551757812 +63.997909973617 3748.628417968750 +64.005283923938 4326.699218750000 +68.011628084817 27292.236328125000 +68.993816323075 12618.667968750000 +69.032897101129 1379.142456054688 +69.044540912933 13986.380859375000 +72.936558146637 2579.000000000000 +73.064228849484 1913.000000000000 +76.486180881623 2682.000244140625 +79.021000086474 14334.086914062500 +80.049089873152 11904.342773437500 +81.937137428830 9328.000000000000 +82.996717483329 9530.261718750000 +87.044278019735 1244.984619140625 +87.054474952312 1464.973510742188 +89.506620387415 1797.000000000000 +90.489369315210 1750.000000000000 +91.053371587935 1520.000000000000 +95.952544398364 2306.000000000000 +97.967985008693 7122.677246093750 +98.983597639133 2707.236572265625 +102.090693288494 2155.000000000000 +109.942639865272 1479.000000000000 +113.962988365185 2088.000000000000 +114.090715282838 10161.079101562500 +118.085459870469 7107.342285156250 +122.095676141264 3819.024658203125 +122.963182714449 11743.000000000000 +123.091076294906 1884.834838867188 +123.962710172625 1278.000000000000 +130.158549361780 1309.000000000000 +132.043510097675 6102.050781250000 +136.020884350350 1696.428710937500 +136.110913014003 1219.864746093750 +141.090089283606 1510.582885742188 +141.112164115087 1395.173217773438 +141.957727661927 16172.547851562500 +147.090953742167 2593.000000000000 +149.022660175650 5113.270019531250 +149.042184219595 2270.130126953125 +151.095573062425 2291.701904296875 +151.109764648433 2508.697753906250 +155.069421770644 1304.007690429688 +155.105956399660 1556.186767578125 +155.973291029133 4647.000000000000 +158.153352334475 13909.827148437500 +159.156157365710 1453.476074218750 +160.049315575157 1807.000000000000 +161.095748922100 1676.696289062500 +164.141989249057 1365.831665039062 +170.095477046624 2501.143554687500 +171.138013785490 3982.982177734375 +172.134863309732 1431.708251953125 +173.080523810193 6956.130371093750 +174.991175918913 9969.217773437500 +176.988389097507 3050.117675781250 +177.054118074174 1458.434448242188 +178.157975354817 1551.791381835938 +179.106014386017 6976.000000000000 +182.960744773798 1855.346191406250 +182.979834217019 1800.970458984375 +186.220995397905 2442.000000000000 +194.116040015282 3148.000000000000 +195.104779764897 1691.220825195312 +195.121820949901 2158.996582031250 +198.184910946765 2078.562744140625 +217.106618021168 23378.933593750000 +218.110011440618 2630.000000000000 +219.095176701267 2434.000000000000 +228.195374276500 1663.423095703125 +235.168383933758 1236.068969726562 +236.166825939935 1254.000000000000 +239.088686366357 4311.829589843750 +242.284913917132 1324.000000000000 +246.862288674394 3536.000000000000 +249.184859994698 1408.000000000000 +250.178788935105 1421.692382812500 +250.999929283760 20029.000000000000 +252.003012365740 1411.418090820312 +252.997001503914 12765.000000000000 +254.993768386515 1938.000000000000 +260.980022779583 1808.000000000000 +267.171368540006 1448.377807617188 +277.200433490599 1660.000000000000 +279.093759730917 2119.000000000000 +281.051032806120 1483.000000000000 +291.237715025520 1241.364013671875 +292.121361150912 285183.000000000000 +293.123834428448 45555.277343750000 +294.118427695985 93122.570312500000 +295.120641413580 15470.696289062500 +296.123835906431 1561.000000000000 +313.039035562555 16422.000000000000 +314.041466363413 2766.000000000000 +315.036563511042 10824.000000000000 +316.039700661579 1830.000000000000 +317.034195270562 1773.448120117188 +321.226781744505 2044.000000000000 +327.008089983734 28336.265625000000 +328.011190071085 2858.514404296875 +329.005295881569 27689.000000000000 +330.008649187278 3052.000000000000 +331.002098826780 9057.932617187500 +333.003548365368 1609.000000000000 +335.018062590141 2124.000000000000 +339.950891675362 1270.914672851562 +339.994456530817 4579.000000000000 +348.990164564731 4627.000000000000 +350.986598107700 4290.000000000000 +372.065686169920 4230.000000000000 +374.062221925680 3509.000000000000 +376.059337391009 1282.000000000000 +392.047236888469 1599.000000000000 +395.069603447750 1690.000000000000 +397.066731969223 1427.000000000000 +428.928860183743 1238.358520507812 +430.887744920288 1367.548706054688 +445.120189406834 2253.000000000000 +505.852818670435 4262.000000000000 +506.855243935787 1464.000000000000 +522.879200969200 1903.639038085938 +529.890071522891 1483.417846679688 +536.164962577408 4542.000000000000 +537.166020159870 2688.000000000000 +538.164211996041 1760.000000000000 +544.339325990071 1415.000000000000 +546.913817544760 2912.000000000000 +547.914903230189 1254.000000000000 +610.183749066707 2160.000000000000 +611.183884033885 1283.000000000000 +645.156997893402 7650.000000000000 +646.160667456787 3315.000000000000 +647.154701516229 9174.000000000000 +648.157895170257 3104.000000000000 +649.152380094183 3397.000000000000 +673.045753694998 1272.428222656250 +>ms2peaks +##n_id sample=1 period=1 cycle=663 experiment=8 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=663 experiment=8_0 +##scan 54 +##specref ms_run[1]:sample=1 period=1 cycle=663 experiment=8 +87.042604806507 6.000000000000 +131.960313200227 16.000000000000 +182.998385323593 16.000000000000 +203.062682391390 16.000000000000 +267.001132312198 55.000000000000 +268.994985449502 85.000000000000 +283.968166163393 61.410400390625 +284.002728908626 24.000000000000 +285.966803188608 39.000000000000 +287.004875040927 24.000000000000 +288.067313817794 6.000000000000 +311.973125923276 16.000000000000 +319.207305453989 6.000000000000 +335.010188654904 39.000000000000 +336.035209531649 123.000000000000 +337.570253630194 6.000000000000 +338.030185182611 361.000000000000 +354.042602342376 591.000000000000 +355.040735501216 78.000000000000 +356.041143627300 1389.000000000000 +647.154276158968 374.000000000000 +>compound 1_0-664002--56--UNKNOWN +>parentmass 252.996924958467 +>charge 1 +>rt 436.497000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +252.996924958467 20204.000000000000 +>ms1peaks +52.005453969998 2626.723144531250 +53.013597312446 12728.553710937500 +53.850414409821 1250.853881835938 +54.009329210909 348334.937500000000 +55.006062122532 5392.668457031250 +55.011342055713 6236.111816406250 +55.054021350211 1869.273437500000 +55.934286374440 6315.563964843750 +56.941831842622 2597.011962890625 +59.049520241177 68985.562500000000 +60.044238693811 9277.411132812500 +60.051306561624 7152.463378906250 +61.039638104919 1556.488891601562 +63.997844257749 4543.386718750000 +64.004868648059 4706.500976562500 +68.011536869512 28038.335937500000 +68.993647464953 12595.196289062500 +69.044515645070 12865.375976562500 +72.936647087938 2567.000000000000 +73.064121365067 1769.925781250000 +76.486182586418 2785.377929687500 +79.020888115541 15628.571289062500 +80.049060365715 12153.072265625000 +81.936978966817 8495.000000000000 +82.996309100211 9038.668945312500 +87.043494139885 1178.190917968750 +87.054319172330 1546.054443359375 +89.506956806916 1559.000000000000 +90.488703688296 1817.000000000000 +91.053777911785 1528.745483398438 +95.952341177386 2260.741210937500 +97.968210936145 7024.000000000000 +98.983399057372 5034.887695312500 +100.075304888654 1243.000000000000 +102.090957068479 1525.000000000000 +109.943109012828 1320.928710937500 +113.962992754591 2498.000000000000 +114.090728474154 10512.617187500000 +118.085470631803 6601.458007812500 +122.095607083049 3712.721679687500 +122.962888411087 10607.500976562500 +123.091509718457 1686.104614257812 +132.043186178558 2464.123291015625 +136.020620151667 1645.000000000000 +140.067164786600 1314.000000000000 +141.089863109573 1272.675292968750 +141.111890586678 1562.626220703125 +141.957557081223 15988.394531250000 +147.090173997086 2431.000000000000 +149.022336160605 4523.349121093750 +149.043636850784 1223.066040039062 +151.095789721496 2301.788818359375 +151.111113393103 2538.584228515625 +155.069111807472 1549.374267578125 +155.105759874764 1515.979370117188 +155.973112787773 4487.000000000000 +158.153378740203 12758.589843750000 +159.156448385204 1328.413452148438 +161.095542076597 1436.000000000000 +164.142018358830 1273.736083984375 +170.095175686942 2849.232421875000 +171.138207188731 2555.000000000000 +172.133475837479 1266.057739257812 +173.079557051502 6304.225097656250 +174.991247355031 15122.000000000000 +176.988586706089 4881.000000000000 +178.158242399689 1403.950073242188 +179.105412805866 3814.716552734375 +182.960601426951 1842.280639648438 +182.982966835265 1410.150146484375 +186.220883153188 1802.000000000000 +194.115976643286 3119.000000000000 +195.102214753451 1498.057617187500 +195.120897037407 1858.993774414062 +198.184171488074 2116.000000000000 +217.106332787106 21497.787109375000 +218.109128733639 2613.000000000000 +219.095226750847 2102.304443359375 +224.127626531368 1175.000000000000 +228.195317705032 1672.133422851562 +239.088374855672 3685.309814453125 +242.283185310790 1468.000000000000 +246.860952738993 3049.000000000000 +249.183720846634 1286.295654296875 +250.177140311956 1205.756591796875 +250.999832075601 32001.000000000000 +252.002106420824 2157.000000000000 +252.996924958467 20204.000000000000 +253.999797691244 1411.000000000000 +254.993496356863 3401.000000000000 +279.092906188567 2036.000000000000 +286.179288894577 8400.000000000000 +287.181689656808 1994.078002929688 +287.217541902151 1349.643310546875 +291.235948805059 1485.048828125000 +292.122314491142 439122.000000000000 +292.983059595137 1438.034667968750 +293.122671084767 47692.136718750000 +294.118451514065 133013.562500000000 +295.120454982262 22502.744140625000 +296.122607984390 2357.932373046875 +313.039105768504 33266.000000000000 +314.042149111497 5168.000000000000 +315.036268416268 21007.242187500000 +316.038403197349 3302.000000000000 +317.033014483539 3862.000000000000 +321.227057921370 1381.000000000000 +327.007877449001 47611.566406250000 +328.011115186819 4973.000000000000 +329.004794999861 46547.000000000000 +330.008005603352 4737.000000000000 +331.001868162022 15538.000000000000 +332.004876313775 1480.000000000000 +333.003299668985 2744.071777343750 +335.018886982057 3585.000000000000 +337.016084576435 2205.000000000000 +339.994390073568 1754.000000000000 +348.988792788967 6573.000000000000 +350.986916484867 6721.000000000000 +352.984603835989 2083.000000000000 +354.041095041215 1340.092163085938 +356.039619641072 1269.081298828125 +372.065048824891 6209.586914062500 +374.062468004687 6086.000000000000 +376.059148229590 1968.000000000000 +392.045330940334 2193.000000000000 +395.067648242738 2230.000000000000 +397.066134815272 1581.000000000000 +426.930515343123 1306.000000000000 +426.976513054277 1169.811889648438 +428.927149366436 1298.000000000000 +430.886640350010 1403.000000000000 +445.118913900930 2269.000000000000 +491.969645058197 1379.000000000000 +505.851389825487 3789.000000000000 +522.878326149515 1800.000000000000 +536.163456762234 4427.000000000000 +537.165324404735 2206.000000000000 +538.161529742511 1590.843383789062 +544.337468455008 1195.000000000000 +546.914116937371 2559.000000000000 +547.911876414748 1196.000000000000 +610.180850219782 2080.000000000000 +611.182328195703 1214.000000000000 +645.154717656738 8484.000000000000 +646.158700037782 2782.000000000000 +647.152980374288 9942.000000000000 +648.155555240546 3294.000000000000 +649.150621117204 4284.000000000000 +650.152709955400 1200.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=664 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=2_0 +##scan 56 +##specref ms_run[1]:sample=1 period=1 cycle=664 experiment=2 +77.016502900895 13.000000000000 +80.972489743235 60.000000000000 +98.982807445197 119.581855773926 +98.994196748779 104.889022827148 +142.078711904369 13.000000000000 +>compound 1_0-664005--59--UNKNOWN +>parentmass 330.008005603352 +>charge 1 +>rt 436.497000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +330.008005603352 4737.000000000000 +>ms1peaks +52.005453969998 2626.723144531250 +53.013597312446 12728.553710937500 +53.850414409821 1250.853881835938 +54.009329210909 348334.937500000000 +55.006062122532 5392.668457031250 +55.011342055713 6236.111816406250 +55.054021350211 1869.273437500000 +55.934286374440 6315.563964843750 +56.941831842622 2597.011962890625 +59.049520241177 68985.562500000000 +60.044238693811 9277.411132812500 +60.051306561624 7152.463378906250 +61.039638104919 1556.488891601562 +63.997844257749 4543.386718750000 +64.004868648059 4706.500976562500 +68.011536869512 28038.335937500000 +68.993647464953 12595.196289062500 +69.044515645070 12865.375976562500 +72.936647087938 2567.000000000000 +73.064121365067 1769.925781250000 +76.486182586418 2785.377929687500 +79.020888115541 15628.571289062500 +80.049060365715 12153.072265625000 +81.936978966817 8495.000000000000 +82.996309100211 9038.668945312500 +87.043494139885 1178.190917968750 +87.054319172330 1546.054443359375 +89.506956806916 1559.000000000000 +90.488703688296 1817.000000000000 +91.053777911785 1528.745483398438 +95.952341177386 2260.741210937500 +97.968210936145 7024.000000000000 +98.983399057372 5034.887695312500 +100.075304888654 1243.000000000000 +102.090957068479 1525.000000000000 +109.943109012828 1320.928710937500 +113.962992754591 2498.000000000000 +114.090728474154 10512.617187500000 +118.085470631803 6601.458007812500 +122.095607083049 3712.721679687500 +122.962888411087 10607.500976562500 +123.091509718457 1686.104614257812 +132.043186178558 2464.123291015625 +136.020620151667 1645.000000000000 +140.067164786600 1314.000000000000 +141.089863109573 1272.675292968750 +141.111890586678 1562.626220703125 +141.957557081223 15988.394531250000 +147.090173997086 2431.000000000000 +149.022336160605 4523.349121093750 +149.043636850784 1223.066040039062 +151.095789721496 2301.788818359375 +151.111113393103 2538.584228515625 +155.069111807472 1549.374267578125 +155.105759874764 1515.979370117188 +155.973112787773 4487.000000000000 +158.153378740203 12758.589843750000 +159.156448385204 1328.413452148438 +161.095542076597 1436.000000000000 +164.142018358830 1273.736083984375 +170.095175686942 2849.232421875000 +171.138207188731 2555.000000000000 +172.133475837479 1266.057739257812 +173.079557051502 6304.225097656250 +174.991247355031 15122.000000000000 +176.988586706089 4881.000000000000 +178.158242399689 1403.950073242188 +179.105412805866 3814.716552734375 +182.960601426951 1842.280639648438 +182.982966835265 1410.150146484375 +186.220883153188 1802.000000000000 +194.115976643286 3119.000000000000 +195.102214753451 1498.057617187500 +195.120897037407 1858.993774414062 +198.184171488074 2116.000000000000 +217.106332787106 21497.787109375000 +218.109128733639 2613.000000000000 +219.095226750847 2102.304443359375 +224.127626531368 1175.000000000000 +228.195317705032 1672.133422851562 +239.088374855672 3685.309814453125 +242.283185310790 1468.000000000000 +246.860952738993 3049.000000000000 +249.183720846634 1286.295654296875 +250.177140311956 1205.756591796875 +250.999832075601 32001.000000000000 +252.002106420824 2157.000000000000 +252.996924958467 20204.000000000000 +253.999797691244 1411.000000000000 +254.993496356863 3401.000000000000 +279.092906188567 2036.000000000000 +286.179288894577 8400.000000000000 +287.181689656808 1994.078002929688 +287.217541902151 1349.643310546875 +291.235948805059 1485.048828125000 +292.122314491142 439122.000000000000 +292.983059595137 1438.034667968750 +293.122671084767 47692.136718750000 +294.118451514065 133013.562500000000 +295.120454982262 22502.744140625000 +296.122607984390 2357.932373046875 +313.039105768504 33266.000000000000 +314.042149111497 5168.000000000000 +315.036268416268 21007.242187500000 +316.038403197349 3302.000000000000 +317.033014483539 3862.000000000000 +321.227057921370 1381.000000000000 +327.007877449001 47611.566406250000 +328.011115186819 4973.000000000000 +329.004794999861 46547.000000000000 +330.008005603352 4737.000000000000 +331.001868162022 15538.000000000000 +332.004876313775 1480.000000000000 +333.003299668985 2744.071777343750 +335.018886982057 3585.000000000000 +337.016084576435 2205.000000000000 +339.994390073568 1754.000000000000 +348.988792788967 6573.000000000000 +350.986916484867 6721.000000000000 +352.984603835989 2083.000000000000 +354.041095041215 1340.092163085938 +356.039619641072 1269.081298828125 +372.065048824891 6209.586914062500 +374.062468004687 6086.000000000000 +376.059148229590 1968.000000000000 +392.045330940334 2193.000000000000 +395.067648242738 2230.000000000000 +397.066134815272 1581.000000000000 +426.930515343123 1306.000000000000 +426.976513054277 1169.811889648438 +428.927149366436 1298.000000000000 +430.886640350010 1403.000000000000 +445.118913900930 2269.000000000000 +491.969645058197 1379.000000000000 +505.851389825487 3789.000000000000 +522.878326149515 1800.000000000000 +536.163456762234 4427.000000000000 +537.165324404735 2206.000000000000 +538.161529742511 1590.843383789062 +544.337468455008 1195.000000000000 +546.914116937371 2559.000000000000 +547.911876414748 1196.000000000000 +610.180850219782 2080.000000000000 +611.182328195703 1214.000000000000 +645.154717656738 8484.000000000000 +646.158700037782 2782.000000000000 +647.152980374288 9942.000000000000 +648.155555240546 3294.000000000000 +649.150621117204 4284.000000000000 +650.152709955400 1200.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=664 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=5_0 +##scan 59 +##specref ms_run[1]:sample=1 period=1 cycle=664 experiment=5 +62.963991045889 30.000000000000 +77.038213536939 13.000000000000 +80.975112258593 90.000000000000 +98.690297785460 15.000000000000 +98.712674960752 15.000000000000 +98.983624368216 1012.000000000000 +156.961371587084 75.000000000000 +158.977394491418 75.000000000000 +175.997787043806 30.000000000000 +176.998252677535 13.000000000000 +178.077227276091 13.000000000000 +184.954342963985 60.000000000000 +212.954269258896 75.000000000000 +212.976131237305 60.000000000000 +228.493454690255 13.000000000000 +230.962609451045 60.000000000000 +295.027307056200 105.000000000000 +313.044657222614 60.000000000000 +>compound 1_0-664007--61--UNKNOWN +>parentmass 428.927149366436 +>charge 1 +>rt 436.497000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +428.927149366436 1298.000000000000 +>ms1peaks +52.005453969998 2626.723144531250 +53.013597312446 12728.553710937500 +53.850414409821 1250.853881835938 +54.009329210909 348334.937500000000 +55.006062122532 5392.668457031250 +55.011342055713 6236.111816406250 +55.054021350211 1869.273437500000 +55.934286374440 6315.563964843750 +56.941831842622 2597.011962890625 +59.049520241177 68985.562500000000 +60.044238693811 9277.411132812500 +60.051306561624 7152.463378906250 +61.039638104919 1556.488891601562 +63.997844257749 4543.386718750000 +64.004868648059 4706.500976562500 +68.011536869512 28038.335937500000 +68.993647464953 12595.196289062500 +69.044515645070 12865.375976562500 +72.936647087938 2567.000000000000 +73.064121365067 1769.925781250000 +76.486182586418 2785.377929687500 +79.020888115541 15628.571289062500 +80.049060365715 12153.072265625000 +81.936978966817 8495.000000000000 +82.996309100211 9038.668945312500 +87.043494139885 1178.190917968750 +87.054319172330 1546.054443359375 +89.506956806916 1559.000000000000 +90.488703688296 1817.000000000000 +91.053777911785 1528.745483398438 +95.952341177386 2260.741210937500 +97.968210936145 7024.000000000000 +98.983399057372 5034.887695312500 +100.075304888654 1243.000000000000 +102.090957068479 1525.000000000000 +109.943109012828 1320.928710937500 +113.962992754591 2498.000000000000 +114.090728474154 10512.617187500000 +118.085470631803 6601.458007812500 +122.095607083049 3712.721679687500 +122.962888411087 10607.500976562500 +123.091509718457 1686.104614257812 +132.043186178558 2464.123291015625 +136.020620151667 1645.000000000000 +140.067164786600 1314.000000000000 +141.089863109573 1272.675292968750 +141.111890586678 1562.626220703125 +141.957557081223 15988.394531250000 +147.090173997086 2431.000000000000 +149.022336160605 4523.349121093750 +149.043636850784 1223.066040039062 +151.095789721496 2301.788818359375 +151.111113393103 2538.584228515625 +155.069111807472 1549.374267578125 +155.105759874764 1515.979370117188 +155.973112787773 4487.000000000000 +158.153378740203 12758.589843750000 +159.156448385204 1328.413452148438 +161.095542076597 1436.000000000000 +164.142018358830 1273.736083984375 +170.095175686942 2849.232421875000 +171.138207188731 2555.000000000000 +172.133475837479 1266.057739257812 +173.079557051502 6304.225097656250 +174.991247355031 15122.000000000000 +176.988586706089 4881.000000000000 +178.158242399689 1403.950073242188 +179.105412805866 3814.716552734375 +182.960601426951 1842.280639648438 +182.982966835265 1410.150146484375 +186.220883153188 1802.000000000000 +194.115976643286 3119.000000000000 +195.102214753451 1498.057617187500 +195.120897037407 1858.993774414062 +198.184171488074 2116.000000000000 +217.106332787106 21497.787109375000 +218.109128733639 2613.000000000000 +219.095226750847 2102.304443359375 +224.127626531368 1175.000000000000 +228.195317705032 1672.133422851562 +239.088374855672 3685.309814453125 +242.283185310790 1468.000000000000 +246.860952738993 3049.000000000000 +249.183720846634 1286.295654296875 +250.177140311956 1205.756591796875 +250.999832075601 32001.000000000000 +252.002106420824 2157.000000000000 +252.996924958467 20204.000000000000 +253.999797691244 1411.000000000000 +254.993496356863 3401.000000000000 +279.092906188567 2036.000000000000 +286.179288894577 8400.000000000000 +287.181689656808 1994.078002929688 +287.217541902151 1349.643310546875 +291.235948805059 1485.048828125000 +292.122314491142 439122.000000000000 +292.983059595137 1438.034667968750 +293.122671084767 47692.136718750000 +294.118451514065 133013.562500000000 +295.120454982262 22502.744140625000 +296.122607984390 2357.932373046875 +313.039105768504 33266.000000000000 +314.042149111497 5168.000000000000 +315.036268416268 21007.242187500000 +316.038403197349 3302.000000000000 +317.033014483539 3862.000000000000 +321.227057921370 1381.000000000000 +327.007877449001 47611.566406250000 +328.011115186819 4973.000000000000 +329.004794999861 46547.000000000000 +330.008005603352 4737.000000000000 +331.001868162022 15538.000000000000 +332.004876313775 1480.000000000000 +333.003299668985 2744.071777343750 +335.018886982057 3585.000000000000 +337.016084576435 2205.000000000000 +339.994390073568 1754.000000000000 +348.988792788967 6573.000000000000 +350.986916484867 6721.000000000000 +352.984603835989 2083.000000000000 +354.041095041215 1340.092163085938 +356.039619641072 1269.081298828125 +372.065048824891 6209.586914062500 +374.062468004687 6086.000000000000 +376.059148229590 1968.000000000000 +392.045330940334 2193.000000000000 +395.067648242738 2230.000000000000 +397.066134815272 1581.000000000000 +426.930515343123 1306.000000000000 +426.976513054277 1169.811889648438 +428.927149366436 1298.000000000000 +430.886640350010 1403.000000000000 +445.118913900930 2269.000000000000 +491.969645058197 1379.000000000000 +505.851389825487 3789.000000000000 +522.878326149515 1800.000000000000 +536.163456762234 4427.000000000000 +537.165324404735 2206.000000000000 +538.161529742511 1590.843383789062 +544.337468455008 1195.000000000000 +546.914116937371 2559.000000000000 +547.911876414748 1196.000000000000 +610.180850219782 2080.000000000000 +611.182328195703 1214.000000000000 +645.154717656738 8484.000000000000 +646.158700037782 2782.000000000000 +647.152980374288 9942.000000000000 +648.155555240546 3294.000000000000 +649.150621117204 4284.000000000000 +650.152709955400 1200.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=664 experiment=7 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=7_0 +##scan 61 +##specref ms_run[1]:sample=1 period=1 cycle=664 experiment=7 +98.986556629867 13.000000000000 +133.075811737643 13.000000000000 +208.949278139608 30.000000000000 +>compound 1_0-664008--62--UNKNOWN +>parentmass 491.969645058197 +>charge 1 +>rt 436.497000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +491.969645058197 1379.000000000000 +>ms1peaks +52.005453969998 2626.723144531250 +53.013597312446 12728.553710937500 +53.850414409821 1250.853881835938 +54.009329210909 348334.937500000000 +55.006062122532 5392.668457031250 +55.011342055713 6236.111816406250 +55.054021350211 1869.273437500000 +55.934286374440 6315.563964843750 +56.941831842622 2597.011962890625 +59.049520241177 68985.562500000000 +60.044238693811 9277.411132812500 +60.051306561624 7152.463378906250 +61.039638104919 1556.488891601562 +63.997844257749 4543.386718750000 +64.004868648059 4706.500976562500 +68.011536869512 28038.335937500000 +68.993647464953 12595.196289062500 +69.044515645070 12865.375976562500 +72.936647087938 2567.000000000000 +73.064121365067 1769.925781250000 +76.486182586418 2785.377929687500 +79.020888115541 15628.571289062500 +80.049060365715 12153.072265625000 +81.936978966817 8495.000000000000 +82.996309100211 9038.668945312500 +87.043494139885 1178.190917968750 +87.054319172330 1546.054443359375 +89.506956806916 1559.000000000000 +90.488703688296 1817.000000000000 +91.053777911785 1528.745483398438 +95.952341177386 2260.741210937500 +97.968210936145 7024.000000000000 +98.983399057372 5034.887695312500 +100.075304888654 1243.000000000000 +102.090957068479 1525.000000000000 +109.943109012828 1320.928710937500 +113.962992754591 2498.000000000000 +114.090728474154 10512.617187500000 +118.085470631803 6601.458007812500 +122.095607083049 3712.721679687500 +122.962888411087 10607.500976562500 +123.091509718457 1686.104614257812 +132.043186178558 2464.123291015625 +136.020620151667 1645.000000000000 +140.067164786600 1314.000000000000 +141.089863109573 1272.675292968750 +141.111890586678 1562.626220703125 +141.957557081223 15988.394531250000 +147.090173997086 2431.000000000000 +149.022336160605 4523.349121093750 +149.043636850784 1223.066040039062 +151.095789721496 2301.788818359375 +151.111113393103 2538.584228515625 +155.069111807472 1549.374267578125 +155.105759874764 1515.979370117188 +155.973112787773 4487.000000000000 +158.153378740203 12758.589843750000 +159.156448385204 1328.413452148438 +161.095542076597 1436.000000000000 +164.142018358830 1273.736083984375 +170.095175686942 2849.232421875000 +171.138207188731 2555.000000000000 +172.133475837479 1266.057739257812 +173.079557051502 6304.225097656250 +174.991247355031 15122.000000000000 +176.988586706089 4881.000000000000 +178.158242399689 1403.950073242188 +179.105412805866 3814.716552734375 +182.960601426951 1842.280639648438 +182.982966835265 1410.150146484375 +186.220883153188 1802.000000000000 +194.115976643286 3119.000000000000 +195.102214753451 1498.057617187500 +195.120897037407 1858.993774414062 +198.184171488074 2116.000000000000 +217.106332787106 21497.787109375000 +218.109128733639 2613.000000000000 +219.095226750847 2102.304443359375 +224.127626531368 1175.000000000000 +228.195317705032 1672.133422851562 +239.088374855672 3685.309814453125 +242.283185310790 1468.000000000000 +246.860952738993 3049.000000000000 +249.183720846634 1286.295654296875 +250.177140311956 1205.756591796875 +250.999832075601 32001.000000000000 +252.002106420824 2157.000000000000 +252.996924958467 20204.000000000000 +253.999797691244 1411.000000000000 +254.993496356863 3401.000000000000 +279.092906188567 2036.000000000000 +286.179288894577 8400.000000000000 +287.181689656808 1994.078002929688 +287.217541902151 1349.643310546875 +291.235948805059 1485.048828125000 +292.122314491142 439122.000000000000 +292.983059595137 1438.034667968750 +293.122671084767 47692.136718750000 +294.118451514065 133013.562500000000 +295.120454982262 22502.744140625000 +296.122607984390 2357.932373046875 +313.039105768504 33266.000000000000 +314.042149111497 5168.000000000000 +315.036268416268 21007.242187500000 +316.038403197349 3302.000000000000 +317.033014483539 3862.000000000000 +321.227057921370 1381.000000000000 +327.007877449001 47611.566406250000 +328.011115186819 4973.000000000000 +329.004794999861 46547.000000000000 +330.008005603352 4737.000000000000 +331.001868162022 15538.000000000000 +332.004876313775 1480.000000000000 +333.003299668985 2744.071777343750 +335.018886982057 3585.000000000000 +337.016084576435 2205.000000000000 +339.994390073568 1754.000000000000 +348.988792788967 6573.000000000000 +350.986916484867 6721.000000000000 +352.984603835989 2083.000000000000 +354.041095041215 1340.092163085938 +356.039619641072 1269.081298828125 +372.065048824891 6209.586914062500 +374.062468004687 6086.000000000000 +376.059148229590 1968.000000000000 +392.045330940334 2193.000000000000 +395.067648242738 2230.000000000000 +397.066134815272 1581.000000000000 +426.930515343123 1306.000000000000 +426.976513054277 1169.811889648438 +428.927149366436 1298.000000000000 +430.886640350010 1403.000000000000 +445.118913900930 2269.000000000000 +491.969645058197 1379.000000000000 +505.851389825487 3789.000000000000 +522.878326149515 1800.000000000000 +536.163456762234 4427.000000000000 +537.165324404735 2206.000000000000 +538.161529742511 1590.843383789062 +544.337468455008 1195.000000000000 +546.914116937371 2559.000000000000 +547.911876414748 1196.000000000000 +610.180850219782 2080.000000000000 +611.182328195703 1214.000000000000 +645.154717656738 8484.000000000000 +646.158700037782 2782.000000000000 +647.152980374288 9942.000000000000 +648.155555240546 3294.000000000000 +649.150621117204 4284.000000000000 +650.152709955400 1200.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=664 experiment=8 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=8_0 +##scan 62 +##specref ms_run[1]:sample=1 period=1 cycle=664 experiment=8 +240.827061170975 13.000000000000 +>compound 1_0-664009--63--UNKNOWN +>parentmass 647.152980374288 +>charge 1 +>rt 436.497000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +647.152980374288 9942.000000000000 +>ms1peaks +52.005453969998 2626.723144531250 +53.013597312446 12728.553710937500 +53.850414409821 1250.853881835938 +54.009329210909 348334.937500000000 +55.006062122532 5392.668457031250 +55.011342055713 6236.111816406250 +55.054021350211 1869.273437500000 +55.934286374440 6315.563964843750 +56.941831842622 2597.011962890625 +59.049520241177 68985.562500000000 +60.044238693811 9277.411132812500 +60.051306561624 7152.463378906250 +61.039638104919 1556.488891601562 +63.997844257749 4543.386718750000 +64.004868648059 4706.500976562500 +68.011536869512 28038.335937500000 +68.993647464953 12595.196289062500 +69.044515645070 12865.375976562500 +72.936647087938 2567.000000000000 +73.064121365067 1769.925781250000 +76.486182586418 2785.377929687500 +79.020888115541 15628.571289062500 +80.049060365715 12153.072265625000 +81.936978966817 8495.000000000000 +82.996309100211 9038.668945312500 +87.043494139885 1178.190917968750 +87.054319172330 1546.054443359375 +89.506956806916 1559.000000000000 +90.488703688296 1817.000000000000 +91.053777911785 1528.745483398438 +95.952341177386 2260.741210937500 +97.968210936145 7024.000000000000 +98.983399057372 5034.887695312500 +100.075304888654 1243.000000000000 +102.090957068479 1525.000000000000 +109.943109012828 1320.928710937500 +113.962992754591 2498.000000000000 +114.090728474154 10512.617187500000 +118.085470631803 6601.458007812500 +122.095607083049 3712.721679687500 +122.962888411087 10607.500976562500 +123.091509718457 1686.104614257812 +132.043186178558 2464.123291015625 +136.020620151667 1645.000000000000 +140.067164786600 1314.000000000000 +141.089863109573 1272.675292968750 +141.111890586678 1562.626220703125 +141.957557081223 15988.394531250000 +147.090173997086 2431.000000000000 +149.022336160605 4523.349121093750 +149.043636850784 1223.066040039062 +151.095789721496 2301.788818359375 +151.111113393103 2538.584228515625 +155.069111807472 1549.374267578125 +155.105759874764 1515.979370117188 +155.973112787773 4487.000000000000 +158.153378740203 12758.589843750000 +159.156448385204 1328.413452148438 +161.095542076597 1436.000000000000 +164.142018358830 1273.736083984375 +170.095175686942 2849.232421875000 +171.138207188731 2555.000000000000 +172.133475837479 1266.057739257812 +173.079557051502 6304.225097656250 +174.991247355031 15122.000000000000 +176.988586706089 4881.000000000000 +178.158242399689 1403.950073242188 +179.105412805866 3814.716552734375 +182.960601426951 1842.280639648438 +182.982966835265 1410.150146484375 +186.220883153188 1802.000000000000 +194.115976643286 3119.000000000000 +195.102214753451 1498.057617187500 +195.120897037407 1858.993774414062 +198.184171488074 2116.000000000000 +217.106332787106 21497.787109375000 +218.109128733639 2613.000000000000 +219.095226750847 2102.304443359375 +224.127626531368 1175.000000000000 +228.195317705032 1672.133422851562 +239.088374855672 3685.309814453125 +242.283185310790 1468.000000000000 +246.860952738993 3049.000000000000 +249.183720846634 1286.295654296875 +250.177140311956 1205.756591796875 +250.999832075601 32001.000000000000 +252.002106420824 2157.000000000000 +252.996924958467 20204.000000000000 +253.999797691244 1411.000000000000 +254.993496356863 3401.000000000000 +279.092906188567 2036.000000000000 +286.179288894577 8400.000000000000 +287.181689656808 1994.078002929688 +287.217541902151 1349.643310546875 +291.235948805059 1485.048828125000 +292.122314491142 439122.000000000000 +292.983059595137 1438.034667968750 +293.122671084767 47692.136718750000 +294.118451514065 133013.562500000000 +295.120454982262 22502.744140625000 +296.122607984390 2357.932373046875 +313.039105768504 33266.000000000000 +314.042149111497 5168.000000000000 +315.036268416268 21007.242187500000 +316.038403197349 3302.000000000000 +317.033014483539 3862.000000000000 +321.227057921370 1381.000000000000 +327.007877449001 47611.566406250000 +328.011115186819 4973.000000000000 +329.004794999861 46547.000000000000 +330.008005603352 4737.000000000000 +331.001868162022 15538.000000000000 +332.004876313775 1480.000000000000 +333.003299668985 2744.071777343750 +335.018886982057 3585.000000000000 +337.016084576435 2205.000000000000 +339.994390073568 1754.000000000000 +348.988792788967 6573.000000000000 +350.986916484867 6721.000000000000 +352.984603835989 2083.000000000000 +354.041095041215 1340.092163085938 +356.039619641072 1269.081298828125 +372.065048824891 6209.586914062500 +374.062468004687 6086.000000000000 +376.059148229590 1968.000000000000 +392.045330940334 2193.000000000000 +395.067648242738 2230.000000000000 +397.066134815272 1581.000000000000 +426.930515343123 1306.000000000000 +426.976513054277 1169.811889648438 +428.927149366436 1298.000000000000 +430.886640350010 1403.000000000000 +445.118913900930 2269.000000000000 +491.969645058197 1379.000000000000 +505.851389825487 3789.000000000000 +522.878326149515 1800.000000000000 +536.163456762234 4427.000000000000 +537.165324404735 2206.000000000000 +538.161529742511 1590.843383789062 +544.337468455008 1195.000000000000 +546.914116937371 2559.000000000000 +547.911876414748 1196.000000000000 +610.180850219782 2080.000000000000 +611.182328195703 1214.000000000000 +645.154717656738 8484.000000000000 +646.158700037782 2782.000000000000 +647.152980374288 9942.000000000000 +648.155555240546 3294.000000000000 +649.150621117204 4284.000000000000 +650.152709955400 1200.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=664 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=9_0 +##scan 63 +##specref ms_run[1]:sample=1 period=1 cycle=664 experiment=9 +266.995958954568 30.000000000000 +268.997143967970 90.000000000000 +284.008810984111 15.000000000000 +285.013429702575 15.000000000000 +313.973796740665 30.000000000000 +336.029363639623 105.000000000000 +338.029837337198 285.000000000000 +354.042937205568 467.000000000000 +355.053935770849 30.000000000000 +356.039766448800 987.000000000000 +374.058630154883 13.000000000000 +647.155035410594 450.000000000000 +>compound 1_0-665002--65--UNKNOWN +>parentmass 98.982987677469 +>charge 1 +>rt 437.422999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +98.982987677469 4854.522460937500 +>ms1peaks +52.005349834334 2531.576904296875 +52.017818445883 1415.950317382812 +53.013312992683 14436.391601562500 +53.850256514170 1311.865234375000 +54.009237809188 346906.656250000000 +55.005700977113 5493.924316406250 +55.011578128004 6377.684570312500 +55.053978874167 1984.071533203125 +55.933999133980 6168.766601562500 +56.049511919157 2977.762207031250 +56.942056567735 2284.776855468750 +59.049350876787 53629.328125000000 +60.044322757483 8600.164062500000 +61.039156449004 1644.316650390625 +63.997508188870 3394.982910156250 +64.005057234464 4259.679687500000 +67.029035810216 2293.846923828125 +68.011280581573 27100.835937500000 +68.993371510951 13738.876953125000 +69.007497995886 1441.296142578125 +69.044403084909 13070.419921875000 +72.936195718172 2643.000000000000 +73.063931102643 1919.621459960938 +76.486167754556 1986.000000000000 +79.020619039319 14111.753906250000 +80.048823728166 11369.215820312500 +81.936905757296 8703.630859375000 +82.996214707689 8986.651367187500 +87.054271044459 1595.093627929688 +89.505822079267 1760.000000000000 +90.488874903389 1822.018798828125 +91.053163445835 1300.610839843750 +95.952331345900 2696.000000000000 +97.967781752031 7299.724609375000 +98.982987677469 4854.522460937500 +102.090290867080 1906.000000000000 +109.942394870381 1583.000000000000 +113.962086127466 2074.000000000000 +114.090395399108 10058.849609375000 +118.084999014032 6547.758789062500 +122.095088721755 3711.124511718750 +122.962603857586 10794.167968750000 +123.090649527845 1803.942016601562 +123.961855384374 1203.000000000000 +130.157739418261 1256.000000000000 +136.020039379796 2083.000000000000 +136.110849290905 1530.000000000000 +141.089744053815 1237.175415039062 +141.111592847426 1371.696777343750 +141.957218960001 15367.227539062500 +147.090011968413 2463.000000000000 +149.021828990169 4784.995605468750 +149.041466762922 2472.640625000000 +151.095944798794 2940.508300781250 +151.109341918543 3165.085693359375 +155.069344508958 1582.135864257812 +155.105135879836 1693.281616210938 +155.972287468254 4554.340332031250 +158.152759351824 13585.107421875000 +159.156196357366 1465.921386718750 +159.967851357038 1225.276977539062 +161.095405694183 1641.000000000000 +164.141615127090 1478.434814453125 +170.094609622000 2457.688476562500 +171.141467030026 1915.000000000000 +173.079379445344 6273.838867187500 +174.990844938283 15688.865234375000 +176.987639364551 5360.525878906250 +177.052467267277 1475.000000000000 +178.157540067017 1547.000000000000 +179.105091602082 3287.998779296875 +182.959873591311 1986.817871093750 +186.220399692631 1658.000000000000 +194.115345005627 3116.000000000000 +195.120929712058 1968.662841796875 +198.184276303297 2015.000000000000 +217.105977610050 20924.755859375000 +218.108820705353 2495.792236328125 +219.094022022929 1823.679443359375 +228.194066029155 1666.038696289062 +239.087872978056 3722.000000000000 +242.282423819470 1362.000000000000 +246.860857987495 3450.000000000000 +249.182928857496 1266.000000000000 +250.177066939258 1504.335083007812 +250.999117678898 32221.000000000000 +252.001781095835 2314.000000000000 +252.995932699016 21462.000000000000 +253.998953923887 1371.000000000000 +254.993033756740 3403.000000000000 +267.170032496706 1345.000000000000 +279.092268016151 1928.000000000000 +281.050459546987 1487.000000000000 +286.178655880094 23309.207031250000 +287.182133845414 5196.471191406250 +291.235317712341 1559.882568359375 +292.121093988068 399090.000000000000 +292.982663908460 1255.682128906250 +293.023857907805 1542.287597656250 +293.121921829592 49425.335937500000 +294.117639052994 123150.929687500000 +295.119583284786 21162.347656250000 +296.122453171108 2024.725219726562 +304.297977116061 1205.098876953125 +311.183844763032 2282.703613281250 +313.038450493324 32210.287109375000 +314.041319280533 5035.671875000000 +315.035461346507 21071.000000000000 +316.038196392607 3544.000000000000 +317.032926032719 3656.000000000000 +327.007662782866 46713.000000000000 +328.009753952920 4731.131347656250 +329.004141727930 46254.000000000000 +330.006788270317 4440.000000000000 +331.000792355787 15238.000000000000 +332.003743171067 1635.000000000000 +333.001048030235 2840.547363281250 +335.018066518429 3857.000000000000 +337.016490283319 2257.000000000000 +348.988206068721 7382.000000000000 +350.985085465325 7259.000000000000 +352.983081816715 2462.000000000000 +354.041092701990 1411.000000000000 +358.095358680256 1344.000000000000 +372.064528986026 6467.495117187500 +374.061053722203 5695.000000000000 +376.059656060961 2211.000000000000 +392.044067632616 2143.000000000000 +395.066337210837 2288.000000000000 +397.065352026340 1841.000000000000 +428.895605409648 1348.684326171875 +428.927859796300 1412.000000000000 +445.117454275133 2106.000000000000 +491.967681975778 1277.000000000000 +505.850908455770 4139.747558593750 +522.876740252438 1800.000000000000 +536.161867901498 4607.000000000000 +537.162257475039 2465.000000000000 +538.160527239899 1695.000000000000 +544.336437856300 1324.164184570312 +546.911854407175 2375.000000000000 +547.911013918907 1216.000000000000 +610.179211400596 2165.000000000000 +611.181197363117 1284.000000000000 +645.153892760480 7294.000000000000 +646.156182811867 3135.000000000000 +647.151735773867 8987.490234375000 +648.154489817139 3184.000000000000 +649.150180493474 3821.591308593750 +650.151352616891 1194.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=665 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=665 experiment=2_0 +##scan 65 +##specref ms_run[1]:sample=1 period=1 cycle=665 experiment=2 +55.935898495830 75.000000000000 +62.963764738494 60.000000000000 +72.935053375154 30.000000000000 +80.973017357270 135.000000000000 +81.936608070413 90.000000000000 +>compound 1_0-665003--66--UNKNOWN +>parentmass 176.987639364551 +>charge 1 +>rt 437.422999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +176.987639364551 5360.525878906250 +>ms1peaks +52.005349834334 2531.576904296875 +52.017818445883 1415.950317382812 +53.013312992683 14436.391601562500 +53.850256514170 1311.865234375000 +54.009237809188 346906.656250000000 +55.005700977113 5493.924316406250 +55.011578128004 6377.684570312500 +55.053978874167 1984.071533203125 +55.933999133980 6168.766601562500 +56.049511919157 2977.762207031250 +56.942056567735 2284.776855468750 +59.049350876787 53629.328125000000 +60.044322757483 8600.164062500000 +61.039156449004 1644.316650390625 +63.997508188870 3394.982910156250 +64.005057234464 4259.679687500000 +67.029035810216 2293.846923828125 +68.011280581573 27100.835937500000 +68.993371510951 13738.876953125000 +69.007497995886 1441.296142578125 +69.044403084909 13070.419921875000 +72.936195718172 2643.000000000000 +73.063931102643 1919.621459960938 +76.486167754556 1986.000000000000 +79.020619039319 14111.753906250000 +80.048823728166 11369.215820312500 +81.936905757296 8703.630859375000 +82.996214707689 8986.651367187500 +87.054271044459 1595.093627929688 +89.505822079267 1760.000000000000 +90.488874903389 1822.018798828125 +91.053163445835 1300.610839843750 +95.952331345900 2696.000000000000 +97.967781752031 7299.724609375000 +98.982987677469 4854.522460937500 +102.090290867080 1906.000000000000 +109.942394870381 1583.000000000000 +113.962086127466 2074.000000000000 +114.090395399108 10058.849609375000 +118.084999014032 6547.758789062500 +122.095088721755 3711.124511718750 +122.962603857586 10794.167968750000 +123.090649527845 1803.942016601562 +123.961855384374 1203.000000000000 +130.157739418261 1256.000000000000 +136.020039379796 2083.000000000000 +136.110849290905 1530.000000000000 +141.089744053815 1237.175415039062 +141.111592847426 1371.696777343750 +141.957218960001 15367.227539062500 +147.090011968413 2463.000000000000 +149.021828990169 4784.995605468750 +149.041466762922 2472.640625000000 +151.095944798794 2940.508300781250 +151.109341918543 3165.085693359375 +155.069344508958 1582.135864257812 +155.105135879836 1693.281616210938 +155.972287468254 4554.340332031250 +158.152759351824 13585.107421875000 +159.156196357366 1465.921386718750 +159.967851357038 1225.276977539062 +161.095405694183 1641.000000000000 +164.141615127090 1478.434814453125 +170.094609622000 2457.688476562500 +171.141467030026 1915.000000000000 +173.079379445344 6273.838867187500 +174.990844938283 15688.865234375000 +176.987639364551 5360.525878906250 +177.052467267277 1475.000000000000 +178.157540067017 1547.000000000000 +179.105091602082 3287.998779296875 +182.959873591311 1986.817871093750 +186.220399692631 1658.000000000000 +194.115345005627 3116.000000000000 +195.120929712058 1968.662841796875 +198.184276303297 2015.000000000000 +217.105977610050 20924.755859375000 +218.108820705353 2495.792236328125 +219.094022022929 1823.679443359375 +228.194066029155 1666.038696289062 +239.087872978056 3722.000000000000 +242.282423819470 1362.000000000000 +246.860857987495 3450.000000000000 +249.182928857496 1266.000000000000 +250.177066939258 1504.335083007812 +250.999117678898 32221.000000000000 +252.001781095835 2314.000000000000 +252.995932699016 21462.000000000000 +253.998953923887 1371.000000000000 +254.993033756740 3403.000000000000 +267.170032496706 1345.000000000000 +279.092268016151 1928.000000000000 +281.050459546987 1487.000000000000 +286.178655880094 23309.207031250000 +287.182133845414 5196.471191406250 +291.235317712341 1559.882568359375 +292.121093988068 399090.000000000000 +292.982663908460 1255.682128906250 +293.023857907805 1542.287597656250 +293.121921829592 49425.335937500000 +294.117639052994 123150.929687500000 +295.119583284786 21162.347656250000 +296.122453171108 2024.725219726562 +304.297977116061 1205.098876953125 +311.183844763032 2282.703613281250 +313.038450493324 32210.287109375000 +314.041319280533 5035.671875000000 +315.035461346507 21071.000000000000 +316.038196392607 3544.000000000000 +317.032926032719 3656.000000000000 +327.007662782866 46713.000000000000 +328.009753952920 4731.131347656250 +329.004141727930 46254.000000000000 +330.006788270317 4440.000000000000 +331.000792355787 15238.000000000000 +332.003743171067 1635.000000000000 +333.001048030235 2840.547363281250 +335.018066518429 3857.000000000000 +337.016490283319 2257.000000000000 +348.988206068721 7382.000000000000 +350.985085465325 7259.000000000000 +352.983081816715 2462.000000000000 +354.041092701990 1411.000000000000 +358.095358680256 1344.000000000000 +372.064528986026 6467.495117187500 +374.061053722203 5695.000000000000 +376.059656060961 2211.000000000000 +392.044067632616 2143.000000000000 +395.066337210837 2288.000000000000 +397.065352026340 1841.000000000000 +428.895605409648 1348.684326171875 +428.927859796300 1412.000000000000 +445.117454275133 2106.000000000000 +491.967681975778 1277.000000000000 +505.850908455770 4139.747558593750 +522.876740252438 1800.000000000000 +536.161867901498 4607.000000000000 +537.162257475039 2465.000000000000 +538.160527239899 1695.000000000000 +544.336437856300 1324.164184570312 +546.911854407175 2375.000000000000 +547.911013918907 1216.000000000000 +610.179211400596 2165.000000000000 +611.181197363117 1284.000000000000 +645.153892760480 7294.000000000000 +646.156182811867 3135.000000000000 +647.151735773867 8987.490234375000 +648.154489817139 3184.000000000000 +649.150180493474 3821.591308593750 +650.151352616891 1194.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=665 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=665 experiment=3_0 +##scan 66 +##specref ms_run[1]:sample=1 period=1 cycle=665 experiment=3 +55.053253776895 15.000000000000 +55.065781137459 15.000000000000 +59.051364084622 13.000000000000 +65.036601733213 30.000000000000 +65.040726266398 30.000000000000 +98.985534799675 13.000000000000 +129.066776342241 13.000000000000 +133.049841945649 13.000000000000 +149.024197822655 45.000000000000 +178.160710659108 30.000000000000 +>compound 1_0-665004--67--UNKNOWN +>parentmass 250.999117678898 +>charge 1 +>rt 437.422999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +250.999117678898 32221.000000000000 +>ms1peaks +52.005349834334 2531.576904296875 +52.017818445883 1415.950317382812 +53.013312992683 14436.391601562500 +53.850256514170 1311.865234375000 +54.009237809188 346906.656250000000 +55.005700977113 5493.924316406250 +55.011578128004 6377.684570312500 +55.053978874167 1984.071533203125 +55.933999133980 6168.766601562500 +56.049511919157 2977.762207031250 +56.942056567735 2284.776855468750 +59.049350876787 53629.328125000000 +60.044322757483 8600.164062500000 +61.039156449004 1644.316650390625 +63.997508188870 3394.982910156250 +64.005057234464 4259.679687500000 +67.029035810216 2293.846923828125 +68.011280581573 27100.835937500000 +68.993371510951 13738.876953125000 +69.007497995886 1441.296142578125 +69.044403084909 13070.419921875000 +72.936195718172 2643.000000000000 +73.063931102643 1919.621459960938 +76.486167754556 1986.000000000000 +79.020619039319 14111.753906250000 +80.048823728166 11369.215820312500 +81.936905757296 8703.630859375000 +82.996214707689 8986.651367187500 +87.054271044459 1595.093627929688 +89.505822079267 1760.000000000000 +90.488874903389 1822.018798828125 +91.053163445835 1300.610839843750 +95.952331345900 2696.000000000000 +97.967781752031 7299.724609375000 +98.982987677469 4854.522460937500 +102.090290867080 1906.000000000000 +109.942394870381 1583.000000000000 +113.962086127466 2074.000000000000 +114.090395399108 10058.849609375000 +118.084999014032 6547.758789062500 +122.095088721755 3711.124511718750 +122.962603857586 10794.167968750000 +123.090649527845 1803.942016601562 +123.961855384374 1203.000000000000 +130.157739418261 1256.000000000000 +136.020039379796 2083.000000000000 +136.110849290905 1530.000000000000 +141.089744053815 1237.175415039062 +141.111592847426 1371.696777343750 +141.957218960001 15367.227539062500 +147.090011968413 2463.000000000000 +149.021828990169 4784.995605468750 +149.041466762922 2472.640625000000 +151.095944798794 2940.508300781250 +151.109341918543 3165.085693359375 +155.069344508958 1582.135864257812 +155.105135879836 1693.281616210938 +155.972287468254 4554.340332031250 +158.152759351824 13585.107421875000 +159.156196357366 1465.921386718750 +159.967851357038 1225.276977539062 +161.095405694183 1641.000000000000 +164.141615127090 1478.434814453125 +170.094609622000 2457.688476562500 +171.141467030026 1915.000000000000 +173.079379445344 6273.838867187500 +174.990844938283 15688.865234375000 +176.987639364551 5360.525878906250 +177.052467267277 1475.000000000000 +178.157540067017 1547.000000000000 +179.105091602082 3287.998779296875 +182.959873591311 1986.817871093750 +186.220399692631 1658.000000000000 +194.115345005627 3116.000000000000 +195.120929712058 1968.662841796875 +198.184276303297 2015.000000000000 +217.105977610050 20924.755859375000 +218.108820705353 2495.792236328125 +219.094022022929 1823.679443359375 +228.194066029155 1666.038696289062 +239.087872978056 3722.000000000000 +242.282423819470 1362.000000000000 +246.860857987495 3450.000000000000 +249.182928857496 1266.000000000000 +250.177066939258 1504.335083007812 +250.999117678898 32221.000000000000 +252.001781095835 2314.000000000000 +252.995932699016 21462.000000000000 +253.998953923887 1371.000000000000 +254.993033756740 3403.000000000000 +267.170032496706 1345.000000000000 +279.092268016151 1928.000000000000 +281.050459546987 1487.000000000000 +286.178655880094 23309.207031250000 +287.182133845414 5196.471191406250 +291.235317712341 1559.882568359375 +292.121093988068 399090.000000000000 +292.982663908460 1255.682128906250 +293.023857907805 1542.287597656250 +293.121921829592 49425.335937500000 +294.117639052994 123150.929687500000 +295.119583284786 21162.347656250000 +296.122453171108 2024.725219726562 +304.297977116061 1205.098876953125 +311.183844763032 2282.703613281250 +313.038450493324 32210.287109375000 +314.041319280533 5035.671875000000 +315.035461346507 21071.000000000000 +316.038196392607 3544.000000000000 +317.032926032719 3656.000000000000 +327.007662782866 46713.000000000000 +328.009753952920 4731.131347656250 +329.004141727930 46254.000000000000 +330.006788270317 4440.000000000000 +331.000792355787 15238.000000000000 +332.003743171067 1635.000000000000 +333.001048030235 2840.547363281250 +335.018066518429 3857.000000000000 +337.016490283319 2257.000000000000 +348.988206068721 7382.000000000000 +350.985085465325 7259.000000000000 +352.983081816715 2462.000000000000 +354.041092701990 1411.000000000000 +358.095358680256 1344.000000000000 +372.064528986026 6467.495117187500 +374.061053722203 5695.000000000000 +376.059656060961 2211.000000000000 +392.044067632616 2143.000000000000 +395.066337210837 2288.000000000000 +397.065352026340 1841.000000000000 +428.895605409648 1348.684326171875 +428.927859796300 1412.000000000000 +445.117454275133 2106.000000000000 +491.967681975778 1277.000000000000 +505.850908455770 4139.747558593750 +522.876740252438 1800.000000000000 +536.161867901498 4607.000000000000 +537.162257475039 2465.000000000000 +538.160527239899 1695.000000000000 +544.336437856300 1324.164184570312 +546.911854407175 2375.000000000000 +547.911013918907 1216.000000000000 +610.179211400596 2165.000000000000 +611.181197363117 1284.000000000000 +645.153892760480 7294.000000000000 +646.156182811867 3135.000000000000 +647.151735773867 8987.490234375000 +648.154489817139 3184.000000000000 +649.150180493474 3821.591308593750 +650.151352616891 1194.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=665 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=665 experiment=4_0 +##scan 67 +##specref ms_run[1]:sample=1 period=1 cycle=665 experiment=4 +98.983676187547 225.000000000000 +>compound 1_0-665007--70--UNKNOWN +>parentmass 329.004141727930 +>charge 1 +>rt 437.422999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +329.004141727930 46254.000000000000 +>ms1peaks +52.005349834334 2531.576904296875 +52.017818445883 1415.950317382812 +53.013312992683 14436.391601562500 +53.850256514170 1311.865234375000 +54.009237809188 346906.656250000000 +55.005700977113 5493.924316406250 +55.011578128004 6377.684570312500 +55.053978874167 1984.071533203125 +55.933999133980 6168.766601562500 +56.049511919157 2977.762207031250 +56.942056567735 2284.776855468750 +59.049350876787 53629.328125000000 +60.044322757483 8600.164062500000 +61.039156449004 1644.316650390625 +63.997508188870 3394.982910156250 +64.005057234464 4259.679687500000 +67.029035810216 2293.846923828125 +68.011280581573 27100.835937500000 +68.993371510951 13738.876953125000 +69.007497995886 1441.296142578125 +69.044403084909 13070.419921875000 +72.936195718172 2643.000000000000 +73.063931102643 1919.621459960938 +76.486167754556 1986.000000000000 +79.020619039319 14111.753906250000 +80.048823728166 11369.215820312500 +81.936905757296 8703.630859375000 +82.996214707689 8986.651367187500 +87.054271044459 1595.093627929688 +89.505822079267 1760.000000000000 +90.488874903389 1822.018798828125 +91.053163445835 1300.610839843750 +95.952331345900 2696.000000000000 +97.967781752031 7299.724609375000 +98.982987677469 4854.522460937500 +102.090290867080 1906.000000000000 +109.942394870381 1583.000000000000 +113.962086127466 2074.000000000000 +114.090395399108 10058.849609375000 +118.084999014032 6547.758789062500 +122.095088721755 3711.124511718750 +122.962603857586 10794.167968750000 +123.090649527845 1803.942016601562 +123.961855384374 1203.000000000000 +130.157739418261 1256.000000000000 +136.020039379796 2083.000000000000 +136.110849290905 1530.000000000000 +141.089744053815 1237.175415039062 +141.111592847426 1371.696777343750 +141.957218960001 15367.227539062500 +147.090011968413 2463.000000000000 +149.021828990169 4784.995605468750 +149.041466762922 2472.640625000000 +151.095944798794 2940.508300781250 +151.109341918543 3165.085693359375 +155.069344508958 1582.135864257812 +155.105135879836 1693.281616210938 +155.972287468254 4554.340332031250 +158.152759351824 13585.107421875000 +159.156196357366 1465.921386718750 +159.967851357038 1225.276977539062 +161.095405694183 1641.000000000000 +164.141615127090 1478.434814453125 +170.094609622000 2457.688476562500 +171.141467030026 1915.000000000000 +173.079379445344 6273.838867187500 +174.990844938283 15688.865234375000 +176.987639364551 5360.525878906250 +177.052467267277 1475.000000000000 +178.157540067017 1547.000000000000 +179.105091602082 3287.998779296875 +182.959873591311 1986.817871093750 +186.220399692631 1658.000000000000 +194.115345005627 3116.000000000000 +195.120929712058 1968.662841796875 +198.184276303297 2015.000000000000 +217.105977610050 20924.755859375000 +218.108820705353 2495.792236328125 +219.094022022929 1823.679443359375 +228.194066029155 1666.038696289062 +239.087872978056 3722.000000000000 +242.282423819470 1362.000000000000 +246.860857987495 3450.000000000000 +249.182928857496 1266.000000000000 +250.177066939258 1504.335083007812 +250.999117678898 32221.000000000000 +252.001781095835 2314.000000000000 +252.995932699016 21462.000000000000 +253.998953923887 1371.000000000000 +254.993033756740 3403.000000000000 +267.170032496706 1345.000000000000 +279.092268016151 1928.000000000000 +281.050459546987 1487.000000000000 +286.178655880094 23309.207031250000 +287.182133845414 5196.471191406250 +291.235317712341 1559.882568359375 +292.121093988068 399090.000000000000 +292.982663908460 1255.682128906250 +293.023857907805 1542.287597656250 +293.121921829592 49425.335937500000 +294.117639052994 123150.929687500000 +295.119583284786 21162.347656250000 +296.122453171108 2024.725219726562 +304.297977116061 1205.098876953125 +311.183844763032 2282.703613281250 +313.038450493324 32210.287109375000 +314.041319280533 5035.671875000000 +315.035461346507 21071.000000000000 +316.038196392607 3544.000000000000 +317.032926032719 3656.000000000000 +327.007662782866 46713.000000000000 +328.009753952920 4731.131347656250 +329.004141727930 46254.000000000000 +330.006788270317 4440.000000000000 +331.000792355787 15238.000000000000 +332.003743171067 1635.000000000000 +333.001048030235 2840.547363281250 +335.018066518429 3857.000000000000 +337.016490283319 2257.000000000000 +348.988206068721 7382.000000000000 +350.985085465325 7259.000000000000 +352.983081816715 2462.000000000000 +354.041092701990 1411.000000000000 +358.095358680256 1344.000000000000 +372.064528986026 6467.495117187500 +374.061053722203 5695.000000000000 +376.059656060961 2211.000000000000 +392.044067632616 2143.000000000000 +395.066337210837 2288.000000000000 +397.065352026340 1841.000000000000 +428.895605409648 1348.684326171875 +428.927859796300 1412.000000000000 +445.117454275133 2106.000000000000 +491.967681975778 1277.000000000000 +505.850908455770 4139.747558593750 +522.876740252438 1800.000000000000 +536.161867901498 4607.000000000000 +537.162257475039 2465.000000000000 +538.160527239899 1695.000000000000 +544.336437856300 1324.164184570312 +546.911854407175 2375.000000000000 +547.911013918907 1216.000000000000 +610.179211400596 2165.000000000000 +611.181197363117 1284.000000000000 +645.153892760480 7294.000000000000 +646.156182811867 3135.000000000000 +647.151735773867 8987.490234375000 +648.154489817139 3184.000000000000 +649.150180493474 3821.591308593750 +650.151352616891 1194.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=665 experiment=7 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=665 experiment=7_0 +##scan 70 +##specref ms_run[1]:sample=1 period=1 cycle=665 experiment=7 +80.973206086134 474.000000000000 +98.691175786184 60.000000000000 +98.699860688257 45.000000000000 +98.969679162489 455.384338378906 +98.983934179376 10033.775390625000 +100.989337065281 60.000000000000 +101.003119000240 30.000000000000 +128.869107660209 90.000000000000 +156.866948588954 90.000000000000 +172.861258594385 332.000000000000 +174.990026005959 105.000000000000 +176.987916793466 105.000000000000 +202.871227443859 60.000000000000 +246.859393536835 60.000000000000 +>compound 1_0-665008--71--UNKNOWN +>parentmass 335.018066518429 +>charge 1 +>rt 437.422999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +335.018066518429 3857.000000000000 +>ms1peaks +52.005349834334 2531.576904296875 +52.017818445883 1415.950317382812 +53.013312992683 14436.391601562500 +53.850256514170 1311.865234375000 +54.009237809188 346906.656250000000 +55.005700977113 5493.924316406250 +55.011578128004 6377.684570312500 +55.053978874167 1984.071533203125 +55.933999133980 6168.766601562500 +56.049511919157 2977.762207031250 +56.942056567735 2284.776855468750 +59.049350876787 53629.328125000000 +60.044322757483 8600.164062500000 +61.039156449004 1644.316650390625 +63.997508188870 3394.982910156250 +64.005057234464 4259.679687500000 +67.029035810216 2293.846923828125 +68.011280581573 27100.835937500000 +68.993371510951 13738.876953125000 +69.007497995886 1441.296142578125 +69.044403084909 13070.419921875000 +72.936195718172 2643.000000000000 +73.063931102643 1919.621459960938 +76.486167754556 1986.000000000000 +79.020619039319 14111.753906250000 +80.048823728166 11369.215820312500 +81.936905757296 8703.630859375000 +82.996214707689 8986.651367187500 +87.054271044459 1595.093627929688 +89.505822079267 1760.000000000000 +90.488874903389 1822.018798828125 +91.053163445835 1300.610839843750 +95.952331345900 2696.000000000000 +97.967781752031 7299.724609375000 +98.982987677469 4854.522460937500 +102.090290867080 1906.000000000000 +109.942394870381 1583.000000000000 +113.962086127466 2074.000000000000 +114.090395399108 10058.849609375000 +118.084999014032 6547.758789062500 +122.095088721755 3711.124511718750 +122.962603857586 10794.167968750000 +123.090649527845 1803.942016601562 +123.961855384374 1203.000000000000 +130.157739418261 1256.000000000000 +136.020039379796 2083.000000000000 +136.110849290905 1530.000000000000 +141.089744053815 1237.175415039062 +141.111592847426 1371.696777343750 +141.957218960001 15367.227539062500 +147.090011968413 2463.000000000000 +149.021828990169 4784.995605468750 +149.041466762922 2472.640625000000 +151.095944798794 2940.508300781250 +151.109341918543 3165.085693359375 +155.069344508958 1582.135864257812 +155.105135879836 1693.281616210938 +155.972287468254 4554.340332031250 +158.152759351824 13585.107421875000 +159.156196357366 1465.921386718750 +159.967851357038 1225.276977539062 +161.095405694183 1641.000000000000 +164.141615127090 1478.434814453125 +170.094609622000 2457.688476562500 +171.141467030026 1915.000000000000 +173.079379445344 6273.838867187500 +174.990844938283 15688.865234375000 +176.987639364551 5360.525878906250 +177.052467267277 1475.000000000000 +178.157540067017 1547.000000000000 +179.105091602082 3287.998779296875 +182.959873591311 1986.817871093750 +186.220399692631 1658.000000000000 +194.115345005627 3116.000000000000 +195.120929712058 1968.662841796875 +198.184276303297 2015.000000000000 +217.105977610050 20924.755859375000 +218.108820705353 2495.792236328125 +219.094022022929 1823.679443359375 +228.194066029155 1666.038696289062 +239.087872978056 3722.000000000000 +242.282423819470 1362.000000000000 +246.860857987495 3450.000000000000 +249.182928857496 1266.000000000000 +250.177066939258 1504.335083007812 +250.999117678898 32221.000000000000 +252.001781095835 2314.000000000000 +252.995932699016 21462.000000000000 +253.998953923887 1371.000000000000 +254.993033756740 3403.000000000000 +267.170032496706 1345.000000000000 +279.092268016151 1928.000000000000 +281.050459546987 1487.000000000000 +286.178655880094 23309.207031250000 +287.182133845414 5196.471191406250 +291.235317712341 1559.882568359375 +292.121093988068 399090.000000000000 +292.982663908460 1255.682128906250 +293.023857907805 1542.287597656250 +293.121921829592 49425.335937500000 +294.117639052994 123150.929687500000 +295.119583284786 21162.347656250000 +296.122453171108 2024.725219726562 +304.297977116061 1205.098876953125 +311.183844763032 2282.703613281250 +313.038450493324 32210.287109375000 +314.041319280533 5035.671875000000 +315.035461346507 21071.000000000000 +316.038196392607 3544.000000000000 +317.032926032719 3656.000000000000 +327.007662782866 46713.000000000000 +328.009753952920 4731.131347656250 +329.004141727930 46254.000000000000 +330.006788270317 4440.000000000000 +331.000792355787 15238.000000000000 +332.003743171067 1635.000000000000 +333.001048030235 2840.547363281250 +335.018066518429 3857.000000000000 +337.016490283319 2257.000000000000 +348.988206068721 7382.000000000000 +350.985085465325 7259.000000000000 +352.983081816715 2462.000000000000 +354.041092701990 1411.000000000000 +358.095358680256 1344.000000000000 +372.064528986026 6467.495117187500 +374.061053722203 5695.000000000000 +376.059656060961 2211.000000000000 +392.044067632616 2143.000000000000 +395.066337210837 2288.000000000000 +397.065352026340 1841.000000000000 +428.895605409648 1348.684326171875 +428.927859796300 1412.000000000000 +445.117454275133 2106.000000000000 +491.967681975778 1277.000000000000 +505.850908455770 4139.747558593750 +522.876740252438 1800.000000000000 +536.161867901498 4607.000000000000 +537.162257475039 2465.000000000000 +538.160527239899 1695.000000000000 +544.336437856300 1324.164184570312 +546.911854407175 2375.000000000000 +547.911013918907 1216.000000000000 +610.179211400596 2165.000000000000 +611.181197363117 1284.000000000000 +645.153892760480 7294.000000000000 +646.156182811867 3135.000000000000 +647.151735773867 8987.490234375000 +648.154489817139 3184.000000000000 +649.150180493474 3821.591308593750 +650.151352616891 1194.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=665 experiment=8 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=665 experiment=8_0 +##scan 71 +##specref ms_run[1]:sample=1 period=1 cycle=665 experiment=8 +164.174152858135 13.000000000000 +190.894251421786 13.000000000000 +217.948296724673 13.000000000000 +>compound 1_0-665009--72--UNKNOWN +>parentmass 397.065352026340 +>charge 1 +>rt 437.422999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +397.065352026340 1841.000000000000 +>ms1peaks +52.005349834334 2531.576904296875 +52.017818445883 1415.950317382812 +53.013312992683 14436.391601562500 +53.850256514170 1311.865234375000 +54.009237809188 346906.656250000000 +55.005700977113 5493.924316406250 +55.011578128004 6377.684570312500 +55.053978874167 1984.071533203125 +55.933999133980 6168.766601562500 +56.049511919157 2977.762207031250 +56.942056567735 2284.776855468750 +59.049350876787 53629.328125000000 +60.044322757483 8600.164062500000 +61.039156449004 1644.316650390625 +63.997508188870 3394.982910156250 +64.005057234464 4259.679687500000 +67.029035810216 2293.846923828125 +68.011280581573 27100.835937500000 +68.993371510951 13738.876953125000 +69.007497995886 1441.296142578125 +69.044403084909 13070.419921875000 +72.936195718172 2643.000000000000 +73.063931102643 1919.621459960938 +76.486167754556 1986.000000000000 +79.020619039319 14111.753906250000 +80.048823728166 11369.215820312500 +81.936905757296 8703.630859375000 +82.996214707689 8986.651367187500 +87.054271044459 1595.093627929688 +89.505822079267 1760.000000000000 +90.488874903389 1822.018798828125 +91.053163445835 1300.610839843750 +95.952331345900 2696.000000000000 +97.967781752031 7299.724609375000 +98.982987677469 4854.522460937500 +102.090290867080 1906.000000000000 +109.942394870381 1583.000000000000 +113.962086127466 2074.000000000000 +114.090395399108 10058.849609375000 +118.084999014032 6547.758789062500 +122.095088721755 3711.124511718750 +122.962603857586 10794.167968750000 +123.090649527845 1803.942016601562 +123.961855384374 1203.000000000000 +130.157739418261 1256.000000000000 +136.020039379796 2083.000000000000 +136.110849290905 1530.000000000000 +141.089744053815 1237.175415039062 +141.111592847426 1371.696777343750 +141.957218960001 15367.227539062500 +147.090011968413 2463.000000000000 +149.021828990169 4784.995605468750 +149.041466762922 2472.640625000000 +151.095944798794 2940.508300781250 +151.109341918543 3165.085693359375 +155.069344508958 1582.135864257812 +155.105135879836 1693.281616210938 +155.972287468254 4554.340332031250 +158.152759351824 13585.107421875000 +159.156196357366 1465.921386718750 +159.967851357038 1225.276977539062 +161.095405694183 1641.000000000000 +164.141615127090 1478.434814453125 +170.094609622000 2457.688476562500 +171.141467030026 1915.000000000000 +173.079379445344 6273.838867187500 +174.990844938283 15688.865234375000 +176.987639364551 5360.525878906250 +177.052467267277 1475.000000000000 +178.157540067017 1547.000000000000 +179.105091602082 3287.998779296875 +182.959873591311 1986.817871093750 +186.220399692631 1658.000000000000 +194.115345005627 3116.000000000000 +195.120929712058 1968.662841796875 +198.184276303297 2015.000000000000 +217.105977610050 20924.755859375000 +218.108820705353 2495.792236328125 +219.094022022929 1823.679443359375 +228.194066029155 1666.038696289062 +239.087872978056 3722.000000000000 +242.282423819470 1362.000000000000 +246.860857987495 3450.000000000000 +249.182928857496 1266.000000000000 +250.177066939258 1504.335083007812 +250.999117678898 32221.000000000000 +252.001781095835 2314.000000000000 +252.995932699016 21462.000000000000 +253.998953923887 1371.000000000000 +254.993033756740 3403.000000000000 +267.170032496706 1345.000000000000 +279.092268016151 1928.000000000000 +281.050459546987 1487.000000000000 +286.178655880094 23309.207031250000 +287.182133845414 5196.471191406250 +291.235317712341 1559.882568359375 +292.121093988068 399090.000000000000 +292.982663908460 1255.682128906250 +293.023857907805 1542.287597656250 +293.121921829592 49425.335937500000 +294.117639052994 123150.929687500000 +295.119583284786 21162.347656250000 +296.122453171108 2024.725219726562 +304.297977116061 1205.098876953125 +311.183844763032 2282.703613281250 +313.038450493324 32210.287109375000 +314.041319280533 5035.671875000000 +315.035461346507 21071.000000000000 +316.038196392607 3544.000000000000 +317.032926032719 3656.000000000000 +327.007662782866 46713.000000000000 +328.009753952920 4731.131347656250 +329.004141727930 46254.000000000000 +330.006788270317 4440.000000000000 +331.000792355787 15238.000000000000 +332.003743171067 1635.000000000000 +333.001048030235 2840.547363281250 +335.018066518429 3857.000000000000 +337.016490283319 2257.000000000000 +348.988206068721 7382.000000000000 +350.985085465325 7259.000000000000 +352.983081816715 2462.000000000000 +354.041092701990 1411.000000000000 +358.095358680256 1344.000000000000 +372.064528986026 6467.495117187500 +374.061053722203 5695.000000000000 +376.059656060961 2211.000000000000 +392.044067632616 2143.000000000000 +395.066337210837 2288.000000000000 +397.065352026340 1841.000000000000 +428.895605409648 1348.684326171875 +428.927859796300 1412.000000000000 +445.117454275133 2106.000000000000 +491.967681975778 1277.000000000000 +505.850908455770 4139.747558593750 +522.876740252438 1800.000000000000 +536.161867901498 4607.000000000000 +537.162257475039 2465.000000000000 +538.160527239899 1695.000000000000 +544.336437856300 1324.164184570312 +546.911854407175 2375.000000000000 +547.911013918907 1216.000000000000 +610.179211400596 2165.000000000000 +611.181197363117 1284.000000000000 +645.153892760480 7294.000000000000 +646.156182811867 3135.000000000000 +647.151735773867 8987.490234375000 +648.154489817139 3184.000000000000 +649.150180493474 3821.591308593750 +650.151352616891 1194.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=665 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=665 experiment=9_0 +##scan 72 +##specref ms_run[1]:sample=1 period=1 cycle=665 experiment=9 +69.040925369389 30.000000000000 +131.947607632016 45.000000000000 +131.958538591111 45.000000000000 +133.958038892445 30.000000000000 +268.998796621958 90.000000000000 +285.959130960569 30.000000000000 +338.030948340123 45.000000000000 +356.039202201384 90.000000000000 +>compound 1_0-666002--74--UNKNOWN +>parentmass 267.121226672435 +>charge 1 +>rt 438.351000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005546368410 2670.973876953125 +53.013447667176 13442.696289062500 +53.850235753676 1356.916015625000 +54.009375548499 346132.000000000000 +55.006052234178 5908.220703125000 +55.011327139628 6618.665039062500 +55.054273818991 1724.201538085938 +55.934183438349 6089.195312500000 +56.942085448242 2338.522949218750 +59.049497543886 62260.195312500000 +60.044496762287 9351.735351562500 +61.039589911785 1691.005004882812 +63.997480072658 3643.092529296875 +64.005073510260 4229.738281250000 +68.011506505752 28323.269531250000 +68.993585810696 12464.445312500000 +69.044640852940 13649.212890625000 +72.044186043856 1148.000000000000 +72.936480336335 2359.262451171875 +73.064260321862 1642.103027343750 +76.486297311909 2289.460693359375 +79.020766274604 15897.382812500000 +80.048988150704 12209.904296875000 +81.936792921049 8371.669921875000 +82.996095650262 8043.113281250000 +87.043834653730 1276.883422851562 +87.054214175865 1482.598144531250 +89.506458664277 1777.830322265625 +90.489196475802 1663.000000000000 +91.053755235930 1541.526000976562 +95.952402869893 2400.645751953125 +97.967886882016 8001.987304687500 +98.983532889025 3424.810302734375 +100.074677767759 1304.000000000000 +102.090242730316 1329.000000000000 +109.942679982849 1398.000000000000 +113.962690768860 1941.000000000000 +114.090409984344 11174.942382812500 +118.085207229958 6292.000000000000 +122.095068185146 3153.000000000000 +122.962957192644 10933.000000000000 +123.089979550376 1737.604248046875 +123.962216545241 1382.000000000000 +130.157851054625 1368.000000000000 +136.020636426938 1627.062988281250 +136.111496039851 1223.000000000000 +140.067223364828 1192.000000000000 +141.090663513328 1291.584838867188 +141.111904002369 1407.591674804688 +141.935850183021 1558.355590820312 +141.957535804851 16602.316406250000 +147.090073371469 2918.000000000000 +149.022242157340 5058.011230468750 +149.041140009202 2281.293701171875 +151.094511933196 2771.192138671875 +151.109513517514 3017.586181640625 +155.069293446605 1572.566406250000 +155.105166988042 1682.863525390625 +155.972752865047 4956.000000000000 +158.095291106412 1175.110473632812 +158.152897422617 13347.454101562500 +159.140146486584 1221.760620117188 +159.156626899127 1511.809692382812 +159.968130743445 1344.000000000000 +161.095301376904 1939.000000000000 +164.142147914813 1352.608276367188 +170.095211316489 2555.052490234375 +171.142065868167 1688.747070312500 +173.079666684779 7435.070800781250 +174.990876331450 12561.875976562500 +176.988228889313 4082.000000000000 +178.157451442432 1671.789062500000 +179.082574741649 1161.343872070312 +179.105464745461 2033.503295898438 +182.960688200025 1872.628540039062 +186.220236378822 1627.000000000000 +194.115587597029 3414.431152343750 +195.102521936100 1940.187622070312 +195.121153964710 2419.525878906250 +198.184119642186 2274.000000000000 +217.106221715984 24680.257812500000 +218.109389146592 2768.000000000000 +219.094928896725 1923.877807617188 +224.125737788530 1308.718017578125 +228.194389849522 1662.646850585938 +239.088555805042 4654.193847656250 +242.282289579657 1282.000000000000 +246.861651699246 3614.000000000000 +249.183697918794 1626.163208007812 +250.176302167701 1384.000000000000 +250.999159013320 25559.167968750000 +252.002213377038 1651.423461914062 +252.996445325154 16054.000000000000 +253.999379477884 1131.000000000000 +254.993447206468 2772.603271484375 +267.171432346745 1267.000000000000 +279.091928399145 1791.000000000000 +281.049474584863 1227.866455078125 +286.179096453069 25739.439453125000 +287.182281594319 5585.333496093750 +292.120716590068 202371.000000000000 +293.123166487022 34628.820312500000 +294.117931210581 66532.000000000000 +295.120340194058 11307.223632812500 +296.123175528233 1139.000000000000 +304.298333326187 1345.000000000000 +311.184016131023 2112.000000000000 +313.038042743243 19603.214843750000 +314.041307564911 3224.000000000000 +315.035568487358 12179.000000000000 +316.038573054615 2028.000000000000 +317.032999093534 2260.000000000000 +327.007882393116 37742.558593750000 +328.009892511372 3601.000000000000 +329.004296620889 35070.000000000000 +330.007896864877 3743.000000000000 +331.001397377526 12099.000000000000 +332.004304811118 1147.000000000000 +333.002267631798 2076.000000000000 +335.017770650220 2313.000000000000 +337.017035297896 1211.000000000000 +348.988715159870 5698.000000000000 +350.985988216636 6014.000000000000 +352.982227447720 1887.000000000000 +371.314800126809 1304.000000000000 +372.064251479626 5075.027343750000 +374.061938971072 4867.000000000000 +376.058486261926 1592.000000000000 +392.043742286078 1216.000000000000 +395.068502390905 1429.000000000000 +397.065868843467 1348.000000000000 +428.893525922553 1400.224853515625 +428.927664629947 1466.814208984375 +430.886759376928 1323.849609375000 +445.118824286635 2200.000000000000 +505.851799123756 3631.000000000000 +522.879142647299 1843.000000000000 +529.887839543416 1136.832397460938 +536.163692934414 5222.000000000000 +537.164127390652 2657.000000000000 +538.162454710439 1796.178100585938 +544.339301230729 1413.667114257812 +546.912450246131 2510.000000000000 +610.181542562630 2042.000000000000 +611.181371312242 1400.000000000000 +645.154552081192 5333.000000000000 +646.158693354263 1778.000000000000 +647.153270969225 6082.129394531250 +648.155656988395 2289.000000000000 +649.150637720064 2324.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=666 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=666 experiment=2_0 +##scan 74 +##specref ms_run[1]:sample=1 period=1 cycle=666 experiment=2 +68.063557124162 6.000000000000 +98.983184576439 233.000000000000 +119.083218486627 6.000000000000 +147.119962308944 6.000000000000 +>compound 1_0-666004--76--UNKNOWN +>parentmass 537.361055634014 +>charge 1 +>rt 438.351000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005546368410 2670.973876953125 +53.013447667176 13442.696289062500 +53.850235753676 1356.916015625000 +54.009375548499 346132.000000000000 +55.006052234178 5908.220703125000 +55.011327139628 6618.665039062500 +55.054273818991 1724.201538085938 +55.934183438349 6089.195312500000 +56.942085448242 2338.522949218750 +59.049497543886 62260.195312500000 +60.044496762287 9351.735351562500 +61.039589911785 1691.005004882812 +63.997480072658 3643.092529296875 +64.005073510260 4229.738281250000 +68.011506505752 28323.269531250000 +68.993585810696 12464.445312500000 +69.044640852940 13649.212890625000 +72.044186043856 1148.000000000000 +72.936480336335 2359.262451171875 +73.064260321862 1642.103027343750 +76.486297311909 2289.460693359375 +79.020766274604 15897.382812500000 +80.048988150704 12209.904296875000 +81.936792921049 8371.669921875000 +82.996095650262 8043.113281250000 +87.043834653730 1276.883422851562 +87.054214175865 1482.598144531250 +89.506458664277 1777.830322265625 +90.489196475802 1663.000000000000 +91.053755235930 1541.526000976562 +95.952402869893 2400.645751953125 +97.967886882016 8001.987304687500 +98.983532889025 3424.810302734375 +100.074677767759 1304.000000000000 +102.090242730316 1329.000000000000 +109.942679982849 1398.000000000000 +113.962690768860 1941.000000000000 +114.090409984344 11174.942382812500 +118.085207229958 6292.000000000000 +122.095068185146 3153.000000000000 +122.962957192644 10933.000000000000 +123.089979550376 1737.604248046875 +123.962216545241 1382.000000000000 +130.157851054625 1368.000000000000 +136.020636426938 1627.062988281250 +136.111496039851 1223.000000000000 +140.067223364828 1192.000000000000 +141.090663513328 1291.584838867188 +141.111904002369 1407.591674804688 +141.935850183021 1558.355590820312 +141.957535804851 16602.316406250000 +147.090073371469 2918.000000000000 +149.022242157340 5058.011230468750 +149.041140009202 2281.293701171875 +151.094511933196 2771.192138671875 +151.109513517514 3017.586181640625 +155.069293446605 1572.566406250000 +155.105166988042 1682.863525390625 +155.972752865047 4956.000000000000 +158.095291106412 1175.110473632812 +158.152897422617 13347.454101562500 +159.140146486584 1221.760620117188 +159.156626899127 1511.809692382812 +159.968130743445 1344.000000000000 +161.095301376904 1939.000000000000 +164.142147914813 1352.608276367188 +170.095211316489 2555.052490234375 +171.142065868167 1688.747070312500 +173.079666684779 7435.070800781250 +174.990876331450 12561.875976562500 +176.988228889313 4082.000000000000 +178.157451442432 1671.789062500000 +179.082574741649 1161.343872070312 +179.105464745461 2033.503295898438 +182.960688200025 1872.628540039062 +186.220236378822 1627.000000000000 +194.115587597029 3414.431152343750 +195.102521936100 1940.187622070312 +195.121153964710 2419.525878906250 +198.184119642186 2274.000000000000 +217.106221715984 24680.257812500000 +218.109389146592 2768.000000000000 +219.094928896725 1923.877807617188 +224.125737788530 1308.718017578125 +228.194389849522 1662.646850585938 +239.088555805042 4654.193847656250 +242.282289579657 1282.000000000000 +246.861651699246 3614.000000000000 +249.183697918794 1626.163208007812 +250.176302167701 1384.000000000000 +250.999159013320 25559.167968750000 +252.002213377038 1651.423461914062 +252.996445325154 16054.000000000000 +253.999379477884 1131.000000000000 +254.993447206468 2772.603271484375 +267.171432346745 1267.000000000000 +279.091928399145 1791.000000000000 +281.049474584863 1227.866455078125 +286.179096453069 25739.439453125000 +287.182281594319 5585.333496093750 +292.120716590068 202371.000000000000 +293.123166487022 34628.820312500000 +294.117931210581 66532.000000000000 +295.120340194058 11307.223632812500 +296.123175528233 1139.000000000000 +304.298333326187 1345.000000000000 +311.184016131023 2112.000000000000 +313.038042743243 19603.214843750000 +314.041307564911 3224.000000000000 +315.035568487358 12179.000000000000 +316.038573054615 2028.000000000000 +317.032999093534 2260.000000000000 +327.007882393116 37742.558593750000 +328.009892511372 3601.000000000000 +329.004296620889 35070.000000000000 +330.007896864877 3743.000000000000 +331.001397377526 12099.000000000000 +332.004304811118 1147.000000000000 +333.002267631798 2076.000000000000 +335.017770650220 2313.000000000000 +337.017035297896 1211.000000000000 +348.988715159870 5698.000000000000 +350.985988216636 6014.000000000000 +352.982227447720 1887.000000000000 +371.314800126809 1304.000000000000 +372.064251479626 5075.027343750000 +374.061938971072 4867.000000000000 +376.058486261926 1592.000000000000 +392.043742286078 1216.000000000000 +395.068502390905 1429.000000000000 +397.065868843467 1348.000000000000 +428.893525922553 1400.224853515625 +428.927664629947 1466.814208984375 +430.886759376928 1323.849609375000 +445.118824286635 2200.000000000000 +505.851799123756 3631.000000000000 +522.879142647299 1843.000000000000 +529.887839543416 1136.832397460938 +536.163692934414 5222.000000000000 +537.164127390652 2657.000000000000 +538.162454710439 1796.178100585938 +544.339301230729 1413.667114257812 +546.912450246131 2510.000000000000 +610.181542562630 2042.000000000000 +611.181371312242 1400.000000000000 +645.154552081192 5333.000000000000 +646.158693354263 1778.000000000000 +647.153270969225 6082.129394531250 +648.155656988395 2289.000000000000 +649.150637720064 2324.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=666 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=666 experiment=4_0 +##scan 76 +##specref ms_run[1]:sample=1 period=1 cycle=666 experiment=4 +73.045605189807 10.000000000000 +147.061735685350 20.000000000000 +175.150249756992 4.000000000000 +184.077202969343 4.000000000000 +199.126487899159 4.000000000000 +243.124375783172 4.000000000000 +266.023494755175 15.000000000000 +281.052547845633 80.000000000000 +282.051977628280 90.000000000000 +326.967869200950 15.000000000000 +327.964644755827 25.000000000000 +341.027549556230 10.000000000000 +415.040389390486 10.000000000000 +416.033829341811 50.000000000000 +434.848857284264 4.000000000000 +504.109916858764 10.000000000000 +520.137614626731 4.000000000000 +537.187341987794 10.000000000000 +537.225333263430 10.000000000000 +>compound 1_0-667002--78--UNKNOWN +>parentmass 401.182362536536 +>charge 1 +>rt 439.276999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005698102405 2949.600830078125 +53.013515252594 15990.059570312500 +53.850556940343 1196.854736328125 +54.009272267552 338690.687500000000 +55.005821221102 5702.030273437500 +55.011543271813 6793.216796875000 +55.054337703856 2357.244384765625 +55.934122072892 5857.799316406250 +56.049254187278 1357.658447265625 +56.941774674543 2264.940185546875 +59.049473584088 55372.843750000000 +60.044254660964 8661.087890625000 +61.039388228146 1775.590698242188 +63.997708482146 4927.317871093750 +64.004913437148 5195.035644531250 +68.011498068399 27823.996093750000 +68.993528779111 12691.588867187500 +69.044539630421 13641.355468750000 +72.044188157969 1190.000000000000 +72.936618787987 2801.000000000000 +73.064321087153 2046.862548828125 +76.485958866767 2159.189941406250 +79.020742258634 15046.928710937500 +80.048913927087 12740.775390625000 +81.936979441844 8856.285156250000 +82.996474896234 8891.872070312500 +87.043161738019 1323.176513671875 +87.054360585665 1763.251098632812 +89.506172511810 1599.000000000000 +90.489095501214 1759.160278320312 +91.053265697252 1575.000000000000 +95.952056815363 2283.000000000000 +97.968187964074 6359.000000000000 +98.983431868114 2735.816406250000 +100.075345688743 1463.000000000000 +102.090279252754 1691.454101562500 +109.943044107872 1411.000000000000 +113.963132503376 1920.000000000000 +114.090654998669 11155.000000000000 +118.085001951326 6917.983886718750 +122.095569615714 3696.000000000000 +122.962879635622 10817.001953125000 +123.090964739312 1549.663940429688 +123.961980595361 1327.000000000000 +130.158475522952 1262.000000000000 +136.020390726288 1678.679687500000 +136.110841262260 1177.000000000000 +139.110840348484 1026.000000000000 +141.090401388048 1485.482666015625 +141.111871154729 1641.574951171875 +141.957412140972 15722.000000000000 +142.960232618623 1059.000000000000 +147.090578178518 2231.000000000000 +149.022279225979 4729.229492187500 +151.095530461737 2818.962646484375 +151.109419676630 3115.360595703125 +155.069377129794 1541.703002929688 +155.105372266794 1586.923583984375 +155.973006696051 4294.000000000000 +158.001561442680 1181.000000000000 +158.153307967440 13072.687500000000 +159.156330307507 1422.823974609375 +161.094777911612 1691.061889648438 +164.143185474474 1315.469360351562 +170.095392867764 2656.926513671875 +171.142870901882 1771.642211914062 +172.132135089164 1247.027465820312 +173.079712433766 7644.225097656250 +174.126155282897 1073.541748046875 +174.991034459905 8968.177734375000 +176.988559846077 2674.000000000000 +177.054370932227 1282.000000000000 +178.158088453453 1516.090087890625 +179.105202439074 1944.794799804688 +182.960528622626 1759.674194335938 +182.983472600956 1184.856201171875 +186.220880632295 2015.000000000000 +193.157491893544 1075.468750000000 +194.116257055303 3237.000000000000 +195.101355387288 1623.295410156250 +195.120918327975 2101.834228515625 +198.184186985488 2063.614257812500 +200.199448446419 1135.201782226562 +217.106517261674 24668.234375000000 +218.109309491595 2956.000000000000 +219.093865591968 1651.447875976562 +223.063083038321 1023.289855957031 +224.126999324278 1244.013549804688 +228.194909587291 1515.000000000000 +235.168922209485 1338.772705078125 +239.088175881437 4929.000000000000 +242.283671298138 1141.513061523438 +246.861316031859 3671.000000000000 +249.183479803263 2009.000000000000 +250.177560643419 1103.000000000000 +250.999840013086 17475.000000000000 +252.002546713265 1125.000000000000 +252.996889788006 11501.701171875000 +254.993570660448 2016.000000000000 +267.171021424450 1593.530273437500 +279.092872569360 2087.000000000000 +281.050876576574 1372.317993164062 +286.179193418835 15427.296875000000 +287.182603223176 3253.493164062500 +292.120694136232 76277.781250000000 +293.123405762313 12833.188476562500 +294.117725650166 24966.453125000000 +295.120340048140 4475.091308593750 +304.298597795561 1115.000000000000 +311.183886460342 1246.385742187500 +313.038539852560 8339.437500000000 +314.042251974940 1267.000000000000 +315.035831684045 4854.000000000000 +327.007790884067 28309.000000000000 +328.010045566579 2627.000000000000 +329.004756826577 27474.000000000000 +330.008281380043 2723.000000000000 +331.001542223463 9102.000000000000 +332.005373872228 1076.000000000000 +333.002751974480 1548.000000000000 +335.017421250997 1117.000000000000 +348.988673876327 4533.000000000000 +350.986848617700 4252.000000000000 +352.984057117347 1513.000000000000 +371.314467518185 1298.172485351562 +372.064810678069 3984.672607421875 +374.062784787365 3711.000000000000 +376.059186329383 1368.000000000000 +428.892538744371 1053.615112304688 +428.926698994321 1067.593017578125 +430.887270890271 1264.000000000000 +432.882842821351 1019.678100585938 +445.119167648701 2176.000000000000 +446.119905173519 1073.000000000000 +449.152928695156 1143.697509765625 +505.852027617280 3886.000000000000 +506.854372818170 1098.000000000000 +519.136741292354 1050.000000000000 +522.879562540202 1688.000000000000 +529.887966309494 1182.000000000000 +536.162612121417 4851.000000000000 +537.163925187658 2688.887695312500 +538.161274762959 1807.000000000000 +544.338237046413 1475.000000000000 +546.912887449785 2193.394287109375 +610.182769358975 1963.000000000000 +611.184368705221 1079.000000000000 +612.178950467926 1066.000000000000 +645.154812988634 2117.000000000000 +647.153129730253 2652.456542968750 +>ms2peaks +##n_id sample=1 period=1 cycle=667 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=667 experiment=2_0 +##scan 78 +##specref ms_run[1]:sample=1 period=1 cycle=667 experiment=2 +69.047281608210 4.000000000000 +80.946796920336 4.000000000000 +98.974833948229 2.000000000000 +99.045589618734 2.000000000000 +123.020068675281 71.000000000000 +161.133659453649 2.000000000000 +167.050418944662 4.000000000000 +179.083342678960 14.000000000000 +184.079735962511 4.000000000000 +228.794089285502 2.000000000000 +235.148325239736 14.000000000000 +242.924517568223 2.000000000000 +244.803410790479 4.000000000000 +246.228192014639 2.000000000000 +293.318808851730 4.000000000000 +525.020792473106 2.000000000000 +>compound 1_0-669002--81--UNKNOWN +>parentmass 449.154471966734 +>charge 1 +>rt 440.473000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005642791179 2326.013427734375 +53.013542052105 13325.309570312500 +53.850360208328 1368.689208984375 +54.009421110911 350603.062500000000 +55.006214514093 6487.597167968750 +55.011175731826 7225.198730468750 +55.054348483345 1869.965820312500 +55.934151264860 6032.304199218750 +56.941907285604 2330.847656250000 +59.049586730627 62821.945312500000 +60.044517284837 9713.949218750000 +61.039557181883 1599.177856445312 +63.997492037625 3446.909667968750 +64.005254918402 4611.981933593750 +68.011468810813 27245.654296875000 +68.993677019213 13703.551757812500 +69.008589513229 1262.355468750000 +69.033143503599 1540.852050781250 +69.044747848791 14264.771484375000 +69.494284229830 998.000000000000 +72.936597399084 2202.892578125000 +73.064314652934 1576.000000000000 +76.485917599311 2337.000000000000 +79.020868838396 15323.071289062500 +80.048964095294 12301.551757812500 +81.937027996525 8758.282226562500 +82.996336645083 8668.493164062500 +87.043849597337 1053.125488281250 +87.054789719208 1599.292602539062 +89.059298125228 1082.533569335938 +89.506984518188 1570.193237304688 +90.489389825127 1609.000000000000 +91.053732987865 1119.000000000000 +95.952505447671 2343.706054687500 +97.968173137029 7257.098144531250 +98.983187282682 2220.172363281250 +100.074977916523 1250.000000000000 +102.090776470476 1408.000000000000 +109.942855845878 1548.000000000000 +113.962790570282 2153.000000000000 +114.090899656748 10869.000000000000 +118.085648359175 7172.000000000000 +122.095530346439 3819.967529296875 +122.962914746508 10553.519531250000 +123.090819191577 2055.197998046875 +123.963987089384 1177.000000000000 +130.158555261388 1254.419067382812 +136.020323985227 1440.000000000000 +136.111023400954 1425.000000000000 +137.964110947355 963.000000000000 +139.962366629428 1161.362304687500 +141.090717501472 1258.590087890625 +141.112361515013 1563.057006835938 +141.935520306844 1192.109130859375 +141.957640850243 16016.802734375000 +142.958873238395 1265.995117187500 +147.090689577993 2770.877929687500 +149.022910208935 4874.038085937500 +149.042752223785 3015.926269531250 +151.095744793211 3153.844482421875 +151.110489532796 3488.890869140625 +155.069262948529 1591.492187500000 +155.106518924093 1493.223388671875 +155.973065375718 4726.000000000000 +158.001455491443 991.000000000000 +158.153652787710 12962.330078125000 +159.155435415511 1402.366821289062 +161.095833102064 1759.349853515625 +163.128637575336 1104.128662109375 +164.142330153152 1357.906616210938 +170.095575594983 2309.863037109375 +171.145961377144 1327.000000000000 +173.080688753252 7090.320800781250 +174.127357783942 1352.222290039062 +174.991521442449 6167.003417968750 +176.989228350474 2100.000000000000 +177.054256918550 1123.000000000000 +178.158534857461 1383.000000000000 +179.105584493101 2084.170654296875 +182.961887582712 1825.454833984375 +182.984495644782 1445.177856445312 +186.221158400479 1727.000000000000 +193.157874734960 969.111999511719 +194.116505813537 3746.151123046875 +195.121376693893 2143.172851562500 +198.184587875999 2043.000000000000 +199.168705255450 999.000000000000 +200.200985979511 1162.000000000000 +217.106826227734 23733.167968750000 +218.109596857231 2506.000000000000 +219.094671611610 1729.716918945312 +221.152582776539 1012.134277343750 +223.096303580504 1147.152343750000 +223.114459171910 1025.000000000000 +224.101519806602 972.015014648438 +224.127454904159 1178.907836914062 +228.195397044980 1443.253417968750 +235.167416584044 1038.770751953125 +239.089054467698 4633.000000000000 +242.283732608312 1501.000000000000 +246.862061033287 3476.000000000000 +249.184876694483 1531.000000000000 +250.177608083863 1326.000000000000 +251.000075636729 12485.000000000000 +252.996815724244 8252.000000000000 +254.994305701867 1296.000000000000 +267.171508453986 1205.000000000000 +279.093237779712 2074.000000000000 +281.050822990484 1471.722778320312 +286.179660489996 5753.000000000000 +287.182967661655 1464.435302734375 +292.121109367808 21453.000000000000 +293.123862010729 3640.655761718750 +294.118673433853 7229.000000000000 +295.120792322794 1246.092773437500 +304.298657204513 1229.000000000000 +313.038748698733 2851.000000000000 +315.036348445508 1566.000000000000 +327.008555015640 17449.000000000000 +328.011898692642 1605.000000000000 +329.005385006286 16849.000000000000 +330.008082213811 1534.000000000000 +331.002251040661 5477.017089843750 +333.006380319976 1021.000000000000 +348.989226305693 3382.000000000000 +350.987843612751 3398.589111328125 +372.065544608850 2511.378417968750 +374.062846961058 2346.700439453125 +430.888594927663 1029.000000000000 +432.884470295934 1030.000000000000 +443.204761293615 1605.000000000000 +445.119752496770 1998.680053710938 +446.119835252536 1016.436706542969 +500.277863757763 2454.000000000000 +502.292933186982 1151.000000000000 +505.852599831847 3665.000000000000 +506.854715230544 1076.233764648438 +519.137839558537 1119.000000000000 +522.879040076034 1642.000000000000 +524.370352421756 1137.000000000000 +529.890003756889 1162.000000000000 +536.164390893130 4937.000000000000 +537.165369170595 2331.330810546875 +538.163258138218 2036.000000000000 +544.339439758304 1352.000000000000 +546.917003901480 2253.098144531250 +547.911297950275 1233.514892578125 +610.182801253029 2158.000000000000 +611.183728546344 1155.000000000000 +612.182688818395 1120.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=669 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=669 experiment=2_0 +##scan 81 +##specref ms_run[1]:sample=1 period=1 cycle=669 experiment=2 +209.023878630820 2.000000000000 +262.073138437785 2.000000000000 +320.792994293127 2.000000000000 +323.039050435516 2.000000000000 +330.809605842770 4.000000000000 +358.153168054668 2.000000000000 +365.087626895192 6.000000000000 +367.103190877640 14.000000000000 +371.793254818231 4.000000000000 +408.129247915328 4.000000000000 +566.618969445652 2.000000000000 +>compound 1_0-670002--83--UNKNOWN +>parentmass 307.248320691448 +>charge 1 +>rt 441.393000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005502489904 2919.979248046875 +53.013397888489 15055.970703125000 +53.850457540194 1421.021362304688 +54.009273624235 342160.312500000000 +55.006045325378 5686.630371093750 +55.011243322323 6178.623535156250 +55.054034653321 2126.622070312500 +55.934030348944 6027.599121093750 +56.941834640970 2404.554443359375 +59.049385822084 61875.332031250000 +60.044298798404 10184.558593750000 +61.039418882913 2286.914306640625 +63.997293806135 3642.552978515625 +64.004847642736 4027.128417968750 +68.011428344057 26806.927734375000 +68.993546780927 12917.697265625000 +69.015455086485 928.613647460938 +69.031159819229 1223.010009765625 +69.044371878291 14776.713867187500 +72.044003163397 1080.000000000000 +72.936333801170 2251.000000000000 +73.063962262087 1833.188842773438 +76.486159144284 2960.903808593750 +79.020716144749 14561.841796875000 +80.048658974045 11887.597656250000 +81.936974199969 9126.329101562500 +82.996066627776 8894.431640625000 +87.043092864853 1103.720214843750 +87.054562513061 1484.481933593750 +89.059751298671 1018.702392578125 +89.069168874472 1109.018798828125 +89.506352897069 1411.000000000000 +90.488778662771 2018.000000000000 +91.053584322790 1352.000000000000 +95.952253672280 2399.000000000000 +97.967799209254 7155.141601562500 +98.983564893197 1457.376342773438 +100.074965446511 1505.000000000000 +102.090335909767 2388.000000000000 +109.942156793370 1988.818359375000 +113.962348441769 2048.000000000000 +114.090417568760 10591.000000000000 +118.085038992309 7314.000000000000 +122.095120750199 3758.000000000000 +122.962813564185 10982.000000000000 +123.090951999080 1665.650756835938 +123.960891375264 1216.000000000000 +129.051162637992 954.252746582031 +136.020066411981 1868.696777343750 +136.111160897340 1338.000000000000 +137.962549666720 1021.476867675781 +139.962456455124 967.809143066406 +141.090094083529 1393.371948242188 +141.111725718067 1640.699096679688 +141.957223441115 16241.401367187500 +142.960221893370 960.000000000000 +147.089935229790 2717.344970703125 +149.022400588010 4741.835937500000 +151.095298354055 2892.759521484375 +151.109553538548 3492.303466796875 +155.069181035901 1716.963378906250 +155.105308039946 1558.000000000000 +155.972698502286 4636.000000000000 +158.152577988199 13197.477539062500 +159.137557909241 1254.460815429688 +159.155841713366 1444.691772460938 +161.094647833130 1737.000000000000 +163.129782609703 1085.899169921875 +164.142227800380 1247.418579101562 +170.094800579081 2435.155029296875 +171.145398436366 1418.625854492188 +172.132459139840 984.577636718750 +173.079692491605 7187.565429687500 +174.126294729419 978.000000000000 +174.990893560601 3594.000000000000 +175.113002236447 1076.870605468750 +175.118543465528 1060.572143554688 +176.988769607129 1185.000000000000 +177.052657602333 1201.000000000000 +178.157354224232 1526.206176757812 +179.105540470790 1871.373413085938 +182.960191636989 2137.037353515625 +182.982644677510 1065.602661132812 +186.220030706931 2126.000000000000 +193.156908978486 1205.063354492188 +194.115568727585 3337.445312500000 +195.121528786220 2022.682128906250 +198.184114343883 2226.273681640625 +199.168257690240 1054.873657226562 +200.199138579701 954.000000000000 +217.106149115686 23597.000000000000 +218.109454650007 2579.000000000000 +219.093799923422 1986.124633789062 +221.151957881474 1025.000000000000 +223.113148468309 972.000000000000 +224.126318639839 1198.000366210938 +228.194605138727 1777.935424804688 +235.166345240972 1306.823242187500 +239.087625655101 5033.000000000000 +242.282985022539 1402.000000000000 +246.861393206100 3629.000000000000 +249.183820941524 1474.000000000000 +250.177181466148 1444.000000000000 +250.999070868183 7189.396972656250 +251.184696020425 1159.000000000000 +252.996090529354 4943.000000000000 +267.170580383807 1575.882812500000 +279.092865651629 2285.360595703125 +281.050191631858 1408.404785156250 +284.163355479766 1688.000000000000 +286.178387675162 2125.000000000000 +287.887736000422 984.000000000000 +292.120053575647 9470.024414062500 +293.122726732828 1594.095947265625 +294.118173438154 2908.000000000000 +304.297425827232 1045.024536132812 +313.036947548503 1115.000000000000 +327.007528542749 10457.000000000000 +328.010128341285 1133.000000000000 +329.004066317044 10255.000000000000 +330.007084479398 958.000000000000 +330.204749181397 3234.000000000000 +331.001200672383 3629.000000000000 +348.988996290768 2065.000000000000 +350.984768962296 2137.000000000000 +371.100107833629 1073.000000000000 +371.315156882146 1069.000000000000 +372.064612891210 1790.998168945312 +374.062069424001 1419.000000000000 +430.886400445887 1294.870605468750 +443.203561604514 2349.000000000000 +445.116891824517 2658.000000000000 +446.119595467672 975.000000000000 +462.145315654701 931.000000000000 +500.274305412794 3917.534912109375 +501.277477578144 1018.000000000000 +502.289359881166 1109.000000000000 +505.850608925330 4085.000000000000 +506.851852727775 1183.000000000000 +522.876231755946 1752.915405273438 +523.871845553561 960.000000000000 +529.887801193018 1230.000000000000 +536.163393449586 4412.000000000000 +537.163890396426 2608.000000000000 +538.160325642661 1692.000000000000 +544.336478177375 1628.000000000000 +546.912331841281 2476.000000000000 +547.911264543609 1106.000000000000 +610.181660414095 1869.000000000000 +611.181059938071 1218.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=670 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=670 experiment=2_0 +##scan 83 +##specref ms_run[1]:sample=1 period=1 cycle=670 experiment=2 +149.021653923963 24.000000000000 +159.887866099153 6.000000000000 +>compound 1_0-670003--84--UNKNOWN +>parentmass 443.203561604514 +>charge 1 +>rt 441.393000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +443.203561604514 2349.000000000000 +>ms1peaks +52.005502489904 2919.979248046875 +53.013397888489 15055.970703125000 +53.850457540194 1421.021362304688 +54.009273624235 342160.312500000000 +55.006045325378 5686.630371093750 +55.011243322323 6178.623535156250 +55.054034653321 2126.622070312500 +55.934030348944 6027.599121093750 +56.941834640970 2404.554443359375 +59.049385822084 61875.332031250000 +60.044298798404 10184.558593750000 +61.039418882913 2286.914306640625 +63.997293806135 3642.552978515625 +64.004847642736 4027.128417968750 +68.011428344057 26806.927734375000 +68.993546780927 12917.697265625000 +69.015455086485 928.613647460938 +69.031159819229 1223.010009765625 +69.044371878291 14776.713867187500 +72.044003163397 1080.000000000000 +72.936333801170 2251.000000000000 +73.063962262087 1833.188842773438 +76.486159144284 2960.903808593750 +79.020716144749 14561.841796875000 +80.048658974045 11887.597656250000 +81.936974199969 9126.329101562500 +82.996066627776 8894.431640625000 +87.043092864853 1103.720214843750 +87.054562513061 1484.481933593750 +89.059751298671 1018.702392578125 +89.069168874472 1109.018798828125 +89.506352897069 1411.000000000000 +90.488778662771 2018.000000000000 +91.053584322790 1352.000000000000 +95.952253672280 2399.000000000000 +97.967799209254 7155.141601562500 +98.983564893197 1457.376342773438 +100.074965446511 1505.000000000000 +102.090335909767 2388.000000000000 +109.942156793370 1988.818359375000 +113.962348441769 2048.000000000000 +114.090417568760 10591.000000000000 +118.085038992309 7314.000000000000 +122.095120750199 3758.000000000000 +122.962813564185 10982.000000000000 +123.090951999080 1665.650756835938 +123.960891375264 1216.000000000000 +129.051162637992 954.252746582031 +136.020066411981 1868.696777343750 +136.111160897340 1338.000000000000 +137.962549666720 1021.476867675781 +139.962456455124 967.809143066406 +141.090094083529 1393.371948242188 +141.111725718067 1640.699096679688 +141.957223441115 16241.401367187500 +142.960221893370 960.000000000000 +147.089935229790 2717.344970703125 +149.022400588010 4741.835937500000 +151.095298354055 2892.759521484375 +151.109553538548 3492.303466796875 +155.069181035901 1716.963378906250 +155.105308039946 1558.000000000000 +155.972698502286 4636.000000000000 +158.152577988199 13197.477539062500 +159.137557909241 1254.460815429688 +159.155841713366 1444.691772460938 +161.094647833130 1737.000000000000 +163.129782609703 1085.899169921875 +164.142227800380 1247.418579101562 +170.094800579081 2435.155029296875 +171.145398436366 1418.625854492188 +172.132459139840 984.577636718750 +173.079692491605 7187.565429687500 +174.126294729419 978.000000000000 +174.990893560601 3594.000000000000 +175.113002236447 1076.870605468750 +175.118543465528 1060.572143554688 +176.988769607129 1185.000000000000 +177.052657602333 1201.000000000000 +178.157354224232 1526.206176757812 +179.105540470790 1871.373413085938 +182.960191636989 2137.037353515625 +182.982644677510 1065.602661132812 +186.220030706931 2126.000000000000 +193.156908978486 1205.063354492188 +194.115568727585 3337.445312500000 +195.121528786220 2022.682128906250 +198.184114343883 2226.273681640625 +199.168257690240 1054.873657226562 +200.199138579701 954.000000000000 +217.106149115686 23597.000000000000 +218.109454650007 2579.000000000000 +219.093799923422 1986.124633789062 +221.151957881474 1025.000000000000 +223.113148468309 972.000000000000 +224.126318639839 1198.000366210938 +228.194605138727 1777.935424804688 +235.166345240972 1306.823242187500 +239.087625655101 5033.000000000000 +242.282985022539 1402.000000000000 +246.861393206100 3629.000000000000 +249.183820941524 1474.000000000000 +250.177181466148 1444.000000000000 +250.999070868183 7189.396972656250 +251.184696020425 1159.000000000000 +252.996090529354 4943.000000000000 +267.170580383807 1575.882812500000 +279.092865651629 2285.360595703125 +281.050191631858 1408.404785156250 +284.163355479766 1688.000000000000 +286.178387675162 2125.000000000000 +287.887736000422 984.000000000000 +292.120053575647 9470.024414062500 +293.122726732828 1594.095947265625 +294.118173438154 2908.000000000000 +304.297425827232 1045.024536132812 +313.036947548503 1115.000000000000 +327.007528542749 10457.000000000000 +328.010128341285 1133.000000000000 +329.004066317044 10255.000000000000 +330.007084479398 958.000000000000 +330.204749181397 3234.000000000000 +331.001200672383 3629.000000000000 +348.988996290768 2065.000000000000 +350.984768962296 2137.000000000000 +371.100107833629 1073.000000000000 +371.315156882146 1069.000000000000 +372.064612891210 1790.998168945312 +374.062069424001 1419.000000000000 +430.886400445887 1294.870605468750 +443.203561604514 2349.000000000000 +445.116891824517 2658.000000000000 +446.119595467672 975.000000000000 +462.145315654701 931.000000000000 +500.274305412794 3917.534912109375 +501.277477578144 1018.000000000000 +502.289359881166 1109.000000000000 +505.850608925330 4085.000000000000 +506.851852727775 1183.000000000000 +522.876231755946 1752.915405273438 +523.871845553561 960.000000000000 +529.887801193018 1230.000000000000 +536.163393449586 4412.000000000000 +537.163890396426 2608.000000000000 +538.160325642661 1692.000000000000 +544.336478177375 1628.000000000000 +546.912331841281 2476.000000000000 +547.911264543609 1106.000000000000 +610.181660414095 1869.000000000000 +611.181059938071 1218.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=670 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=670 experiment=3_0 +##scan 84 +##specref ms_run[1]:sample=1 period=1 cycle=670 experiment=3 +97.007535802977 4.000000000000 +142.940399612615 25.000000000000 +363.252297583836 10.000000000000 +395.212301205891 4.000000000000 +443.210094480654 85.000000000000 +>compound 1_0-670004--85--UNKNOWN +>parentmass 501.277477578144 +>charge 1 +>rt 441.393000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +501.277477578144 1018.000000000000 +>ms1peaks +52.005502489904 2919.979248046875 +53.013397888489 15055.970703125000 +53.850457540194 1421.021362304688 +54.009273624235 342160.312500000000 +55.006045325378 5686.630371093750 +55.011243322323 6178.623535156250 +55.054034653321 2126.622070312500 +55.934030348944 6027.599121093750 +56.941834640970 2404.554443359375 +59.049385822084 61875.332031250000 +60.044298798404 10184.558593750000 +61.039418882913 2286.914306640625 +63.997293806135 3642.552978515625 +64.004847642736 4027.128417968750 +68.011428344057 26806.927734375000 +68.993546780927 12917.697265625000 +69.015455086485 928.613647460938 +69.031159819229 1223.010009765625 +69.044371878291 14776.713867187500 +72.044003163397 1080.000000000000 +72.936333801170 2251.000000000000 +73.063962262087 1833.188842773438 +76.486159144284 2960.903808593750 +79.020716144749 14561.841796875000 +80.048658974045 11887.597656250000 +81.936974199969 9126.329101562500 +82.996066627776 8894.431640625000 +87.043092864853 1103.720214843750 +87.054562513061 1484.481933593750 +89.059751298671 1018.702392578125 +89.069168874472 1109.018798828125 +89.506352897069 1411.000000000000 +90.488778662771 2018.000000000000 +91.053584322790 1352.000000000000 +95.952253672280 2399.000000000000 +97.967799209254 7155.141601562500 +98.983564893197 1457.376342773438 +100.074965446511 1505.000000000000 +102.090335909767 2388.000000000000 +109.942156793370 1988.818359375000 +113.962348441769 2048.000000000000 +114.090417568760 10591.000000000000 +118.085038992309 7314.000000000000 +122.095120750199 3758.000000000000 +122.962813564185 10982.000000000000 +123.090951999080 1665.650756835938 +123.960891375264 1216.000000000000 +129.051162637992 954.252746582031 +136.020066411981 1868.696777343750 +136.111160897340 1338.000000000000 +137.962549666720 1021.476867675781 +139.962456455124 967.809143066406 +141.090094083529 1393.371948242188 +141.111725718067 1640.699096679688 +141.957223441115 16241.401367187500 +142.960221893370 960.000000000000 +147.089935229790 2717.344970703125 +149.022400588010 4741.835937500000 +151.095298354055 2892.759521484375 +151.109553538548 3492.303466796875 +155.069181035901 1716.963378906250 +155.105308039946 1558.000000000000 +155.972698502286 4636.000000000000 +158.152577988199 13197.477539062500 +159.137557909241 1254.460815429688 +159.155841713366 1444.691772460938 +161.094647833130 1737.000000000000 +163.129782609703 1085.899169921875 +164.142227800380 1247.418579101562 +170.094800579081 2435.155029296875 +171.145398436366 1418.625854492188 +172.132459139840 984.577636718750 +173.079692491605 7187.565429687500 +174.126294729419 978.000000000000 +174.990893560601 3594.000000000000 +175.113002236447 1076.870605468750 +175.118543465528 1060.572143554688 +176.988769607129 1185.000000000000 +177.052657602333 1201.000000000000 +178.157354224232 1526.206176757812 +179.105540470790 1871.373413085938 +182.960191636989 2137.037353515625 +182.982644677510 1065.602661132812 +186.220030706931 2126.000000000000 +193.156908978486 1205.063354492188 +194.115568727585 3337.445312500000 +195.121528786220 2022.682128906250 +198.184114343883 2226.273681640625 +199.168257690240 1054.873657226562 +200.199138579701 954.000000000000 +217.106149115686 23597.000000000000 +218.109454650007 2579.000000000000 +219.093799923422 1986.124633789062 +221.151957881474 1025.000000000000 +223.113148468309 972.000000000000 +224.126318639839 1198.000366210938 +228.194605138727 1777.935424804688 +235.166345240972 1306.823242187500 +239.087625655101 5033.000000000000 +242.282985022539 1402.000000000000 +246.861393206100 3629.000000000000 +249.183820941524 1474.000000000000 +250.177181466148 1444.000000000000 +250.999070868183 7189.396972656250 +251.184696020425 1159.000000000000 +252.996090529354 4943.000000000000 +267.170580383807 1575.882812500000 +279.092865651629 2285.360595703125 +281.050191631858 1408.404785156250 +284.163355479766 1688.000000000000 +286.178387675162 2125.000000000000 +287.887736000422 984.000000000000 +292.120053575647 9470.024414062500 +293.122726732828 1594.095947265625 +294.118173438154 2908.000000000000 +304.297425827232 1045.024536132812 +313.036947548503 1115.000000000000 +327.007528542749 10457.000000000000 +328.010128341285 1133.000000000000 +329.004066317044 10255.000000000000 +330.007084479398 958.000000000000 +330.204749181397 3234.000000000000 +331.001200672383 3629.000000000000 +348.988996290768 2065.000000000000 +350.984768962296 2137.000000000000 +371.100107833629 1073.000000000000 +371.315156882146 1069.000000000000 +372.064612891210 1790.998168945312 +374.062069424001 1419.000000000000 +430.886400445887 1294.870605468750 +443.203561604514 2349.000000000000 +445.116891824517 2658.000000000000 +446.119595467672 975.000000000000 +462.145315654701 931.000000000000 +500.274305412794 3917.534912109375 +501.277477578144 1018.000000000000 +502.289359881166 1109.000000000000 +505.850608925330 4085.000000000000 +506.851852727775 1183.000000000000 +522.876231755946 1752.915405273438 +523.871845553561 960.000000000000 +529.887801193018 1230.000000000000 +536.163393449586 4412.000000000000 +537.163890396426 2608.000000000000 +538.160325642661 1692.000000000000 +544.336478177375 1628.000000000000 +546.912331841281 2476.000000000000 +547.911264543609 1106.000000000000 +610.181660414095 1869.000000000000 +611.181059938071 1218.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=670 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=670 experiment=4_0 +##scan 85 +##specref ms_run[1]:sample=1 period=1 cycle=670 experiment=4 +118.070544615718 4.000000000000 +326.834737144019 4.000000000000 +360.264059081384 20.000000000000 +455.249652081793 4.000000000000 +484.331245483398 4.000000000000 +>compound 1_0-671002--87--UNKNOWN +>parentmass 147.063458735746 +>charge 1 +>rt 442.470000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005571972894 2683.985351562500 +53.013416049500 13925.254882812500 +53.850744121229 1466.910888671875 +54.009245666944 340126.156250000000 +55.006055835556 5868.220703125000 +55.011057294162 6196.977050781250 +55.054382567695 1896.713623046875 +55.934129470830 6652.611816406250 +56.941956468408 2594.830078125000 +59.049473767708 78056.242187500000 +60.044420345921 11606.488281250000 +61.039092123595 1736.846313476562 +63.997582714816 4620.062988281250 +64.004936901302 5290.689941406250 +68.011401411523 27592.947265625000 +68.993467323788 11945.651367187500 +69.007258150241 1217.352661132812 +69.017349703722 1089.865722656250 +69.027677621963 972.662231445312 +69.044605392151 14512.264648437500 +72.044192739575 1070.000000000000 +72.936454915554 2106.646240234375 +73.064434376776 1850.000000000000 +76.486123200618 2437.000000000000 +77.998940260305 963.779663085938 +79.020843989395 17026.771484375000 +80.048836871096 13171.478515625000 +81.936899032580 8495.662109375000 +82.996268290221 9027.541015625000 +83.497021291401 1043.000000000000 +87.043474329062 1284.361450195312 +87.053997312509 1437.068847656250 +89.506430373184 1389.000000000000 +90.488897912972 1841.000000000000 +91.053726740022 1580.000000000000 +95.952187558512 2281.000000000000 +97.967847029609 7436.416503906250 +100.074789024525 1333.000000000000 +102.090193429496 1299.000000000000 +109.942723070578 1624.824096679688 +113.962892364912 1820.000000000000 +114.090398751881 11292.000000000000 +118.085157162043 7223.756835937500 +122.095084104445 3649.000000000000 +122.962851267794 10069.962890625000 +123.091304679020 1766.642944335938 +123.961136214045 1139.000000000000 +124.086250665548 1018.000000000000 +130.157806989122 1155.000000000000 +136.020495360711 1816.758178710938 +136.110888198752 1355.000000000000 +137.962782805182 1220.000000000000 +141.089724088711 1416.203613281250 +141.112476168413 1376.556762695312 +141.935799977624 1498.449340820312 +141.957387754025 16191.641601562500 +142.958978111604 1045.308349609375 +147.090176645567 2539.334960937500 +149.022562050931 5334.132812500000 +149.043139057261 2811.769287109375 +151.095703695487 3197.673095703125 +151.109349575406 3595.801269531250 +153.126049657227 1224.604248046875 +155.069442119982 1498.777343750000 +155.105272559587 1740.136718750000 +155.972976462024 4706.000000000000 +158.001539031910 1009.720825195312 +158.096079267460 1016.118896484375 +158.152930124685 12513.000000000000 +159.155804570318 1513.468872070312 +159.968574214503 993.493408203125 +161.096330494014 1499.058227539062 +163.129541202857 1028.000000000000 +164.141792007088 1496.000000000000 +170.095161911626 2602.887695312500 +171.143396860797 1389.000000000000 +172.133621658026 1073.843139648438 +173.080077014517 7355.811523437500 +174.126709923194 1302.796630859375 +174.991054215466 2748.858154296875 +175.112913754074 1249.883911132812 +177.053709191057 1030.000000000000 +178.157700783186 1735.798217773438 +179.105478565066 1947.000000000000 +182.960510362082 1961.077392578125 +182.983746277961 1109.383544921875 +186.220008605215 1111.000000000000 +193.157023184540 1013.000000000000 +194.115883446918 3250.000000000000 +195.102104665175 1830.362670898438 +195.121278100327 2185.169921875000 +198.184131019778 2388.265869140625 +217.106301982234 22966.000000000000 +218.108898572669 2666.000000000000 +219.094954140787 1837.220214843750 +219.173662961811 971.384216308594 +223.063572560759 999.264953613281 +224.127031888420 1703.086791992188 +228.195264527025 1487.000000000000 +235.168091684004 1101.909667968750 +235.204194572580 972.296752929688 +236.165321964095 967.384216308594 +239.088220810853 5073.000000000000 +240.091958898256 1052.250610351562 +242.283341225902 1636.000000000000 +246.861393288722 3702.000000000000 +249.183061270791 1590.357055664062 +250.177858795454 1589.900756835938 +250.998845286391 4686.000000000000 +251.182608079900 1147.000000000000 +252.996130227507 3540.000000000000 +267.170643672899 1572.000000000000 +279.092246508350 1994.000000000000 +281.049973370523 1631.000000000000 +284.163786591244 9428.000000000000 +285.167047392369 2530.818603515625 +286.177331148907 1403.000000000000 +292.120255878572 4482.000000000000 +294.116925984363 1737.256347656250 +304.298343955697 962.000000000000 +319.282861197491 1092.132812500000 +327.007484123143 6721.000000000000 +329.004185652670 6734.000000000000 +330.205695338320 18501.037109375000 +331.000942726481 2250.433349609375 +331.208760315232 4324.000000000000 +348.988759907734 1316.000000000000 +350.986635190182 1218.000000000000 +352.187519167923 2373.898437500000 +372.065507420746 1052.418579101562 +372.096644276128 1072.114624023438 +430.886670562276 1018.000000000000 +443.203401417909 2073.933837890625 +445.117448054785 2262.000000000000 +446.121314039889 1018.000000000000 +500.275143681127 4578.705078125000 +501.277076860143 1457.026733398438 +502.289369396293 1295.000000000000 +505.852029981186 3904.000000000000 +506.853439498725 1183.340454101562 +522.878681252689 1673.000000000000 +529.890613838136 1162.000000000000 +536.162881059260 5059.000000000000 +537.164952415463 2896.000000000000 +538.161864228505 1832.000000000000 +544.336789553162 1485.000000000000 +546.912396950846 2157.000000000000 +610.182328477423 2077.000000000000 +611.184406168547 1165.000000000000 +612.180339221991 1012.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=671 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=671 experiment=2_0 +##scan 87 +##specref ms_run[1]:sample=1 period=1 cycle=671 experiment=2 +51.021916414762 16.000000000000 +51.031953447264 8.000000000000 +55.015794347033 6.000000000000 +64.927070826482 321.000000000000 +65.189129859287 6.000000000000 +69.044393323118 16.000000000000 +77.039660219643 55.000000000000 +78.217578366971 6.000000000000 +104.050250112536 23.000000000000 +105.953142270002 23.000000000000 +115.052168993658 6.000000000000 +131.059381539449 16.000000000000 +132.065218748622 16.000000000000 +145.072894101031 23.000000000000 +145.106478830558 8.000000000000 +146.094237903706 15.000000000000 +147.089685936793 89.000000000000 +148.097448899203 16.000000000000 +148.104413350666 16.000000000000 +>compound 1_0-671003--88--UNKNOWN +>parentmass 292.120255878572 +>charge 1 +>rt 442.470000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +292.120255878572 4482.000000000000 +>ms1peaks +52.005571972894 2683.985351562500 +53.013416049500 13925.254882812500 +53.850744121229 1466.910888671875 +54.009245666944 340126.156250000000 +55.006055835556 5868.220703125000 +55.011057294162 6196.977050781250 +55.054382567695 1896.713623046875 +55.934129470830 6652.611816406250 +56.941956468408 2594.830078125000 +59.049473767708 78056.242187500000 +60.044420345921 11606.488281250000 +61.039092123595 1736.846313476562 +63.997582714816 4620.062988281250 +64.004936901302 5290.689941406250 +68.011401411523 27592.947265625000 +68.993467323788 11945.651367187500 +69.007258150241 1217.352661132812 +69.017349703722 1089.865722656250 +69.027677621963 972.662231445312 +69.044605392151 14512.264648437500 +72.044192739575 1070.000000000000 +72.936454915554 2106.646240234375 +73.064434376776 1850.000000000000 +76.486123200618 2437.000000000000 +77.998940260305 963.779663085938 +79.020843989395 17026.771484375000 +80.048836871096 13171.478515625000 +81.936899032580 8495.662109375000 +82.996268290221 9027.541015625000 +83.497021291401 1043.000000000000 +87.043474329062 1284.361450195312 +87.053997312509 1437.068847656250 +89.506430373184 1389.000000000000 +90.488897912972 1841.000000000000 +91.053726740022 1580.000000000000 +95.952187558512 2281.000000000000 +97.967847029609 7436.416503906250 +100.074789024525 1333.000000000000 +102.090193429496 1299.000000000000 +109.942723070578 1624.824096679688 +113.962892364912 1820.000000000000 +114.090398751881 11292.000000000000 +118.085157162043 7223.756835937500 +122.095084104445 3649.000000000000 +122.962851267794 10069.962890625000 +123.091304679020 1766.642944335938 +123.961136214045 1139.000000000000 +124.086250665548 1018.000000000000 +130.157806989122 1155.000000000000 +136.020495360711 1816.758178710938 +136.110888198752 1355.000000000000 +137.962782805182 1220.000000000000 +141.089724088711 1416.203613281250 +141.112476168413 1376.556762695312 +141.935799977624 1498.449340820312 +141.957387754025 16191.641601562500 +142.958978111604 1045.308349609375 +147.090176645567 2539.334960937500 +149.022562050931 5334.132812500000 +149.043139057261 2811.769287109375 +151.095703695487 3197.673095703125 +151.109349575406 3595.801269531250 +153.126049657227 1224.604248046875 +155.069442119982 1498.777343750000 +155.105272559587 1740.136718750000 +155.972976462024 4706.000000000000 +158.001539031910 1009.720825195312 +158.096079267460 1016.118896484375 +158.152930124685 12513.000000000000 +159.155804570318 1513.468872070312 +159.968574214503 993.493408203125 +161.096330494014 1499.058227539062 +163.129541202857 1028.000000000000 +164.141792007088 1496.000000000000 +170.095161911626 2602.887695312500 +171.143396860797 1389.000000000000 +172.133621658026 1073.843139648438 +173.080077014517 7355.811523437500 +174.126709923194 1302.796630859375 +174.991054215466 2748.858154296875 +175.112913754074 1249.883911132812 +177.053709191057 1030.000000000000 +178.157700783186 1735.798217773438 +179.105478565066 1947.000000000000 +182.960510362082 1961.077392578125 +182.983746277961 1109.383544921875 +186.220008605215 1111.000000000000 +193.157023184540 1013.000000000000 +194.115883446918 3250.000000000000 +195.102104665175 1830.362670898438 +195.121278100327 2185.169921875000 +198.184131019778 2388.265869140625 +217.106301982234 22966.000000000000 +218.108898572669 2666.000000000000 +219.094954140787 1837.220214843750 +219.173662961811 971.384216308594 +223.063572560759 999.264953613281 +224.127031888420 1703.086791992188 +228.195264527025 1487.000000000000 +235.168091684004 1101.909667968750 +235.204194572580 972.296752929688 +236.165321964095 967.384216308594 +239.088220810853 5073.000000000000 +240.091958898256 1052.250610351562 +242.283341225902 1636.000000000000 +246.861393288722 3702.000000000000 +249.183061270791 1590.357055664062 +250.177858795454 1589.900756835938 +250.998845286391 4686.000000000000 +251.182608079900 1147.000000000000 +252.996130227507 3540.000000000000 +267.170643672899 1572.000000000000 +279.092246508350 1994.000000000000 +281.049973370523 1631.000000000000 +284.163786591244 9428.000000000000 +285.167047392369 2530.818603515625 +286.177331148907 1403.000000000000 +292.120255878572 4482.000000000000 +294.116925984363 1737.256347656250 +304.298343955697 962.000000000000 +319.282861197491 1092.132812500000 +327.007484123143 6721.000000000000 +329.004185652670 6734.000000000000 +330.205695338320 18501.037109375000 +331.000942726481 2250.433349609375 +331.208760315232 4324.000000000000 +348.988759907734 1316.000000000000 +350.986635190182 1218.000000000000 +352.187519167923 2373.898437500000 +372.065507420746 1052.418579101562 +372.096644276128 1072.114624023438 +430.886670562276 1018.000000000000 +443.203401417909 2073.933837890625 +445.117448054785 2262.000000000000 +446.121314039889 1018.000000000000 +500.275143681127 4578.705078125000 +501.277076860143 1457.026733398438 +502.289369396293 1295.000000000000 +505.852029981186 3904.000000000000 +506.853439498725 1183.340454101562 +522.878681252689 1673.000000000000 +529.890613838136 1162.000000000000 +536.162881059260 5059.000000000000 +537.164952415463 2896.000000000000 +538.161864228505 1832.000000000000 +544.336789553162 1485.000000000000 +546.912396950846 2157.000000000000 +610.182328477423 2077.000000000000 +611.184406168547 1165.000000000000 +612.180339221991 1012.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=671 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=671 experiment=3_0 +##scan 88 +##specref ms_run[1]:sample=1 period=1 cycle=671 experiment=3 +57.069755713333 10.000000000000 +70.040360970156 214.000000000000 +124.963857200298 4.000000000000 +125.015592086189 103.000000000000 +140.102685801612 4.000000000000 +159.113203687794 4.000000000000 +160.912129438002 10.000000000000 +170.108907096921 4.000000000000 +>compound 1_0-671004--89--UNKNOWN +>parentmass 500.275143681127 +>charge 1 +>rt 442.470000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +500.275143681127 4578.705078125000 +>ms1peaks +52.005571972894 2683.985351562500 +53.013416049500 13925.254882812500 +53.850744121229 1466.910888671875 +54.009245666944 340126.156250000000 +55.006055835556 5868.220703125000 +55.011057294162 6196.977050781250 +55.054382567695 1896.713623046875 +55.934129470830 6652.611816406250 +56.941956468408 2594.830078125000 +59.049473767708 78056.242187500000 +60.044420345921 11606.488281250000 +61.039092123595 1736.846313476562 +63.997582714816 4620.062988281250 +64.004936901302 5290.689941406250 +68.011401411523 27592.947265625000 +68.993467323788 11945.651367187500 +69.007258150241 1217.352661132812 +69.017349703722 1089.865722656250 +69.027677621963 972.662231445312 +69.044605392151 14512.264648437500 +72.044192739575 1070.000000000000 +72.936454915554 2106.646240234375 +73.064434376776 1850.000000000000 +76.486123200618 2437.000000000000 +77.998940260305 963.779663085938 +79.020843989395 17026.771484375000 +80.048836871096 13171.478515625000 +81.936899032580 8495.662109375000 +82.996268290221 9027.541015625000 +83.497021291401 1043.000000000000 +87.043474329062 1284.361450195312 +87.053997312509 1437.068847656250 +89.506430373184 1389.000000000000 +90.488897912972 1841.000000000000 +91.053726740022 1580.000000000000 +95.952187558512 2281.000000000000 +97.967847029609 7436.416503906250 +100.074789024525 1333.000000000000 +102.090193429496 1299.000000000000 +109.942723070578 1624.824096679688 +113.962892364912 1820.000000000000 +114.090398751881 11292.000000000000 +118.085157162043 7223.756835937500 +122.095084104445 3649.000000000000 +122.962851267794 10069.962890625000 +123.091304679020 1766.642944335938 +123.961136214045 1139.000000000000 +124.086250665548 1018.000000000000 +130.157806989122 1155.000000000000 +136.020495360711 1816.758178710938 +136.110888198752 1355.000000000000 +137.962782805182 1220.000000000000 +141.089724088711 1416.203613281250 +141.112476168413 1376.556762695312 +141.935799977624 1498.449340820312 +141.957387754025 16191.641601562500 +142.958978111604 1045.308349609375 +147.090176645567 2539.334960937500 +149.022562050931 5334.132812500000 +149.043139057261 2811.769287109375 +151.095703695487 3197.673095703125 +151.109349575406 3595.801269531250 +153.126049657227 1224.604248046875 +155.069442119982 1498.777343750000 +155.105272559587 1740.136718750000 +155.972976462024 4706.000000000000 +158.001539031910 1009.720825195312 +158.096079267460 1016.118896484375 +158.152930124685 12513.000000000000 +159.155804570318 1513.468872070312 +159.968574214503 993.493408203125 +161.096330494014 1499.058227539062 +163.129541202857 1028.000000000000 +164.141792007088 1496.000000000000 +170.095161911626 2602.887695312500 +171.143396860797 1389.000000000000 +172.133621658026 1073.843139648438 +173.080077014517 7355.811523437500 +174.126709923194 1302.796630859375 +174.991054215466 2748.858154296875 +175.112913754074 1249.883911132812 +177.053709191057 1030.000000000000 +178.157700783186 1735.798217773438 +179.105478565066 1947.000000000000 +182.960510362082 1961.077392578125 +182.983746277961 1109.383544921875 +186.220008605215 1111.000000000000 +193.157023184540 1013.000000000000 +194.115883446918 3250.000000000000 +195.102104665175 1830.362670898438 +195.121278100327 2185.169921875000 +198.184131019778 2388.265869140625 +217.106301982234 22966.000000000000 +218.108898572669 2666.000000000000 +219.094954140787 1837.220214843750 +219.173662961811 971.384216308594 +223.063572560759 999.264953613281 +224.127031888420 1703.086791992188 +228.195264527025 1487.000000000000 +235.168091684004 1101.909667968750 +235.204194572580 972.296752929688 +236.165321964095 967.384216308594 +239.088220810853 5073.000000000000 +240.091958898256 1052.250610351562 +242.283341225902 1636.000000000000 +246.861393288722 3702.000000000000 +249.183061270791 1590.357055664062 +250.177858795454 1589.900756835938 +250.998845286391 4686.000000000000 +251.182608079900 1147.000000000000 +252.996130227507 3540.000000000000 +267.170643672899 1572.000000000000 +279.092246508350 1994.000000000000 +281.049973370523 1631.000000000000 +284.163786591244 9428.000000000000 +285.167047392369 2530.818603515625 +286.177331148907 1403.000000000000 +292.120255878572 4482.000000000000 +294.116925984363 1737.256347656250 +304.298343955697 962.000000000000 +319.282861197491 1092.132812500000 +327.007484123143 6721.000000000000 +329.004185652670 6734.000000000000 +330.205695338320 18501.037109375000 +331.000942726481 2250.433349609375 +331.208760315232 4324.000000000000 +348.988759907734 1316.000000000000 +350.986635190182 1218.000000000000 +352.187519167923 2373.898437500000 +372.065507420746 1052.418579101562 +372.096644276128 1072.114624023438 +430.886670562276 1018.000000000000 +443.203401417909 2073.933837890625 +445.117448054785 2262.000000000000 +446.121314039889 1018.000000000000 +500.275143681127 4578.705078125000 +501.277076860143 1457.026733398438 +502.289369396293 1295.000000000000 +505.852029981186 3904.000000000000 +506.853439498725 1183.340454101562 +522.878681252689 1673.000000000000 +529.890613838136 1162.000000000000 +536.162881059260 5059.000000000000 +537.164952415463 2896.000000000000 +538.161864228505 1832.000000000000 +544.336789553162 1485.000000000000 +546.912396950846 2157.000000000000 +610.182328477423 2077.000000000000 +611.184406168547 1165.000000000000 +612.180339221991 1012.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=671 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=671 experiment=4_0 +##scan 89 +##specref ms_run[1]:sample=1 period=1 cycle=671 experiment=4 +62.059155828822 4.000000000000 +79.053930177011 15.000000000000 +79.060576741519 15.000000000000 +90.801389708484 5.000000000000 +93.068615397971 20.000000000000 +95.085327115665 15.000000000000 +128.060874799757 4.000000000000 +129.053180599493 4.000000000000 +131.086675747059 10.000000000000 +143.082883739412 15.000000000000 +145.099187643486 20.000000000000 +145.113822695048 20.000000000000 +159.115218707037 20.000000000000 +185.132825897877 10.000000000000 +201.165067733191 10.000000000000 +335.726345613846 4.000000000000 +359.257631216934 110.000000000000 +363.792342312640 4.000000000000 +412.757341478024 4.000000000000 +500.396031833968 15.000000000000 +>compound 1_0-672002--91--UNKNOWN +>parentmass 221.088310606481 +>charge 1 +>rt 443.395000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005544915054 2669.474365234375 +53.013551340862 13553.616210937500 +53.850319873685 1562.416137695312 +54.009295460141 350346.968750000000 +55.006232450041 6054.532226562500 +55.011400293523 5668.021972656250 +55.054088819555 2120.189697265625 +55.934244731716 6271.203125000000 +56.049143889161 1358.881469726562 +56.941953500477 2534.552001953125 +59.049514349790 70956.859375000000 +60.044524075355 9990.065429687500 +61.039510392391 1670.430175781250 +63.997568260643 4994.024414062500 +64.005249459891 4367.861328125000 +68.011580640977 27065.914062500000 +68.993639496335 12252.266601562500 +69.005877628210 1509.686279296875 +69.017951429187 1048.142456054688 +69.028795366421 1212.364013671875 +69.033416880469 2425.456298828125 +69.044475127901 14200.274414062500 +72.043911262079 1047.768676757812 +72.936745182577 2304.000000000000 +73.064006904959 2008.000000000000 +76.486423281518 2454.000000000000 +79.020906594717 17032.697265625000 +80.049070164503 12649.314453125000 +81.937012714698 8319.495117187500 +82.996431445572 8764.137695312500 +87.043393235112 1232.281005859375 +87.054792686957 1518.675170898438 +89.069847152859 1050.033203125000 +89.506363758374 1415.000000000000 +90.488720057772 1559.000000000000 +91.053497074514 1595.000000000000 +95.952093916466 2386.127685546875 +97.968041952191 7744.000000000000 +98.983249125195 1139.375122070312 +100.074777919595 1467.000000000000 +102.090735307891 1751.000000000000 +109.942992765391 1488.000000000000 +113.962952776103 1955.000000000000 +114.090639111654 12047.000000000000 +115.094045291856 1182.658081054688 +118.085381007607 6860.000000000000 +122.095829280493 3822.356689453125 +122.962971242620 11040.000000000000 +123.091678498053 1679.856201171875 +123.961762994075 1098.258056640625 +130.157840168158 1119.000000000000 +136.020149746073 1669.866455078125 +136.111310877244 1341.000000000000 +140.067628807799 1162.000000000000 +141.090078870202 1643.171630859375 +141.111437940929 1729.282836914062 +141.957685970109 16086.459960937500 +142.959246965238 1148.000000000000 +147.090589854954 3068.466064453125 +149.022334764391 5334.539062500000 +149.043235756254 1886.732055664062 +151.095665867172 2545.785156250000 +151.109889323553 2845.160888671875 +153.126202938286 1251.000000000000 +155.068698559926 1831.228393554688 +155.105136157922 1766.739746093750 +155.972900798788 5044.702636718750 +158.001722902179 1019.458251953125 +158.152913165967 13222.000000000000 +159.136999906374 1078.437744140625 +159.155949077606 1518.550659179688 +159.968039748098 1109.521972656250 +161.095208784413 1748.000000000000 +163.127847814262 1093.649536132812 +164.142644410696 1336.929931640625 +170.095359013462 2420.095214843750 +170.116522346417 1229.720581054688 +171.144173752482 1743.616210937500 +172.132921291764 1230.203735351562 +173.079731517168 7818.569824218750 +174.126736302445 1051.000000000000 +174.990939505926 1873.182495117188 +175.115501629616 1461.343139648438 +177.053709884557 1232.000000000000 +178.157358166358 1594.672851562500 +179.105733699336 2104.277099609375 +182.960410089777 1964.621215820312 +182.981552067909 1607.178710937500 +186.220555642350 1910.688720703125 +194.115328787792 3346.358154296875 +195.102092530429 1449.948242187500 +195.121799498262 2175.121093750000 +198.184334414475 2180.954101562500 +199.167776678702 1068.513305664062 +200.199409274689 1216.000000000000 +217.106206625083 25450.615234375000 +218.109896913645 3163.469238281250 +219.094813781298 1892.000000000000 +221.151434865998 1047.000000000000 +224.127583389619 1388.000000000000 +228.195283855782 1552.127075195312 +235.168202790032 1154.130615234375 +239.088136182276 5438.000000000000 +242.282849523447 1469.000000000000 +246.861483901160 3602.000000000000 +249.183847428647 1271.828369140625 +250.178570286073 1284.051147460938 +250.999278179609 4386.000000000000 +251.184308483615 1366.000000000000 +252.996209396160 3208.000000000000 +267.169924712582 1473.000000000000 +279.092450302349 2124.976074218750 +281.050036431003 1596.000000000000 +284.164019142692 16584.849609375000 +285.167688193069 4244.000000000000 +286.177652387269 1902.630249023438 +292.119396763735 2953.000000000000 +304.297724225733 1133.000000000000 +307.246725118529 1544.000000000000 +327.006882390785 5937.000000000000 +329.004668217108 5577.000000000000 +330.205694675668 33748.000000000000 +331.001581002942 1874.000000000000 +331.209367752674 7509.000000000000 +332.212747827332 1230.000000000000 +348.989870594472 1317.000000000000 +350.985664795103 1039.000000000000 +352.187263229768 3730.119140625000 +352.240201176670 1104.066284179688 +372.065696265231 1078.000000000000 +372.095820360838 1127.587158203125 +432.883118778360 1029.005737304688 +443.202786454542 1836.679443359375 +443.256567602296 1121.066772460938 +445.118014301267 2288.000000000000 +446.118701214097 1152.000000000000 +500.274823295404 5759.000000000000 +501.278532265372 1543.000000000000 +502.289374768504 1241.000000000000 +505.851712020697 3593.000000000000 +522.877612194810 1539.000000000000 +524.369695159526 1035.000000000000 +529.888030883274 1359.000000000000 +536.163344952678 4738.000000000000 +537.164020603528 2668.000000000000 +538.161288817548 1821.000000000000 +544.338553165118 1444.854980468750 +546.912838554417 2087.000000000000 +610.182090595376 2128.951416015625 +611.182397885889 1270.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=672 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=672 experiment=2_0 +##scan 91 +##specref ms_run[1]:sample=1 period=1 cycle=672 experiment=2 +57.068611721880 16.000000000000 +57.071864679321 16.000000000000 +171.091465277123 6.000000000000 +>compound 1_0-672003--92--UNKNOWN +>parentmass 352.187263229768 +>charge 1 +>rt 443.395000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +352.187263229768 3730.119140625000 +>ms1peaks +52.005544915054 2669.474365234375 +53.013551340862 13553.616210937500 +53.850319873685 1562.416137695312 +54.009295460141 350346.968750000000 +55.006232450041 6054.532226562500 +55.011400293523 5668.021972656250 +55.054088819555 2120.189697265625 +55.934244731716 6271.203125000000 +56.049143889161 1358.881469726562 +56.941953500477 2534.552001953125 +59.049514349790 70956.859375000000 +60.044524075355 9990.065429687500 +61.039510392391 1670.430175781250 +63.997568260643 4994.024414062500 +64.005249459891 4367.861328125000 +68.011580640977 27065.914062500000 +68.993639496335 12252.266601562500 +69.005877628210 1509.686279296875 +69.017951429187 1048.142456054688 +69.028795366421 1212.364013671875 +69.033416880469 2425.456298828125 +69.044475127901 14200.274414062500 +72.043911262079 1047.768676757812 +72.936745182577 2304.000000000000 +73.064006904959 2008.000000000000 +76.486423281518 2454.000000000000 +79.020906594717 17032.697265625000 +80.049070164503 12649.314453125000 +81.937012714698 8319.495117187500 +82.996431445572 8764.137695312500 +87.043393235112 1232.281005859375 +87.054792686957 1518.675170898438 +89.069847152859 1050.033203125000 +89.506363758374 1415.000000000000 +90.488720057772 1559.000000000000 +91.053497074514 1595.000000000000 +95.952093916466 2386.127685546875 +97.968041952191 7744.000000000000 +98.983249125195 1139.375122070312 +100.074777919595 1467.000000000000 +102.090735307891 1751.000000000000 +109.942992765391 1488.000000000000 +113.962952776103 1955.000000000000 +114.090639111654 12047.000000000000 +115.094045291856 1182.658081054688 +118.085381007607 6860.000000000000 +122.095829280493 3822.356689453125 +122.962971242620 11040.000000000000 +123.091678498053 1679.856201171875 +123.961762994075 1098.258056640625 +130.157840168158 1119.000000000000 +136.020149746073 1669.866455078125 +136.111310877244 1341.000000000000 +140.067628807799 1162.000000000000 +141.090078870202 1643.171630859375 +141.111437940929 1729.282836914062 +141.957685970109 16086.459960937500 +142.959246965238 1148.000000000000 +147.090589854954 3068.466064453125 +149.022334764391 5334.539062500000 +149.043235756254 1886.732055664062 +151.095665867172 2545.785156250000 +151.109889323553 2845.160888671875 +153.126202938286 1251.000000000000 +155.068698559926 1831.228393554688 +155.105136157922 1766.739746093750 +155.972900798788 5044.702636718750 +158.001722902179 1019.458251953125 +158.152913165967 13222.000000000000 +159.136999906374 1078.437744140625 +159.155949077606 1518.550659179688 +159.968039748098 1109.521972656250 +161.095208784413 1748.000000000000 +163.127847814262 1093.649536132812 +164.142644410696 1336.929931640625 +170.095359013462 2420.095214843750 +170.116522346417 1229.720581054688 +171.144173752482 1743.616210937500 +172.132921291764 1230.203735351562 +173.079731517168 7818.569824218750 +174.126736302445 1051.000000000000 +174.990939505926 1873.182495117188 +175.115501629616 1461.343139648438 +177.053709884557 1232.000000000000 +178.157358166358 1594.672851562500 +179.105733699336 2104.277099609375 +182.960410089777 1964.621215820312 +182.981552067909 1607.178710937500 +186.220555642350 1910.688720703125 +194.115328787792 3346.358154296875 +195.102092530429 1449.948242187500 +195.121799498262 2175.121093750000 +198.184334414475 2180.954101562500 +199.167776678702 1068.513305664062 +200.199409274689 1216.000000000000 +217.106206625083 25450.615234375000 +218.109896913645 3163.469238281250 +219.094813781298 1892.000000000000 +221.151434865998 1047.000000000000 +224.127583389619 1388.000000000000 +228.195283855782 1552.127075195312 +235.168202790032 1154.130615234375 +239.088136182276 5438.000000000000 +242.282849523447 1469.000000000000 +246.861483901160 3602.000000000000 +249.183847428647 1271.828369140625 +250.178570286073 1284.051147460938 +250.999278179609 4386.000000000000 +251.184308483615 1366.000000000000 +252.996209396160 3208.000000000000 +267.169924712582 1473.000000000000 +279.092450302349 2124.976074218750 +281.050036431003 1596.000000000000 +284.164019142692 16584.849609375000 +285.167688193069 4244.000000000000 +286.177652387269 1902.630249023438 +292.119396763735 2953.000000000000 +304.297724225733 1133.000000000000 +307.246725118529 1544.000000000000 +327.006882390785 5937.000000000000 +329.004668217108 5577.000000000000 +330.205694675668 33748.000000000000 +331.001581002942 1874.000000000000 +331.209367752674 7509.000000000000 +332.212747827332 1230.000000000000 +348.989870594472 1317.000000000000 +350.985664795103 1039.000000000000 +352.187263229768 3730.119140625000 +352.240201176670 1104.066284179688 +372.065696265231 1078.000000000000 +372.095820360838 1127.587158203125 +432.883118778360 1029.005737304688 +443.202786454542 1836.679443359375 +443.256567602296 1121.066772460938 +445.118014301267 2288.000000000000 +446.118701214097 1152.000000000000 +500.274823295404 5759.000000000000 +501.278532265372 1543.000000000000 +502.289374768504 1241.000000000000 +505.851712020697 3593.000000000000 +522.877612194810 1539.000000000000 +524.369695159526 1035.000000000000 +529.888030883274 1359.000000000000 +536.163344952678 4738.000000000000 +537.164020603528 2668.000000000000 +538.161288817548 1821.000000000000 +544.338553165118 1444.854980468750 +546.912838554417 2087.000000000000 +610.182090595376 2128.951416015625 +611.182397885889 1270.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=672 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=672 experiment=3_0 +##scan 92 +##specref ms_run[1]:sample=1 period=1 cycle=672 experiment=3 +58.710967694780 6.000000000000 +155.104305371420 6.000000000000 +278.116696075956 39.000000000000 +>compound 1_0-672004--93--UNKNOWN +>parentmass 359.254950524106 +>charge 1 +>rt 443.395000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005544915054 2669.474365234375 +53.013551340862 13553.616210937500 +53.850319873685 1562.416137695312 +54.009295460141 350346.968750000000 +55.006232450041 6054.532226562500 +55.011400293523 5668.021972656250 +55.054088819555 2120.189697265625 +55.934244731716 6271.203125000000 +56.049143889161 1358.881469726562 +56.941953500477 2534.552001953125 +59.049514349790 70956.859375000000 +60.044524075355 9990.065429687500 +61.039510392391 1670.430175781250 +63.997568260643 4994.024414062500 +64.005249459891 4367.861328125000 +68.011580640977 27065.914062500000 +68.993639496335 12252.266601562500 +69.005877628210 1509.686279296875 +69.017951429187 1048.142456054688 +69.028795366421 1212.364013671875 +69.033416880469 2425.456298828125 +69.044475127901 14200.274414062500 +72.043911262079 1047.768676757812 +72.936745182577 2304.000000000000 +73.064006904959 2008.000000000000 +76.486423281518 2454.000000000000 +79.020906594717 17032.697265625000 +80.049070164503 12649.314453125000 +81.937012714698 8319.495117187500 +82.996431445572 8764.137695312500 +87.043393235112 1232.281005859375 +87.054792686957 1518.675170898438 +89.069847152859 1050.033203125000 +89.506363758374 1415.000000000000 +90.488720057772 1559.000000000000 +91.053497074514 1595.000000000000 +95.952093916466 2386.127685546875 +97.968041952191 7744.000000000000 +98.983249125195 1139.375122070312 +100.074777919595 1467.000000000000 +102.090735307891 1751.000000000000 +109.942992765391 1488.000000000000 +113.962952776103 1955.000000000000 +114.090639111654 12047.000000000000 +115.094045291856 1182.658081054688 +118.085381007607 6860.000000000000 +122.095829280493 3822.356689453125 +122.962971242620 11040.000000000000 +123.091678498053 1679.856201171875 +123.961762994075 1098.258056640625 +130.157840168158 1119.000000000000 +136.020149746073 1669.866455078125 +136.111310877244 1341.000000000000 +140.067628807799 1162.000000000000 +141.090078870202 1643.171630859375 +141.111437940929 1729.282836914062 +141.957685970109 16086.459960937500 +142.959246965238 1148.000000000000 +147.090589854954 3068.466064453125 +149.022334764391 5334.539062500000 +149.043235756254 1886.732055664062 +151.095665867172 2545.785156250000 +151.109889323553 2845.160888671875 +153.126202938286 1251.000000000000 +155.068698559926 1831.228393554688 +155.105136157922 1766.739746093750 +155.972900798788 5044.702636718750 +158.001722902179 1019.458251953125 +158.152913165967 13222.000000000000 +159.136999906374 1078.437744140625 +159.155949077606 1518.550659179688 +159.968039748098 1109.521972656250 +161.095208784413 1748.000000000000 +163.127847814262 1093.649536132812 +164.142644410696 1336.929931640625 +170.095359013462 2420.095214843750 +170.116522346417 1229.720581054688 +171.144173752482 1743.616210937500 +172.132921291764 1230.203735351562 +173.079731517168 7818.569824218750 +174.126736302445 1051.000000000000 +174.990939505926 1873.182495117188 +175.115501629616 1461.343139648438 +177.053709884557 1232.000000000000 +178.157358166358 1594.672851562500 +179.105733699336 2104.277099609375 +182.960410089777 1964.621215820312 +182.981552067909 1607.178710937500 +186.220555642350 1910.688720703125 +194.115328787792 3346.358154296875 +195.102092530429 1449.948242187500 +195.121799498262 2175.121093750000 +198.184334414475 2180.954101562500 +199.167776678702 1068.513305664062 +200.199409274689 1216.000000000000 +217.106206625083 25450.615234375000 +218.109896913645 3163.469238281250 +219.094813781298 1892.000000000000 +221.151434865998 1047.000000000000 +224.127583389619 1388.000000000000 +228.195283855782 1552.127075195312 +235.168202790032 1154.130615234375 +239.088136182276 5438.000000000000 +242.282849523447 1469.000000000000 +246.861483901160 3602.000000000000 +249.183847428647 1271.828369140625 +250.178570286073 1284.051147460938 +250.999278179609 4386.000000000000 +251.184308483615 1366.000000000000 +252.996209396160 3208.000000000000 +267.169924712582 1473.000000000000 +279.092450302349 2124.976074218750 +281.050036431003 1596.000000000000 +284.164019142692 16584.849609375000 +285.167688193069 4244.000000000000 +286.177652387269 1902.630249023438 +292.119396763735 2953.000000000000 +304.297724225733 1133.000000000000 +307.246725118529 1544.000000000000 +327.006882390785 5937.000000000000 +329.004668217108 5577.000000000000 +330.205694675668 33748.000000000000 +331.001581002942 1874.000000000000 +331.209367752674 7509.000000000000 +332.212747827332 1230.000000000000 +348.989870594472 1317.000000000000 +350.985664795103 1039.000000000000 +352.187263229768 3730.119140625000 +352.240201176670 1104.066284179688 +372.065696265231 1078.000000000000 +372.095820360838 1127.587158203125 +432.883118778360 1029.005737304688 +443.202786454542 1836.679443359375 +443.256567602296 1121.066772460938 +445.118014301267 2288.000000000000 +446.118701214097 1152.000000000000 +500.274823295404 5759.000000000000 +501.278532265372 1543.000000000000 +502.289374768504 1241.000000000000 +505.851712020697 3593.000000000000 +522.877612194810 1539.000000000000 +524.369695159526 1035.000000000000 +529.888030883274 1359.000000000000 +536.163344952678 4738.000000000000 +537.164020603528 2668.000000000000 +538.161288817548 1821.000000000000 +544.338553165118 1444.854980468750 +546.912838554417 2087.000000000000 +610.182090595376 2128.951416015625 +611.182397885889 1270.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=672 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=672 experiment=4_0 +##scan 93 +##specref ms_run[1]:sample=1 period=1 cycle=672 experiment=4 +139.997926475326 6.000000000000 +268.993947616187 6.000000000000 +>compound 1_0-672005--94--UNKNOWN +>parentmass 459.172562941997 +>charge 1 +>rt 443.395000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005544915054 2669.474365234375 +53.013551340862 13553.616210937500 +53.850319873685 1562.416137695312 +54.009295460141 350346.968750000000 +55.006232450041 6054.532226562500 +55.011400293523 5668.021972656250 +55.054088819555 2120.189697265625 +55.934244731716 6271.203125000000 +56.049143889161 1358.881469726562 +56.941953500477 2534.552001953125 +59.049514349790 70956.859375000000 +60.044524075355 9990.065429687500 +61.039510392391 1670.430175781250 +63.997568260643 4994.024414062500 +64.005249459891 4367.861328125000 +68.011580640977 27065.914062500000 +68.993639496335 12252.266601562500 +69.005877628210 1509.686279296875 +69.017951429187 1048.142456054688 +69.028795366421 1212.364013671875 +69.033416880469 2425.456298828125 +69.044475127901 14200.274414062500 +72.043911262079 1047.768676757812 +72.936745182577 2304.000000000000 +73.064006904959 2008.000000000000 +76.486423281518 2454.000000000000 +79.020906594717 17032.697265625000 +80.049070164503 12649.314453125000 +81.937012714698 8319.495117187500 +82.996431445572 8764.137695312500 +87.043393235112 1232.281005859375 +87.054792686957 1518.675170898438 +89.069847152859 1050.033203125000 +89.506363758374 1415.000000000000 +90.488720057772 1559.000000000000 +91.053497074514 1595.000000000000 +95.952093916466 2386.127685546875 +97.968041952191 7744.000000000000 +98.983249125195 1139.375122070312 +100.074777919595 1467.000000000000 +102.090735307891 1751.000000000000 +109.942992765391 1488.000000000000 +113.962952776103 1955.000000000000 +114.090639111654 12047.000000000000 +115.094045291856 1182.658081054688 +118.085381007607 6860.000000000000 +122.095829280493 3822.356689453125 +122.962971242620 11040.000000000000 +123.091678498053 1679.856201171875 +123.961762994075 1098.258056640625 +130.157840168158 1119.000000000000 +136.020149746073 1669.866455078125 +136.111310877244 1341.000000000000 +140.067628807799 1162.000000000000 +141.090078870202 1643.171630859375 +141.111437940929 1729.282836914062 +141.957685970109 16086.459960937500 +142.959246965238 1148.000000000000 +147.090589854954 3068.466064453125 +149.022334764391 5334.539062500000 +149.043235756254 1886.732055664062 +151.095665867172 2545.785156250000 +151.109889323553 2845.160888671875 +153.126202938286 1251.000000000000 +155.068698559926 1831.228393554688 +155.105136157922 1766.739746093750 +155.972900798788 5044.702636718750 +158.001722902179 1019.458251953125 +158.152913165967 13222.000000000000 +159.136999906374 1078.437744140625 +159.155949077606 1518.550659179688 +159.968039748098 1109.521972656250 +161.095208784413 1748.000000000000 +163.127847814262 1093.649536132812 +164.142644410696 1336.929931640625 +170.095359013462 2420.095214843750 +170.116522346417 1229.720581054688 +171.144173752482 1743.616210937500 +172.132921291764 1230.203735351562 +173.079731517168 7818.569824218750 +174.126736302445 1051.000000000000 +174.990939505926 1873.182495117188 +175.115501629616 1461.343139648438 +177.053709884557 1232.000000000000 +178.157358166358 1594.672851562500 +179.105733699336 2104.277099609375 +182.960410089777 1964.621215820312 +182.981552067909 1607.178710937500 +186.220555642350 1910.688720703125 +194.115328787792 3346.358154296875 +195.102092530429 1449.948242187500 +195.121799498262 2175.121093750000 +198.184334414475 2180.954101562500 +199.167776678702 1068.513305664062 +200.199409274689 1216.000000000000 +217.106206625083 25450.615234375000 +218.109896913645 3163.469238281250 +219.094813781298 1892.000000000000 +221.151434865998 1047.000000000000 +224.127583389619 1388.000000000000 +228.195283855782 1552.127075195312 +235.168202790032 1154.130615234375 +239.088136182276 5438.000000000000 +242.282849523447 1469.000000000000 +246.861483901160 3602.000000000000 +249.183847428647 1271.828369140625 +250.178570286073 1284.051147460938 +250.999278179609 4386.000000000000 +251.184308483615 1366.000000000000 +252.996209396160 3208.000000000000 +267.169924712582 1473.000000000000 +279.092450302349 2124.976074218750 +281.050036431003 1596.000000000000 +284.164019142692 16584.849609375000 +285.167688193069 4244.000000000000 +286.177652387269 1902.630249023438 +292.119396763735 2953.000000000000 +304.297724225733 1133.000000000000 +307.246725118529 1544.000000000000 +327.006882390785 5937.000000000000 +329.004668217108 5577.000000000000 +330.205694675668 33748.000000000000 +331.001581002942 1874.000000000000 +331.209367752674 7509.000000000000 +332.212747827332 1230.000000000000 +348.989870594472 1317.000000000000 +350.985664795103 1039.000000000000 +352.187263229768 3730.119140625000 +352.240201176670 1104.066284179688 +372.065696265231 1078.000000000000 +372.095820360838 1127.587158203125 +432.883118778360 1029.005737304688 +443.202786454542 1836.679443359375 +443.256567602296 1121.066772460938 +445.118014301267 2288.000000000000 +446.118701214097 1152.000000000000 +500.274823295404 5759.000000000000 +501.278532265372 1543.000000000000 +502.289374768504 1241.000000000000 +505.851712020697 3593.000000000000 +522.877612194810 1539.000000000000 +524.369695159526 1035.000000000000 +529.888030883274 1359.000000000000 +536.163344952678 4738.000000000000 +537.164020603528 2668.000000000000 +538.161288817548 1821.000000000000 +544.338553165118 1444.854980468750 +546.912838554417 2087.000000000000 +610.182090595376 2128.951416015625 +611.182397885889 1270.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=672 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=672 experiment=5_0 +##scan 94 +##specref ms_run[1]:sample=1 period=1 cycle=672 experiment=5 +336.241874374153 6.000000000000 +459.182890075066 24.000000000000 +>compound 1_0-673002--96--UNKNOWN +>parentmass 304.112997380048 +>charge 1 +>rt 444.319999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +304.112997380048 9137.997070312500 +>ms1peaks +52.005488938755 2350.593017578125 +53.013588324644 12767.545898437500 +53.850602011789 1419.023559570312 +54.009277930243 350949.937500000000 +55.005882174690 5980.665039062500 +55.011271852588 6902.226562500000 +55.054019745465 2022.733642578125 +55.934144416603 6394.418945312500 +56.941974848582 2552.567871093750 +59.049584626180 82968.343750000000 +60.044436434339 11798.745117187500 +61.039857260495 1418.066894531250 +63.997690777449 5300.331542968750 +64.005055494638 5642.615234375000 +68.011549248196 27451.353515625000 +68.993663170779 12879.408203125000 +69.007923886319 1096.306518554688 +69.017093204571 1048.585327148438 +69.044464898692 14985.748046875000 +72.044068035438 1200.000000000000 +72.936472003402 1977.664062500000 +73.063928396874 1959.918212890625 +76.485788636002 2314.000000000000 +79.020808695957 16540.974609375000 +80.049003015352 11621.023437500000 +81.936961802817 7790.062011718750 +82.996425878887 8926.235351562500 +87.043401766705 1052.722534179688 +87.054720096584 1598.703735351562 +89.070537362555 1099.501586914062 +89.506543980543 1537.000000000000 +90.488976670281 2074.153564453125 +91.053544478477 1272.000000000000 +95.952308083894 2711.735351562500 +97.968032389654 7078.057128906250 +98.969879824280 1075.024169921875 +98.983750195184 1134.641967773438 +100.075252125469 1148.000000000000 +102.090288668641 1518.295654296875 +109.942519188947 1560.000000000000 +113.962786515294 1911.000000000000 +114.090570911428 11594.000000000000 +118.085197571393 7471.451660156250 +122.095288657014 3643.487548828125 +122.962930478054 10984.000000000000 +123.091081082016 1904.215087890625 +123.961949403194 1154.785766601562 +129.051725827646 1031.424194335938 +130.158373479059 1197.000000000000 +136.020639271025 1294.000000000000 +136.111219298674 1581.000000000000 +137.962917189768 1048.878295898438 +139.962538042462 1239.972167968750 +140.067396874754 1114.000000000000 +141.090487874245 1651.273437500000 +141.111958567360 1564.450073242188 +141.957616223576 16224.258789062500 +142.958418907981 1026.000000000000 +147.090234495507 2769.000000000000 +149.022464584767 4638.307617187500 +149.043536926502 1434.492431640625 +151.096151051404 3035.018798828125 +151.110008367767 3171.904052734375 +153.126548969804 1291.579223632812 +155.069550988391 1706.934082031250 +155.105646674154 1824.416381835938 +155.973161751975 4932.172363281250 +158.095721714505 1143.806762695312 +158.153274772537 12598.800781250000 +159.156537181630 1573.631347656250 +159.968437979142 1158.000000000000 +161.095365719682 1817.901855468750 +164.142387925205 1397.743774414062 +170.095704526297 2555.608398437500 +170.117713008976 1158.512451171875 +171.138285405592 1725.352783203125 +172.133028437063 1123.054931640625 +173.079655002329 7144.640625000000 +174.126934809121 1194.000000000000 +174.991203274998 1777.000000000000 +175.116368241068 1162.949340820312 +177.054231756114 1309.000000000000 +178.157784100193 1534.868164062500 +179.105332304060 1828.708496093750 +182.960722615568 2034.734130859375 +182.981753399558 1523.646118164062 +186.221092974907 1568.000000000000 +194.116236721308 3748.894531250000 +195.102613175400 1515.739379882812 +195.121055840997 2116.849121093750 +198.184888429616 2347.000000000000 +199.170414627366 1034.234008789062 +200.199867365295 1236.000000000000 +217.106502785658 22547.000000000000 +218.109446876777 2869.896484375000 +219.095557281166 1944.130981445312 +221.153223023305 1185.000000000000 +223.114461507324 1034.770629882812 +224.127172706797 1468.017333984375 +228.195860287814 1829.701904296875 +235.169297457059 1217.789672851562 +236.167342122754 1229.978393554688 +239.088865341699 5611.864257812500 +242.284112493819 1435.000000000000 +246.861636005840 3600.000000000000 +249.183926909638 1239.267578125000 +250.177631076915 1608.653930664062 +250.999867219289 3669.000000000000 +251.184460532696 1289.000000000000 +252.996834501545 2396.000000000000 +267.170737913759 1302.000000000000 +279.092781100496 1990.422485351562 +281.050453539953 1716.000000000000 +284.164828830393 19901.000000000000 +285.168247441249 5105.009277343750 +286.178522167562 2505.947265625000 +292.120756058941 2244.000000000000 +304.112997380048 9137.997070312500 +305.114809259957 1248.000000000000 +307.247581674679 2870.591064453125 +327.007903760602 4769.333496093750 +329.004988731169 5072.000000000000 +330.206333669111 39276.347656250000 +331.003150747857 1505.000000000000 +331.209945872255 8353.000000000000 +332.212619484251 1460.000000000000 +352.187543018171 4473.501953125000 +352.235657491200 1101.906127929688 +353.190848911854 1145.845703125000 +366.265454834464 1067.000000000000 +430.886234956732 1214.000000000000 +443.203497376616 1489.000000000000 +445.118920676436 2127.000000000000 +446.119938440518 1094.000000000000 +487.230020046174 1464.000000000000 +500.275371679450 7521.000000000000 +501.279707476795 1916.000000000000 +502.289033823976 1242.000000000000 +505.852717880243 3588.607177734375 +506.852669964207 1066.941284179688 +519.137961279277 1105.000000000000 +522.879198420696 1610.000000000000 +536.164494946040 5297.781250000000 +537.164688815051 2574.000000000000 +538.161433945477 1865.000000000000 +544.337981381467 1652.000000000000 +546.912025086522 2226.000000000000 +610.182434473715 1927.000000000000 +611.184949978043 1031.000000000000 +612.180638751427 1117.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=673 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=673 experiment=2_0 +##scan 96 +##specref ms_run[1]:sample=1 period=1 cycle=673 experiment=2 +51.939110567121 15.000000000000 +60.079144442172 23.000000000000 +79.053633339779 23.000000000000 +91.053216815957 46.000000000000 +103.054667695279 16.000000000000 +107.048871412428 46.000000000000 +109.064042744875 32.000000000000 +122.016528253995 38.000000000000 +137.039375194979 46.000000000000 +138.011482882197 32.000000000000 +139.021412291091 39.000000000000 +153.039251131801 91.000000000000 +155.053082457601 76.000000000000 +162.971794677260 16.000000000000 +168.986127862149 163.000000000000 +184.979172662186 79.000000000000 +198.997070924039 108.000000000000 +200.979416015869 32.000000000000 +201.984396643222 1220.000000000000 +202.991093736176 16.000000000000 +214.993421308263 39.000000000000 +216.021156263666 31.000000000000 +217.008717447259 2087.192382812500 +234.033475337603 249.000000000000 +245.040318522023 16.000000000000 +258.072287147546 16.000000000000 +276.081767046078 16.000000000000 +304.115515484967 31.000000000000 +>compound 1_0-673003--97--UNKNOWN +>parentmass 352.187543018171 +>charge 1 +>rt 444.319999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +352.187543018171 4473.501953125000 +353.190848911854 1145.845703125000 +>ms1peaks +52.005488938755 2350.593017578125 +53.013588324644 12767.545898437500 +53.850602011789 1419.023559570312 +54.009277930243 350949.937500000000 +55.005882174690 5980.665039062500 +55.011271852588 6902.226562500000 +55.054019745465 2022.733642578125 +55.934144416603 6394.418945312500 +56.941974848582 2552.567871093750 +59.049584626180 82968.343750000000 +60.044436434339 11798.745117187500 +61.039857260495 1418.066894531250 +63.997690777449 5300.331542968750 +64.005055494638 5642.615234375000 +68.011549248196 27451.353515625000 +68.993663170779 12879.408203125000 +69.007923886319 1096.306518554688 +69.017093204571 1048.585327148438 +69.044464898692 14985.748046875000 +72.044068035438 1200.000000000000 +72.936472003402 1977.664062500000 +73.063928396874 1959.918212890625 +76.485788636002 2314.000000000000 +79.020808695957 16540.974609375000 +80.049003015352 11621.023437500000 +81.936961802817 7790.062011718750 +82.996425878887 8926.235351562500 +87.043401766705 1052.722534179688 +87.054720096584 1598.703735351562 +89.070537362555 1099.501586914062 +89.506543980543 1537.000000000000 +90.488976670281 2074.153564453125 +91.053544478477 1272.000000000000 +95.952308083894 2711.735351562500 +97.968032389654 7078.057128906250 +98.969879824280 1075.024169921875 +98.983750195184 1134.641967773438 +100.075252125469 1148.000000000000 +102.090288668641 1518.295654296875 +109.942519188947 1560.000000000000 +113.962786515294 1911.000000000000 +114.090570911428 11594.000000000000 +118.085197571393 7471.451660156250 +122.095288657014 3643.487548828125 +122.962930478054 10984.000000000000 +123.091081082016 1904.215087890625 +123.961949403194 1154.785766601562 +129.051725827646 1031.424194335938 +130.158373479059 1197.000000000000 +136.020639271025 1294.000000000000 +136.111219298674 1581.000000000000 +137.962917189768 1048.878295898438 +139.962538042462 1239.972167968750 +140.067396874754 1114.000000000000 +141.090487874245 1651.273437500000 +141.111958567360 1564.450073242188 +141.957616223576 16224.258789062500 +142.958418907981 1026.000000000000 +147.090234495507 2769.000000000000 +149.022464584767 4638.307617187500 +149.043536926502 1434.492431640625 +151.096151051404 3035.018798828125 +151.110008367767 3171.904052734375 +153.126548969804 1291.579223632812 +155.069550988391 1706.934082031250 +155.105646674154 1824.416381835938 +155.973161751975 4932.172363281250 +158.095721714505 1143.806762695312 +158.153274772537 12598.800781250000 +159.156537181630 1573.631347656250 +159.968437979142 1158.000000000000 +161.095365719682 1817.901855468750 +164.142387925205 1397.743774414062 +170.095704526297 2555.608398437500 +170.117713008976 1158.512451171875 +171.138285405592 1725.352783203125 +172.133028437063 1123.054931640625 +173.079655002329 7144.640625000000 +174.126934809121 1194.000000000000 +174.991203274998 1777.000000000000 +175.116368241068 1162.949340820312 +177.054231756114 1309.000000000000 +178.157784100193 1534.868164062500 +179.105332304060 1828.708496093750 +182.960722615568 2034.734130859375 +182.981753399558 1523.646118164062 +186.221092974907 1568.000000000000 +194.116236721308 3748.894531250000 +195.102613175400 1515.739379882812 +195.121055840997 2116.849121093750 +198.184888429616 2347.000000000000 +199.170414627366 1034.234008789062 +200.199867365295 1236.000000000000 +217.106502785658 22547.000000000000 +218.109446876777 2869.896484375000 +219.095557281166 1944.130981445312 +221.153223023305 1185.000000000000 +223.114461507324 1034.770629882812 +224.127172706797 1468.017333984375 +228.195860287814 1829.701904296875 +235.169297457059 1217.789672851562 +236.167342122754 1229.978393554688 +239.088865341699 5611.864257812500 +242.284112493819 1435.000000000000 +246.861636005840 3600.000000000000 +249.183926909638 1239.267578125000 +250.177631076915 1608.653930664062 +250.999867219289 3669.000000000000 +251.184460532696 1289.000000000000 +252.996834501545 2396.000000000000 +267.170737913759 1302.000000000000 +279.092781100496 1990.422485351562 +281.050453539953 1716.000000000000 +284.164828830393 19901.000000000000 +285.168247441249 5105.009277343750 +286.178522167562 2505.947265625000 +292.120756058941 2244.000000000000 +304.112997380048 9137.997070312500 +305.114809259957 1248.000000000000 +307.247581674679 2870.591064453125 +327.007903760602 4769.333496093750 +329.004988731169 5072.000000000000 +330.206333669111 39276.347656250000 +331.003150747857 1505.000000000000 +331.209945872255 8353.000000000000 +332.212619484251 1460.000000000000 +352.187543018171 4473.501953125000 +352.235657491200 1101.906127929688 +353.190848911854 1145.845703125000 +366.265454834464 1067.000000000000 +430.886234956732 1214.000000000000 +443.203497376616 1489.000000000000 +445.118920676436 2127.000000000000 +446.119938440518 1094.000000000000 +487.230020046174 1464.000000000000 +500.275371679450 7521.000000000000 +501.279707476795 1916.000000000000 +502.289033823976 1242.000000000000 +505.852717880243 3588.607177734375 +506.852669964207 1066.941284179688 +519.137961279277 1105.000000000000 +522.879198420696 1610.000000000000 +536.164494946040 5297.781250000000 +537.164688815051 2574.000000000000 +538.161433945477 1865.000000000000 +544.337981381467 1652.000000000000 +546.912025086522 2226.000000000000 +610.182434473715 1927.000000000000 +611.184949978043 1031.000000000000 +612.180638751427 1117.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=673 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=673 experiment=3_0 +##scan 97 +##specref ms_run[1]:sample=1 period=1 cycle=673 experiment=3 +188.849522544526 16.000000000000 +278.119365992158 39.000000000000 +282.158263431413 23.000000000000 +>compound 1_0-673004--98--UNKNOWN +>parentmass 366.265454834464 +>charge 1 +>rt 444.319999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +366.265454834464 1067.000000000000 +>ms1peaks +52.005488938755 2350.593017578125 +53.013588324644 12767.545898437500 +53.850602011789 1419.023559570312 +54.009277930243 350949.937500000000 +55.005882174690 5980.665039062500 +55.011271852588 6902.226562500000 +55.054019745465 2022.733642578125 +55.934144416603 6394.418945312500 +56.941974848582 2552.567871093750 +59.049584626180 82968.343750000000 +60.044436434339 11798.745117187500 +61.039857260495 1418.066894531250 +63.997690777449 5300.331542968750 +64.005055494638 5642.615234375000 +68.011549248196 27451.353515625000 +68.993663170779 12879.408203125000 +69.007923886319 1096.306518554688 +69.017093204571 1048.585327148438 +69.044464898692 14985.748046875000 +72.044068035438 1200.000000000000 +72.936472003402 1977.664062500000 +73.063928396874 1959.918212890625 +76.485788636002 2314.000000000000 +79.020808695957 16540.974609375000 +80.049003015352 11621.023437500000 +81.936961802817 7790.062011718750 +82.996425878887 8926.235351562500 +87.043401766705 1052.722534179688 +87.054720096584 1598.703735351562 +89.070537362555 1099.501586914062 +89.506543980543 1537.000000000000 +90.488976670281 2074.153564453125 +91.053544478477 1272.000000000000 +95.952308083894 2711.735351562500 +97.968032389654 7078.057128906250 +98.969879824280 1075.024169921875 +98.983750195184 1134.641967773438 +100.075252125469 1148.000000000000 +102.090288668641 1518.295654296875 +109.942519188947 1560.000000000000 +113.962786515294 1911.000000000000 +114.090570911428 11594.000000000000 +118.085197571393 7471.451660156250 +122.095288657014 3643.487548828125 +122.962930478054 10984.000000000000 +123.091081082016 1904.215087890625 +123.961949403194 1154.785766601562 +129.051725827646 1031.424194335938 +130.158373479059 1197.000000000000 +136.020639271025 1294.000000000000 +136.111219298674 1581.000000000000 +137.962917189768 1048.878295898438 +139.962538042462 1239.972167968750 +140.067396874754 1114.000000000000 +141.090487874245 1651.273437500000 +141.111958567360 1564.450073242188 +141.957616223576 16224.258789062500 +142.958418907981 1026.000000000000 +147.090234495507 2769.000000000000 +149.022464584767 4638.307617187500 +149.043536926502 1434.492431640625 +151.096151051404 3035.018798828125 +151.110008367767 3171.904052734375 +153.126548969804 1291.579223632812 +155.069550988391 1706.934082031250 +155.105646674154 1824.416381835938 +155.973161751975 4932.172363281250 +158.095721714505 1143.806762695312 +158.153274772537 12598.800781250000 +159.156537181630 1573.631347656250 +159.968437979142 1158.000000000000 +161.095365719682 1817.901855468750 +164.142387925205 1397.743774414062 +170.095704526297 2555.608398437500 +170.117713008976 1158.512451171875 +171.138285405592 1725.352783203125 +172.133028437063 1123.054931640625 +173.079655002329 7144.640625000000 +174.126934809121 1194.000000000000 +174.991203274998 1777.000000000000 +175.116368241068 1162.949340820312 +177.054231756114 1309.000000000000 +178.157784100193 1534.868164062500 +179.105332304060 1828.708496093750 +182.960722615568 2034.734130859375 +182.981753399558 1523.646118164062 +186.221092974907 1568.000000000000 +194.116236721308 3748.894531250000 +195.102613175400 1515.739379882812 +195.121055840997 2116.849121093750 +198.184888429616 2347.000000000000 +199.170414627366 1034.234008789062 +200.199867365295 1236.000000000000 +217.106502785658 22547.000000000000 +218.109446876777 2869.896484375000 +219.095557281166 1944.130981445312 +221.153223023305 1185.000000000000 +223.114461507324 1034.770629882812 +224.127172706797 1468.017333984375 +228.195860287814 1829.701904296875 +235.169297457059 1217.789672851562 +236.167342122754 1229.978393554688 +239.088865341699 5611.864257812500 +242.284112493819 1435.000000000000 +246.861636005840 3600.000000000000 +249.183926909638 1239.267578125000 +250.177631076915 1608.653930664062 +250.999867219289 3669.000000000000 +251.184460532696 1289.000000000000 +252.996834501545 2396.000000000000 +267.170737913759 1302.000000000000 +279.092781100496 1990.422485351562 +281.050453539953 1716.000000000000 +284.164828830393 19901.000000000000 +285.168247441249 5105.009277343750 +286.178522167562 2505.947265625000 +292.120756058941 2244.000000000000 +304.112997380048 9137.997070312500 +305.114809259957 1248.000000000000 +307.247581674679 2870.591064453125 +327.007903760602 4769.333496093750 +329.004988731169 5072.000000000000 +330.206333669111 39276.347656250000 +331.003150747857 1505.000000000000 +331.209945872255 8353.000000000000 +332.212619484251 1460.000000000000 +352.187543018171 4473.501953125000 +352.235657491200 1101.906127929688 +353.190848911854 1145.845703125000 +366.265454834464 1067.000000000000 +430.886234956732 1214.000000000000 +443.203497376616 1489.000000000000 +445.118920676436 2127.000000000000 +446.119938440518 1094.000000000000 +487.230020046174 1464.000000000000 +500.275371679450 7521.000000000000 +501.279707476795 1916.000000000000 +502.289033823976 1242.000000000000 +505.852717880243 3588.607177734375 +506.852669964207 1066.941284179688 +519.137961279277 1105.000000000000 +522.879198420696 1610.000000000000 +536.164494946040 5297.781250000000 +537.164688815051 2574.000000000000 +538.161433945477 1865.000000000000 +544.337981381467 1652.000000000000 +546.912025086522 2226.000000000000 +610.182434473715 1927.000000000000 +611.184949978043 1031.000000000000 +612.180638751427 1117.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=673 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=673 experiment=4_0 +##scan 98 +##specref ms_run[1]:sample=1 period=1 cycle=673 experiment=4 +67.055955628196 6.000000000000 +85.029108145002 16.000000000000 +>compound 1_0-673005--99--UNKNOWN +>parentmass 380.333799463923 +>charge 1 +>rt 444.319999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005488938755 2350.593017578125 +53.013588324644 12767.545898437500 +53.850602011789 1419.023559570312 +54.009277930243 350949.937500000000 +55.005882174690 5980.665039062500 +55.011271852588 6902.226562500000 +55.054019745465 2022.733642578125 +55.934144416603 6394.418945312500 +56.941974848582 2552.567871093750 +59.049584626180 82968.343750000000 +60.044436434339 11798.745117187500 +61.039857260495 1418.066894531250 +63.997690777449 5300.331542968750 +64.005055494638 5642.615234375000 +68.011549248196 27451.353515625000 +68.993663170779 12879.408203125000 +69.007923886319 1096.306518554688 +69.017093204571 1048.585327148438 +69.044464898692 14985.748046875000 +72.044068035438 1200.000000000000 +72.936472003402 1977.664062500000 +73.063928396874 1959.918212890625 +76.485788636002 2314.000000000000 +79.020808695957 16540.974609375000 +80.049003015352 11621.023437500000 +81.936961802817 7790.062011718750 +82.996425878887 8926.235351562500 +87.043401766705 1052.722534179688 +87.054720096584 1598.703735351562 +89.070537362555 1099.501586914062 +89.506543980543 1537.000000000000 +90.488976670281 2074.153564453125 +91.053544478477 1272.000000000000 +95.952308083894 2711.735351562500 +97.968032389654 7078.057128906250 +98.969879824280 1075.024169921875 +98.983750195184 1134.641967773438 +100.075252125469 1148.000000000000 +102.090288668641 1518.295654296875 +109.942519188947 1560.000000000000 +113.962786515294 1911.000000000000 +114.090570911428 11594.000000000000 +118.085197571393 7471.451660156250 +122.095288657014 3643.487548828125 +122.962930478054 10984.000000000000 +123.091081082016 1904.215087890625 +123.961949403194 1154.785766601562 +129.051725827646 1031.424194335938 +130.158373479059 1197.000000000000 +136.020639271025 1294.000000000000 +136.111219298674 1581.000000000000 +137.962917189768 1048.878295898438 +139.962538042462 1239.972167968750 +140.067396874754 1114.000000000000 +141.090487874245 1651.273437500000 +141.111958567360 1564.450073242188 +141.957616223576 16224.258789062500 +142.958418907981 1026.000000000000 +147.090234495507 2769.000000000000 +149.022464584767 4638.307617187500 +149.043536926502 1434.492431640625 +151.096151051404 3035.018798828125 +151.110008367767 3171.904052734375 +153.126548969804 1291.579223632812 +155.069550988391 1706.934082031250 +155.105646674154 1824.416381835938 +155.973161751975 4932.172363281250 +158.095721714505 1143.806762695312 +158.153274772537 12598.800781250000 +159.156537181630 1573.631347656250 +159.968437979142 1158.000000000000 +161.095365719682 1817.901855468750 +164.142387925205 1397.743774414062 +170.095704526297 2555.608398437500 +170.117713008976 1158.512451171875 +171.138285405592 1725.352783203125 +172.133028437063 1123.054931640625 +173.079655002329 7144.640625000000 +174.126934809121 1194.000000000000 +174.991203274998 1777.000000000000 +175.116368241068 1162.949340820312 +177.054231756114 1309.000000000000 +178.157784100193 1534.868164062500 +179.105332304060 1828.708496093750 +182.960722615568 2034.734130859375 +182.981753399558 1523.646118164062 +186.221092974907 1568.000000000000 +194.116236721308 3748.894531250000 +195.102613175400 1515.739379882812 +195.121055840997 2116.849121093750 +198.184888429616 2347.000000000000 +199.170414627366 1034.234008789062 +200.199867365295 1236.000000000000 +217.106502785658 22547.000000000000 +218.109446876777 2869.896484375000 +219.095557281166 1944.130981445312 +221.153223023305 1185.000000000000 +223.114461507324 1034.770629882812 +224.127172706797 1468.017333984375 +228.195860287814 1829.701904296875 +235.169297457059 1217.789672851562 +236.167342122754 1229.978393554688 +239.088865341699 5611.864257812500 +242.284112493819 1435.000000000000 +246.861636005840 3600.000000000000 +249.183926909638 1239.267578125000 +250.177631076915 1608.653930664062 +250.999867219289 3669.000000000000 +251.184460532696 1289.000000000000 +252.996834501545 2396.000000000000 +267.170737913759 1302.000000000000 +279.092781100496 1990.422485351562 +281.050453539953 1716.000000000000 +284.164828830393 19901.000000000000 +285.168247441249 5105.009277343750 +286.178522167562 2505.947265625000 +292.120756058941 2244.000000000000 +304.112997380048 9137.997070312500 +305.114809259957 1248.000000000000 +307.247581674679 2870.591064453125 +327.007903760602 4769.333496093750 +329.004988731169 5072.000000000000 +330.206333669111 39276.347656250000 +331.003150747857 1505.000000000000 +331.209945872255 8353.000000000000 +332.212619484251 1460.000000000000 +352.187543018171 4473.501953125000 +352.235657491200 1101.906127929688 +353.190848911854 1145.845703125000 +366.265454834464 1067.000000000000 +430.886234956732 1214.000000000000 +443.203497376616 1489.000000000000 +445.118920676436 2127.000000000000 +446.119938440518 1094.000000000000 +487.230020046174 1464.000000000000 +500.275371679450 7521.000000000000 +501.279707476795 1916.000000000000 +502.289033823976 1242.000000000000 +505.852717880243 3588.607177734375 +506.852669964207 1066.941284179688 +519.137961279277 1105.000000000000 +522.879198420696 1610.000000000000 +536.164494946040 5297.781250000000 +537.164688815051 2574.000000000000 +538.161433945477 1865.000000000000 +544.337981381467 1652.000000000000 +546.912025086522 2226.000000000000 +610.182434473715 1927.000000000000 +611.184949978043 1031.000000000000 +612.180638751427 1117.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=673 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=673 experiment=5_0 +##scan 99 +##specref ms_run[1]:sample=1 period=1 cycle=673 experiment=5 +85.100667904749 6.000000000000 +173.130774268356 6.000000000000 +193.064275901515 6.000000000000 +209.117777456688 6.000000000000 +262.052624631527 6.000000000000 +264.265299408456 16.000000000000 +>compound 1_0-674002--101--UNKNOWN +>parentmass 217.006778563847 +>charge 1 +>rt 445.246000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +217.006778563847 3269.000000000000 +>ms1peaks +52.005592753043 3006.313964843750 +53.013386604926 14895.982421875000 +53.850307885580 1282.519653320312 +54.009266588925 342199.718750000000 +55.006082581110 6060.072753906250 +55.011283454187 6240.310058593750 +55.054294821572 2210.000000000000 +55.934096145228 5628.309570312500 +56.941759312303 2162.160156250000 +59.049359471853 46694.679687500000 +60.044421789280 9540.689453125000 +61.039479760124 2294.308837890625 +63.997714272448 3712.306396484375 +64.004717741595 3776.877441406250 +68.011627587572 27064.916015625000 +68.993566533187 11389.638671875000 +69.008625246067 1040.924560546875 +69.044535203632 13668.087890625000 +72.936481622578 2454.600341796875 +73.064065589451 1403.865722656250 +76.486273965426 2375.015136718750 +79.020790259171 14203.234375000000 +80.049005926370 10670.580078125000 +81.936823889862 7769.677734375000 +82.996318430269 8831.000000000000 +87.043659684882 1291.933349609375 +87.054507882909 1447.717041015625 +89.506487543125 1968.296386718750 +90.489051431145 1567.000000000000 +91.053400164401 1256.000000000000 +95.952306311885 1977.000000000000 +97.968075016323 6813.626953125000 +100.074949120053 1188.000000000000 +102.090464066418 1830.000000000000 +109.942585550788 1505.090454101562 +113.962587921756 2250.229736328125 +114.090562200242 10307.702148437500 +118.085082878297 6730.000000000000 +122.095605127592 3465.000000000000 +122.963039812214 10185.000000000000 +123.091494988172 1608.787231445312 +129.051393255556 1096.195678710938 +130.157964856700 1224.000000000000 +136.020696393521 1628.173095703125 +136.111265586312 1351.884765625000 +137.963028699523 1044.000000000000 +141.090735684411 1400.241577148438 +141.111884779659 1559.751831054688 +141.936149934788 2056.103759765625 +141.957562608877 15536.687500000000 +147.090844143576 2684.000000000000 +149.022219076913 4357.918945312500 +149.040987249104 1837.193115234375 +151.095349881837 2305.082275390625 +151.109939199155 2576.997802734375 +155.068952001479 1217.608398437500 +155.105783696987 1630.887817382812 +155.972951860043 4015.000000000000 +158.153089325142 12131.025390625000 +159.156361011225 1282.655029296875 +161.095571014168 1849.739868164062 +164.142332600548 1475.398193359375 +170.095084317194 2525.529541015625 +171.146419276332 1492.000000000000 +172.132296924472 1198.192871093750 +173.080359168822 7163.493164062500 +174.127015852864 1059.000000000000 +174.990991861896 1587.000000000000 +178.157781317469 1624.536987304688 +179.105994436857 1966.000000000000 +182.960688878508 2338.556152343750 +182.982210678536 2178.232421875000 +186.220605721634 1746.000000000000 +194.115986578552 3414.184814453125 +195.121368448944 2440.554443359375 +198.184661469947 1850.538574218750 +200.200431422851 1250.850830078125 +201.983565637695 1125.000000000000 +217.006778563847 3269.000000000000 +217.106257896227 20478.425781250000 +218.109387671986 2700.000000000000 +219.094811619683 1568.384521484375 +224.126330250006 1136.363037109375 +228.195256821021 1364.000000000000 +234.034555602122 3162.000000000000 +235.168379942276 1059.765869140625 +239.088123273064 4617.123535156250 +242.283687547927 1626.000000000000 +246.861503474727 3165.000000000000 +249.183966936445 1338.000000000000 +250.178157580094 1268.000000000000 +250.999499019254 3169.000000000000 +251.184919733032 1121.084228515625 +252.996470645480 2204.000000000000 +262.065339439714 5824.345214843750 +267.170259991556 1568.463745117188 +276.081091674263 8173.000000000000 +277.057665923216 1209.618164062500 +277.085219951598 1293.623413085938 +279.093583842250 1859.000000000000 +281.050436828814 1462.000000000000 +284.164194797510 15720.000000000000 +285.167199045233 4022.000000000000 +286.177305853522 1891.670776367188 +292.120375414143 1944.000000000000 +303.190300317299 1143.297241210938 +304.113551407962 233981.000000000000 +305.115237199332 34039.113281250000 +306.110943955948 13933.000000000000 +307.113098422247 1919.696899414062 +307.246808467596 3300.572753906250 +310.120295757069 1681.000000000000 +320.107169971093 1195.785766601562 +326.095118441765 16572.000000000000 +327.007733661441 3760.000000000000 +327.095761410498 3082.000000000000 +328.091343004556 1205.000000000000 +329.005017718870 3936.000000000000 +330.206156493086 31473.623046875000 +331.001131359041 1283.000000000000 +331.208781030804 7087.107910156250 +332.212762979446 1049.000000000000 +342.069329790769 1871.000000000000 +349.169872251691 6112.673339843750 +350.172892076873 1285.000000000000 +352.188381138816 3463.990966796875 +352.237855065072 1571.586547851562 +380.335730124158 1272.000000000000 +404.036775645443 2150.000000000000 +445.119594711322 2089.000000000000 +487.229352410180 1300.347412109375 +500.276727311162 8288.133789062500 +501.279823879484 2533.000000000000 +502.288704966210 1392.000000000000 +505.852309070026 2882.000000000000 +522.878554007503 1334.599853515625 +536.164536908876 5057.000000000000 +537.165016352661 2456.000000000000 +538.163523094599 1972.255615234375 +544.338584253074 1675.149536132812 +546.914933234641 1855.000000000000 +607.218843523736 2732.000000000000 +610.184293153428 2142.000000000000 +611.183428881164 1140.000000000000 +612.185574985429 1243.000000000000 +613.226429565287 4419.000000000000 +614.228332015276 1213.785766601562 +629.199480533100 8990.000000000000 +630.203842344410 2729.000000000000 +631.198645508739 1426.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=674 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=674 experiment=2_0 +##scan 101 +##specref ms_run[1]:sample=1 period=1 cycle=674 experiment=2 +55.053353739963 165.000000000000 +59.050940909798 30.000000000000 +69.032863640248 30.000000000000 +69.038265944203 30.000000000000 +83.048170396039 75.000000000000 +101.060026537845 30.000000000000 +111.044227005358 105.000000000000 +155.069593100545 75.000000000000 +173.082117358540 45.000000000000 +201.982817686334 60.000000000000 +>compound 1_0-674003--102--UNKNOWN +>parentmass 262.065339439714 +>charge 1 +>rt 445.246000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +262.065339439714 5824.345214843750 +>ms1peaks +52.005592753043 3006.313964843750 +53.013386604926 14895.982421875000 +53.850307885580 1282.519653320312 +54.009266588925 342199.718750000000 +55.006082581110 6060.072753906250 +55.011283454187 6240.310058593750 +55.054294821572 2210.000000000000 +55.934096145228 5628.309570312500 +56.941759312303 2162.160156250000 +59.049359471853 46694.679687500000 +60.044421789280 9540.689453125000 +61.039479760124 2294.308837890625 +63.997714272448 3712.306396484375 +64.004717741595 3776.877441406250 +68.011627587572 27064.916015625000 +68.993566533187 11389.638671875000 +69.008625246067 1040.924560546875 +69.044535203632 13668.087890625000 +72.936481622578 2454.600341796875 +73.064065589451 1403.865722656250 +76.486273965426 2375.015136718750 +79.020790259171 14203.234375000000 +80.049005926370 10670.580078125000 +81.936823889862 7769.677734375000 +82.996318430269 8831.000000000000 +87.043659684882 1291.933349609375 +87.054507882909 1447.717041015625 +89.506487543125 1968.296386718750 +90.489051431145 1567.000000000000 +91.053400164401 1256.000000000000 +95.952306311885 1977.000000000000 +97.968075016323 6813.626953125000 +100.074949120053 1188.000000000000 +102.090464066418 1830.000000000000 +109.942585550788 1505.090454101562 +113.962587921756 2250.229736328125 +114.090562200242 10307.702148437500 +118.085082878297 6730.000000000000 +122.095605127592 3465.000000000000 +122.963039812214 10185.000000000000 +123.091494988172 1608.787231445312 +129.051393255556 1096.195678710938 +130.157964856700 1224.000000000000 +136.020696393521 1628.173095703125 +136.111265586312 1351.884765625000 +137.963028699523 1044.000000000000 +141.090735684411 1400.241577148438 +141.111884779659 1559.751831054688 +141.936149934788 2056.103759765625 +141.957562608877 15536.687500000000 +147.090844143576 2684.000000000000 +149.022219076913 4357.918945312500 +149.040987249104 1837.193115234375 +151.095349881837 2305.082275390625 +151.109939199155 2576.997802734375 +155.068952001479 1217.608398437500 +155.105783696987 1630.887817382812 +155.972951860043 4015.000000000000 +158.153089325142 12131.025390625000 +159.156361011225 1282.655029296875 +161.095571014168 1849.739868164062 +164.142332600548 1475.398193359375 +170.095084317194 2525.529541015625 +171.146419276332 1492.000000000000 +172.132296924472 1198.192871093750 +173.080359168822 7163.493164062500 +174.127015852864 1059.000000000000 +174.990991861896 1587.000000000000 +178.157781317469 1624.536987304688 +179.105994436857 1966.000000000000 +182.960688878508 2338.556152343750 +182.982210678536 2178.232421875000 +186.220605721634 1746.000000000000 +194.115986578552 3414.184814453125 +195.121368448944 2440.554443359375 +198.184661469947 1850.538574218750 +200.200431422851 1250.850830078125 +201.983565637695 1125.000000000000 +217.006778563847 3269.000000000000 +217.106257896227 20478.425781250000 +218.109387671986 2700.000000000000 +219.094811619683 1568.384521484375 +224.126330250006 1136.363037109375 +228.195256821021 1364.000000000000 +234.034555602122 3162.000000000000 +235.168379942276 1059.765869140625 +239.088123273064 4617.123535156250 +242.283687547927 1626.000000000000 +246.861503474727 3165.000000000000 +249.183966936445 1338.000000000000 +250.178157580094 1268.000000000000 +250.999499019254 3169.000000000000 +251.184919733032 1121.084228515625 +252.996470645480 2204.000000000000 +262.065339439714 5824.345214843750 +267.170259991556 1568.463745117188 +276.081091674263 8173.000000000000 +277.057665923216 1209.618164062500 +277.085219951598 1293.623413085938 +279.093583842250 1859.000000000000 +281.050436828814 1462.000000000000 +284.164194797510 15720.000000000000 +285.167199045233 4022.000000000000 +286.177305853522 1891.670776367188 +292.120375414143 1944.000000000000 +303.190300317299 1143.297241210938 +304.113551407962 233981.000000000000 +305.115237199332 34039.113281250000 +306.110943955948 13933.000000000000 +307.113098422247 1919.696899414062 +307.246808467596 3300.572753906250 +310.120295757069 1681.000000000000 +320.107169971093 1195.785766601562 +326.095118441765 16572.000000000000 +327.007733661441 3760.000000000000 +327.095761410498 3082.000000000000 +328.091343004556 1205.000000000000 +329.005017718870 3936.000000000000 +330.206156493086 31473.623046875000 +331.001131359041 1283.000000000000 +331.208781030804 7087.107910156250 +332.212762979446 1049.000000000000 +342.069329790769 1871.000000000000 +349.169872251691 6112.673339843750 +350.172892076873 1285.000000000000 +352.188381138816 3463.990966796875 +352.237855065072 1571.586547851562 +380.335730124158 1272.000000000000 +404.036775645443 2150.000000000000 +445.119594711322 2089.000000000000 +487.229352410180 1300.347412109375 +500.276727311162 8288.133789062500 +501.279823879484 2533.000000000000 +502.288704966210 1392.000000000000 +505.852309070026 2882.000000000000 +522.878554007503 1334.599853515625 +536.164536908876 5057.000000000000 +537.165016352661 2456.000000000000 +538.163523094599 1972.255615234375 +544.338584253074 1675.149536132812 +546.914933234641 1855.000000000000 +607.218843523736 2732.000000000000 +610.184293153428 2142.000000000000 +611.183428881164 1140.000000000000 +612.185574985429 1243.000000000000 +613.226429565287 4419.000000000000 +614.228332015276 1213.785766601562 +629.199480533100 8990.000000000000 +630.203842344410 2729.000000000000 +631.198645508739 1426.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=674 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=674 experiment=3_0 +##scan 102 +##specref ms_run[1]:sample=1 period=1 cycle=674 experiment=3 +158.928231035657 13.000000000000 +217.019193478663 13.000000000000 +>compound 1_0-674004--103--UNKNOWN +>parentmass 276.081091674263 +>charge 1 +>rt 445.246000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +276.081091674263 8173.000000000000 +>ms1peaks +52.005592753043 3006.313964843750 +53.013386604926 14895.982421875000 +53.850307885580 1282.519653320312 +54.009266588925 342199.718750000000 +55.006082581110 6060.072753906250 +55.011283454187 6240.310058593750 +55.054294821572 2210.000000000000 +55.934096145228 5628.309570312500 +56.941759312303 2162.160156250000 +59.049359471853 46694.679687500000 +60.044421789280 9540.689453125000 +61.039479760124 2294.308837890625 +63.997714272448 3712.306396484375 +64.004717741595 3776.877441406250 +68.011627587572 27064.916015625000 +68.993566533187 11389.638671875000 +69.008625246067 1040.924560546875 +69.044535203632 13668.087890625000 +72.936481622578 2454.600341796875 +73.064065589451 1403.865722656250 +76.486273965426 2375.015136718750 +79.020790259171 14203.234375000000 +80.049005926370 10670.580078125000 +81.936823889862 7769.677734375000 +82.996318430269 8831.000000000000 +87.043659684882 1291.933349609375 +87.054507882909 1447.717041015625 +89.506487543125 1968.296386718750 +90.489051431145 1567.000000000000 +91.053400164401 1256.000000000000 +95.952306311885 1977.000000000000 +97.968075016323 6813.626953125000 +100.074949120053 1188.000000000000 +102.090464066418 1830.000000000000 +109.942585550788 1505.090454101562 +113.962587921756 2250.229736328125 +114.090562200242 10307.702148437500 +118.085082878297 6730.000000000000 +122.095605127592 3465.000000000000 +122.963039812214 10185.000000000000 +123.091494988172 1608.787231445312 +129.051393255556 1096.195678710938 +130.157964856700 1224.000000000000 +136.020696393521 1628.173095703125 +136.111265586312 1351.884765625000 +137.963028699523 1044.000000000000 +141.090735684411 1400.241577148438 +141.111884779659 1559.751831054688 +141.936149934788 2056.103759765625 +141.957562608877 15536.687500000000 +147.090844143576 2684.000000000000 +149.022219076913 4357.918945312500 +149.040987249104 1837.193115234375 +151.095349881837 2305.082275390625 +151.109939199155 2576.997802734375 +155.068952001479 1217.608398437500 +155.105783696987 1630.887817382812 +155.972951860043 4015.000000000000 +158.153089325142 12131.025390625000 +159.156361011225 1282.655029296875 +161.095571014168 1849.739868164062 +164.142332600548 1475.398193359375 +170.095084317194 2525.529541015625 +171.146419276332 1492.000000000000 +172.132296924472 1198.192871093750 +173.080359168822 7163.493164062500 +174.127015852864 1059.000000000000 +174.990991861896 1587.000000000000 +178.157781317469 1624.536987304688 +179.105994436857 1966.000000000000 +182.960688878508 2338.556152343750 +182.982210678536 2178.232421875000 +186.220605721634 1746.000000000000 +194.115986578552 3414.184814453125 +195.121368448944 2440.554443359375 +198.184661469947 1850.538574218750 +200.200431422851 1250.850830078125 +201.983565637695 1125.000000000000 +217.006778563847 3269.000000000000 +217.106257896227 20478.425781250000 +218.109387671986 2700.000000000000 +219.094811619683 1568.384521484375 +224.126330250006 1136.363037109375 +228.195256821021 1364.000000000000 +234.034555602122 3162.000000000000 +235.168379942276 1059.765869140625 +239.088123273064 4617.123535156250 +242.283687547927 1626.000000000000 +246.861503474727 3165.000000000000 +249.183966936445 1338.000000000000 +250.178157580094 1268.000000000000 +250.999499019254 3169.000000000000 +251.184919733032 1121.084228515625 +252.996470645480 2204.000000000000 +262.065339439714 5824.345214843750 +267.170259991556 1568.463745117188 +276.081091674263 8173.000000000000 +277.057665923216 1209.618164062500 +277.085219951598 1293.623413085938 +279.093583842250 1859.000000000000 +281.050436828814 1462.000000000000 +284.164194797510 15720.000000000000 +285.167199045233 4022.000000000000 +286.177305853522 1891.670776367188 +292.120375414143 1944.000000000000 +303.190300317299 1143.297241210938 +304.113551407962 233981.000000000000 +305.115237199332 34039.113281250000 +306.110943955948 13933.000000000000 +307.113098422247 1919.696899414062 +307.246808467596 3300.572753906250 +310.120295757069 1681.000000000000 +320.107169971093 1195.785766601562 +326.095118441765 16572.000000000000 +327.007733661441 3760.000000000000 +327.095761410498 3082.000000000000 +328.091343004556 1205.000000000000 +329.005017718870 3936.000000000000 +330.206156493086 31473.623046875000 +331.001131359041 1283.000000000000 +331.208781030804 7087.107910156250 +332.212762979446 1049.000000000000 +342.069329790769 1871.000000000000 +349.169872251691 6112.673339843750 +350.172892076873 1285.000000000000 +352.188381138816 3463.990966796875 +352.237855065072 1571.586547851562 +380.335730124158 1272.000000000000 +404.036775645443 2150.000000000000 +445.119594711322 2089.000000000000 +487.229352410180 1300.347412109375 +500.276727311162 8288.133789062500 +501.279823879484 2533.000000000000 +502.288704966210 1392.000000000000 +505.852309070026 2882.000000000000 +522.878554007503 1334.599853515625 +536.164536908876 5057.000000000000 +537.165016352661 2456.000000000000 +538.163523094599 1972.255615234375 +544.338584253074 1675.149536132812 +546.914933234641 1855.000000000000 +607.218843523736 2732.000000000000 +610.184293153428 2142.000000000000 +611.183428881164 1140.000000000000 +612.185574985429 1243.000000000000 +613.226429565287 4419.000000000000 +614.228332015276 1213.785766601562 +629.199480533100 8990.000000000000 +630.203842344410 2729.000000000000 +631.198645508739 1426.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=674 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=674 experiment=4_0 +##scan 103 +##specref ms_run[1]:sample=1 period=1 cycle=674 experiment=4 +77.037002009634 30.000000000000 +148.907799128466 30.000000000000 +201.986801494168 90.000000000000 +217.004845407025 45.000000000000 +>compound 1_0-674005--104--UNKNOWN +>parentmass 304.113551407962 +>charge 1 +>rt 445.246000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +304.113551407962 233981.000000000000 +>ms1peaks +52.005592753043 3006.313964843750 +53.013386604926 14895.982421875000 +53.850307885580 1282.519653320312 +54.009266588925 342199.718750000000 +55.006082581110 6060.072753906250 +55.011283454187 6240.310058593750 +55.054294821572 2210.000000000000 +55.934096145228 5628.309570312500 +56.941759312303 2162.160156250000 +59.049359471853 46694.679687500000 +60.044421789280 9540.689453125000 +61.039479760124 2294.308837890625 +63.997714272448 3712.306396484375 +64.004717741595 3776.877441406250 +68.011627587572 27064.916015625000 +68.993566533187 11389.638671875000 +69.008625246067 1040.924560546875 +69.044535203632 13668.087890625000 +72.936481622578 2454.600341796875 +73.064065589451 1403.865722656250 +76.486273965426 2375.015136718750 +79.020790259171 14203.234375000000 +80.049005926370 10670.580078125000 +81.936823889862 7769.677734375000 +82.996318430269 8831.000000000000 +87.043659684882 1291.933349609375 +87.054507882909 1447.717041015625 +89.506487543125 1968.296386718750 +90.489051431145 1567.000000000000 +91.053400164401 1256.000000000000 +95.952306311885 1977.000000000000 +97.968075016323 6813.626953125000 +100.074949120053 1188.000000000000 +102.090464066418 1830.000000000000 +109.942585550788 1505.090454101562 +113.962587921756 2250.229736328125 +114.090562200242 10307.702148437500 +118.085082878297 6730.000000000000 +122.095605127592 3465.000000000000 +122.963039812214 10185.000000000000 +123.091494988172 1608.787231445312 +129.051393255556 1096.195678710938 +130.157964856700 1224.000000000000 +136.020696393521 1628.173095703125 +136.111265586312 1351.884765625000 +137.963028699523 1044.000000000000 +141.090735684411 1400.241577148438 +141.111884779659 1559.751831054688 +141.936149934788 2056.103759765625 +141.957562608877 15536.687500000000 +147.090844143576 2684.000000000000 +149.022219076913 4357.918945312500 +149.040987249104 1837.193115234375 +151.095349881837 2305.082275390625 +151.109939199155 2576.997802734375 +155.068952001479 1217.608398437500 +155.105783696987 1630.887817382812 +155.972951860043 4015.000000000000 +158.153089325142 12131.025390625000 +159.156361011225 1282.655029296875 +161.095571014168 1849.739868164062 +164.142332600548 1475.398193359375 +170.095084317194 2525.529541015625 +171.146419276332 1492.000000000000 +172.132296924472 1198.192871093750 +173.080359168822 7163.493164062500 +174.127015852864 1059.000000000000 +174.990991861896 1587.000000000000 +178.157781317469 1624.536987304688 +179.105994436857 1966.000000000000 +182.960688878508 2338.556152343750 +182.982210678536 2178.232421875000 +186.220605721634 1746.000000000000 +194.115986578552 3414.184814453125 +195.121368448944 2440.554443359375 +198.184661469947 1850.538574218750 +200.200431422851 1250.850830078125 +201.983565637695 1125.000000000000 +217.006778563847 3269.000000000000 +217.106257896227 20478.425781250000 +218.109387671986 2700.000000000000 +219.094811619683 1568.384521484375 +224.126330250006 1136.363037109375 +228.195256821021 1364.000000000000 +234.034555602122 3162.000000000000 +235.168379942276 1059.765869140625 +239.088123273064 4617.123535156250 +242.283687547927 1626.000000000000 +246.861503474727 3165.000000000000 +249.183966936445 1338.000000000000 +250.178157580094 1268.000000000000 +250.999499019254 3169.000000000000 +251.184919733032 1121.084228515625 +252.996470645480 2204.000000000000 +262.065339439714 5824.345214843750 +267.170259991556 1568.463745117188 +276.081091674263 8173.000000000000 +277.057665923216 1209.618164062500 +277.085219951598 1293.623413085938 +279.093583842250 1859.000000000000 +281.050436828814 1462.000000000000 +284.164194797510 15720.000000000000 +285.167199045233 4022.000000000000 +286.177305853522 1891.670776367188 +292.120375414143 1944.000000000000 +303.190300317299 1143.297241210938 +304.113551407962 233981.000000000000 +305.115237199332 34039.113281250000 +306.110943955948 13933.000000000000 +307.113098422247 1919.696899414062 +307.246808467596 3300.572753906250 +310.120295757069 1681.000000000000 +320.107169971093 1195.785766601562 +326.095118441765 16572.000000000000 +327.007733661441 3760.000000000000 +327.095761410498 3082.000000000000 +328.091343004556 1205.000000000000 +329.005017718870 3936.000000000000 +330.206156493086 31473.623046875000 +331.001131359041 1283.000000000000 +331.208781030804 7087.107910156250 +332.212762979446 1049.000000000000 +342.069329790769 1871.000000000000 +349.169872251691 6112.673339843750 +350.172892076873 1285.000000000000 +352.188381138816 3463.990966796875 +352.237855065072 1571.586547851562 +380.335730124158 1272.000000000000 +404.036775645443 2150.000000000000 +445.119594711322 2089.000000000000 +487.229352410180 1300.347412109375 +500.276727311162 8288.133789062500 +501.279823879484 2533.000000000000 +502.288704966210 1392.000000000000 +505.852309070026 2882.000000000000 +522.878554007503 1334.599853515625 +536.164536908876 5057.000000000000 +537.165016352661 2456.000000000000 +538.163523094599 1972.255615234375 +544.338584253074 1675.149536132812 +546.914933234641 1855.000000000000 +607.218843523736 2732.000000000000 +610.184293153428 2142.000000000000 +611.183428881164 1140.000000000000 +612.185574985429 1243.000000000000 +613.226429565287 4419.000000000000 +614.228332015276 1213.785766601562 +629.199480533100 8990.000000000000 +630.203842344410 2729.000000000000 +631.198645508739 1426.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=674 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=674 experiment=5_0 +##scan 104 +##specref ms_run[1]:sample=1 period=1 cycle=674 experiment=5 +58.995215971250 180.000000000000 +60.080753471313 721.000000000000 +66.046718858959 30.000000000000 +77.039192209465 180.000000000000 +78.046640699982 19.199796676636 +78.056645284176 23.859180450439 +79.054775615141 240.000000000000 +79.989470157797 177.410171508789 +81.070369729317 30.000000000000 +81.077715179950 34.642181396484 +81.087884641584 25.687335968018 +91.054011602969 180.000000000000 +93.070472451129 105.000000000000 +94.041718615578 30.000000000000 +94.044634181938 30.000000000000 +97.010569971058 357.000000000000 +103.052897497950 178.000000000000 +104.061155913280 190.923583984375 +104.072561481087 115.796875000000 +105.040269303798 30.000000000000 +105.046944067735 30.000000000000 +107.048358838534 903.000000000000 +108.057031942279 459.000000000000 +109.010062426673 60.000000000000 +109.063250222712 105.000000000000 +109.070291141086 105.000000000000 +109.468431116784 30.000000000000 +109.479510337967 30.000000000000 +110.017488729864 150.000000000000 +121.008905730228 210.000000000000 +121.064231668998 30.000000000000 +121.070315494313 30.000000000000 +122.016802480677 460.000000000000 +122.033065525586 192.851333618164 +125.043992535447 90.000000000000 +135.024864685327 150.000000000000 +135.080963191190 45.000000000000 +136.033361328525 60.000000000000 +137.004717449824 150.000000000000 +137.041027304602 997.000000000000 +138.013147878326 794.000000000000 +139.022077262115 341.094055175781 +139.044999410913 55.339820861816 +140.030084504643 105.000000000000 +140.051393349560 30.000000000000 +141.009869005782 45.000000000000 +148.033961657404 30.000000000000 +149.042458385029 45.000000000000 +150.049800984613 90.000000000000 +151.017610556704 30.000000000000 +152.587790451126 30.000000000000 +153.008051459536 91.431686401367 +153.036132575562 2658.000000000000 +154.042680220731 105.000000000000 +154.970005135302 135.000000000000 +155.019072407607 30.000000000000 +155.052559212424 1340.000000000000 +166.017592194367 30.000000000000 +168.473431664892 30.000000000000 +168.986837706269 3398.385986328125 +169.003372763135 3388.015625000000 +170.010201737246 30.000000000000 +173.024590605404 45.000000000000 +173.040797670024 45.000000000000 +180.988125318775 45.000000000000 +181.067169151953 45.000000000000 +183.019946060280 60.000000000000 +183.973296472215 60.000000000000 +183.991581432052 60.000000000000 +184.982373240455 2358.000000000000 +186.013257917220 45.000000000000 +186.031131504801 45.000000000000 +186.997031364952 180.000000000000 +197.042736349952 45.000000000000 +198.013249664468 45.000000000000 +198.997808792697 1817.000000000000 +200.977155267651 921.321899414062 +200.996629791750 910.034851074219 +201.376938995039 105.000000000000 +201.941944851582 43.000000000000 +201.984612339669 26091.000000000000 +202.818356565561 30.000000000000 +202.991184510347 75.000000000000 +203.580320043269 30.000000000000 +203.608500705455 30.000000000000 +204.136925660656 60.000000000000 +209.022131387095 30.000000000000 +214.063970383069 30.000000000000 +214.993077545941 402.000000000000 +216.023948737594 339.000000000000 +216.352401382280 225.000000000000 +217.008671425771 51260.445312500000 +217.064228978505 62.555332183838 +217.608709167342 30.000000000000 +217.626877840902 30.000000000000 +217.691156474334 45.000000000000 +218.009446615642 105.000000000000 +218.153506302093 30.000000000000 +218.170218338352 30.000000000000 +218.267617104859 30.000000000000 +218.615653590790 30.000000000000 +218.718403129834 30.000000000000 +218.876802939725 30.000000000000 +219.478454933882 30.000000000000 +219.500322979293 30.000000000000 +219.616328786130 30.000000000000 +219.633391204545 30.000000000000 +222.033999550403 30.000000000000 +222.053161103641 30.000000000000 +230.016744406753 330.000000000000 +233.324545697612 30.000000000000 +234.034577927142 5219.000000000000 +234.244589915540 15.000000000000 +241.039526225685 30.000000000000 +241.052976719499 30.000000000000 +245.040652764521 344.000000000000 +258.069129933027 45.000000000000 +259.054295105195 30.000000000000 +262.064121926055 345.000000000000 +276.081209704146 1088.000000000000 +304.111696411402 240.000000000000 +>compound 1_0-674007--106--UNKNOWN +>parentmass 500.276727311162 +>charge 1 +>rt 445.246000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +500.276727311162 8288.133789062500 +501.279823879484 2533.000000000000 +>ms1peaks +52.005592753043 3006.313964843750 +53.013386604926 14895.982421875000 +53.850307885580 1282.519653320312 +54.009266588925 342199.718750000000 +55.006082581110 6060.072753906250 +55.011283454187 6240.310058593750 +55.054294821572 2210.000000000000 +55.934096145228 5628.309570312500 +56.941759312303 2162.160156250000 +59.049359471853 46694.679687500000 +60.044421789280 9540.689453125000 +61.039479760124 2294.308837890625 +63.997714272448 3712.306396484375 +64.004717741595 3776.877441406250 +68.011627587572 27064.916015625000 +68.993566533187 11389.638671875000 +69.008625246067 1040.924560546875 +69.044535203632 13668.087890625000 +72.936481622578 2454.600341796875 +73.064065589451 1403.865722656250 +76.486273965426 2375.015136718750 +79.020790259171 14203.234375000000 +80.049005926370 10670.580078125000 +81.936823889862 7769.677734375000 +82.996318430269 8831.000000000000 +87.043659684882 1291.933349609375 +87.054507882909 1447.717041015625 +89.506487543125 1968.296386718750 +90.489051431145 1567.000000000000 +91.053400164401 1256.000000000000 +95.952306311885 1977.000000000000 +97.968075016323 6813.626953125000 +100.074949120053 1188.000000000000 +102.090464066418 1830.000000000000 +109.942585550788 1505.090454101562 +113.962587921756 2250.229736328125 +114.090562200242 10307.702148437500 +118.085082878297 6730.000000000000 +122.095605127592 3465.000000000000 +122.963039812214 10185.000000000000 +123.091494988172 1608.787231445312 +129.051393255556 1096.195678710938 +130.157964856700 1224.000000000000 +136.020696393521 1628.173095703125 +136.111265586312 1351.884765625000 +137.963028699523 1044.000000000000 +141.090735684411 1400.241577148438 +141.111884779659 1559.751831054688 +141.936149934788 2056.103759765625 +141.957562608877 15536.687500000000 +147.090844143576 2684.000000000000 +149.022219076913 4357.918945312500 +149.040987249104 1837.193115234375 +151.095349881837 2305.082275390625 +151.109939199155 2576.997802734375 +155.068952001479 1217.608398437500 +155.105783696987 1630.887817382812 +155.972951860043 4015.000000000000 +158.153089325142 12131.025390625000 +159.156361011225 1282.655029296875 +161.095571014168 1849.739868164062 +164.142332600548 1475.398193359375 +170.095084317194 2525.529541015625 +171.146419276332 1492.000000000000 +172.132296924472 1198.192871093750 +173.080359168822 7163.493164062500 +174.127015852864 1059.000000000000 +174.990991861896 1587.000000000000 +178.157781317469 1624.536987304688 +179.105994436857 1966.000000000000 +182.960688878508 2338.556152343750 +182.982210678536 2178.232421875000 +186.220605721634 1746.000000000000 +194.115986578552 3414.184814453125 +195.121368448944 2440.554443359375 +198.184661469947 1850.538574218750 +200.200431422851 1250.850830078125 +201.983565637695 1125.000000000000 +217.006778563847 3269.000000000000 +217.106257896227 20478.425781250000 +218.109387671986 2700.000000000000 +219.094811619683 1568.384521484375 +224.126330250006 1136.363037109375 +228.195256821021 1364.000000000000 +234.034555602122 3162.000000000000 +235.168379942276 1059.765869140625 +239.088123273064 4617.123535156250 +242.283687547927 1626.000000000000 +246.861503474727 3165.000000000000 +249.183966936445 1338.000000000000 +250.178157580094 1268.000000000000 +250.999499019254 3169.000000000000 +251.184919733032 1121.084228515625 +252.996470645480 2204.000000000000 +262.065339439714 5824.345214843750 +267.170259991556 1568.463745117188 +276.081091674263 8173.000000000000 +277.057665923216 1209.618164062500 +277.085219951598 1293.623413085938 +279.093583842250 1859.000000000000 +281.050436828814 1462.000000000000 +284.164194797510 15720.000000000000 +285.167199045233 4022.000000000000 +286.177305853522 1891.670776367188 +292.120375414143 1944.000000000000 +303.190300317299 1143.297241210938 +304.113551407962 233981.000000000000 +305.115237199332 34039.113281250000 +306.110943955948 13933.000000000000 +307.113098422247 1919.696899414062 +307.246808467596 3300.572753906250 +310.120295757069 1681.000000000000 +320.107169971093 1195.785766601562 +326.095118441765 16572.000000000000 +327.007733661441 3760.000000000000 +327.095761410498 3082.000000000000 +328.091343004556 1205.000000000000 +329.005017718870 3936.000000000000 +330.206156493086 31473.623046875000 +331.001131359041 1283.000000000000 +331.208781030804 7087.107910156250 +332.212762979446 1049.000000000000 +342.069329790769 1871.000000000000 +349.169872251691 6112.673339843750 +350.172892076873 1285.000000000000 +352.188381138816 3463.990966796875 +352.237855065072 1571.586547851562 +380.335730124158 1272.000000000000 +404.036775645443 2150.000000000000 +445.119594711322 2089.000000000000 +487.229352410180 1300.347412109375 +500.276727311162 8288.133789062500 +501.279823879484 2533.000000000000 +502.288704966210 1392.000000000000 +505.852309070026 2882.000000000000 +522.878554007503 1334.599853515625 +536.164536908876 5057.000000000000 +537.165016352661 2456.000000000000 +538.163523094599 1972.255615234375 +544.338584253074 1675.149536132812 +546.914933234641 1855.000000000000 +607.218843523736 2732.000000000000 +610.184293153428 2142.000000000000 +611.183428881164 1140.000000000000 +612.185574985429 1243.000000000000 +613.226429565287 4419.000000000000 +614.228332015276 1213.785766601562 +629.199480533100 8990.000000000000 +630.203842344410 2729.000000000000 +631.198645508739 1426.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=674 experiment=7 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=674 experiment=7_0 +##scan 106 +##specref ms_run[1]:sample=1 period=1 cycle=674 experiment=7 +79.054718380605 30.000000000000 +93.067626841157 45.000000000000 +109.100207433030 30.000000000000 +129.072455830986 45.000000000000 +131.083993209966 30.000000000000 +133.103447904778 45.000000000000 +145.101145906660 45.000000000000 +217.008040624707 60.000000000000 +359.258308471788 225.000000000000 +>compound 1_0-674008--107--UNKNOWN +>parentmass 613.226429565287 +>charge 1 +>rt 445.246000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +613.226429565287 4419.000000000000 +>ms1peaks +52.005592753043 3006.313964843750 +53.013386604926 14895.982421875000 +53.850307885580 1282.519653320312 +54.009266588925 342199.718750000000 +55.006082581110 6060.072753906250 +55.011283454187 6240.310058593750 +55.054294821572 2210.000000000000 +55.934096145228 5628.309570312500 +56.941759312303 2162.160156250000 +59.049359471853 46694.679687500000 +60.044421789280 9540.689453125000 +61.039479760124 2294.308837890625 +63.997714272448 3712.306396484375 +64.004717741595 3776.877441406250 +68.011627587572 27064.916015625000 +68.993566533187 11389.638671875000 +69.008625246067 1040.924560546875 +69.044535203632 13668.087890625000 +72.936481622578 2454.600341796875 +73.064065589451 1403.865722656250 +76.486273965426 2375.015136718750 +79.020790259171 14203.234375000000 +80.049005926370 10670.580078125000 +81.936823889862 7769.677734375000 +82.996318430269 8831.000000000000 +87.043659684882 1291.933349609375 +87.054507882909 1447.717041015625 +89.506487543125 1968.296386718750 +90.489051431145 1567.000000000000 +91.053400164401 1256.000000000000 +95.952306311885 1977.000000000000 +97.968075016323 6813.626953125000 +100.074949120053 1188.000000000000 +102.090464066418 1830.000000000000 +109.942585550788 1505.090454101562 +113.962587921756 2250.229736328125 +114.090562200242 10307.702148437500 +118.085082878297 6730.000000000000 +122.095605127592 3465.000000000000 +122.963039812214 10185.000000000000 +123.091494988172 1608.787231445312 +129.051393255556 1096.195678710938 +130.157964856700 1224.000000000000 +136.020696393521 1628.173095703125 +136.111265586312 1351.884765625000 +137.963028699523 1044.000000000000 +141.090735684411 1400.241577148438 +141.111884779659 1559.751831054688 +141.936149934788 2056.103759765625 +141.957562608877 15536.687500000000 +147.090844143576 2684.000000000000 +149.022219076913 4357.918945312500 +149.040987249104 1837.193115234375 +151.095349881837 2305.082275390625 +151.109939199155 2576.997802734375 +155.068952001479 1217.608398437500 +155.105783696987 1630.887817382812 +155.972951860043 4015.000000000000 +158.153089325142 12131.025390625000 +159.156361011225 1282.655029296875 +161.095571014168 1849.739868164062 +164.142332600548 1475.398193359375 +170.095084317194 2525.529541015625 +171.146419276332 1492.000000000000 +172.132296924472 1198.192871093750 +173.080359168822 7163.493164062500 +174.127015852864 1059.000000000000 +174.990991861896 1587.000000000000 +178.157781317469 1624.536987304688 +179.105994436857 1966.000000000000 +182.960688878508 2338.556152343750 +182.982210678536 2178.232421875000 +186.220605721634 1746.000000000000 +194.115986578552 3414.184814453125 +195.121368448944 2440.554443359375 +198.184661469947 1850.538574218750 +200.200431422851 1250.850830078125 +201.983565637695 1125.000000000000 +217.006778563847 3269.000000000000 +217.106257896227 20478.425781250000 +218.109387671986 2700.000000000000 +219.094811619683 1568.384521484375 +224.126330250006 1136.363037109375 +228.195256821021 1364.000000000000 +234.034555602122 3162.000000000000 +235.168379942276 1059.765869140625 +239.088123273064 4617.123535156250 +242.283687547927 1626.000000000000 +246.861503474727 3165.000000000000 +249.183966936445 1338.000000000000 +250.178157580094 1268.000000000000 +250.999499019254 3169.000000000000 +251.184919733032 1121.084228515625 +252.996470645480 2204.000000000000 +262.065339439714 5824.345214843750 +267.170259991556 1568.463745117188 +276.081091674263 8173.000000000000 +277.057665923216 1209.618164062500 +277.085219951598 1293.623413085938 +279.093583842250 1859.000000000000 +281.050436828814 1462.000000000000 +284.164194797510 15720.000000000000 +285.167199045233 4022.000000000000 +286.177305853522 1891.670776367188 +292.120375414143 1944.000000000000 +303.190300317299 1143.297241210938 +304.113551407962 233981.000000000000 +305.115237199332 34039.113281250000 +306.110943955948 13933.000000000000 +307.113098422247 1919.696899414062 +307.246808467596 3300.572753906250 +310.120295757069 1681.000000000000 +320.107169971093 1195.785766601562 +326.095118441765 16572.000000000000 +327.007733661441 3760.000000000000 +327.095761410498 3082.000000000000 +328.091343004556 1205.000000000000 +329.005017718870 3936.000000000000 +330.206156493086 31473.623046875000 +331.001131359041 1283.000000000000 +331.208781030804 7087.107910156250 +332.212762979446 1049.000000000000 +342.069329790769 1871.000000000000 +349.169872251691 6112.673339843750 +350.172892076873 1285.000000000000 +352.188381138816 3463.990966796875 +352.237855065072 1571.586547851562 +380.335730124158 1272.000000000000 +404.036775645443 2150.000000000000 +445.119594711322 2089.000000000000 +487.229352410180 1300.347412109375 +500.276727311162 8288.133789062500 +501.279823879484 2533.000000000000 +502.288704966210 1392.000000000000 +505.852309070026 2882.000000000000 +522.878554007503 1334.599853515625 +536.164536908876 5057.000000000000 +537.165016352661 2456.000000000000 +538.163523094599 1972.255615234375 +544.338584253074 1675.149536132812 +546.914933234641 1855.000000000000 +607.218843523736 2732.000000000000 +610.184293153428 2142.000000000000 +611.183428881164 1140.000000000000 +612.185574985429 1243.000000000000 +613.226429565287 4419.000000000000 +614.228332015276 1213.785766601562 +629.199480533100 8990.000000000000 +630.203842344410 2729.000000000000 +631.198645508739 1426.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=674 experiment=8 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=674 experiment=8_0 +##scan 107 +##specref ms_run[1]:sample=1 period=1 cycle=674 experiment=8 +161.056871583890 45.000000000000 +240.043575443940 180.000000000000 +282.091368031588 75.000000000000 +310.121658372047 3112.916015625000 +328.131055904391 105.000000000000 +358.069103406103 30.000000000000 +613.226532160229 195.000000000000 +614.229875739032 30.000000000000 +>compound 1_0-674009--108--UNKNOWN +>parentmass 629.199480533100 +>charge 1 +>rt 445.246000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +629.199480533100 8990.000000000000 +>ms1peaks +52.005592753043 3006.313964843750 +53.013386604926 14895.982421875000 +53.850307885580 1282.519653320312 +54.009266588925 342199.718750000000 +55.006082581110 6060.072753906250 +55.011283454187 6240.310058593750 +55.054294821572 2210.000000000000 +55.934096145228 5628.309570312500 +56.941759312303 2162.160156250000 +59.049359471853 46694.679687500000 +60.044421789280 9540.689453125000 +61.039479760124 2294.308837890625 +63.997714272448 3712.306396484375 +64.004717741595 3776.877441406250 +68.011627587572 27064.916015625000 +68.993566533187 11389.638671875000 +69.008625246067 1040.924560546875 +69.044535203632 13668.087890625000 +72.936481622578 2454.600341796875 +73.064065589451 1403.865722656250 +76.486273965426 2375.015136718750 +79.020790259171 14203.234375000000 +80.049005926370 10670.580078125000 +81.936823889862 7769.677734375000 +82.996318430269 8831.000000000000 +87.043659684882 1291.933349609375 +87.054507882909 1447.717041015625 +89.506487543125 1968.296386718750 +90.489051431145 1567.000000000000 +91.053400164401 1256.000000000000 +95.952306311885 1977.000000000000 +97.968075016323 6813.626953125000 +100.074949120053 1188.000000000000 +102.090464066418 1830.000000000000 +109.942585550788 1505.090454101562 +113.962587921756 2250.229736328125 +114.090562200242 10307.702148437500 +118.085082878297 6730.000000000000 +122.095605127592 3465.000000000000 +122.963039812214 10185.000000000000 +123.091494988172 1608.787231445312 +129.051393255556 1096.195678710938 +130.157964856700 1224.000000000000 +136.020696393521 1628.173095703125 +136.111265586312 1351.884765625000 +137.963028699523 1044.000000000000 +141.090735684411 1400.241577148438 +141.111884779659 1559.751831054688 +141.936149934788 2056.103759765625 +141.957562608877 15536.687500000000 +147.090844143576 2684.000000000000 +149.022219076913 4357.918945312500 +149.040987249104 1837.193115234375 +151.095349881837 2305.082275390625 +151.109939199155 2576.997802734375 +155.068952001479 1217.608398437500 +155.105783696987 1630.887817382812 +155.972951860043 4015.000000000000 +158.153089325142 12131.025390625000 +159.156361011225 1282.655029296875 +161.095571014168 1849.739868164062 +164.142332600548 1475.398193359375 +170.095084317194 2525.529541015625 +171.146419276332 1492.000000000000 +172.132296924472 1198.192871093750 +173.080359168822 7163.493164062500 +174.127015852864 1059.000000000000 +174.990991861896 1587.000000000000 +178.157781317469 1624.536987304688 +179.105994436857 1966.000000000000 +182.960688878508 2338.556152343750 +182.982210678536 2178.232421875000 +186.220605721634 1746.000000000000 +194.115986578552 3414.184814453125 +195.121368448944 2440.554443359375 +198.184661469947 1850.538574218750 +200.200431422851 1250.850830078125 +201.983565637695 1125.000000000000 +217.006778563847 3269.000000000000 +217.106257896227 20478.425781250000 +218.109387671986 2700.000000000000 +219.094811619683 1568.384521484375 +224.126330250006 1136.363037109375 +228.195256821021 1364.000000000000 +234.034555602122 3162.000000000000 +235.168379942276 1059.765869140625 +239.088123273064 4617.123535156250 +242.283687547927 1626.000000000000 +246.861503474727 3165.000000000000 +249.183966936445 1338.000000000000 +250.178157580094 1268.000000000000 +250.999499019254 3169.000000000000 +251.184919733032 1121.084228515625 +252.996470645480 2204.000000000000 +262.065339439714 5824.345214843750 +267.170259991556 1568.463745117188 +276.081091674263 8173.000000000000 +277.057665923216 1209.618164062500 +277.085219951598 1293.623413085938 +279.093583842250 1859.000000000000 +281.050436828814 1462.000000000000 +284.164194797510 15720.000000000000 +285.167199045233 4022.000000000000 +286.177305853522 1891.670776367188 +292.120375414143 1944.000000000000 +303.190300317299 1143.297241210938 +304.113551407962 233981.000000000000 +305.115237199332 34039.113281250000 +306.110943955948 13933.000000000000 +307.113098422247 1919.696899414062 +307.246808467596 3300.572753906250 +310.120295757069 1681.000000000000 +320.107169971093 1195.785766601562 +326.095118441765 16572.000000000000 +327.007733661441 3760.000000000000 +327.095761410498 3082.000000000000 +328.091343004556 1205.000000000000 +329.005017718870 3936.000000000000 +330.206156493086 31473.623046875000 +331.001131359041 1283.000000000000 +331.208781030804 7087.107910156250 +332.212762979446 1049.000000000000 +342.069329790769 1871.000000000000 +349.169872251691 6112.673339843750 +350.172892076873 1285.000000000000 +352.188381138816 3463.990966796875 +352.237855065072 1571.586547851562 +380.335730124158 1272.000000000000 +404.036775645443 2150.000000000000 +445.119594711322 2089.000000000000 +487.229352410180 1300.347412109375 +500.276727311162 8288.133789062500 +501.279823879484 2533.000000000000 +502.288704966210 1392.000000000000 +505.852309070026 2882.000000000000 +522.878554007503 1334.599853515625 +536.164536908876 5057.000000000000 +537.165016352661 2456.000000000000 +538.163523094599 1972.255615234375 +544.338584253074 1675.149536132812 +546.914933234641 1855.000000000000 +607.218843523736 2732.000000000000 +610.184293153428 2142.000000000000 +611.183428881164 1140.000000000000 +612.185574985429 1243.000000000000 +613.226429565287 4419.000000000000 +614.228332015276 1213.785766601562 +629.199480533100 8990.000000000000 +630.203842344410 2729.000000000000 +631.198645508739 1426.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=674 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=674 experiment=9_0 +##scan 108 +##specref ms_run[1]:sample=1 period=1 cycle=674 experiment=9 +325.185412206910 13.000000000000 +326.095203181606 5494.411132812500 +326.685716517291 13.000000000000 +520.910773916069 13.000000000000 +>compound 1_0-675002--110--UNKNOWN +>parentmass 234.033582693957 +>charge 1 +>rt 446.172000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +234.033582693957 12770.000000000000 +>ms1peaks +52.005429962927 2874.067626953125 +53.013488092548 14817.291015625000 +54.009250374962 334494.937500000000 +55.006084606761 5488.883300781250 +55.011047738293 6443.265136718750 +55.054381628314 2385.724365234375 +55.934070669618 5486.966796875000 +56.942036090778 2313.250244140625 +59.049556209203 57988.484375000000 +60.044347260401 9323.001953125000 +61.039167560780 1828.241455078125 +63.997923021227 4927.193359375000 +64.004932691950 5181.531250000000 +68.011552270537 27280.974609375000 +68.993634139472 11798.143554687500 +69.044334270747 12566.409179687500 +72.936570834957 2193.115966796875 +73.063872777826 1681.879882812500 +76.486053959604 2158.190429687500 +79.020753207512 16147.697265625000 +80.048886066869 12139.645507812500 +81.936907500524 8343.286132812500 +82.996250408243 8009.000000000000 +87.042980895665 1166.738403320312 +87.053972860944 1485.116088867188 +89.506705194324 1444.000000000000 +90.488891330057 1645.000000000000 +91.053476545401 1583.000000000000 +95.952210208006 2039.742797851562 +97.968150682366 6945.562500000000 +100.074718244150 1363.000000000000 +102.090306392772 1417.000000000000 +109.942448236827 1253.000000000000 +113.962708637249 2032.000000000000 +114.090792284548 10306.000000000000 +118.084892277491 5540.821289062500 +122.095166173318 3378.000000000000 +122.962913232208 9579.000000000000 +123.091195975991 1531.662963867188 +130.157764407919 1286.000000000000 +136.020428292954 1633.000000000000 +141.090127789620 1346.968627929688 +141.112042976374 1656.172241210938 +141.957142368171 13820.262695312500 +147.089971164701 2287.525390625000 +149.022027180229 4587.050292968750 +149.040978245649 2678.199707031250 +151.095856455214 2104.623291015625 +151.110429192129 2233.988037109375 +155.068837159282 1322.053710937500 +155.973356955881 4212.000000000000 +158.153011960091 10898.886718750000 +161.095284178342 1762.593994140625 +164.141720682546 1224.125244140625 +170.095143568643 2743.236816406250 +173.079445020465 6455.588378906250 +174.990181271009 1164.000000000000 +175.126264328958 1229.927246093750 +178.157011972493 1362.000000000000 +179.105369890054 1931.000000000000 +182.960638968270 1810.076538085938 +182.983125598895 1274.763061523438 +186.016954934375 1958.000000000000 +186.220415397417 1282.000000000000 +193.158240520354 1195.032958984375 +194.115937912419 2861.000000000000 +195.121022485646 2380.102539062500 +198.183707422577 1745.000000000000 +200.199383225092 1357.000000000000 +201.983259096536 4157.000000000000 +217.007242135614 11741.327148437500 +217.105963587093 15482.668945312500 +218.009949414252 1208.000000000000 +218.108958783015 2547.000000000000 +219.093633048806 1319.448730468750 +234.033582693957 12770.000000000000 +235.037603512480 1379.336669921875 +239.087766278998 3286.875732421875 +242.283333142943 1269.000000000000 +245.038366204801 2525.000000000000 +246.860868473188 2768.000000000000 +249.183726045021 1277.861328125000 +250.999502407170 2552.000000000000 +252.995631834554 1836.000000000000 +262.065239894604 21394.767578125000 +263.067572169870 2404.000000000000 +264.061891103771 1243.000000000000 +276.080813947841 32185.000000000000 +277.083963767141 4114.000000000000 +278.078054160446 2217.000000000000 +279.092495265569 1940.000000000000 +281.050419778851 1367.000000000000 +284.163590469925 9332.000000000000 +285.167331910184 2517.000000000000 +289.119964437534 1441.302978515625 +292.119508242518 1546.000000000000 +303.104642799152 3336.000000000000 +303.191168270618 2846.093505859375 +304.118917204532 886697.062500000000 +304.856339026942 1419.656616210938 +304.975022441588 5892.455566406250 +305.107897820025 60098.996093750000 +306.110158464267 52147.246093750000 +307.111260806590 6616.670410156250 +307.247283236566 2744.782226562500 +310.120139525907 4017.412597656250 +320.106832165572 5127.000000000000 +321.110457254103 1231.635253906250 +321.131042046566 1226.668579101562 +326.094185610162 39581.000000000000 +327.007439325330 3479.883544921875 +327.096485748553 6323.979980468750 +328.091424657873 2476.325927734375 +329.002736488496 3916.000000000000 +330.204957173578 17861.789062500000 +331.208137127779 4322.000000000000 +342.068068201427 2858.656982421875 +349.169386508932 18308.152343750000 +350.172289812388 3575.000000000000 +351.169114792649 1326.000000000000 +352.185338388432 1383.838623046875 +372.148023932598 2199.032714843750 +380.334421867930 1500.000000000000 +404.036203084131 8110.000000000000 +405.038280600419 1614.000000000000 +445.117639958471 2103.000000000000 +500.274765830931 9506.000000000000 +501.278189264574 2845.197509765625 +502.287108152553 1738.000000000000 +505.850965822120 2506.000000000000 +536.163265279090 5123.811523437500 +537.164206705990 2452.000000000000 +538.160787955733 1794.000000000000 +544.336478775213 1764.000000000000 +546.913227478942 1570.434814453125 +549.964589119831 1398.000000000000 +607.215848916045 42716.000000000000 +608.219229396365 13004.000000000000 +609.215354074706 6569.000000000000 +610.191475231986 3658.000000000000 +611.187180591379 1650.000000000000 +612.219311132493 2717.000000000000 +613.224098373297 22062.000000000000 +614.227279534381 7018.149414062500 +615.222828016202 3443.000000000000 +623.211028873207 1301.000000000000 +629.198230629944 46218.000000000000 +630.201437914669 14408.000000000000 +631.197842259138 6467.000000000000 +632.198694915122 1400.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=675 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=675 experiment=2_0 +##scan 110 +##specref ms_run[1]:sample=1 period=1 cycle=675 experiment=2 +55.054548654217 97.075424194336 +55.059293592151 92.948188781738 +83.049372770631 150.000000000000 +111.042392382575 120.000000000000 +155.070598075033 180.000000000000 +173.079681129602 90.000000000000 +201.982415720889 45.000000000000 +>compound 1_0-675003--111--UNKNOWN +>parentmass 262.065239894604 +>charge 1 +>rt 446.172000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +262.065239894604 21394.767578125000 +>ms1peaks +52.005429962927 2874.067626953125 +53.013488092548 14817.291015625000 +54.009250374962 334494.937500000000 +55.006084606761 5488.883300781250 +55.011047738293 6443.265136718750 +55.054381628314 2385.724365234375 +55.934070669618 5486.966796875000 +56.942036090778 2313.250244140625 +59.049556209203 57988.484375000000 +60.044347260401 9323.001953125000 +61.039167560780 1828.241455078125 +63.997923021227 4927.193359375000 +64.004932691950 5181.531250000000 +68.011552270537 27280.974609375000 +68.993634139472 11798.143554687500 +69.044334270747 12566.409179687500 +72.936570834957 2193.115966796875 +73.063872777826 1681.879882812500 +76.486053959604 2158.190429687500 +79.020753207512 16147.697265625000 +80.048886066869 12139.645507812500 +81.936907500524 8343.286132812500 +82.996250408243 8009.000000000000 +87.042980895665 1166.738403320312 +87.053972860944 1485.116088867188 +89.506705194324 1444.000000000000 +90.488891330057 1645.000000000000 +91.053476545401 1583.000000000000 +95.952210208006 2039.742797851562 +97.968150682366 6945.562500000000 +100.074718244150 1363.000000000000 +102.090306392772 1417.000000000000 +109.942448236827 1253.000000000000 +113.962708637249 2032.000000000000 +114.090792284548 10306.000000000000 +118.084892277491 5540.821289062500 +122.095166173318 3378.000000000000 +122.962913232208 9579.000000000000 +123.091195975991 1531.662963867188 +130.157764407919 1286.000000000000 +136.020428292954 1633.000000000000 +141.090127789620 1346.968627929688 +141.112042976374 1656.172241210938 +141.957142368171 13820.262695312500 +147.089971164701 2287.525390625000 +149.022027180229 4587.050292968750 +149.040978245649 2678.199707031250 +151.095856455214 2104.623291015625 +151.110429192129 2233.988037109375 +155.068837159282 1322.053710937500 +155.973356955881 4212.000000000000 +158.153011960091 10898.886718750000 +161.095284178342 1762.593994140625 +164.141720682546 1224.125244140625 +170.095143568643 2743.236816406250 +173.079445020465 6455.588378906250 +174.990181271009 1164.000000000000 +175.126264328958 1229.927246093750 +178.157011972493 1362.000000000000 +179.105369890054 1931.000000000000 +182.960638968270 1810.076538085938 +182.983125598895 1274.763061523438 +186.016954934375 1958.000000000000 +186.220415397417 1282.000000000000 +193.158240520354 1195.032958984375 +194.115937912419 2861.000000000000 +195.121022485646 2380.102539062500 +198.183707422577 1745.000000000000 +200.199383225092 1357.000000000000 +201.983259096536 4157.000000000000 +217.007242135614 11741.327148437500 +217.105963587093 15482.668945312500 +218.009949414252 1208.000000000000 +218.108958783015 2547.000000000000 +219.093633048806 1319.448730468750 +234.033582693957 12770.000000000000 +235.037603512480 1379.336669921875 +239.087766278998 3286.875732421875 +242.283333142943 1269.000000000000 +245.038366204801 2525.000000000000 +246.860868473188 2768.000000000000 +249.183726045021 1277.861328125000 +250.999502407170 2552.000000000000 +252.995631834554 1836.000000000000 +262.065239894604 21394.767578125000 +263.067572169870 2404.000000000000 +264.061891103771 1243.000000000000 +276.080813947841 32185.000000000000 +277.083963767141 4114.000000000000 +278.078054160446 2217.000000000000 +279.092495265569 1940.000000000000 +281.050419778851 1367.000000000000 +284.163590469925 9332.000000000000 +285.167331910184 2517.000000000000 +289.119964437534 1441.302978515625 +292.119508242518 1546.000000000000 +303.104642799152 3336.000000000000 +303.191168270618 2846.093505859375 +304.118917204532 886697.062500000000 +304.856339026942 1419.656616210938 +304.975022441588 5892.455566406250 +305.107897820025 60098.996093750000 +306.110158464267 52147.246093750000 +307.111260806590 6616.670410156250 +307.247283236566 2744.782226562500 +310.120139525907 4017.412597656250 +320.106832165572 5127.000000000000 +321.110457254103 1231.635253906250 +321.131042046566 1226.668579101562 +326.094185610162 39581.000000000000 +327.007439325330 3479.883544921875 +327.096485748553 6323.979980468750 +328.091424657873 2476.325927734375 +329.002736488496 3916.000000000000 +330.204957173578 17861.789062500000 +331.208137127779 4322.000000000000 +342.068068201427 2858.656982421875 +349.169386508932 18308.152343750000 +350.172289812388 3575.000000000000 +351.169114792649 1326.000000000000 +352.185338388432 1383.838623046875 +372.148023932598 2199.032714843750 +380.334421867930 1500.000000000000 +404.036203084131 8110.000000000000 +405.038280600419 1614.000000000000 +445.117639958471 2103.000000000000 +500.274765830931 9506.000000000000 +501.278189264574 2845.197509765625 +502.287108152553 1738.000000000000 +505.850965822120 2506.000000000000 +536.163265279090 5123.811523437500 +537.164206705990 2452.000000000000 +538.160787955733 1794.000000000000 +544.336478775213 1764.000000000000 +546.913227478942 1570.434814453125 +549.964589119831 1398.000000000000 +607.215848916045 42716.000000000000 +608.219229396365 13004.000000000000 +609.215354074706 6569.000000000000 +610.191475231986 3658.000000000000 +611.187180591379 1650.000000000000 +612.219311132493 2717.000000000000 +613.224098373297 22062.000000000000 +614.227279534381 7018.149414062500 +615.222828016202 3443.000000000000 +623.211028873207 1301.000000000000 +629.198230629944 46218.000000000000 +630.201437914669 14408.000000000000 +631.197842259138 6467.000000000000 +632.198694915122 1400.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=675 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=675 experiment=3_0 +##scan 111 +##specref ms_run[1]:sample=1 period=1 cycle=675 experiment=3 +158.926774207819 13.000000000000 +168.999744361462 13.000000000000 +201.988880376921 30.000000000000 +>compound 1_0-675004--112--UNKNOWN +>parentmass 276.080813947841 +>charge 1 +>rt 446.172000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +276.080813947841 32185.000000000000 +277.083963767141 4114.000000000000 +>ms1peaks +52.005429962927 2874.067626953125 +53.013488092548 14817.291015625000 +54.009250374962 334494.937500000000 +55.006084606761 5488.883300781250 +55.011047738293 6443.265136718750 +55.054381628314 2385.724365234375 +55.934070669618 5486.966796875000 +56.942036090778 2313.250244140625 +59.049556209203 57988.484375000000 +60.044347260401 9323.001953125000 +61.039167560780 1828.241455078125 +63.997923021227 4927.193359375000 +64.004932691950 5181.531250000000 +68.011552270537 27280.974609375000 +68.993634139472 11798.143554687500 +69.044334270747 12566.409179687500 +72.936570834957 2193.115966796875 +73.063872777826 1681.879882812500 +76.486053959604 2158.190429687500 +79.020753207512 16147.697265625000 +80.048886066869 12139.645507812500 +81.936907500524 8343.286132812500 +82.996250408243 8009.000000000000 +87.042980895665 1166.738403320312 +87.053972860944 1485.116088867188 +89.506705194324 1444.000000000000 +90.488891330057 1645.000000000000 +91.053476545401 1583.000000000000 +95.952210208006 2039.742797851562 +97.968150682366 6945.562500000000 +100.074718244150 1363.000000000000 +102.090306392772 1417.000000000000 +109.942448236827 1253.000000000000 +113.962708637249 2032.000000000000 +114.090792284548 10306.000000000000 +118.084892277491 5540.821289062500 +122.095166173318 3378.000000000000 +122.962913232208 9579.000000000000 +123.091195975991 1531.662963867188 +130.157764407919 1286.000000000000 +136.020428292954 1633.000000000000 +141.090127789620 1346.968627929688 +141.112042976374 1656.172241210938 +141.957142368171 13820.262695312500 +147.089971164701 2287.525390625000 +149.022027180229 4587.050292968750 +149.040978245649 2678.199707031250 +151.095856455214 2104.623291015625 +151.110429192129 2233.988037109375 +155.068837159282 1322.053710937500 +155.973356955881 4212.000000000000 +158.153011960091 10898.886718750000 +161.095284178342 1762.593994140625 +164.141720682546 1224.125244140625 +170.095143568643 2743.236816406250 +173.079445020465 6455.588378906250 +174.990181271009 1164.000000000000 +175.126264328958 1229.927246093750 +178.157011972493 1362.000000000000 +179.105369890054 1931.000000000000 +182.960638968270 1810.076538085938 +182.983125598895 1274.763061523438 +186.016954934375 1958.000000000000 +186.220415397417 1282.000000000000 +193.158240520354 1195.032958984375 +194.115937912419 2861.000000000000 +195.121022485646 2380.102539062500 +198.183707422577 1745.000000000000 +200.199383225092 1357.000000000000 +201.983259096536 4157.000000000000 +217.007242135614 11741.327148437500 +217.105963587093 15482.668945312500 +218.009949414252 1208.000000000000 +218.108958783015 2547.000000000000 +219.093633048806 1319.448730468750 +234.033582693957 12770.000000000000 +235.037603512480 1379.336669921875 +239.087766278998 3286.875732421875 +242.283333142943 1269.000000000000 +245.038366204801 2525.000000000000 +246.860868473188 2768.000000000000 +249.183726045021 1277.861328125000 +250.999502407170 2552.000000000000 +252.995631834554 1836.000000000000 +262.065239894604 21394.767578125000 +263.067572169870 2404.000000000000 +264.061891103771 1243.000000000000 +276.080813947841 32185.000000000000 +277.083963767141 4114.000000000000 +278.078054160446 2217.000000000000 +279.092495265569 1940.000000000000 +281.050419778851 1367.000000000000 +284.163590469925 9332.000000000000 +285.167331910184 2517.000000000000 +289.119964437534 1441.302978515625 +292.119508242518 1546.000000000000 +303.104642799152 3336.000000000000 +303.191168270618 2846.093505859375 +304.118917204532 886697.062500000000 +304.856339026942 1419.656616210938 +304.975022441588 5892.455566406250 +305.107897820025 60098.996093750000 +306.110158464267 52147.246093750000 +307.111260806590 6616.670410156250 +307.247283236566 2744.782226562500 +310.120139525907 4017.412597656250 +320.106832165572 5127.000000000000 +321.110457254103 1231.635253906250 +321.131042046566 1226.668579101562 +326.094185610162 39581.000000000000 +327.007439325330 3479.883544921875 +327.096485748553 6323.979980468750 +328.091424657873 2476.325927734375 +329.002736488496 3916.000000000000 +330.204957173578 17861.789062500000 +331.208137127779 4322.000000000000 +342.068068201427 2858.656982421875 +349.169386508932 18308.152343750000 +350.172289812388 3575.000000000000 +351.169114792649 1326.000000000000 +352.185338388432 1383.838623046875 +372.148023932598 2199.032714843750 +380.334421867930 1500.000000000000 +404.036203084131 8110.000000000000 +405.038280600419 1614.000000000000 +445.117639958471 2103.000000000000 +500.274765830931 9506.000000000000 +501.278189264574 2845.197509765625 +502.287108152553 1738.000000000000 +505.850965822120 2506.000000000000 +536.163265279090 5123.811523437500 +537.164206705990 2452.000000000000 +538.160787955733 1794.000000000000 +544.336478775213 1764.000000000000 +546.913227478942 1570.434814453125 +549.964589119831 1398.000000000000 +607.215848916045 42716.000000000000 +608.219229396365 13004.000000000000 +609.215354074706 6569.000000000000 +610.191475231986 3658.000000000000 +611.187180591379 1650.000000000000 +612.219311132493 2717.000000000000 +613.224098373297 22062.000000000000 +614.227279534381 7018.149414062500 +615.222828016202 3443.000000000000 +623.211028873207 1301.000000000000 +629.198230629944 46218.000000000000 +630.201437914669 14408.000000000000 +631.197842259138 6467.000000000000 +632.198694915122 1400.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=675 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=675 experiment=4_0 +##scan 112 +##specref ms_run[1]:sample=1 period=1 cycle=675 experiment=4 +148.908324638323 30.000000000000 +168.983683393227 45.000000000000 +201.984214431257 135.000000000000 +217.011007842634 120.000000000000 +>compound 1_0-675007--115--UNKNOWN +>parentmass 607.215848916045 +>charge 1 +>rt 446.172000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +607.215848916045 42716.000000000000 +608.219229396365 13004.000000000000 +>ms1peaks +52.005429962927 2874.067626953125 +53.013488092548 14817.291015625000 +54.009250374962 334494.937500000000 +55.006084606761 5488.883300781250 +55.011047738293 6443.265136718750 +55.054381628314 2385.724365234375 +55.934070669618 5486.966796875000 +56.942036090778 2313.250244140625 +59.049556209203 57988.484375000000 +60.044347260401 9323.001953125000 +61.039167560780 1828.241455078125 +63.997923021227 4927.193359375000 +64.004932691950 5181.531250000000 +68.011552270537 27280.974609375000 +68.993634139472 11798.143554687500 +69.044334270747 12566.409179687500 +72.936570834957 2193.115966796875 +73.063872777826 1681.879882812500 +76.486053959604 2158.190429687500 +79.020753207512 16147.697265625000 +80.048886066869 12139.645507812500 +81.936907500524 8343.286132812500 +82.996250408243 8009.000000000000 +87.042980895665 1166.738403320312 +87.053972860944 1485.116088867188 +89.506705194324 1444.000000000000 +90.488891330057 1645.000000000000 +91.053476545401 1583.000000000000 +95.952210208006 2039.742797851562 +97.968150682366 6945.562500000000 +100.074718244150 1363.000000000000 +102.090306392772 1417.000000000000 +109.942448236827 1253.000000000000 +113.962708637249 2032.000000000000 +114.090792284548 10306.000000000000 +118.084892277491 5540.821289062500 +122.095166173318 3378.000000000000 +122.962913232208 9579.000000000000 +123.091195975991 1531.662963867188 +130.157764407919 1286.000000000000 +136.020428292954 1633.000000000000 +141.090127789620 1346.968627929688 +141.112042976374 1656.172241210938 +141.957142368171 13820.262695312500 +147.089971164701 2287.525390625000 +149.022027180229 4587.050292968750 +149.040978245649 2678.199707031250 +151.095856455214 2104.623291015625 +151.110429192129 2233.988037109375 +155.068837159282 1322.053710937500 +155.973356955881 4212.000000000000 +158.153011960091 10898.886718750000 +161.095284178342 1762.593994140625 +164.141720682546 1224.125244140625 +170.095143568643 2743.236816406250 +173.079445020465 6455.588378906250 +174.990181271009 1164.000000000000 +175.126264328958 1229.927246093750 +178.157011972493 1362.000000000000 +179.105369890054 1931.000000000000 +182.960638968270 1810.076538085938 +182.983125598895 1274.763061523438 +186.016954934375 1958.000000000000 +186.220415397417 1282.000000000000 +193.158240520354 1195.032958984375 +194.115937912419 2861.000000000000 +195.121022485646 2380.102539062500 +198.183707422577 1745.000000000000 +200.199383225092 1357.000000000000 +201.983259096536 4157.000000000000 +217.007242135614 11741.327148437500 +217.105963587093 15482.668945312500 +218.009949414252 1208.000000000000 +218.108958783015 2547.000000000000 +219.093633048806 1319.448730468750 +234.033582693957 12770.000000000000 +235.037603512480 1379.336669921875 +239.087766278998 3286.875732421875 +242.283333142943 1269.000000000000 +245.038366204801 2525.000000000000 +246.860868473188 2768.000000000000 +249.183726045021 1277.861328125000 +250.999502407170 2552.000000000000 +252.995631834554 1836.000000000000 +262.065239894604 21394.767578125000 +263.067572169870 2404.000000000000 +264.061891103771 1243.000000000000 +276.080813947841 32185.000000000000 +277.083963767141 4114.000000000000 +278.078054160446 2217.000000000000 +279.092495265569 1940.000000000000 +281.050419778851 1367.000000000000 +284.163590469925 9332.000000000000 +285.167331910184 2517.000000000000 +289.119964437534 1441.302978515625 +292.119508242518 1546.000000000000 +303.104642799152 3336.000000000000 +303.191168270618 2846.093505859375 +304.118917204532 886697.062500000000 +304.856339026942 1419.656616210938 +304.975022441588 5892.455566406250 +305.107897820025 60098.996093750000 +306.110158464267 52147.246093750000 +307.111260806590 6616.670410156250 +307.247283236566 2744.782226562500 +310.120139525907 4017.412597656250 +320.106832165572 5127.000000000000 +321.110457254103 1231.635253906250 +321.131042046566 1226.668579101562 +326.094185610162 39581.000000000000 +327.007439325330 3479.883544921875 +327.096485748553 6323.979980468750 +328.091424657873 2476.325927734375 +329.002736488496 3916.000000000000 +330.204957173578 17861.789062500000 +331.208137127779 4322.000000000000 +342.068068201427 2858.656982421875 +349.169386508932 18308.152343750000 +350.172289812388 3575.000000000000 +351.169114792649 1326.000000000000 +352.185338388432 1383.838623046875 +372.148023932598 2199.032714843750 +380.334421867930 1500.000000000000 +404.036203084131 8110.000000000000 +405.038280600419 1614.000000000000 +445.117639958471 2103.000000000000 +500.274765830931 9506.000000000000 +501.278189264574 2845.197509765625 +502.287108152553 1738.000000000000 +505.850965822120 2506.000000000000 +536.163265279090 5123.811523437500 +537.164206705990 2452.000000000000 +538.160787955733 1794.000000000000 +544.336478775213 1764.000000000000 +546.913227478942 1570.434814453125 +549.964589119831 1398.000000000000 +607.215848916045 42716.000000000000 +608.219229396365 13004.000000000000 +609.215354074706 6569.000000000000 +610.191475231986 3658.000000000000 +611.187180591379 1650.000000000000 +612.219311132493 2717.000000000000 +613.224098373297 22062.000000000000 +614.227279534381 7018.149414062500 +615.222828016202 3443.000000000000 +623.211028873207 1301.000000000000 +629.198230629944 46218.000000000000 +630.201437914669 14408.000000000000 +631.197842259138 6467.000000000000 +632.198694915122 1400.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=675 experiment=7 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=675 experiment=7_0 +##scan 115 +##specref ms_run[1]:sample=1 period=1 cycle=675 experiment=7 +60.080590285745 180.000000000000 +153.038255034352 45.000000000000 +155.052667624153 90.000000000000 +168.986670637296 45.000000000000 +169.003484759843 45.000000000000 +184.986694430606 30.000000000000 +198.998744792499 30.000000000000 +201.985061088074 527.000000000000 +204.092409032563 13.000000000000 +217.008396014126 5618.000000000000 +220.286875966887 30.000000000000 +220.298132557575 30.000000000000 +230.014628481158 30.000000000000 +233.329890197432 45.000000000000 +233.358994563585 45.000000000000 +234.034960135264 3468.000000000000 +234.438577892774 30.000000000000 +235.202066422834 30.000000000000 +235.230430646226 30.000000000000 +235.405835565600 30.000000000000 +245.041637693048 360.000000000000 +247.037500272312 13.000000000000 +258.072218002037 30.000000000000 +261.283636870651 45.000000000000 +261.310989327613 45.000000000000 +262.065495990086 1555.000000000000 +263.206551495802 30.000000000000 +276.082310301885 4134.000000000000 +303.161230522603 15.000000000000 +304.033884800023 13.000000000000 +304.112572516328 8585.000000000000 +304.273640934544 41.992252349854 +304.310810728543 45.000000000000 +309.883664368944 13.000000000000 +>compound 1_0-675008--116--UNKNOWN +>parentmass 613.224098373297 +>charge 1 +>rt 446.172000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +613.224098373297 22062.000000000000 +614.227279534381 7018.149414062500 +>ms1peaks +52.005429962927 2874.067626953125 +53.013488092548 14817.291015625000 +54.009250374962 334494.937500000000 +55.006084606761 5488.883300781250 +55.011047738293 6443.265136718750 +55.054381628314 2385.724365234375 +55.934070669618 5486.966796875000 +56.942036090778 2313.250244140625 +59.049556209203 57988.484375000000 +60.044347260401 9323.001953125000 +61.039167560780 1828.241455078125 +63.997923021227 4927.193359375000 +64.004932691950 5181.531250000000 +68.011552270537 27280.974609375000 +68.993634139472 11798.143554687500 +69.044334270747 12566.409179687500 +72.936570834957 2193.115966796875 +73.063872777826 1681.879882812500 +76.486053959604 2158.190429687500 +79.020753207512 16147.697265625000 +80.048886066869 12139.645507812500 +81.936907500524 8343.286132812500 +82.996250408243 8009.000000000000 +87.042980895665 1166.738403320312 +87.053972860944 1485.116088867188 +89.506705194324 1444.000000000000 +90.488891330057 1645.000000000000 +91.053476545401 1583.000000000000 +95.952210208006 2039.742797851562 +97.968150682366 6945.562500000000 +100.074718244150 1363.000000000000 +102.090306392772 1417.000000000000 +109.942448236827 1253.000000000000 +113.962708637249 2032.000000000000 +114.090792284548 10306.000000000000 +118.084892277491 5540.821289062500 +122.095166173318 3378.000000000000 +122.962913232208 9579.000000000000 +123.091195975991 1531.662963867188 +130.157764407919 1286.000000000000 +136.020428292954 1633.000000000000 +141.090127789620 1346.968627929688 +141.112042976374 1656.172241210938 +141.957142368171 13820.262695312500 +147.089971164701 2287.525390625000 +149.022027180229 4587.050292968750 +149.040978245649 2678.199707031250 +151.095856455214 2104.623291015625 +151.110429192129 2233.988037109375 +155.068837159282 1322.053710937500 +155.973356955881 4212.000000000000 +158.153011960091 10898.886718750000 +161.095284178342 1762.593994140625 +164.141720682546 1224.125244140625 +170.095143568643 2743.236816406250 +173.079445020465 6455.588378906250 +174.990181271009 1164.000000000000 +175.126264328958 1229.927246093750 +178.157011972493 1362.000000000000 +179.105369890054 1931.000000000000 +182.960638968270 1810.076538085938 +182.983125598895 1274.763061523438 +186.016954934375 1958.000000000000 +186.220415397417 1282.000000000000 +193.158240520354 1195.032958984375 +194.115937912419 2861.000000000000 +195.121022485646 2380.102539062500 +198.183707422577 1745.000000000000 +200.199383225092 1357.000000000000 +201.983259096536 4157.000000000000 +217.007242135614 11741.327148437500 +217.105963587093 15482.668945312500 +218.009949414252 1208.000000000000 +218.108958783015 2547.000000000000 +219.093633048806 1319.448730468750 +234.033582693957 12770.000000000000 +235.037603512480 1379.336669921875 +239.087766278998 3286.875732421875 +242.283333142943 1269.000000000000 +245.038366204801 2525.000000000000 +246.860868473188 2768.000000000000 +249.183726045021 1277.861328125000 +250.999502407170 2552.000000000000 +252.995631834554 1836.000000000000 +262.065239894604 21394.767578125000 +263.067572169870 2404.000000000000 +264.061891103771 1243.000000000000 +276.080813947841 32185.000000000000 +277.083963767141 4114.000000000000 +278.078054160446 2217.000000000000 +279.092495265569 1940.000000000000 +281.050419778851 1367.000000000000 +284.163590469925 9332.000000000000 +285.167331910184 2517.000000000000 +289.119964437534 1441.302978515625 +292.119508242518 1546.000000000000 +303.104642799152 3336.000000000000 +303.191168270618 2846.093505859375 +304.118917204532 886697.062500000000 +304.856339026942 1419.656616210938 +304.975022441588 5892.455566406250 +305.107897820025 60098.996093750000 +306.110158464267 52147.246093750000 +307.111260806590 6616.670410156250 +307.247283236566 2744.782226562500 +310.120139525907 4017.412597656250 +320.106832165572 5127.000000000000 +321.110457254103 1231.635253906250 +321.131042046566 1226.668579101562 +326.094185610162 39581.000000000000 +327.007439325330 3479.883544921875 +327.096485748553 6323.979980468750 +328.091424657873 2476.325927734375 +329.002736488496 3916.000000000000 +330.204957173578 17861.789062500000 +331.208137127779 4322.000000000000 +342.068068201427 2858.656982421875 +349.169386508932 18308.152343750000 +350.172289812388 3575.000000000000 +351.169114792649 1326.000000000000 +352.185338388432 1383.838623046875 +372.148023932598 2199.032714843750 +380.334421867930 1500.000000000000 +404.036203084131 8110.000000000000 +405.038280600419 1614.000000000000 +445.117639958471 2103.000000000000 +500.274765830931 9506.000000000000 +501.278189264574 2845.197509765625 +502.287108152553 1738.000000000000 +505.850965822120 2506.000000000000 +536.163265279090 5123.811523437500 +537.164206705990 2452.000000000000 +538.160787955733 1794.000000000000 +544.336478775213 1764.000000000000 +546.913227478942 1570.434814453125 +549.964589119831 1398.000000000000 +607.215848916045 42716.000000000000 +608.219229396365 13004.000000000000 +609.215354074706 6569.000000000000 +610.191475231986 3658.000000000000 +611.187180591379 1650.000000000000 +612.219311132493 2717.000000000000 +613.224098373297 22062.000000000000 +614.227279534381 7018.149414062500 +615.222828016202 3443.000000000000 +623.211028873207 1301.000000000000 +629.198230629944 46218.000000000000 +630.201437914669 14408.000000000000 +631.197842259138 6467.000000000000 +632.198694915122 1400.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=675 experiment=8 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=675 experiment=8_0 +##scan 116 +##specref ms_run[1]:sample=1 period=1 cycle=675 experiment=8 +114.060845518399 30.000000000000 +114.072199964164 30.000000000000 +128.046199794443 30.000000000000 +161.060673390675 150.000000000000 +217.003012310393 30.000000000000 +223.016528050483 105.000000000000 +240.042412030599 352.000000000000 +282.089439919422 488.000000000000 +309.126285457586 75.000000000000 +309.185364964501 60.000000000000 +310.120822442924 7872.000000000000 +311.125429726579 30.000000000000 +328.131258512356 195.000000000000 +613.231474535978 348.000000000000 +>compound 1_0-675009--117--UNKNOWN +>parentmass 629.198230629944 +>charge 1 +>rt 446.172000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +629.198230629944 46218.000000000000 +630.201437914669 14408.000000000000 +>ms1peaks +52.005429962927 2874.067626953125 +53.013488092548 14817.291015625000 +54.009250374962 334494.937500000000 +55.006084606761 5488.883300781250 +55.011047738293 6443.265136718750 +55.054381628314 2385.724365234375 +55.934070669618 5486.966796875000 +56.942036090778 2313.250244140625 +59.049556209203 57988.484375000000 +60.044347260401 9323.001953125000 +61.039167560780 1828.241455078125 +63.997923021227 4927.193359375000 +64.004932691950 5181.531250000000 +68.011552270537 27280.974609375000 +68.993634139472 11798.143554687500 +69.044334270747 12566.409179687500 +72.936570834957 2193.115966796875 +73.063872777826 1681.879882812500 +76.486053959604 2158.190429687500 +79.020753207512 16147.697265625000 +80.048886066869 12139.645507812500 +81.936907500524 8343.286132812500 +82.996250408243 8009.000000000000 +87.042980895665 1166.738403320312 +87.053972860944 1485.116088867188 +89.506705194324 1444.000000000000 +90.488891330057 1645.000000000000 +91.053476545401 1583.000000000000 +95.952210208006 2039.742797851562 +97.968150682366 6945.562500000000 +100.074718244150 1363.000000000000 +102.090306392772 1417.000000000000 +109.942448236827 1253.000000000000 +113.962708637249 2032.000000000000 +114.090792284548 10306.000000000000 +118.084892277491 5540.821289062500 +122.095166173318 3378.000000000000 +122.962913232208 9579.000000000000 +123.091195975991 1531.662963867188 +130.157764407919 1286.000000000000 +136.020428292954 1633.000000000000 +141.090127789620 1346.968627929688 +141.112042976374 1656.172241210938 +141.957142368171 13820.262695312500 +147.089971164701 2287.525390625000 +149.022027180229 4587.050292968750 +149.040978245649 2678.199707031250 +151.095856455214 2104.623291015625 +151.110429192129 2233.988037109375 +155.068837159282 1322.053710937500 +155.973356955881 4212.000000000000 +158.153011960091 10898.886718750000 +161.095284178342 1762.593994140625 +164.141720682546 1224.125244140625 +170.095143568643 2743.236816406250 +173.079445020465 6455.588378906250 +174.990181271009 1164.000000000000 +175.126264328958 1229.927246093750 +178.157011972493 1362.000000000000 +179.105369890054 1931.000000000000 +182.960638968270 1810.076538085938 +182.983125598895 1274.763061523438 +186.016954934375 1958.000000000000 +186.220415397417 1282.000000000000 +193.158240520354 1195.032958984375 +194.115937912419 2861.000000000000 +195.121022485646 2380.102539062500 +198.183707422577 1745.000000000000 +200.199383225092 1357.000000000000 +201.983259096536 4157.000000000000 +217.007242135614 11741.327148437500 +217.105963587093 15482.668945312500 +218.009949414252 1208.000000000000 +218.108958783015 2547.000000000000 +219.093633048806 1319.448730468750 +234.033582693957 12770.000000000000 +235.037603512480 1379.336669921875 +239.087766278998 3286.875732421875 +242.283333142943 1269.000000000000 +245.038366204801 2525.000000000000 +246.860868473188 2768.000000000000 +249.183726045021 1277.861328125000 +250.999502407170 2552.000000000000 +252.995631834554 1836.000000000000 +262.065239894604 21394.767578125000 +263.067572169870 2404.000000000000 +264.061891103771 1243.000000000000 +276.080813947841 32185.000000000000 +277.083963767141 4114.000000000000 +278.078054160446 2217.000000000000 +279.092495265569 1940.000000000000 +281.050419778851 1367.000000000000 +284.163590469925 9332.000000000000 +285.167331910184 2517.000000000000 +289.119964437534 1441.302978515625 +292.119508242518 1546.000000000000 +303.104642799152 3336.000000000000 +303.191168270618 2846.093505859375 +304.118917204532 886697.062500000000 +304.856339026942 1419.656616210938 +304.975022441588 5892.455566406250 +305.107897820025 60098.996093750000 +306.110158464267 52147.246093750000 +307.111260806590 6616.670410156250 +307.247283236566 2744.782226562500 +310.120139525907 4017.412597656250 +320.106832165572 5127.000000000000 +321.110457254103 1231.635253906250 +321.131042046566 1226.668579101562 +326.094185610162 39581.000000000000 +327.007439325330 3479.883544921875 +327.096485748553 6323.979980468750 +328.091424657873 2476.325927734375 +329.002736488496 3916.000000000000 +330.204957173578 17861.789062500000 +331.208137127779 4322.000000000000 +342.068068201427 2858.656982421875 +349.169386508932 18308.152343750000 +350.172289812388 3575.000000000000 +351.169114792649 1326.000000000000 +352.185338388432 1383.838623046875 +372.148023932598 2199.032714843750 +380.334421867930 1500.000000000000 +404.036203084131 8110.000000000000 +405.038280600419 1614.000000000000 +445.117639958471 2103.000000000000 +500.274765830931 9506.000000000000 +501.278189264574 2845.197509765625 +502.287108152553 1738.000000000000 +505.850965822120 2506.000000000000 +536.163265279090 5123.811523437500 +537.164206705990 2452.000000000000 +538.160787955733 1794.000000000000 +544.336478775213 1764.000000000000 +546.913227478942 1570.434814453125 +549.964589119831 1398.000000000000 +607.215848916045 42716.000000000000 +608.219229396365 13004.000000000000 +609.215354074706 6569.000000000000 +610.191475231986 3658.000000000000 +611.187180591379 1650.000000000000 +612.219311132493 2717.000000000000 +613.224098373297 22062.000000000000 +614.227279534381 7018.149414062500 +615.222828016202 3443.000000000000 +623.211028873207 1301.000000000000 +629.198230629944 46218.000000000000 +630.201437914669 14408.000000000000 +631.197842259138 6467.000000000000 +632.198694915122 1400.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=675 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=675 experiment=9_0 +##scan 117 +##specref ms_run[1]:sample=1 period=1 cycle=675 experiment=9 +240.037982163919 30.000000000000 +298.061306708308 30.000000000000 +310.114591761283 45.000000000000 +325.104486407436 60.000000000000 +326.037039844058 68.762626647949 +326.095533969912 11206.000000000000 +327.100958149205 45.000000000000 +>compound 1_0-676002--119--UNKNOWN +>parentmass 262.065226573716 +>charge 1 +>rt 447.100000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +262.065226573716 31878.271484375000 +>ms1peaks +52.005351813457 2501.610107421875 +53.013412581284 13134.520507812500 +53.850226225992 1302.909057617188 +54.009140063564 338983.656250000000 +55.006042248338 6435.412597656250 +55.011148435189 6609.394042968750 +55.054172395822 1772.104248046875 +55.934029229957 5757.919921875000 +56.941868288709 2705.908203125000 +59.049392394217 65787.757812500000 +60.044197396550 9389.001953125000 +61.039698624921 1629.770751953125 +63.997582420249 4596.096191406250 +64.004915539546 4860.728515625000 +68.011405901665 27484.292968750000 +68.993238795734 11816.172851562500 +69.044514210085 12151.762695312500 +72.936346245282 1770.000000000000 +73.063844648998 1632.810180664062 +76.485866327556 2207.000000000000 +79.020638014668 15456.159179687500 +80.048700307132 11716.706054687500 +81.936658440041 8339.158203125000 +82.995849176432 8191.000000000000 +87.054215388379 1432.329345703125 +89.505806636870 1376.000000000000 +90.488666027165 1798.000000000000 +95.952211902793 2472.000000000000 +97.967974119285 6640.000000000000 +100.074558827800 1418.000000000000 +102.090063528932 1768.000000000000 +109.942148206295 1646.000000000000 +113.962810920920 1728.000976562500 +114.090265101894 9843.087890625000 +118.085166173822 5466.146972656250 +122.095082275611 3591.515380859375 +122.962671452755 9919.435546875000 +123.090603383338 1818.105346679688 +130.157985838236 1433.000000000000 +136.020144210415 1305.642211914062 +141.111768954054 1381.647338867188 +141.957291332652 13999.958984375000 +147.090365251433 2315.564941406250 +149.021998403294 4169.404296875000 +151.095653127576 2632.192382812500 +151.109600618565 2638.503906250000 +155.069049191990 1400.588378906250 +155.105221715370 1306.244873046875 +155.972774632456 3955.750244140625 +158.152847157321 10190.631835937500 +161.094883274868 1469.000000000000 +164.993233307885 1413.000000000000 +170.094756804200 2692.873779296875 +173.079096183490 5464.607421875000 +174.990754641374 1338.000000000000 +175.120920396226 1335.489135742188 +178.157288006504 1567.557739257812 +179.104881581157 1856.000000000000 +182.960071822982 1596.667236328125 +186.016812097735 3128.000000000000 +194.115183195725 3037.019042968750 +195.105676043577 1846.959228515625 +195.121034909827 2138.534667968750 +198.183715433637 1614.000000000000 +201.983396783946 6476.000000000000 +217.007534943089 16000.083984375000 +217.105603079000 12722.193359375000 +218.010461830348 1723.000000000000 +218.108916975941 1918.000000000000 +219.094207015885 1394.000000000000 +234.033666185649 17919.000000000000 +235.036061869219 1699.000000000000 +239.087710708037 2715.000000000000 +245.038087259231 3705.000000000000 +246.860587751512 3017.000000000000 +250.998652800198 2461.000000000000 +252.996040050118 1751.000000000000 +262.065226573716 31878.271484375000 +263.067812997194 3540.000000000000 +264.062744585962 1732.000000000000 +276.080875651007 47441.000000000000 +277.083729023421 6202.904296875000 +278.078049070253 2909.805664062500 +279.092264164105 2269.000000000000 +281.049607531965 1759.000000000000 +284.163709253010 5971.317382812500 +285.167422523505 1450.937500000000 +289.120547785899 45105.261718750000 +290.122834000335 8899.000000000000 +291.118148964330 16223.000000000000 +292.119468760172 3916.748291015625 +303.104211105075 4272.900878906250 +303.190626643079 3701.817626953125 +304.121038021889 1154982.000000000000 +304.680120827865 1361.469604492188 +304.720450396369 1578.193115234375 +304.756696628278 1464.135742187500 +304.826755934771 1415.802856445312 +304.888295222133 4211.749023437500 +304.975939340234 6444.747070312500 +305.112954471951 109660.976562500000 +306.110248734555 72833.000000000000 +307.111946842557 10169.579101562500 +307.247397220322 1757.839477539062 +310.120212483100 5088.000000000000 +320.107070842572 7286.000000000000 +321.109817317563 1634.396606445312 +321.134008500327 1645.504272460938 +326.094135509242 51581.214843750000 +327.006663634739 3305.288085937500 +327.096918826684 8025.063964843750 +328.090879363560 3401.237060546875 +329.002848029289 3721.000000000000 +330.204815446188 11820.952148437500 +331.208232327135 2889.000000000000 +342.067980362905 3189.395019531250 +349.169296376205 25098.000000000000 +350.172883605486 4323.000000000000 +351.167291455015 1724.000000000000 +372.149200119315 2817.477050781250 +404.036004100360 11013.000000000000 +405.038241871311 2224.679687500000 +424.359699824875 1469.000000000000 +445.117347283461 1962.204711914062 +500.274802921042 11554.163085937500 +501.277725760601 3400.000000000000 +502.286539956580 1910.000000000000 +505.850895564320 2188.000000000000 +536.162361057972 4668.000000000000 +537.163239801382 2428.000000000000 +538.161608472883 1869.000000000000 +544.336387601713 1598.000000000000 +546.911505452596 1493.000000000000 +549.965979448424 1640.000000000000 +592.225456903764 1675.000000000000 +607.216655018496 74091.000000000000 +608.219193446659 23449.000000000000 +609.215852555200 11438.528320312500 +610.208425679746 4454.000000000000 +611.188234775837 1805.798706054688 +612.220726308427 4082.000000000000 +613.224505418990 34075.000000000000 +614.227906702716 11171.000000000000 +615.225014693998 5343.000000000000 +623.210784148654 2510.000000000000 +629.198405169302 68640.000000000000 +630.201595235063 21340.328125000000 +631.198284234777 10581.000000000000 +632.198298853566 2483.000000000000 +707.140261218123 1384.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=676 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=2_0 +##scan 119 +##specref ms_run[1]:sample=1 period=1 cycle=676 experiment=2 +201.984258482233 30.000000000000 +217.013264594815 30.000000000000 +>compound 1_0-676003--120--UNKNOWN +>parentmass 276.080875651007 +>charge 1 +>rt 447.100000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +276.080875651007 47441.000000000000 +>ms1peaks +52.005351813457 2501.610107421875 +53.013412581284 13134.520507812500 +53.850226225992 1302.909057617188 +54.009140063564 338983.656250000000 +55.006042248338 6435.412597656250 +55.011148435189 6609.394042968750 +55.054172395822 1772.104248046875 +55.934029229957 5757.919921875000 +56.941868288709 2705.908203125000 +59.049392394217 65787.757812500000 +60.044197396550 9389.001953125000 +61.039698624921 1629.770751953125 +63.997582420249 4596.096191406250 +64.004915539546 4860.728515625000 +68.011405901665 27484.292968750000 +68.993238795734 11816.172851562500 +69.044514210085 12151.762695312500 +72.936346245282 1770.000000000000 +73.063844648998 1632.810180664062 +76.485866327556 2207.000000000000 +79.020638014668 15456.159179687500 +80.048700307132 11716.706054687500 +81.936658440041 8339.158203125000 +82.995849176432 8191.000000000000 +87.054215388379 1432.329345703125 +89.505806636870 1376.000000000000 +90.488666027165 1798.000000000000 +95.952211902793 2472.000000000000 +97.967974119285 6640.000000000000 +100.074558827800 1418.000000000000 +102.090063528932 1768.000000000000 +109.942148206295 1646.000000000000 +113.962810920920 1728.000976562500 +114.090265101894 9843.087890625000 +118.085166173822 5466.146972656250 +122.095082275611 3591.515380859375 +122.962671452755 9919.435546875000 +123.090603383338 1818.105346679688 +130.157985838236 1433.000000000000 +136.020144210415 1305.642211914062 +141.111768954054 1381.647338867188 +141.957291332652 13999.958984375000 +147.090365251433 2315.564941406250 +149.021998403294 4169.404296875000 +151.095653127576 2632.192382812500 +151.109600618565 2638.503906250000 +155.069049191990 1400.588378906250 +155.105221715370 1306.244873046875 +155.972774632456 3955.750244140625 +158.152847157321 10190.631835937500 +161.094883274868 1469.000000000000 +164.993233307885 1413.000000000000 +170.094756804200 2692.873779296875 +173.079096183490 5464.607421875000 +174.990754641374 1338.000000000000 +175.120920396226 1335.489135742188 +178.157288006504 1567.557739257812 +179.104881581157 1856.000000000000 +182.960071822982 1596.667236328125 +186.016812097735 3128.000000000000 +194.115183195725 3037.019042968750 +195.105676043577 1846.959228515625 +195.121034909827 2138.534667968750 +198.183715433637 1614.000000000000 +201.983396783946 6476.000000000000 +217.007534943089 16000.083984375000 +217.105603079000 12722.193359375000 +218.010461830348 1723.000000000000 +218.108916975941 1918.000000000000 +219.094207015885 1394.000000000000 +234.033666185649 17919.000000000000 +235.036061869219 1699.000000000000 +239.087710708037 2715.000000000000 +245.038087259231 3705.000000000000 +246.860587751512 3017.000000000000 +250.998652800198 2461.000000000000 +252.996040050118 1751.000000000000 +262.065226573716 31878.271484375000 +263.067812997194 3540.000000000000 +264.062744585962 1732.000000000000 +276.080875651007 47441.000000000000 +277.083729023421 6202.904296875000 +278.078049070253 2909.805664062500 +279.092264164105 2269.000000000000 +281.049607531965 1759.000000000000 +284.163709253010 5971.317382812500 +285.167422523505 1450.937500000000 +289.120547785899 45105.261718750000 +290.122834000335 8899.000000000000 +291.118148964330 16223.000000000000 +292.119468760172 3916.748291015625 +303.104211105075 4272.900878906250 +303.190626643079 3701.817626953125 +304.121038021889 1154982.000000000000 +304.680120827865 1361.469604492188 +304.720450396369 1578.193115234375 +304.756696628278 1464.135742187500 +304.826755934771 1415.802856445312 +304.888295222133 4211.749023437500 +304.975939340234 6444.747070312500 +305.112954471951 109660.976562500000 +306.110248734555 72833.000000000000 +307.111946842557 10169.579101562500 +307.247397220322 1757.839477539062 +310.120212483100 5088.000000000000 +320.107070842572 7286.000000000000 +321.109817317563 1634.396606445312 +321.134008500327 1645.504272460938 +326.094135509242 51581.214843750000 +327.006663634739 3305.288085937500 +327.096918826684 8025.063964843750 +328.090879363560 3401.237060546875 +329.002848029289 3721.000000000000 +330.204815446188 11820.952148437500 +331.208232327135 2889.000000000000 +342.067980362905 3189.395019531250 +349.169296376205 25098.000000000000 +350.172883605486 4323.000000000000 +351.167291455015 1724.000000000000 +372.149200119315 2817.477050781250 +404.036004100360 11013.000000000000 +405.038241871311 2224.679687500000 +424.359699824875 1469.000000000000 +445.117347283461 1962.204711914062 +500.274802921042 11554.163085937500 +501.277725760601 3400.000000000000 +502.286539956580 1910.000000000000 +505.850895564320 2188.000000000000 +536.162361057972 4668.000000000000 +537.163239801382 2428.000000000000 +538.161608472883 1869.000000000000 +544.336387601713 1598.000000000000 +546.911505452596 1493.000000000000 +549.965979448424 1640.000000000000 +592.225456903764 1675.000000000000 +607.216655018496 74091.000000000000 +608.219193446659 23449.000000000000 +609.215852555200 11438.528320312500 +610.208425679746 4454.000000000000 +611.188234775837 1805.798706054688 +612.220726308427 4082.000000000000 +613.224505418990 34075.000000000000 +614.227906702716 11171.000000000000 +615.225014693998 5343.000000000000 +623.210784148654 2510.000000000000 +629.198405169302 68640.000000000000 +630.201595235063 21340.328125000000 +631.198284234777 10581.000000000000 +632.198298853566 2483.000000000000 +707.140261218123 1384.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=676 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=3_0 +##scan 120 +##specref ms_run[1]:sample=1 period=1 cycle=676 experiment=3 +74.068893285680 13.000000000000 +97.018350674030 13.000000000000 +111.030772547862 30.000000000000 +111.043207099198 30.000000000000 +129.059200833833 13.000000000000 +142.912410469676 13.000000000000 +185.166635645300 13.000000000000 +193.906289790847 30.000000000000 +201.981862061748 105.000000000000 +217.006551553220 135.000000000000 +>compound 1_0-676007--124--UNKNOWN +>parentmass 607.216655018496 +>charge 1 +>rt 447.100000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +607.216655018496 74091.000000000000 +>ms1peaks +52.005351813457 2501.610107421875 +53.013412581284 13134.520507812500 +53.850226225992 1302.909057617188 +54.009140063564 338983.656250000000 +55.006042248338 6435.412597656250 +55.011148435189 6609.394042968750 +55.054172395822 1772.104248046875 +55.934029229957 5757.919921875000 +56.941868288709 2705.908203125000 +59.049392394217 65787.757812500000 +60.044197396550 9389.001953125000 +61.039698624921 1629.770751953125 +63.997582420249 4596.096191406250 +64.004915539546 4860.728515625000 +68.011405901665 27484.292968750000 +68.993238795734 11816.172851562500 +69.044514210085 12151.762695312500 +72.936346245282 1770.000000000000 +73.063844648998 1632.810180664062 +76.485866327556 2207.000000000000 +79.020638014668 15456.159179687500 +80.048700307132 11716.706054687500 +81.936658440041 8339.158203125000 +82.995849176432 8191.000000000000 +87.054215388379 1432.329345703125 +89.505806636870 1376.000000000000 +90.488666027165 1798.000000000000 +95.952211902793 2472.000000000000 +97.967974119285 6640.000000000000 +100.074558827800 1418.000000000000 +102.090063528932 1768.000000000000 +109.942148206295 1646.000000000000 +113.962810920920 1728.000976562500 +114.090265101894 9843.087890625000 +118.085166173822 5466.146972656250 +122.095082275611 3591.515380859375 +122.962671452755 9919.435546875000 +123.090603383338 1818.105346679688 +130.157985838236 1433.000000000000 +136.020144210415 1305.642211914062 +141.111768954054 1381.647338867188 +141.957291332652 13999.958984375000 +147.090365251433 2315.564941406250 +149.021998403294 4169.404296875000 +151.095653127576 2632.192382812500 +151.109600618565 2638.503906250000 +155.069049191990 1400.588378906250 +155.105221715370 1306.244873046875 +155.972774632456 3955.750244140625 +158.152847157321 10190.631835937500 +161.094883274868 1469.000000000000 +164.993233307885 1413.000000000000 +170.094756804200 2692.873779296875 +173.079096183490 5464.607421875000 +174.990754641374 1338.000000000000 +175.120920396226 1335.489135742188 +178.157288006504 1567.557739257812 +179.104881581157 1856.000000000000 +182.960071822982 1596.667236328125 +186.016812097735 3128.000000000000 +194.115183195725 3037.019042968750 +195.105676043577 1846.959228515625 +195.121034909827 2138.534667968750 +198.183715433637 1614.000000000000 +201.983396783946 6476.000000000000 +217.007534943089 16000.083984375000 +217.105603079000 12722.193359375000 +218.010461830348 1723.000000000000 +218.108916975941 1918.000000000000 +219.094207015885 1394.000000000000 +234.033666185649 17919.000000000000 +235.036061869219 1699.000000000000 +239.087710708037 2715.000000000000 +245.038087259231 3705.000000000000 +246.860587751512 3017.000000000000 +250.998652800198 2461.000000000000 +252.996040050118 1751.000000000000 +262.065226573716 31878.271484375000 +263.067812997194 3540.000000000000 +264.062744585962 1732.000000000000 +276.080875651007 47441.000000000000 +277.083729023421 6202.904296875000 +278.078049070253 2909.805664062500 +279.092264164105 2269.000000000000 +281.049607531965 1759.000000000000 +284.163709253010 5971.317382812500 +285.167422523505 1450.937500000000 +289.120547785899 45105.261718750000 +290.122834000335 8899.000000000000 +291.118148964330 16223.000000000000 +292.119468760172 3916.748291015625 +303.104211105075 4272.900878906250 +303.190626643079 3701.817626953125 +304.121038021889 1154982.000000000000 +304.680120827865 1361.469604492188 +304.720450396369 1578.193115234375 +304.756696628278 1464.135742187500 +304.826755934771 1415.802856445312 +304.888295222133 4211.749023437500 +304.975939340234 6444.747070312500 +305.112954471951 109660.976562500000 +306.110248734555 72833.000000000000 +307.111946842557 10169.579101562500 +307.247397220322 1757.839477539062 +310.120212483100 5088.000000000000 +320.107070842572 7286.000000000000 +321.109817317563 1634.396606445312 +321.134008500327 1645.504272460938 +326.094135509242 51581.214843750000 +327.006663634739 3305.288085937500 +327.096918826684 8025.063964843750 +328.090879363560 3401.237060546875 +329.002848029289 3721.000000000000 +330.204815446188 11820.952148437500 +331.208232327135 2889.000000000000 +342.067980362905 3189.395019531250 +349.169296376205 25098.000000000000 +350.172883605486 4323.000000000000 +351.167291455015 1724.000000000000 +372.149200119315 2817.477050781250 +404.036004100360 11013.000000000000 +405.038241871311 2224.679687500000 +424.359699824875 1469.000000000000 +445.117347283461 1962.204711914062 +500.274802921042 11554.163085937500 +501.277725760601 3400.000000000000 +502.286539956580 1910.000000000000 +505.850895564320 2188.000000000000 +536.162361057972 4668.000000000000 +537.163239801382 2428.000000000000 +538.161608472883 1869.000000000000 +544.336387601713 1598.000000000000 +546.911505452596 1493.000000000000 +549.965979448424 1640.000000000000 +592.225456903764 1675.000000000000 +607.216655018496 74091.000000000000 +608.219193446659 23449.000000000000 +609.215852555200 11438.528320312500 +610.208425679746 4454.000000000000 +611.188234775837 1805.798706054688 +612.220726308427 4082.000000000000 +613.224505418990 34075.000000000000 +614.227906702716 11171.000000000000 +615.225014693998 5343.000000000000 +623.210784148654 2510.000000000000 +629.198405169302 68640.000000000000 +630.201595235063 21340.328125000000 +631.198284234777 10581.000000000000 +632.198298853566 2483.000000000000 +707.140261218123 1384.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=676 experiment=7 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=7_0 +##scan 124 +##specref ms_run[1]:sample=1 period=1 cycle=676 experiment=7 +60.081242427892 90.000000000000 +138.012518606473 45.000000000000 +155.048182217756 45.000000000000 +168.982129139904 45.000000000000 +169.002647637480 60.000000000000 +201.984059797615 477.000000000000 +216.358917166692 60.000000000000 +217.008190452945 4897.000000000000 +234.035051330315 3441.000000000000 +245.037502188030 379.000000000000 +262.066203436669 2058.000000000000 +275.068452874321 30.000000000000 +276.081614014633 2862.000000000000 +304.112606256338 9001.000000000000 +305.115974960782 30.000000000000 +326.097733536545 30.000000000000 +>compound 1_0-676008--125--UNKNOWN +>parentmass 613.224505418990 +>charge 1 +>rt 447.100000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +613.224505418990 34075.000000000000 +614.227906702716 11171.000000000000 +>ms1peaks +52.005351813457 2501.610107421875 +53.013412581284 13134.520507812500 +53.850226225992 1302.909057617188 +54.009140063564 338983.656250000000 +55.006042248338 6435.412597656250 +55.011148435189 6609.394042968750 +55.054172395822 1772.104248046875 +55.934029229957 5757.919921875000 +56.941868288709 2705.908203125000 +59.049392394217 65787.757812500000 +60.044197396550 9389.001953125000 +61.039698624921 1629.770751953125 +63.997582420249 4596.096191406250 +64.004915539546 4860.728515625000 +68.011405901665 27484.292968750000 +68.993238795734 11816.172851562500 +69.044514210085 12151.762695312500 +72.936346245282 1770.000000000000 +73.063844648998 1632.810180664062 +76.485866327556 2207.000000000000 +79.020638014668 15456.159179687500 +80.048700307132 11716.706054687500 +81.936658440041 8339.158203125000 +82.995849176432 8191.000000000000 +87.054215388379 1432.329345703125 +89.505806636870 1376.000000000000 +90.488666027165 1798.000000000000 +95.952211902793 2472.000000000000 +97.967974119285 6640.000000000000 +100.074558827800 1418.000000000000 +102.090063528932 1768.000000000000 +109.942148206295 1646.000000000000 +113.962810920920 1728.000976562500 +114.090265101894 9843.087890625000 +118.085166173822 5466.146972656250 +122.095082275611 3591.515380859375 +122.962671452755 9919.435546875000 +123.090603383338 1818.105346679688 +130.157985838236 1433.000000000000 +136.020144210415 1305.642211914062 +141.111768954054 1381.647338867188 +141.957291332652 13999.958984375000 +147.090365251433 2315.564941406250 +149.021998403294 4169.404296875000 +151.095653127576 2632.192382812500 +151.109600618565 2638.503906250000 +155.069049191990 1400.588378906250 +155.105221715370 1306.244873046875 +155.972774632456 3955.750244140625 +158.152847157321 10190.631835937500 +161.094883274868 1469.000000000000 +164.993233307885 1413.000000000000 +170.094756804200 2692.873779296875 +173.079096183490 5464.607421875000 +174.990754641374 1338.000000000000 +175.120920396226 1335.489135742188 +178.157288006504 1567.557739257812 +179.104881581157 1856.000000000000 +182.960071822982 1596.667236328125 +186.016812097735 3128.000000000000 +194.115183195725 3037.019042968750 +195.105676043577 1846.959228515625 +195.121034909827 2138.534667968750 +198.183715433637 1614.000000000000 +201.983396783946 6476.000000000000 +217.007534943089 16000.083984375000 +217.105603079000 12722.193359375000 +218.010461830348 1723.000000000000 +218.108916975941 1918.000000000000 +219.094207015885 1394.000000000000 +234.033666185649 17919.000000000000 +235.036061869219 1699.000000000000 +239.087710708037 2715.000000000000 +245.038087259231 3705.000000000000 +246.860587751512 3017.000000000000 +250.998652800198 2461.000000000000 +252.996040050118 1751.000000000000 +262.065226573716 31878.271484375000 +263.067812997194 3540.000000000000 +264.062744585962 1732.000000000000 +276.080875651007 47441.000000000000 +277.083729023421 6202.904296875000 +278.078049070253 2909.805664062500 +279.092264164105 2269.000000000000 +281.049607531965 1759.000000000000 +284.163709253010 5971.317382812500 +285.167422523505 1450.937500000000 +289.120547785899 45105.261718750000 +290.122834000335 8899.000000000000 +291.118148964330 16223.000000000000 +292.119468760172 3916.748291015625 +303.104211105075 4272.900878906250 +303.190626643079 3701.817626953125 +304.121038021889 1154982.000000000000 +304.680120827865 1361.469604492188 +304.720450396369 1578.193115234375 +304.756696628278 1464.135742187500 +304.826755934771 1415.802856445312 +304.888295222133 4211.749023437500 +304.975939340234 6444.747070312500 +305.112954471951 109660.976562500000 +306.110248734555 72833.000000000000 +307.111946842557 10169.579101562500 +307.247397220322 1757.839477539062 +310.120212483100 5088.000000000000 +320.107070842572 7286.000000000000 +321.109817317563 1634.396606445312 +321.134008500327 1645.504272460938 +326.094135509242 51581.214843750000 +327.006663634739 3305.288085937500 +327.096918826684 8025.063964843750 +328.090879363560 3401.237060546875 +329.002848029289 3721.000000000000 +330.204815446188 11820.952148437500 +331.208232327135 2889.000000000000 +342.067980362905 3189.395019531250 +349.169296376205 25098.000000000000 +350.172883605486 4323.000000000000 +351.167291455015 1724.000000000000 +372.149200119315 2817.477050781250 +404.036004100360 11013.000000000000 +405.038241871311 2224.679687500000 +424.359699824875 1469.000000000000 +445.117347283461 1962.204711914062 +500.274802921042 11554.163085937500 +501.277725760601 3400.000000000000 +502.286539956580 1910.000000000000 +505.850895564320 2188.000000000000 +536.162361057972 4668.000000000000 +537.163239801382 2428.000000000000 +538.161608472883 1869.000000000000 +544.336387601713 1598.000000000000 +546.911505452596 1493.000000000000 +549.965979448424 1640.000000000000 +592.225456903764 1675.000000000000 +607.216655018496 74091.000000000000 +608.219193446659 23449.000000000000 +609.215852555200 11438.528320312500 +610.208425679746 4454.000000000000 +611.188234775837 1805.798706054688 +612.220726308427 4082.000000000000 +613.224505418990 34075.000000000000 +614.227906702716 11171.000000000000 +615.225014693998 5343.000000000000 +623.210784148654 2510.000000000000 +629.198405169302 68640.000000000000 +630.201595235063 21340.328125000000 +631.198284234777 10581.000000000000 +632.198298853566 2483.000000000000 +707.140261218123 1384.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=676 experiment=8 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=8_0 +##scan 125 +##specref ms_run[1]:sample=1 period=1 cycle=676 experiment=8 +114.065088654807 30.000000000000 +121.007103468380 30.000000000000 +161.060105660503 90.000000000000 +217.009511951226 90.000000000000 +223.015476981140 105.000000000000 +240.040349790868 255.000000000000 +258.049207638769 30.000000000000 +262.067002482596 30.000000000000 +282.091446994657 276.000000000000 +309.124468371963 60.000000000000 +309.177414089504 30.000000000000 +310.120482678691 6335.000000000000 +310.190956712203 30.000000000000 +328.130905009628 90.000000000000 +613.225160356221 195.000000000000 +>compound 1_0-676009--126--UNKNOWN +>parentmass 629.198405169302 +>charge 1 +>rt 447.100000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +629.198405169302 68640.000000000000 +630.201595235063 21340.328125000000 +>ms1peaks +52.005351813457 2501.610107421875 +53.013412581284 13134.520507812500 +53.850226225992 1302.909057617188 +54.009140063564 338983.656250000000 +55.006042248338 6435.412597656250 +55.011148435189 6609.394042968750 +55.054172395822 1772.104248046875 +55.934029229957 5757.919921875000 +56.941868288709 2705.908203125000 +59.049392394217 65787.757812500000 +60.044197396550 9389.001953125000 +61.039698624921 1629.770751953125 +63.997582420249 4596.096191406250 +64.004915539546 4860.728515625000 +68.011405901665 27484.292968750000 +68.993238795734 11816.172851562500 +69.044514210085 12151.762695312500 +72.936346245282 1770.000000000000 +73.063844648998 1632.810180664062 +76.485866327556 2207.000000000000 +79.020638014668 15456.159179687500 +80.048700307132 11716.706054687500 +81.936658440041 8339.158203125000 +82.995849176432 8191.000000000000 +87.054215388379 1432.329345703125 +89.505806636870 1376.000000000000 +90.488666027165 1798.000000000000 +95.952211902793 2472.000000000000 +97.967974119285 6640.000000000000 +100.074558827800 1418.000000000000 +102.090063528932 1768.000000000000 +109.942148206295 1646.000000000000 +113.962810920920 1728.000976562500 +114.090265101894 9843.087890625000 +118.085166173822 5466.146972656250 +122.095082275611 3591.515380859375 +122.962671452755 9919.435546875000 +123.090603383338 1818.105346679688 +130.157985838236 1433.000000000000 +136.020144210415 1305.642211914062 +141.111768954054 1381.647338867188 +141.957291332652 13999.958984375000 +147.090365251433 2315.564941406250 +149.021998403294 4169.404296875000 +151.095653127576 2632.192382812500 +151.109600618565 2638.503906250000 +155.069049191990 1400.588378906250 +155.105221715370 1306.244873046875 +155.972774632456 3955.750244140625 +158.152847157321 10190.631835937500 +161.094883274868 1469.000000000000 +164.993233307885 1413.000000000000 +170.094756804200 2692.873779296875 +173.079096183490 5464.607421875000 +174.990754641374 1338.000000000000 +175.120920396226 1335.489135742188 +178.157288006504 1567.557739257812 +179.104881581157 1856.000000000000 +182.960071822982 1596.667236328125 +186.016812097735 3128.000000000000 +194.115183195725 3037.019042968750 +195.105676043577 1846.959228515625 +195.121034909827 2138.534667968750 +198.183715433637 1614.000000000000 +201.983396783946 6476.000000000000 +217.007534943089 16000.083984375000 +217.105603079000 12722.193359375000 +218.010461830348 1723.000000000000 +218.108916975941 1918.000000000000 +219.094207015885 1394.000000000000 +234.033666185649 17919.000000000000 +235.036061869219 1699.000000000000 +239.087710708037 2715.000000000000 +245.038087259231 3705.000000000000 +246.860587751512 3017.000000000000 +250.998652800198 2461.000000000000 +252.996040050118 1751.000000000000 +262.065226573716 31878.271484375000 +263.067812997194 3540.000000000000 +264.062744585962 1732.000000000000 +276.080875651007 47441.000000000000 +277.083729023421 6202.904296875000 +278.078049070253 2909.805664062500 +279.092264164105 2269.000000000000 +281.049607531965 1759.000000000000 +284.163709253010 5971.317382812500 +285.167422523505 1450.937500000000 +289.120547785899 45105.261718750000 +290.122834000335 8899.000000000000 +291.118148964330 16223.000000000000 +292.119468760172 3916.748291015625 +303.104211105075 4272.900878906250 +303.190626643079 3701.817626953125 +304.121038021889 1154982.000000000000 +304.680120827865 1361.469604492188 +304.720450396369 1578.193115234375 +304.756696628278 1464.135742187500 +304.826755934771 1415.802856445312 +304.888295222133 4211.749023437500 +304.975939340234 6444.747070312500 +305.112954471951 109660.976562500000 +306.110248734555 72833.000000000000 +307.111946842557 10169.579101562500 +307.247397220322 1757.839477539062 +310.120212483100 5088.000000000000 +320.107070842572 7286.000000000000 +321.109817317563 1634.396606445312 +321.134008500327 1645.504272460938 +326.094135509242 51581.214843750000 +327.006663634739 3305.288085937500 +327.096918826684 8025.063964843750 +328.090879363560 3401.237060546875 +329.002848029289 3721.000000000000 +330.204815446188 11820.952148437500 +331.208232327135 2889.000000000000 +342.067980362905 3189.395019531250 +349.169296376205 25098.000000000000 +350.172883605486 4323.000000000000 +351.167291455015 1724.000000000000 +372.149200119315 2817.477050781250 +404.036004100360 11013.000000000000 +405.038241871311 2224.679687500000 +424.359699824875 1469.000000000000 +445.117347283461 1962.204711914062 +500.274802921042 11554.163085937500 +501.277725760601 3400.000000000000 +502.286539956580 1910.000000000000 +505.850895564320 2188.000000000000 +536.162361057972 4668.000000000000 +537.163239801382 2428.000000000000 +538.161608472883 1869.000000000000 +544.336387601713 1598.000000000000 +546.911505452596 1493.000000000000 +549.965979448424 1640.000000000000 +592.225456903764 1675.000000000000 +607.216655018496 74091.000000000000 +608.219193446659 23449.000000000000 +609.215852555200 11438.528320312500 +610.208425679746 4454.000000000000 +611.188234775837 1805.798706054688 +612.220726308427 4082.000000000000 +613.224505418990 34075.000000000000 +614.227906702716 11171.000000000000 +615.225014693998 5343.000000000000 +623.210784148654 2510.000000000000 +629.198405169302 68640.000000000000 +630.201595235063 21340.328125000000 +631.198284234777 10581.000000000000 +632.198298853566 2483.000000000000 +707.140261218123 1384.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=676 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=9_0 +##scan 126 +##specref ms_run[1]:sample=1 period=1 cycle=676 experiment=9 +310.119782403307 30.000000000000 +325.107158472775 60.000000000000 +326.093861850912 8172.000000000000 +326.152999611846 287.643066406250 +326.369836342230 30.000000000000 +326.517341689112 45.000000000000 +326.587313524792 30.000000000000 +327.141846994117 30.000000000000 +327.174442233446 30.000000000000 +328.313787435125 45.000000000000 +328.339187663555 45.000000000000 +340.810957912319 13.000000000000 +>compound 1_0-677002--128--UNKNOWN +>parentmass 201.982853397927 +>charge 1 +>rt 448.027999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +201.982853397927 4906.000000000000 +>ms1peaks +52.005397076818 2734.410888671875 +52.018107045505 1336.588989257812 +53.013261826329 14264.303710937500 +54.009079203842 328540.562500000000 +55.005732946798 6038.434082031250 +55.011210209049 5773.483398437500 +55.054089450492 1883.920532226562 +55.933933351350 5941.799316406250 +56.049311183158 2529.910644531250 +56.941559341288 2177.731445312500 +59.049288422008 55833.332031250000 +60.044400478994 9188.863281250000 +61.039483771618 1336.615844726562 +63.997769089290 4226.595214843750 +64.004652574785 4312.662109375000 +67.028420902367 1685.132324218750 +68.011303574981 26639.857421875000 +68.993400384347 11132.456054687500 +69.044245603619 12842.139648437500 +72.936451870693 2092.438964843750 +73.064343001052 2004.000000000000 +76.485626827097 1932.002563476562 +79.020705537221 15479.782226562500 +80.048746552992 12934.649414062500 +81.936560826315 7849.174804687500 +82.996236710322 7697.570312500000 +87.043649221397 1392.278564453125 +87.054161695388 1495.958618164062 +89.506032483299 1554.000000000000 +90.488774891048 1551.744018554688 +91.052857733317 1701.434936523438 +95.951953010697 2094.000000000000 +97.967766546756 6595.530273437500 +109.942695624537 1327.000000000000 +113.961956344849 1877.000000000000 +114.090202311915 11113.386718750000 +118.085079269697 5461.000000000000 +122.095332793077 3096.000000000000 +122.962788239519 9551.916015625000 +123.089923877343 1592.000000000000 +130.158267685481 1374.000000000000 +136.020500147191 1906.429687500000 +141.089705751127 1398.031372070312 +141.111419699029 1374.918823242188 +141.935031405798 2215.528808593750 +141.957114961469 13636.359375000000 +147.090410388658 2596.000000000000 +149.021734118264 3900.000000000000 +149.042225044400 1717.679077148438 +151.095530836015 2392.175048828125 +151.109345923165 2675.036376953125 +155.069217138005 1392.010375976562 +155.972851416164 3798.715576171875 +158.152680730278 10054.000000000000 +161.095473046681 1550.000000000000 +164.142407569715 1467.709594726562 +170.094842381476 2189.805175781250 +173.079740417554 5427.904296875000 +178.157986956425 1455.000000000000 +179.105560744514 1912.301391601562 +182.960698176280 2000.407470703125 +186.016618789428 1896.000000000000 +186.220115257894 1974.000000000000 +194.116069304698 2583.000000000000 +195.121207806540 1998.303710937500 +198.184395565259 1695.000000000000 +201.982853397927 4906.000000000000 +217.007045852030 12703.000000000000 +217.105649597883 13317.726562500000 +218.109378650956 2113.981933593750 +219.093923189224 1382.400756835938 +234.033511361987 14162.000000000000 +235.036774500644 1342.000000000000 +239.087266669620 2910.000000000000 +242.282551973761 1561.000000000000 +245.038675382516 2489.000000000000 +246.861414583855 2664.000000000000 +250.998716978816 2090.000000000000 +262.065290180852 23768.000000000000 +263.068197519244 2928.000000000000 +276.081065166232 35016.000000000000 +277.084200131760 4404.000000000000 +278.078513434024 2183.000000000000 +279.092009717775 2217.000000000000 +281.049184165914 1367.000000000000 +284.163360412320 3532.000000000000 +289.121282596047 297520.000000000000 +290.123339528492 48851.796875000000 +291.118124278084 95531.000000000000 +292.120251426315 17101.046875000000 +293.123187582260 1858.065429687500 +303.104014775580 2693.449951171875 +303.190353825641 2785.502441406250 +304.119856155362 954170.000000000000 +304.858461688543 1629.946044921875 +304.974182520147 7187.607910156250 +305.110635941863 61549.015625000000 +306.110453215668 55678.074218750000 +307.111643085162 7091.700683593750 +310.120007901196 5493.854003906250 +320.106626078784 4025.000000000000 +326.094632546811 51218.675781250000 +327.006414911949 2851.898193359375 +327.096265128312 8263.424804687500 +328.091406924071 3217.697509765625 +329.003058211528 3429.933349609375 +330.205471949815 7747.000000000000 +331.207754653901 1796.000000000000 +342.067426751640 3267.000000000000 +349.169395269431 21267.000000000000 +350.172679880257 4154.271972656250 +351.168393055602 1571.000000000000 +372.098739562700 1670.002075195312 +372.148644610713 2317.465087890625 +389.045115150928 4473.000000000000 +391.043177396698 1663.000000000000 +404.036316278299 7850.000000000000 +405.039997913270 1931.000000000000 +424.359886173771 1591.000000000000 +445.117801993639 2038.000000000000 +500.275651903375 13340.000000000000 +501.278433801524 4082.000000000000 +502.285907017338 2013.566040039062 +505.851095535466 2281.000000000000 +536.163686089478 4281.000000000000 +537.165279310098 2275.000000000000 +538.161599212928 1446.000000000000 +542.322146689605 2319.235839843750 +544.336681001720 2203.000000000000 +546.913546060949 1480.000000000000 +549.965890540792 1571.727539062500 +592.225728725342 6278.000000000000 +593.229191819800 2109.000000000000 +594.222911870749 2943.707031250000 +607.216789747777 46858.000000000000 +608.219527953593 15482.000000000000 +609.215333724431 7397.000000000000 +610.196851071075 3575.000000000000 +611.184731787601 1662.000000000000 +612.221188935026 2560.000000000000 +613.225065362361 23067.000000000000 +614.226835965539 7388.000000000000 +615.223918934987 3328.000000000000 +623.150116137773 1311.609985351562 +623.211673074874 1404.509399414062 +629.198822367023 49161.000000000000 +630.201975789631 15060.724609375000 +631.197108322666 7602.103027343750 +632.199182275970 1787.000000000000 +707.142781768806 1359.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=677 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=677 experiment=2_0 +##scan 128 +##specref ms_run[1]:sample=1 period=1 cycle=677 experiment=2 +72.937881745609 13.000000000000 +201.985085900578 13.000000000000 +>compound 1_0-677003--129--UNKNOWN +>parentmass 217.007045852030 +>charge 1 +>rt 448.027999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +217.007045852030 12703.000000000000 +>ms1peaks +52.005397076818 2734.410888671875 +52.018107045505 1336.588989257812 +53.013261826329 14264.303710937500 +54.009079203842 328540.562500000000 +55.005732946798 6038.434082031250 +55.011210209049 5773.483398437500 +55.054089450492 1883.920532226562 +55.933933351350 5941.799316406250 +56.049311183158 2529.910644531250 +56.941559341288 2177.731445312500 +59.049288422008 55833.332031250000 +60.044400478994 9188.863281250000 +61.039483771618 1336.615844726562 +63.997769089290 4226.595214843750 +64.004652574785 4312.662109375000 +67.028420902367 1685.132324218750 +68.011303574981 26639.857421875000 +68.993400384347 11132.456054687500 +69.044245603619 12842.139648437500 +72.936451870693 2092.438964843750 +73.064343001052 2004.000000000000 +76.485626827097 1932.002563476562 +79.020705537221 15479.782226562500 +80.048746552992 12934.649414062500 +81.936560826315 7849.174804687500 +82.996236710322 7697.570312500000 +87.043649221397 1392.278564453125 +87.054161695388 1495.958618164062 +89.506032483299 1554.000000000000 +90.488774891048 1551.744018554688 +91.052857733317 1701.434936523438 +95.951953010697 2094.000000000000 +97.967766546756 6595.530273437500 +109.942695624537 1327.000000000000 +113.961956344849 1877.000000000000 +114.090202311915 11113.386718750000 +118.085079269697 5461.000000000000 +122.095332793077 3096.000000000000 +122.962788239519 9551.916015625000 +123.089923877343 1592.000000000000 +130.158267685481 1374.000000000000 +136.020500147191 1906.429687500000 +141.089705751127 1398.031372070312 +141.111419699029 1374.918823242188 +141.935031405798 2215.528808593750 +141.957114961469 13636.359375000000 +147.090410388658 2596.000000000000 +149.021734118264 3900.000000000000 +149.042225044400 1717.679077148438 +151.095530836015 2392.175048828125 +151.109345923165 2675.036376953125 +155.069217138005 1392.010375976562 +155.972851416164 3798.715576171875 +158.152680730278 10054.000000000000 +161.095473046681 1550.000000000000 +164.142407569715 1467.709594726562 +170.094842381476 2189.805175781250 +173.079740417554 5427.904296875000 +178.157986956425 1455.000000000000 +179.105560744514 1912.301391601562 +182.960698176280 2000.407470703125 +186.016618789428 1896.000000000000 +186.220115257894 1974.000000000000 +194.116069304698 2583.000000000000 +195.121207806540 1998.303710937500 +198.184395565259 1695.000000000000 +201.982853397927 4906.000000000000 +217.007045852030 12703.000000000000 +217.105649597883 13317.726562500000 +218.109378650956 2113.981933593750 +219.093923189224 1382.400756835938 +234.033511361987 14162.000000000000 +235.036774500644 1342.000000000000 +239.087266669620 2910.000000000000 +242.282551973761 1561.000000000000 +245.038675382516 2489.000000000000 +246.861414583855 2664.000000000000 +250.998716978816 2090.000000000000 +262.065290180852 23768.000000000000 +263.068197519244 2928.000000000000 +276.081065166232 35016.000000000000 +277.084200131760 4404.000000000000 +278.078513434024 2183.000000000000 +279.092009717775 2217.000000000000 +281.049184165914 1367.000000000000 +284.163360412320 3532.000000000000 +289.121282596047 297520.000000000000 +290.123339528492 48851.796875000000 +291.118124278084 95531.000000000000 +292.120251426315 17101.046875000000 +293.123187582260 1858.065429687500 +303.104014775580 2693.449951171875 +303.190353825641 2785.502441406250 +304.119856155362 954170.000000000000 +304.858461688543 1629.946044921875 +304.974182520147 7187.607910156250 +305.110635941863 61549.015625000000 +306.110453215668 55678.074218750000 +307.111643085162 7091.700683593750 +310.120007901196 5493.854003906250 +320.106626078784 4025.000000000000 +326.094632546811 51218.675781250000 +327.006414911949 2851.898193359375 +327.096265128312 8263.424804687500 +328.091406924071 3217.697509765625 +329.003058211528 3429.933349609375 +330.205471949815 7747.000000000000 +331.207754653901 1796.000000000000 +342.067426751640 3267.000000000000 +349.169395269431 21267.000000000000 +350.172679880257 4154.271972656250 +351.168393055602 1571.000000000000 +372.098739562700 1670.002075195312 +372.148644610713 2317.465087890625 +389.045115150928 4473.000000000000 +391.043177396698 1663.000000000000 +404.036316278299 7850.000000000000 +405.039997913270 1931.000000000000 +424.359886173771 1591.000000000000 +445.117801993639 2038.000000000000 +500.275651903375 13340.000000000000 +501.278433801524 4082.000000000000 +502.285907017338 2013.566040039062 +505.851095535466 2281.000000000000 +536.163686089478 4281.000000000000 +537.165279310098 2275.000000000000 +538.161599212928 1446.000000000000 +542.322146689605 2319.235839843750 +544.336681001720 2203.000000000000 +546.913546060949 1480.000000000000 +549.965890540792 1571.727539062500 +592.225728725342 6278.000000000000 +593.229191819800 2109.000000000000 +594.222911870749 2943.707031250000 +607.216789747777 46858.000000000000 +608.219527953593 15482.000000000000 +609.215333724431 7397.000000000000 +610.196851071075 3575.000000000000 +611.184731787601 1662.000000000000 +612.221188935026 2560.000000000000 +613.225065362361 23067.000000000000 +614.226835965539 7388.000000000000 +615.223918934987 3328.000000000000 +623.150116137773 1311.609985351562 +623.211673074874 1404.509399414062 +629.198822367023 49161.000000000000 +630.201975789631 15060.724609375000 +631.197108322666 7602.103027343750 +632.199182275970 1787.000000000000 +707.142781768806 1359.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=677 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=677 experiment=3_0 +##scan 129 +##specref ms_run[1]:sample=1 period=1 cycle=677 experiment=3 +55.055088322432 195.000000000000 +83.048780027731 195.000000000000 +89.022225618500 30.000000000000 +101.059906421368 90.000000000000 +110.018455961681 45.000000000000 +111.044918103165 135.000000000000 +137.011346913011 45.000000000000 +155.070652736542 150.000000000000 +173.079227511028 75.000000000000 +201.982018233780 90.000000000000 +>compound 1_0-677004--130--UNKNOWN +>parentmass 234.033511361987 +>charge 1 +>rt 448.027999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +234.033511361987 14162.000000000000 +235.036774500644 1342.000000000000 +>ms1peaks +52.005397076818 2734.410888671875 +52.018107045505 1336.588989257812 +53.013261826329 14264.303710937500 +54.009079203842 328540.562500000000 +55.005732946798 6038.434082031250 +55.011210209049 5773.483398437500 +55.054089450492 1883.920532226562 +55.933933351350 5941.799316406250 +56.049311183158 2529.910644531250 +56.941559341288 2177.731445312500 +59.049288422008 55833.332031250000 +60.044400478994 9188.863281250000 +61.039483771618 1336.615844726562 +63.997769089290 4226.595214843750 +64.004652574785 4312.662109375000 +67.028420902367 1685.132324218750 +68.011303574981 26639.857421875000 +68.993400384347 11132.456054687500 +69.044245603619 12842.139648437500 +72.936451870693 2092.438964843750 +73.064343001052 2004.000000000000 +76.485626827097 1932.002563476562 +79.020705537221 15479.782226562500 +80.048746552992 12934.649414062500 +81.936560826315 7849.174804687500 +82.996236710322 7697.570312500000 +87.043649221397 1392.278564453125 +87.054161695388 1495.958618164062 +89.506032483299 1554.000000000000 +90.488774891048 1551.744018554688 +91.052857733317 1701.434936523438 +95.951953010697 2094.000000000000 +97.967766546756 6595.530273437500 +109.942695624537 1327.000000000000 +113.961956344849 1877.000000000000 +114.090202311915 11113.386718750000 +118.085079269697 5461.000000000000 +122.095332793077 3096.000000000000 +122.962788239519 9551.916015625000 +123.089923877343 1592.000000000000 +130.158267685481 1374.000000000000 +136.020500147191 1906.429687500000 +141.089705751127 1398.031372070312 +141.111419699029 1374.918823242188 +141.935031405798 2215.528808593750 +141.957114961469 13636.359375000000 +147.090410388658 2596.000000000000 +149.021734118264 3900.000000000000 +149.042225044400 1717.679077148438 +151.095530836015 2392.175048828125 +151.109345923165 2675.036376953125 +155.069217138005 1392.010375976562 +155.972851416164 3798.715576171875 +158.152680730278 10054.000000000000 +161.095473046681 1550.000000000000 +164.142407569715 1467.709594726562 +170.094842381476 2189.805175781250 +173.079740417554 5427.904296875000 +178.157986956425 1455.000000000000 +179.105560744514 1912.301391601562 +182.960698176280 2000.407470703125 +186.016618789428 1896.000000000000 +186.220115257894 1974.000000000000 +194.116069304698 2583.000000000000 +195.121207806540 1998.303710937500 +198.184395565259 1695.000000000000 +201.982853397927 4906.000000000000 +217.007045852030 12703.000000000000 +217.105649597883 13317.726562500000 +218.109378650956 2113.981933593750 +219.093923189224 1382.400756835938 +234.033511361987 14162.000000000000 +235.036774500644 1342.000000000000 +239.087266669620 2910.000000000000 +242.282551973761 1561.000000000000 +245.038675382516 2489.000000000000 +246.861414583855 2664.000000000000 +250.998716978816 2090.000000000000 +262.065290180852 23768.000000000000 +263.068197519244 2928.000000000000 +276.081065166232 35016.000000000000 +277.084200131760 4404.000000000000 +278.078513434024 2183.000000000000 +279.092009717775 2217.000000000000 +281.049184165914 1367.000000000000 +284.163360412320 3532.000000000000 +289.121282596047 297520.000000000000 +290.123339528492 48851.796875000000 +291.118124278084 95531.000000000000 +292.120251426315 17101.046875000000 +293.123187582260 1858.065429687500 +303.104014775580 2693.449951171875 +303.190353825641 2785.502441406250 +304.119856155362 954170.000000000000 +304.858461688543 1629.946044921875 +304.974182520147 7187.607910156250 +305.110635941863 61549.015625000000 +306.110453215668 55678.074218750000 +307.111643085162 7091.700683593750 +310.120007901196 5493.854003906250 +320.106626078784 4025.000000000000 +326.094632546811 51218.675781250000 +327.006414911949 2851.898193359375 +327.096265128312 8263.424804687500 +328.091406924071 3217.697509765625 +329.003058211528 3429.933349609375 +330.205471949815 7747.000000000000 +331.207754653901 1796.000000000000 +342.067426751640 3267.000000000000 +349.169395269431 21267.000000000000 +350.172679880257 4154.271972656250 +351.168393055602 1571.000000000000 +372.098739562700 1670.002075195312 +372.148644610713 2317.465087890625 +389.045115150928 4473.000000000000 +391.043177396698 1663.000000000000 +404.036316278299 7850.000000000000 +405.039997913270 1931.000000000000 +424.359886173771 1591.000000000000 +445.117801993639 2038.000000000000 +500.275651903375 13340.000000000000 +501.278433801524 4082.000000000000 +502.285907017338 2013.566040039062 +505.851095535466 2281.000000000000 +536.163686089478 4281.000000000000 +537.165279310098 2275.000000000000 +538.161599212928 1446.000000000000 +542.322146689605 2319.235839843750 +544.336681001720 2203.000000000000 +546.913546060949 1480.000000000000 +549.965890540792 1571.727539062500 +592.225728725342 6278.000000000000 +593.229191819800 2109.000000000000 +594.222911870749 2943.707031250000 +607.216789747777 46858.000000000000 +608.219527953593 15482.000000000000 +609.215333724431 7397.000000000000 +610.196851071075 3575.000000000000 +611.184731787601 1662.000000000000 +612.221188935026 2560.000000000000 +613.225065362361 23067.000000000000 +614.226835965539 7388.000000000000 +615.223918934987 3328.000000000000 +623.150116137773 1311.609985351562 +623.211673074874 1404.509399414062 +629.198822367023 49161.000000000000 +630.201975789631 15060.724609375000 +631.197108322666 7602.103027343750 +632.199182275970 1787.000000000000 +707.142781768806 1359.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=677 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=677 experiment=4_0 +##scan 130 +##specref ms_run[1]:sample=1 period=1 cycle=677 experiment=4 +55.053742787625 150.000000000000 +55.273103846510 13.000000000000 +83.049241678057 120.000000000000 +83.083731493614 13.000000000000 +99.044567118538 13.000000000000 +111.042644986684 135.000000000000 +113.058302202484 45.000000000000 +133.902677606415 13.000000000000 +155.069038012117 165.000000000000 +173.080756198237 135.000000000000 +201.987082365372 30.000000000000 +217.107945628030 105.000000000000 +218.741444739270 13.000000000000 +>compound 1_0-677006--132--UNKNOWN +>parentmass 310.120007901196 +>charge 1 +>rt 448.027999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +310.120007901196 5493.854003906250 +>ms1peaks +52.005397076818 2734.410888671875 +52.018107045505 1336.588989257812 +53.013261826329 14264.303710937500 +54.009079203842 328540.562500000000 +55.005732946798 6038.434082031250 +55.011210209049 5773.483398437500 +55.054089450492 1883.920532226562 +55.933933351350 5941.799316406250 +56.049311183158 2529.910644531250 +56.941559341288 2177.731445312500 +59.049288422008 55833.332031250000 +60.044400478994 9188.863281250000 +61.039483771618 1336.615844726562 +63.997769089290 4226.595214843750 +64.004652574785 4312.662109375000 +67.028420902367 1685.132324218750 +68.011303574981 26639.857421875000 +68.993400384347 11132.456054687500 +69.044245603619 12842.139648437500 +72.936451870693 2092.438964843750 +73.064343001052 2004.000000000000 +76.485626827097 1932.002563476562 +79.020705537221 15479.782226562500 +80.048746552992 12934.649414062500 +81.936560826315 7849.174804687500 +82.996236710322 7697.570312500000 +87.043649221397 1392.278564453125 +87.054161695388 1495.958618164062 +89.506032483299 1554.000000000000 +90.488774891048 1551.744018554688 +91.052857733317 1701.434936523438 +95.951953010697 2094.000000000000 +97.967766546756 6595.530273437500 +109.942695624537 1327.000000000000 +113.961956344849 1877.000000000000 +114.090202311915 11113.386718750000 +118.085079269697 5461.000000000000 +122.095332793077 3096.000000000000 +122.962788239519 9551.916015625000 +123.089923877343 1592.000000000000 +130.158267685481 1374.000000000000 +136.020500147191 1906.429687500000 +141.089705751127 1398.031372070312 +141.111419699029 1374.918823242188 +141.935031405798 2215.528808593750 +141.957114961469 13636.359375000000 +147.090410388658 2596.000000000000 +149.021734118264 3900.000000000000 +149.042225044400 1717.679077148438 +151.095530836015 2392.175048828125 +151.109345923165 2675.036376953125 +155.069217138005 1392.010375976562 +155.972851416164 3798.715576171875 +158.152680730278 10054.000000000000 +161.095473046681 1550.000000000000 +164.142407569715 1467.709594726562 +170.094842381476 2189.805175781250 +173.079740417554 5427.904296875000 +178.157986956425 1455.000000000000 +179.105560744514 1912.301391601562 +182.960698176280 2000.407470703125 +186.016618789428 1896.000000000000 +186.220115257894 1974.000000000000 +194.116069304698 2583.000000000000 +195.121207806540 1998.303710937500 +198.184395565259 1695.000000000000 +201.982853397927 4906.000000000000 +217.007045852030 12703.000000000000 +217.105649597883 13317.726562500000 +218.109378650956 2113.981933593750 +219.093923189224 1382.400756835938 +234.033511361987 14162.000000000000 +235.036774500644 1342.000000000000 +239.087266669620 2910.000000000000 +242.282551973761 1561.000000000000 +245.038675382516 2489.000000000000 +246.861414583855 2664.000000000000 +250.998716978816 2090.000000000000 +262.065290180852 23768.000000000000 +263.068197519244 2928.000000000000 +276.081065166232 35016.000000000000 +277.084200131760 4404.000000000000 +278.078513434024 2183.000000000000 +279.092009717775 2217.000000000000 +281.049184165914 1367.000000000000 +284.163360412320 3532.000000000000 +289.121282596047 297520.000000000000 +290.123339528492 48851.796875000000 +291.118124278084 95531.000000000000 +292.120251426315 17101.046875000000 +293.123187582260 1858.065429687500 +303.104014775580 2693.449951171875 +303.190353825641 2785.502441406250 +304.119856155362 954170.000000000000 +304.858461688543 1629.946044921875 +304.974182520147 7187.607910156250 +305.110635941863 61549.015625000000 +306.110453215668 55678.074218750000 +307.111643085162 7091.700683593750 +310.120007901196 5493.854003906250 +320.106626078784 4025.000000000000 +326.094632546811 51218.675781250000 +327.006414911949 2851.898193359375 +327.096265128312 8263.424804687500 +328.091406924071 3217.697509765625 +329.003058211528 3429.933349609375 +330.205471949815 7747.000000000000 +331.207754653901 1796.000000000000 +342.067426751640 3267.000000000000 +349.169395269431 21267.000000000000 +350.172679880257 4154.271972656250 +351.168393055602 1571.000000000000 +372.098739562700 1670.002075195312 +372.148644610713 2317.465087890625 +389.045115150928 4473.000000000000 +391.043177396698 1663.000000000000 +404.036316278299 7850.000000000000 +405.039997913270 1931.000000000000 +424.359886173771 1591.000000000000 +445.117801993639 2038.000000000000 +500.275651903375 13340.000000000000 +501.278433801524 4082.000000000000 +502.285907017338 2013.566040039062 +505.851095535466 2281.000000000000 +536.163686089478 4281.000000000000 +537.165279310098 2275.000000000000 +538.161599212928 1446.000000000000 +542.322146689605 2319.235839843750 +544.336681001720 2203.000000000000 +546.913546060949 1480.000000000000 +549.965890540792 1571.727539062500 +592.225728725342 6278.000000000000 +593.229191819800 2109.000000000000 +594.222911870749 2943.707031250000 +607.216789747777 46858.000000000000 +608.219527953593 15482.000000000000 +609.215333724431 7397.000000000000 +610.196851071075 3575.000000000000 +611.184731787601 1662.000000000000 +612.221188935026 2560.000000000000 +613.225065362361 23067.000000000000 +614.226835965539 7388.000000000000 +615.223918934987 3328.000000000000 +623.150116137773 1311.609985351562 +623.211673074874 1404.509399414062 +629.198822367023 49161.000000000000 +630.201975789631 15060.724609375000 +631.197108322666 7602.103027343750 +632.199182275970 1787.000000000000 +707.142781768806 1359.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=677 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=677 experiment=6_0 +##scan 132 +##specref ms_run[1]:sample=1 period=1 cycle=677 experiment=6 +114.063052115407 30.000000000000 +114.070967055865 30.000000000000 +282.085925209855 30.000000000000 +292.228783441839 13.000000000000 +293.192972183462 30.000000000000 +293.214982460534 30.000000000000 +>compound 1_0-677007--133--UNKNOWN +>parentmass 404.036316278299 +>charge 1 +>rt 448.027999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +404.036316278299 7850.000000000000 +405.039997913270 1931.000000000000 +>ms1peaks +52.005397076818 2734.410888671875 +52.018107045505 1336.588989257812 +53.013261826329 14264.303710937500 +54.009079203842 328540.562500000000 +55.005732946798 6038.434082031250 +55.011210209049 5773.483398437500 +55.054089450492 1883.920532226562 +55.933933351350 5941.799316406250 +56.049311183158 2529.910644531250 +56.941559341288 2177.731445312500 +59.049288422008 55833.332031250000 +60.044400478994 9188.863281250000 +61.039483771618 1336.615844726562 +63.997769089290 4226.595214843750 +64.004652574785 4312.662109375000 +67.028420902367 1685.132324218750 +68.011303574981 26639.857421875000 +68.993400384347 11132.456054687500 +69.044245603619 12842.139648437500 +72.936451870693 2092.438964843750 +73.064343001052 2004.000000000000 +76.485626827097 1932.002563476562 +79.020705537221 15479.782226562500 +80.048746552992 12934.649414062500 +81.936560826315 7849.174804687500 +82.996236710322 7697.570312500000 +87.043649221397 1392.278564453125 +87.054161695388 1495.958618164062 +89.506032483299 1554.000000000000 +90.488774891048 1551.744018554688 +91.052857733317 1701.434936523438 +95.951953010697 2094.000000000000 +97.967766546756 6595.530273437500 +109.942695624537 1327.000000000000 +113.961956344849 1877.000000000000 +114.090202311915 11113.386718750000 +118.085079269697 5461.000000000000 +122.095332793077 3096.000000000000 +122.962788239519 9551.916015625000 +123.089923877343 1592.000000000000 +130.158267685481 1374.000000000000 +136.020500147191 1906.429687500000 +141.089705751127 1398.031372070312 +141.111419699029 1374.918823242188 +141.935031405798 2215.528808593750 +141.957114961469 13636.359375000000 +147.090410388658 2596.000000000000 +149.021734118264 3900.000000000000 +149.042225044400 1717.679077148438 +151.095530836015 2392.175048828125 +151.109345923165 2675.036376953125 +155.069217138005 1392.010375976562 +155.972851416164 3798.715576171875 +158.152680730278 10054.000000000000 +161.095473046681 1550.000000000000 +164.142407569715 1467.709594726562 +170.094842381476 2189.805175781250 +173.079740417554 5427.904296875000 +178.157986956425 1455.000000000000 +179.105560744514 1912.301391601562 +182.960698176280 2000.407470703125 +186.016618789428 1896.000000000000 +186.220115257894 1974.000000000000 +194.116069304698 2583.000000000000 +195.121207806540 1998.303710937500 +198.184395565259 1695.000000000000 +201.982853397927 4906.000000000000 +217.007045852030 12703.000000000000 +217.105649597883 13317.726562500000 +218.109378650956 2113.981933593750 +219.093923189224 1382.400756835938 +234.033511361987 14162.000000000000 +235.036774500644 1342.000000000000 +239.087266669620 2910.000000000000 +242.282551973761 1561.000000000000 +245.038675382516 2489.000000000000 +246.861414583855 2664.000000000000 +250.998716978816 2090.000000000000 +262.065290180852 23768.000000000000 +263.068197519244 2928.000000000000 +276.081065166232 35016.000000000000 +277.084200131760 4404.000000000000 +278.078513434024 2183.000000000000 +279.092009717775 2217.000000000000 +281.049184165914 1367.000000000000 +284.163360412320 3532.000000000000 +289.121282596047 297520.000000000000 +290.123339528492 48851.796875000000 +291.118124278084 95531.000000000000 +292.120251426315 17101.046875000000 +293.123187582260 1858.065429687500 +303.104014775580 2693.449951171875 +303.190353825641 2785.502441406250 +304.119856155362 954170.000000000000 +304.858461688543 1629.946044921875 +304.974182520147 7187.607910156250 +305.110635941863 61549.015625000000 +306.110453215668 55678.074218750000 +307.111643085162 7091.700683593750 +310.120007901196 5493.854003906250 +320.106626078784 4025.000000000000 +326.094632546811 51218.675781250000 +327.006414911949 2851.898193359375 +327.096265128312 8263.424804687500 +328.091406924071 3217.697509765625 +329.003058211528 3429.933349609375 +330.205471949815 7747.000000000000 +331.207754653901 1796.000000000000 +342.067426751640 3267.000000000000 +349.169395269431 21267.000000000000 +350.172679880257 4154.271972656250 +351.168393055602 1571.000000000000 +372.098739562700 1670.002075195312 +372.148644610713 2317.465087890625 +389.045115150928 4473.000000000000 +391.043177396698 1663.000000000000 +404.036316278299 7850.000000000000 +405.039997913270 1931.000000000000 +424.359886173771 1591.000000000000 +445.117801993639 2038.000000000000 +500.275651903375 13340.000000000000 +501.278433801524 4082.000000000000 +502.285907017338 2013.566040039062 +505.851095535466 2281.000000000000 +536.163686089478 4281.000000000000 +537.165279310098 2275.000000000000 +538.161599212928 1446.000000000000 +542.322146689605 2319.235839843750 +544.336681001720 2203.000000000000 +546.913546060949 1480.000000000000 +549.965890540792 1571.727539062500 +592.225728725342 6278.000000000000 +593.229191819800 2109.000000000000 +594.222911870749 2943.707031250000 +607.216789747777 46858.000000000000 +608.219527953593 15482.000000000000 +609.215333724431 7397.000000000000 +610.196851071075 3575.000000000000 +611.184731787601 1662.000000000000 +612.221188935026 2560.000000000000 +613.225065362361 23067.000000000000 +614.226835965539 7388.000000000000 +615.223918934987 3328.000000000000 +623.150116137773 1311.609985351562 +623.211673074874 1404.509399414062 +629.198822367023 49161.000000000000 +630.201975789631 15060.724609375000 +631.197108322666 7602.103027343750 +632.199182275970 1787.000000000000 +707.142781768806 1359.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=677 experiment=7 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=677 experiment=7_0 +##scan 133 +##specref ms_run[1]:sample=1 period=1 cycle=677 experiment=7 +252.989585533368 13.000000000000 +270.855755244733 13.000000000000 +327.986310539115 45.000000000000 +>compound 1_0-677008--134--UNKNOWN +>parentmass 592.225728725342 +>charge 1 +>rt 448.027999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +592.225728725342 6278.000000000000 +593.229191819800 2109.000000000000 +>ms1peaks +52.005397076818 2734.410888671875 +52.018107045505 1336.588989257812 +53.013261826329 14264.303710937500 +54.009079203842 328540.562500000000 +55.005732946798 6038.434082031250 +55.011210209049 5773.483398437500 +55.054089450492 1883.920532226562 +55.933933351350 5941.799316406250 +56.049311183158 2529.910644531250 +56.941559341288 2177.731445312500 +59.049288422008 55833.332031250000 +60.044400478994 9188.863281250000 +61.039483771618 1336.615844726562 +63.997769089290 4226.595214843750 +64.004652574785 4312.662109375000 +67.028420902367 1685.132324218750 +68.011303574981 26639.857421875000 +68.993400384347 11132.456054687500 +69.044245603619 12842.139648437500 +72.936451870693 2092.438964843750 +73.064343001052 2004.000000000000 +76.485626827097 1932.002563476562 +79.020705537221 15479.782226562500 +80.048746552992 12934.649414062500 +81.936560826315 7849.174804687500 +82.996236710322 7697.570312500000 +87.043649221397 1392.278564453125 +87.054161695388 1495.958618164062 +89.506032483299 1554.000000000000 +90.488774891048 1551.744018554688 +91.052857733317 1701.434936523438 +95.951953010697 2094.000000000000 +97.967766546756 6595.530273437500 +109.942695624537 1327.000000000000 +113.961956344849 1877.000000000000 +114.090202311915 11113.386718750000 +118.085079269697 5461.000000000000 +122.095332793077 3096.000000000000 +122.962788239519 9551.916015625000 +123.089923877343 1592.000000000000 +130.158267685481 1374.000000000000 +136.020500147191 1906.429687500000 +141.089705751127 1398.031372070312 +141.111419699029 1374.918823242188 +141.935031405798 2215.528808593750 +141.957114961469 13636.359375000000 +147.090410388658 2596.000000000000 +149.021734118264 3900.000000000000 +149.042225044400 1717.679077148438 +151.095530836015 2392.175048828125 +151.109345923165 2675.036376953125 +155.069217138005 1392.010375976562 +155.972851416164 3798.715576171875 +158.152680730278 10054.000000000000 +161.095473046681 1550.000000000000 +164.142407569715 1467.709594726562 +170.094842381476 2189.805175781250 +173.079740417554 5427.904296875000 +178.157986956425 1455.000000000000 +179.105560744514 1912.301391601562 +182.960698176280 2000.407470703125 +186.016618789428 1896.000000000000 +186.220115257894 1974.000000000000 +194.116069304698 2583.000000000000 +195.121207806540 1998.303710937500 +198.184395565259 1695.000000000000 +201.982853397927 4906.000000000000 +217.007045852030 12703.000000000000 +217.105649597883 13317.726562500000 +218.109378650956 2113.981933593750 +219.093923189224 1382.400756835938 +234.033511361987 14162.000000000000 +235.036774500644 1342.000000000000 +239.087266669620 2910.000000000000 +242.282551973761 1561.000000000000 +245.038675382516 2489.000000000000 +246.861414583855 2664.000000000000 +250.998716978816 2090.000000000000 +262.065290180852 23768.000000000000 +263.068197519244 2928.000000000000 +276.081065166232 35016.000000000000 +277.084200131760 4404.000000000000 +278.078513434024 2183.000000000000 +279.092009717775 2217.000000000000 +281.049184165914 1367.000000000000 +284.163360412320 3532.000000000000 +289.121282596047 297520.000000000000 +290.123339528492 48851.796875000000 +291.118124278084 95531.000000000000 +292.120251426315 17101.046875000000 +293.123187582260 1858.065429687500 +303.104014775580 2693.449951171875 +303.190353825641 2785.502441406250 +304.119856155362 954170.000000000000 +304.858461688543 1629.946044921875 +304.974182520147 7187.607910156250 +305.110635941863 61549.015625000000 +306.110453215668 55678.074218750000 +307.111643085162 7091.700683593750 +310.120007901196 5493.854003906250 +320.106626078784 4025.000000000000 +326.094632546811 51218.675781250000 +327.006414911949 2851.898193359375 +327.096265128312 8263.424804687500 +328.091406924071 3217.697509765625 +329.003058211528 3429.933349609375 +330.205471949815 7747.000000000000 +331.207754653901 1796.000000000000 +342.067426751640 3267.000000000000 +349.169395269431 21267.000000000000 +350.172679880257 4154.271972656250 +351.168393055602 1571.000000000000 +372.098739562700 1670.002075195312 +372.148644610713 2317.465087890625 +389.045115150928 4473.000000000000 +391.043177396698 1663.000000000000 +404.036316278299 7850.000000000000 +405.039997913270 1931.000000000000 +424.359886173771 1591.000000000000 +445.117801993639 2038.000000000000 +500.275651903375 13340.000000000000 +501.278433801524 4082.000000000000 +502.285907017338 2013.566040039062 +505.851095535466 2281.000000000000 +536.163686089478 4281.000000000000 +537.165279310098 2275.000000000000 +538.161599212928 1446.000000000000 +542.322146689605 2319.235839843750 +544.336681001720 2203.000000000000 +546.913546060949 1480.000000000000 +549.965890540792 1571.727539062500 +592.225728725342 6278.000000000000 +593.229191819800 2109.000000000000 +594.222911870749 2943.707031250000 +607.216789747777 46858.000000000000 +608.219527953593 15482.000000000000 +609.215333724431 7397.000000000000 +610.196851071075 3575.000000000000 +611.184731787601 1662.000000000000 +612.221188935026 2560.000000000000 +613.225065362361 23067.000000000000 +614.226835965539 7388.000000000000 +615.223918934987 3328.000000000000 +623.150116137773 1311.609985351562 +623.211673074874 1404.509399414062 +629.198822367023 49161.000000000000 +630.201975789631 15060.724609375000 +631.197108322666 7602.103027343750 +632.199182275970 1787.000000000000 +707.142781768806 1359.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=677 experiment=8 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=677 experiment=8_0 +##scan 134 +##specref ms_run[1]:sample=1 period=1 cycle=677 experiment=8 +70.040387367687 44.684253692627 +70.047865502642 37.155311584473 +201.983899576426 45.000000000000 +217.007209698297 608.000000000000 +234.035524882836 333.000000000000 +245.036754458544 60.000000000000 +262.065396372998 194.000000000000 +276.081233166513 363.000000000000 +289.122284112085 225.000000000000 +304.113665408763 1050.000000000000 +>compound 1_0-677009--135--UNKNOWN +>parentmass 607.216789747777 +>charge 1 +>rt 448.027999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +607.216789747777 46858.000000000000 +>ms1peaks +52.005397076818 2734.410888671875 +52.018107045505 1336.588989257812 +53.013261826329 14264.303710937500 +54.009079203842 328540.562500000000 +55.005732946798 6038.434082031250 +55.011210209049 5773.483398437500 +55.054089450492 1883.920532226562 +55.933933351350 5941.799316406250 +56.049311183158 2529.910644531250 +56.941559341288 2177.731445312500 +59.049288422008 55833.332031250000 +60.044400478994 9188.863281250000 +61.039483771618 1336.615844726562 +63.997769089290 4226.595214843750 +64.004652574785 4312.662109375000 +67.028420902367 1685.132324218750 +68.011303574981 26639.857421875000 +68.993400384347 11132.456054687500 +69.044245603619 12842.139648437500 +72.936451870693 2092.438964843750 +73.064343001052 2004.000000000000 +76.485626827097 1932.002563476562 +79.020705537221 15479.782226562500 +80.048746552992 12934.649414062500 +81.936560826315 7849.174804687500 +82.996236710322 7697.570312500000 +87.043649221397 1392.278564453125 +87.054161695388 1495.958618164062 +89.506032483299 1554.000000000000 +90.488774891048 1551.744018554688 +91.052857733317 1701.434936523438 +95.951953010697 2094.000000000000 +97.967766546756 6595.530273437500 +109.942695624537 1327.000000000000 +113.961956344849 1877.000000000000 +114.090202311915 11113.386718750000 +118.085079269697 5461.000000000000 +122.095332793077 3096.000000000000 +122.962788239519 9551.916015625000 +123.089923877343 1592.000000000000 +130.158267685481 1374.000000000000 +136.020500147191 1906.429687500000 +141.089705751127 1398.031372070312 +141.111419699029 1374.918823242188 +141.935031405798 2215.528808593750 +141.957114961469 13636.359375000000 +147.090410388658 2596.000000000000 +149.021734118264 3900.000000000000 +149.042225044400 1717.679077148438 +151.095530836015 2392.175048828125 +151.109345923165 2675.036376953125 +155.069217138005 1392.010375976562 +155.972851416164 3798.715576171875 +158.152680730278 10054.000000000000 +161.095473046681 1550.000000000000 +164.142407569715 1467.709594726562 +170.094842381476 2189.805175781250 +173.079740417554 5427.904296875000 +178.157986956425 1455.000000000000 +179.105560744514 1912.301391601562 +182.960698176280 2000.407470703125 +186.016618789428 1896.000000000000 +186.220115257894 1974.000000000000 +194.116069304698 2583.000000000000 +195.121207806540 1998.303710937500 +198.184395565259 1695.000000000000 +201.982853397927 4906.000000000000 +217.007045852030 12703.000000000000 +217.105649597883 13317.726562500000 +218.109378650956 2113.981933593750 +219.093923189224 1382.400756835938 +234.033511361987 14162.000000000000 +235.036774500644 1342.000000000000 +239.087266669620 2910.000000000000 +242.282551973761 1561.000000000000 +245.038675382516 2489.000000000000 +246.861414583855 2664.000000000000 +250.998716978816 2090.000000000000 +262.065290180852 23768.000000000000 +263.068197519244 2928.000000000000 +276.081065166232 35016.000000000000 +277.084200131760 4404.000000000000 +278.078513434024 2183.000000000000 +279.092009717775 2217.000000000000 +281.049184165914 1367.000000000000 +284.163360412320 3532.000000000000 +289.121282596047 297520.000000000000 +290.123339528492 48851.796875000000 +291.118124278084 95531.000000000000 +292.120251426315 17101.046875000000 +293.123187582260 1858.065429687500 +303.104014775580 2693.449951171875 +303.190353825641 2785.502441406250 +304.119856155362 954170.000000000000 +304.858461688543 1629.946044921875 +304.974182520147 7187.607910156250 +305.110635941863 61549.015625000000 +306.110453215668 55678.074218750000 +307.111643085162 7091.700683593750 +310.120007901196 5493.854003906250 +320.106626078784 4025.000000000000 +326.094632546811 51218.675781250000 +327.006414911949 2851.898193359375 +327.096265128312 8263.424804687500 +328.091406924071 3217.697509765625 +329.003058211528 3429.933349609375 +330.205471949815 7747.000000000000 +331.207754653901 1796.000000000000 +342.067426751640 3267.000000000000 +349.169395269431 21267.000000000000 +350.172679880257 4154.271972656250 +351.168393055602 1571.000000000000 +372.098739562700 1670.002075195312 +372.148644610713 2317.465087890625 +389.045115150928 4473.000000000000 +391.043177396698 1663.000000000000 +404.036316278299 7850.000000000000 +405.039997913270 1931.000000000000 +424.359886173771 1591.000000000000 +445.117801993639 2038.000000000000 +500.275651903375 13340.000000000000 +501.278433801524 4082.000000000000 +502.285907017338 2013.566040039062 +505.851095535466 2281.000000000000 +536.163686089478 4281.000000000000 +537.165279310098 2275.000000000000 +538.161599212928 1446.000000000000 +542.322146689605 2319.235839843750 +544.336681001720 2203.000000000000 +546.913546060949 1480.000000000000 +549.965890540792 1571.727539062500 +592.225728725342 6278.000000000000 +593.229191819800 2109.000000000000 +594.222911870749 2943.707031250000 +607.216789747777 46858.000000000000 +608.219527953593 15482.000000000000 +609.215333724431 7397.000000000000 +610.196851071075 3575.000000000000 +611.184731787601 1662.000000000000 +612.221188935026 2560.000000000000 +613.225065362361 23067.000000000000 +614.226835965539 7388.000000000000 +615.223918934987 3328.000000000000 +623.150116137773 1311.609985351562 +623.211673074874 1404.509399414062 +629.198822367023 49161.000000000000 +630.201975789631 15060.724609375000 +631.197108322666 7602.103027343750 +632.199182275970 1787.000000000000 +707.142781768806 1359.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=677 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=677 experiment=9_0 +##scan 135 +##specref ms_run[1]:sample=1 period=1 cycle=677 experiment=9 +153.040452875418 45.000000000000 +168.987769199841 30.000000000000 +200.978500260693 45.000000000000 +201.986408200829 90.000000000000 +216.021280883061 45.000000000000 +217.007935267676 1656.000000000000 +217.048248955154 84.792404174805 +233.325135038396 30.000000000000 +234.035241177002 935.000000000000 +245.042500815810 120.000000000000 +262.067633856409 955.000000000000 +276.082454987034 1036.000000000000 +304.113438613875 3789.000000000000 +305.110750767950 75.000000000000 +>compound 1_0-678002--137--UNKNOWN +>parentmass 217.007207589124 +>charge 1 +>rt 448.957000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +217.007207589124 6332.419433593750 +>ms1peaks +52.005617027968 2841.486083984375 +53.013411271366 13567.883789062500 +54.009125331887 341665.812500000000 +55.005857415052 5900.790039062500 +55.011242701615 6013.953125000000 +55.054093292119 2035.055908203125 +55.933978586076 5672.338378906250 +56.049467099919 1695.441040039062 +56.941782308930 2173.337402343750 +59.049339198083 62878.703125000000 +60.044404001763 9862.614257812500 +61.039435521241 1719.998779296875 +63.997664239141 3450.597167968750 +64.005081384586 3958.136474609375 +68.011443914678 27040.419921875000 +68.993714467215 12520.464843750000 +69.007373071731 1388.107910156250 +69.044312866744 13073.230468750000 +72.936423004110 2084.000000000000 +73.063871079142 1705.000000000000 +76.485830845774 2577.000000000000 +79.020684296263 13782.132812500000 +80.048779775419 11186.997070312500 +81.936674853257 8327.656250000000 +82.996269546702 8040.201660156250 +89.506005127285 1468.281982421875 +90.489095167913 1675.000000000000 +95.951948147015 2520.515136718750 +97.967758472339 6678.626953125000 +102.090788355145 2027.477661132812 +113.962336972098 2071.000000000000 +114.090407289761 9387.833984375000 +118.085129231385 6116.000000000000 +122.095638138110 3776.030761718750 +122.962814871209 10117.168945312500 +123.090715093470 1657.501464843750 +136.020905158615 1394.424438476562 +140.067586645329 1617.045654296875 +141.112054526426 1383.640991210938 +141.935709702620 1911.949829101562 +141.957347460629 13581.779296875000 +147.090339739564 2374.998291015625 +149.022576244489 3994.022705078125 +151.095387083973 2392.279052734375 +151.109293023596 2750.114746093750 +155.069699172730 1332.009765625000 +155.972973853574 3810.662841796875 +158.152617650358 10434.000000000000 +159.154821868580 1369.000000000000 +161.095811541558 1615.000000000000 +170.094786893830 2397.479492187500 +170.116223095026 1563.129394531250 +173.079809386205 6290.747070312500 +178.157999558146 1344.694458007812 +179.105474980732 1898.194946289062 +182.961052201833 2004.073364257812 +186.220351226598 1623.000000000000 +193.157127136625 1493.409179687500 +194.115785614334 2955.000000000000 +195.120763129781 1823.166137695312 +198.184413101409 2214.000000000000 +201.984090601891 2436.000000000000 +217.007207589124 6332.419433593750 +217.105727151964 16770.736328125000 +218.108791440056 2512.000000000000 +234.033555067529 7474.000000000000 +239.087847702990 2936.000000000000 +242.283076836300 1598.000000000000 +245.039110357630 1466.000000000000 +246.860750264023 2469.000000000000 +249.183092518468 1366.967651367188 +250.999128212314 2641.000000000000 +252.995944883436 1376.000000000000 +262.065576474895 11528.000000000000 +263.068397905954 1693.000000000000 +276.080823895982 18533.000000000000 +277.084470217057 2604.243652343750 +279.093578782719 2100.000000000000 +281.049703566301 1340.000000000000 +284.163284328388 2755.000000000000 +288.245192514905 2240.408203125000 +289.124028104405 571675.000000000000 +289.974079344843 2398.387451171875 +290.020293351816 2510.571777343750 +290.123004833560 37005.632812500000 +291.118405903154 172664.062500000000 +292.120440247980 30711.750000000000 +293.123309031099 2511.000000000000 +303.103999271490 1878.000000000000 +303.190085777343 1857.193237304688 +304.115683834546 552400.000000000000 +304.984847835069 1705.556396484375 +305.107785187759 57481.210937500000 +306.110327480189 29213.000000000000 +307.112384326980 4304.000000000000 +310.120384968947 4593.269531250000 +311.105475064582 1824.000000000000 +320.107323506761 2737.000000000000 +326.094810667410 41008.000000000000 +327.006437528123 3347.260986328125 +327.096455636030 6753.961425781250 +328.092188803708 2930.000000000000 +329.003747738298 3355.000000000000 +330.205009985617 6046.367675781250 +331.208059597585 1436.000000000000 +342.068061155461 2814.000000000000 +349.170060952900 13874.000000000000 +350.172621024257 2607.730712890625 +372.148688883306 1405.186401367188 +389.044748240917 7650.000000000000 +390.047497559210 1913.000000000000 +391.042419990568 2801.000000000000 +392.068522384462 2797.000000000000 +394.066194691334 1609.439208984375 +404.036647250000 3756.000000000000 +424.362220661973 1680.073608398438 +445.118239809427 2256.000000000000 +457.032674519482 1580.000000000000 +468.387534165811 1625.361328125000 +487.228056299732 1735.000000000000 +500.275588301319 14065.000000000000 +501.278629401665 3579.000000000000 +502.286881001175 2107.000000000000 +505.851399270242 2207.884277343750 +531.255889309595 1828.000000000000 +536.162574795725 4348.000000000000 +537.164900413678 2412.000000000000 +538.160905924694 1840.207275390625 +542.321702796647 4110.075683593750 +543.325936834084 1425.000000000000 +544.336609702317 2008.000000000000 +546.912855890436 1498.000000000000 +592.225267665071 7023.000000000000 +593.153130472392 2079.229736328125 +593.228621623492 2593.859863281250 +594.223736830213 3021.337890625000 +607.216353924445 19371.000000000000 +608.219876548020 6018.000000000000 +609.216035675932 2735.843994140625 +610.184990477000 2845.000000000000 +612.185596819648 1643.000000000000 +613.224838309655 6730.896972656250 +614.227226894726 2411.000000000000 +629.198664613593 14632.000000000000 +630.201165251457 4128.000000000000 +631.197724705928 2446.000000000000 +639.156464406238 1485.000000000000 +641.154235888014 1515.855590820312 +654.147541437576 1594.000000000000 +692.150340948486 1581.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=678 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=678 experiment=2_0 +##scan 137 +##specref ms_run[1]:sample=1 period=1 cycle=678 experiment=2 +55.053770549188 165.000000000000 +55.062703601283 75.000000000000 +69.032891729293 30.000000000000 +73.063573376182 13.000000000000 +83.050237918201 90.000000000000 +111.040381238832 30.000000000000 +113.058204722879 30.000000000000 +113.066246072660 30.000000000000 +127.077459674406 30.000000000000 +145.081768679807 13.000000000000 +155.070709401933 60.000000000000 +201.980405377328 30.000000000000 +>compound 1_0-678004--139--UNKNOWN +>parentmass 320.107323506761 +>charge 1 +>rt 448.957000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +320.107323506761 2737.000000000000 +>ms1peaks +52.005617027968 2841.486083984375 +53.013411271366 13567.883789062500 +54.009125331887 341665.812500000000 +55.005857415052 5900.790039062500 +55.011242701615 6013.953125000000 +55.054093292119 2035.055908203125 +55.933978586076 5672.338378906250 +56.049467099919 1695.441040039062 +56.941782308930 2173.337402343750 +59.049339198083 62878.703125000000 +60.044404001763 9862.614257812500 +61.039435521241 1719.998779296875 +63.997664239141 3450.597167968750 +64.005081384586 3958.136474609375 +68.011443914678 27040.419921875000 +68.993714467215 12520.464843750000 +69.007373071731 1388.107910156250 +69.044312866744 13073.230468750000 +72.936423004110 2084.000000000000 +73.063871079142 1705.000000000000 +76.485830845774 2577.000000000000 +79.020684296263 13782.132812500000 +80.048779775419 11186.997070312500 +81.936674853257 8327.656250000000 +82.996269546702 8040.201660156250 +89.506005127285 1468.281982421875 +90.489095167913 1675.000000000000 +95.951948147015 2520.515136718750 +97.967758472339 6678.626953125000 +102.090788355145 2027.477661132812 +113.962336972098 2071.000000000000 +114.090407289761 9387.833984375000 +118.085129231385 6116.000000000000 +122.095638138110 3776.030761718750 +122.962814871209 10117.168945312500 +123.090715093470 1657.501464843750 +136.020905158615 1394.424438476562 +140.067586645329 1617.045654296875 +141.112054526426 1383.640991210938 +141.935709702620 1911.949829101562 +141.957347460629 13581.779296875000 +147.090339739564 2374.998291015625 +149.022576244489 3994.022705078125 +151.095387083973 2392.279052734375 +151.109293023596 2750.114746093750 +155.069699172730 1332.009765625000 +155.972973853574 3810.662841796875 +158.152617650358 10434.000000000000 +159.154821868580 1369.000000000000 +161.095811541558 1615.000000000000 +170.094786893830 2397.479492187500 +170.116223095026 1563.129394531250 +173.079809386205 6290.747070312500 +178.157999558146 1344.694458007812 +179.105474980732 1898.194946289062 +182.961052201833 2004.073364257812 +186.220351226598 1623.000000000000 +193.157127136625 1493.409179687500 +194.115785614334 2955.000000000000 +195.120763129781 1823.166137695312 +198.184413101409 2214.000000000000 +201.984090601891 2436.000000000000 +217.007207589124 6332.419433593750 +217.105727151964 16770.736328125000 +218.108791440056 2512.000000000000 +234.033555067529 7474.000000000000 +239.087847702990 2936.000000000000 +242.283076836300 1598.000000000000 +245.039110357630 1466.000000000000 +246.860750264023 2469.000000000000 +249.183092518468 1366.967651367188 +250.999128212314 2641.000000000000 +252.995944883436 1376.000000000000 +262.065576474895 11528.000000000000 +263.068397905954 1693.000000000000 +276.080823895982 18533.000000000000 +277.084470217057 2604.243652343750 +279.093578782719 2100.000000000000 +281.049703566301 1340.000000000000 +284.163284328388 2755.000000000000 +288.245192514905 2240.408203125000 +289.124028104405 571675.000000000000 +289.974079344843 2398.387451171875 +290.020293351816 2510.571777343750 +290.123004833560 37005.632812500000 +291.118405903154 172664.062500000000 +292.120440247980 30711.750000000000 +293.123309031099 2511.000000000000 +303.103999271490 1878.000000000000 +303.190085777343 1857.193237304688 +304.115683834546 552400.000000000000 +304.984847835069 1705.556396484375 +305.107785187759 57481.210937500000 +306.110327480189 29213.000000000000 +307.112384326980 4304.000000000000 +310.120384968947 4593.269531250000 +311.105475064582 1824.000000000000 +320.107323506761 2737.000000000000 +326.094810667410 41008.000000000000 +327.006437528123 3347.260986328125 +327.096455636030 6753.961425781250 +328.092188803708 2930.000000000000 +329.003747738298 3355.000000000000 +330.205009985617 6046.367675781250 +331.208059597585 1436.000000000000 +342.068061155461 2814.000000000000 +349.170060952900 13874.000000000000 +350.172621024257 2607.730712890625 +372.148688883306 1405.186401367188 +389.044748240917 7650.000000000000 +390.047497559210 1913.000000000000 +391.042419990568 2801.000000000000 +392.068522384462 2797.000000000000 +394.066194691334 1609.439208984375 +404.036647250000 3756.000000000000 +424.362220661973 1680.073608398438 +445.118239809427 2256.000000000000 +457.032674519482 1580.000000000000 +468.387534165811 1625.361328125000 +487.228056299732 1735.000000000000 +500.275588301319 14065.000000000000 +501.278629401665 3579.000000000000 +502.286881001175 2107.000000000000 +505.851399270242 2207.884277343750 +531.255889309595 1828.000000000000 +536.162574795725 4348.000000000000 +537.164900413678 2412.000000000000 +538.160905924694 1840.207275390625 +542.321702796647 4110.075683593750 +543.325936834084 1425.000000000000 +544.336609702317 2008.000000000000 +546.912855890436 1498.000000000000 +592.225267665071 7023.000000000000 +593.153130472392 2079.229736328125 +593.228621623492 2593.859863281250 +594.223736830213 3021.337890625000 +607.216353924445 19371.000000000000 +608.219876548020 6018.000000000000 +609.216035675932 2735.843994140625 +610.184990477000 2845.000000000000 +612.185596819648 1643.000000000000 +613.224838309655 6730.896972656250 +614.227226894726 2411.000000000000 +629.198664613593 14632.000000000000 +630.201165251457 4128.000000000000 +631.197724705928 2446.000000000000 +639.156464406238 1485.000000000000 +641.154235888014 1515.855590820312 +654.147541437576 1594.000000000000 +692.150340948486 1581.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=678 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=678 experiment=4_0 +##scan 139 +##specref ms_run[1]:sample=1 period=1 cycle=678 experiment=4 +116.067994325823 13.000000000000 +152.040659467198 30.000000000000 +152.046016143672 30.000000000000 +154.031536870134 33.489322662354 +154.045323699335 45.000000000000 +154.050699331502 30.000000000000 +171.047181497434 30.000000000000 +233.004738842438 90.000000000000 +>compound 1_0-678005--140--UNKNOWN +>parentmass 342.068061155461 +>charge 1 +>rt 448.957000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +342.068061155461 2814.000000000000 +>ms1peaks +52.005617027968 2841.486083984375 +53.013411271366 13567.883789062500 +54.009125331887 341665.812500000000 +55.005857415052 5900.790039062500 +55.011242701615 6013.953125000000 +55.054093292119 2035.055908203125 +55.933978586076 5672.338378906250 +56.049467099919 1695.441040039062 +56.941782308930 2173.337402343750 +59.049339198083 62878.703125000000 +60.044404001763 9862.614257812500 +61.039435521241 1719.998779296875 +63.997664239141 3450.597167968750 +64.005081384586 3958.136474609375 +68.011443914678 27040.419921875000 +68.993714467215 12520.464843750000 +69.007373071731 1388.107910156250 +69.044312866744 13073.230468750000 +72.936423004110 2084.000000000000 +73.063871079142 1705.000000000000 +76.485830845774 2577.000000000000 +79.020684296263 13782.132812500000 +80.048779775419 11186.997070312500 +81.936674853257 8327.656250000000 +82.996269546702 8040.201660156250 +89.506005127285 1468.281982421875 +90.489095167913 1675.000000000000 +95.951948147015 2520.515136718750 +97.967758472339 6678.626953125000 +102.090788355145 2027.477661132812 +113.962336972098 2071.000000000000 +114.090407289761 9387.833984375000 +118.085129231385 6116.000000000000 +122.095638138110 3776.030761718750 +122.962814871209 10117.168945312500 +123.090715093470 1657.501464843750 +136.020905158615 1394.424438476562 +140.067586645329 1617.045654296875 +141.112054526426 1383.640991210938 +141.935709702620 1911.949829101562 +141.957347460629 13581.779296875000 +147.090339739564 2374.998291015625 +149.022576244489 3994.022705078125 +151.095387083973 2392.279052734375 +151.109293023596 2750.114746093750 +155.069699172730 1332.009765625000 +155.972973853574 3810.662841796875 +158.152617650358 10434.000000000000 +159.154821868580 1369.000000000000 +161.095811541558 1615.000000000000 +170.094786893830 2397.479492187500 +170.116223095026 1563.129394531250 +173.079809386205 6290.747070312500 +178.157999558146 1344.694458007812 +179.105474980732 1898.194946289062 +182.961052201833 2004.073364257812 +186.220351226598 1623.000000000000 +193.157127136625 1493.409179687500 +194.115785614334 2955.000000000000 +195.120763129781 1823.166137695312 +198.184413101409 2214.000000000000 +201.984090601891 2436.000000000000 +217.007207589124 6332.419433593750 +217.105727151964 16770.736328125000 +218.108791440056 2512.000000000000 +234.033555067529 7474.000000000000 +239.087847702990 2936.000000000000 +242.283076836300 1598.000000000000 +245.039110357630 1466.000000000000 +246.860750264023 2469.000000000000 +249.183092518468 1366.967651367188 +250.999128212314 2641.000000000000 +252.995944883436 1376.000000000000 +262.065576474895 11528.000000000000 +263.068397905954 1693.000000000000 +276.080823895982 18533.000000000000 +277.084470217057 2604.243652343750 +279.093578782719 2100.000000000000 +281.049703566301 1340.000000000000 +284.163284328388 2755.000000000000 +288.245192514905 2240.408203125000 +289.124028104405 571675.000000000000 +289.974079344843 2398.387451171875 +290.020293351816 2510.571777343750 +290.123004833560 37005.632812500000 +291.118405903154 172664.062500000000 +292.120440247980 30711.750000000000 +293.123309031099 2511.000000000000 +303.103999271490 1878.000000000000 +303.190085777343 1857.193237304688 +304.115683834546 552400.000000000000 +304.984847835069 1705.556396484375 +305.107785187759 57481.210937500000 +306.110327480189 29213.000000000000 +307.112384326980 4304.000000000000 +310.120384968947 4593.269531250000 +311.105475064582 1824.000000000000 +320.107323506761 2737.000000000000 +326.094810667410 41008.000000000000 +327.006437528123 3347.260986328125 +327.096455636030 6753.961425781250 +328.092188803708 2930.000000000000 +329.003747738298 3355.000000000000 +330.205009985617 6046.367675781250 +331.208059597585 1436.000000000000 +342.068061155461 2814.000000000000 +349.170060952900 13874.000000000000 +350.172621024257 2607.730712890625 +372.148688883306 1405.186401367188 +389.044748240917 7650.000000000000 +390.047497559210 1913.000000000000 +391.042419990568 2801.000000000000 +392.068522384462 2797.000000000000 +394.066194691334 1609.439208984375 +404.036647250000 3756.000000000000 +424.362220661973 1680.073608398438 +445.118239809427 2256.000000000000 +457.032674519482 1580.000000000000 +468.387534165811 1625.361328125000 +487.228056299732 1735.000000000000 +500.275588301319 14065.000000000000 +501.278629401665 3579.000000000000 +502.286881001175 2107.000000000000 +505.851399270242 2207.884277343750 +531.255889309595 1828.000000000000 +536.162574795725 4348.000000000000 +537.164900413678 2412.000000000000 +538.160905924694 1840.207275390625 +542.321702796647 4110.075683593750 +543.325936834084 1425.000000000000 +544.336609702317 2008.000000000000 +546.912855890436 1498.000000000000 +592.225267665071 7023.000000000000 +593.153130472392 2079.229736328125 +593.228621623492 2593.859863281250 +594.223736830213 3021.337890625000 +607.216353924445 19371.000000000000 +608.219876548020 6018.000000000000 +609.216035675932 2735.843994140625 +610.184990477000 2845.000000000000 +612.185596819648 1643.000000000000 +613.224838309655 6730.896972656250 +614.227226894726 2411.000000000000 +629.198664613593 14632.000000000000 +630.201165251457 4128.000000000000 +631.197724705928 2446.000000000000 +639.156464406238 1485.000000000000 +641.154235888014 1515.855590820312 +654.147541437576 1594.000000000000 +692.150340948486 1581.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=678 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=678 experiment=5_0 +##scan 140 +##specref ms_run[1]:sample=1 period=1 cycle=678 experiment=5 +117.031244584965 13.000000000000 +204.836070820128 13.000000000000 +281.174358492574 13.000000000000 +>compound 1_0-678006--141--UNKNOWN +>parentmass 389.044748240917 +>charge 1 +>rt 448.957000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +389.044748240917 7650.000000000000 +>ms1peaks +52.005617027968 2841.486083984375 +53.013411271366 13567.883789062500 +54.009125331887 341665.812500000000 +55.005857415052 5900.790039062500 +55.011242701615 6013.953125000000 +55.054093292119 2035.055908203125 +55.933978586076 5672.338378906250 +56.049467099919 1695.441040039062 +56.941782308930 2173.337402343750 +59.049339198083 62878.703125000000 +60.044404001763 9862.614257812500 +61.039435521241 1719.998779296875 +63.997664239141 3450.597167968750 +64.005081384586 3958.136474609375 +68.011443914678 27040.419921875000 +68.993714467215 12520.464843750000 +69.007373071731 1388.107910156250 +69.044312866744 13073.230468750000 +72.936423004110 2084.000000000000 +73.063871079142 1705.000000000000 +76.485830845774 2577.000000000000 +79.020684296263 13782.132812500000 +80.048779775419 11186.997070312500 +81.936674853257 8327.656250000000 +82.996269546702 8040.201660156250 +89.506005127285 1468.281982421875 +90.489095167913 1675.000000000000 +95.951948147015 2520.515136718750 +97.967758472339 6678.626953125000 +102.090788355145 2027.477661132812 +113.962336972098 2071.000000000000 +114.090407289761 9387.833984375000 +118.085129231385 6116.000000000000 +122.095638138110 3776.030761718750 +122.962814871209 10117.168945312500 +123.090715093470 1657.501464843750 +136.020905158615 1394.424438476562 +140.067586645329 1617.045654296875 +141.112054526426 1383.640991210938 +141.935709702620 1911.949829101562 +141.957347460629 13581.779296875000 +147.090339739564 2374.998291015625 +149.022576244489 3994.022705078125 +151.095387083973 2392.279052734375 +151.109293023596 2750.114746093750 +155.069699172730 1332.009765625000 +155.972973853574 3810.662841796875 +158.152617650358 10434.000000000000 +159.154821868580 1369.000000000000 +161.095811541558 1615.000000000000 +170.094786893830 2397.479492187500 +170.116223095026 1563.129394531250 +173.079809386205 6290.747070312500 +178.157999558146 1344.694458007812 +179.105474980732 1898.194946289062 +182.961052201833 2004.073364257812 +186.220351226598 1623.000000000000 +193.157127136625 1493.409179687500 +194.115785614334 2955.000000000000 +195.120763129781 1823.166137695312 +198.184413101409 2214.000000000000 +201.984090601891 2436.000000000000 +217.007207589124 6332.419433593750 +217.105727151964 16770.736328125000 +218.108791440056 2512.000000000000 +234.033555067529 7474.000000000000 +239.087847702990 2936.000000000000 +242.283076836300 1598.000000000000 +245.039110357630 1466.000000000000 +246.860750264023 2469.000000000000 +249.183092518468 1366.967651367188 +250.999128212314 2641.000000000000 +252.995944883436 1376.000000000000 +262.065576474895 11528.000000000000 +263.068397905954 1693.000000000000 +276.080823895982 18533.000000000000 +277.084470217057 2604.243652343750 +279.093578782719 2100.000000000000 +281.049703566301 1340.000000000000 +284.163284328388 2755.000000000000 +288.245192514905 2240.408203125000 +289.124028104405 571675.000000000000 +289.974079344843 2398.387451171875 +290.020293351816 2510.571777343750 +290.123004833560 37005.632812500000 +291.118405903154 172664.062500000000 +292.120440247980 30711.750000000000 +293.123309031099 2511.000000000000 +303.103999271490 1878.000000000000 +303.190085777343 1857.193237304688 +304.115683834546 552400.000000000000 +304.984847835069 1705.556396484375 +305.107785187759 57481.210937500000 +306.110327480189 29213.000000000000 +307.112384326980 4304.000000000000 +310.120384968947 4593.269531250000 +311.105475064582 1824.000000000000 +320.107323506761 2737.000000000000 +326.094810667410 41008.000000000000 +327.006437528123 3347.260986328125 +327.096455636030 6753.961425781250 +328.092188803708 2930.000000000000 +329.003747738298 3355.000000000000 +330.205009985617 6046.367675781250 +331.208059597585 1436.000000000000 +342.068061155461 2814.000000000000 +349.170060952900 13874.000000000000 +350.172621024257 2607.730712890625 +372.148688883306 1405.186401367188 +389.044748240917 7650.000000000000 +390.047497559210 1913.000000000000 +391.042419990568 2801.000000000000 +392.068522384462 2797.000000000000 +394.066194691334 1609.439208984375 +404.036647250000 3756.000000000000 +424.362220661973 1680.073608398438 +445.118239809427 2256.000000000000 +457.032674519482 1580.000000000000 +468.387534165811 1625.361328125000 +487.228056299732 1735.000000000000 +500.275588301319 14065.000000000000 +501.278629401665 3579.000000000000 +502.286881001175 2107.000000000000 +505.851399270242 2207.884277343750 +531.255889309595 1828.000000000000 +536.162574795725 4348.000000000000 +537.164900413678 2412.000000000000 +538.160905924694 1840.207275390625 +542.321702796647 4110.075683593750 +543.325936834084 1425.000000000000 +544.336609702317 2008.000000000000 +546.912855890436 1498.000000000000 +592.225267665071 7023.000000000000 +593.153130472392 2079.229736328125 +593.228621623492 2593.859863281250 +594.223736830213 3021.337890625000 +607.216353924445 19371.000000000000 +608.219876548020 6018.000000000000 +609.216035675932 2735.843994140625 +610.184990477000 2845.000000000000 +612.185596819648 1643.000000000000 +613.224838309655 6730.896972656250 +614.227226894726 2411.000000000000 +629.198664613593 14632.000000000000 +630.201165251457 4128.000000000000 +631.197724705928 2446.000000000000 +639.156464406238 1485.000000000000 +641.154235888014 1515.855590820312 +654.147541437576 1594.000000000000 +692.150340948486 1581.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=678 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=678 experiment=6_0 +##scan 141 +##specref ms_run[1]:sample=1 period=1 cycle=678 experiment=6 +147.065378887369 13.000000000000 +227.036994181213 45.000000000000 +310.083116377010 30.000000000000 +324.764157414996 13.000000000000 +>compound 1_0-678007--142--UNKNOWN +>parentmass 394.066194691334 +>charge 1 +>rt 448.957000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +394.066194691334 1609.439208984375 +>ms1peaks +52.005617027968 2841.486083984375 +53.013411271366 13567.883789062500 +54.009125331887 341665.812500000000 +55.005857415052 5900.790039062500 +55.011242701615 6013.953125000000 +55.054093292119 2035.055908203125 +55.933978586076 5672.338378906250 +56.049467099919 1695.441040039062 +56.941782308930 2173.337402343750 +59.049339198083 62878.703125000000 +60.044404001763 9862.614257812500 +61.039435521241 1719.998779296875 +63.997664239141 3450.597167968750 +64.005081384586 3958.136474609375 +68.011443914678 27040.419921875000 +68.993714467215 12520.464843750000 +69.007373071731 1388.107910156250 +69.044312866744 13073.230468750000 +72.936423004110 2084.000000000000 +73.063871079142 1705.000000000000 +76.485830845774 2577.000000000000 +79.020684296263 13782.132812500000 +80.048779775419 11186.997070312500 +81.936674853257 8327.656250000000 +82.996269546702 8040.201660156250 +89.506005127285 1468.281982421875 +90.489095167913 1675.000000000000 +95.951948147015 2520.515136718750 +97.967758472339 6678.626953125000 +102.090788355145 2027.477661132812 +113.962336972098 2071.000000000000 +114.090407289761 9387.833984375000 +118.085129231385 6116.000000000000 +122.095638138110 3776.030761718750 +122.962814871209 10117.168945312500 +123.090715093470 1657.501464843750 +136.020905158615 1394.424438476562 +140.067586645329 1617.045654296875 +141.112054526426 1383.640991210938 +141.935709702620 1911.949829101562 +141.957347460629 13581.779296875000 +147.090339739564 2374.998291015625 +149.022576244489 3994.022705078125 +151.095387083973 2392.279052734375 +151.109293023596 2750.114746093750 +155.069699172730 1332.009765625000 +155.972973853574 3810.662841796875 +158.152617650358 10434.000000000000 +159.154821868580 1369.000000000000 +161.095811541558 1615.000000000000 +170.094786893830 2397.479492187500 +170.116223095026 1563.129394531250 +173.079809386205 6290.747070312500 +178.157999558146 1344.694458007812 +179.105474980732 1898.194946289062 +182.961052201833 2004.073364257812 +186.220351226598 1623.000000000000 +193.157127136625 1493.409179687500 +194.115785614334 2955.000000000000 +195.120763129781 1823.166137695312 +198.184413101409 2214.000000000000 +201.984090601891 2436.000000000000 +217.007207589124 6332.419433593750 +217.105727151964 16770.736328125000 +218.108791440056 2512.000000000000 +234.033555067529 7474.000000000000 +239.087847702990 2936.000000000000 +242.283076836300 1598.000000000000 +245.039110357630 1466.000000000000 +246.860750264023 2469.000000000000 +249.183092518468 1366.967651367188 +250.999128212314 2641.000000000000 +252.995944883436 1376.000000000000 +262.065576474895 11528.000000000000 +263.068397905954 1693.000000000000 +276.080823895982 18533.000000000000 +277.084470217057 2604.243652343750 +279.093578782719 2100.000000000000 +281.049703566301 1340.000000000000 +284.163284328388 2755.000000000000 +288.245192514905 2240.408203125000 +289.124028104405 571675.000000000000 +289.974079344843 2398.387451171875 +290.020293351816 2510.571777343750 +290.123004833560 37005.632812500000 +291.118405903154 172664.062500000000 +292.120440247980 30711.750000000000 +293.123309031099 2511.000000000000 +303.103999271490 1878.000000000000 +303.190085777343 1857.193237304688 +304.115683834546 552400.000000000000 +304.984847835069 1705.556396484375 +305.107785187759 57481.210937500000 +306.110327480189 29213.000000000000 +307.112384326980 4304.000000000000 +310.120384968947 4593.269531250000 +311.105475064582 1824.000000000000 +320.107323506761 2737.000000000000 +326.094810667410 41008.000000000000 +327.006437528123 3347.260986328125 +327.096455636030 6753.961425781250 +328.092188803708 2930.000000000000 +329.003747738298 3355.000000000000 +330.205009985617 6046.367675781250 +331.208059597585 1436.000000000000 +342.068061155461 2814.000000000000 +349.170060952900 13874.000000000000 +350.172621024257 2607.730712890625 +372.148688883306 1405.186401367188 +389.044748240917 7650.000000000000 +390.047497559210 1913.000000000000 +391.042419990568 2801.000000000000 +392.068522384462 2797.000000000000 +394.066194691334 1609.439208984375 +404.036647250000 3756.000000000000 +424.362220661973 1680.073608398438 +445.118239809427 2256.000000000000 +457.032674519482 1580.000000000000 +468.387534165811 1625.361328125000 +487.228056299732 1735.000000000000 +500.275588301319 14065.000000000000 +501.278629401665 3579.000000000000 +502.286881001175 2107.000000000000 +505.851399270242 2207.884277343750 +531.255889309595 1828.000000000000 +536.162574795725 4348.000000000000 +537.164900413678 2412.000000000000 +538.160905924694 1840.207275390625 +542.321702796647 4110.075683593750 +543.325936834084 1425.000000000000 +544.336609702317 2008.000000000000 +546.912855890436 1498.000000000000 +592.225267665071 7023.000000000000 +593.153130472392 2079.229736328125 +593.228621623492 2593.859863281250 +594.223736830213 3021.337890625000 +607.216353924445 19371.000000000000 +608.219876548020 6018.000000000000 +609.216035675932 2735.843994140625 +610.184990477000 2845.000000000000 +612.185596819648 1643.000000000000 +613.224838309655 6730.896972656250 +614.227226894726 2411.000000000000 +629.198664613593 14632.000000000000 +630.201165251457 4128.000000000000 +631.197724705928 2446.000000000000 +639.156464406238 1485.000000000000 +641.154235888014 1515.855590820312 +654.147541437576 1594.000000000000 +692.150340948486 1581.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=678 experiment=7 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=678 experiment=7_0 +##scan 142 +##specref ms_run[1]:sample=1 period=1 cycle=678 experiment=7 +254.958236956059 105.000000000000 +255.951602007493 75.000000000000 +298.002723174906 90.000000000000 +299.007158363016 45.000000000000 +326.029464078052 180.000000000000 +353.038478610358 180.000000000000 +>compound 1_0-678008--143--UNKNOWN +>parentmass 457.032674519482 +>charge 1 +>rt 448.957000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +457.032674519482 1580.000000000000 +>ms1peaks +52.005617027968 2841.486083984375 +53.013411271366 13567.883789062500 +54.009125331887 341665.812500000000 +55.005857415052 5900.790039062500 +55.011242701615 6013.953125000000 +55.054093292119 2035.055908203125 +55.933978586076 5672.338378906250 +56.049467099919 1695.441040039062 +56.941782308930 2173.337402343750 +59.049339198083 62878.703125000000 +60.044404001763 9862.614257812500 +61.039435521241 1719.998779296875 +63.997664239141 3450.597167968750 +64.005081384586 3958.136474609375 +68.011443914678 27040.419921875000 +68.993714467215 12520.464843750000 +69.007373071731 1388.107910156250 +69.044312866744 13073.230468750000 +72.936423004110 2084.000000000000 +73.063871079142 1705.000000000000 +76.485830845774 2577.000000000000 +79.020684296263 13782.132812500000 +80.048779775419 11186.997070312500 +81.936674853257 8327.656250000000 +82.996269546702 8040.201660156250 +89.506005127285 1468.281982421875 +90.489095167913 1675.000000000000 +95.951948147015 2520.515136718750 +97.967758472339 6678.626953125000 +102.090788355145 2027.477661132812 +113.962336972098 2071.000000000000 +114.090407289761 9387.833984375000 +118.085129231385 6116.000000000000 +122.095638138110 3776.030761718750 +122.962814871209 10117.168945312500 +123.090715093470 1657.501464843750 +136.020905158615 1394.424438476562 +140.067586645329 1617.045654296875 +141.112054526426 1383.640991210938 +141.935709702620 1911.949829101562 +141.957347460629 13581.779296875000 +147.090339739564 2374.998291015625 +149.022576244489 3994.022705078125 +151.095387083973 2392.279052734375 +151.109293023596 2750.114746093750 +155.069699172730 1332.009765625000 +155.972973853574 3810.662841796875 +158.152617650358 10434.000000000000 +159.154821868580 1369.000000000000 +161.095811541558 1615.000000000000 +170.094786893830 2397.479492187500 +170.116223095026 1563.129394531250 +173.079809386205 6290.747070312500 +178.157999558146 1344.694458007812 +179.105474980732 1898.194946289062 +182.961052201833 2004.073364257812 +186.220351226598 1623.000000000000 +193.157127136625 1493.409179687500 +194.115785614334 2955.000000000000 +195.120763129781 1823.166137695312 +198.184413101409 2214.000000000000 +201.984090601891 2436.000000000000 +217.007207589124 6332.419433593750 +217.105727151964 16770.736328125000 +218.108791440056 2512.000000000000 +234.033555067529 7474.000000000000 +239.087847702990 2936.000000000000 +242.283076836300 1598.000000000000 +245.039110357630 1466.000000000000 +246.860750264023 2469.000000000000 +249.183092518468 1366.967651367188 +250.999128212314 2641.000000000000 +252.995944883436 1376.000000000000 +262.065576474895 11528.000000000000 +263.068397905954 1693.000000000000 +276.080823895982 18533.000000000000 +277.084470217057 2604.243652343750 +279.093578782719 2100.000000000000 +281.049703566301 1340.000000000000 +284.163284328388 2755.000000000000 +288.245192514905 2240.408203125000 +289.124028104405 571675.000000000000 +289.974079344843 2398.387451171875 +290.020293351816 2510.571777343750 +290.123004833560 37005.632812500000 +291.118405903154 172664.062500000000 +292.120440247980 30711.750000000000 +293.123309031099 2511.000000000000 +303.103999271490 1878.000000000000 +303.190085777343 1857.193237304688 +304.115683834546 552400.000000000000 +304.984847835069 1705.556396484375 +305.107785187759 57481.210937500000 +306.110327480189 29213.000000000000 +307.112384326980 4304.000000000000 +310.120384968947 4593.269531250000 +311.105475064582 1824.000000000000 +320.107323506761 2737.000000000000 +326.094810667410 41008.000000000000 +327.006437528123 3347.260986328125 +327.096455636030 6753.961425781250 +328.092188803708 2930.000000000000 +329.003747738298 3355.000000000000 +330.205009985617 6046.367675781250 +331.208059597585 1436.000000000000 +342.068061155461 2814.000000000000 +349.170060952900 13874.000000000000 +350.172621024257 2607.730712890625 +372.148688883306 1405.186401367188 +389.044748240917 7650.000000000000 +390.047497559210 1913.000000000000 +391.042419990568 2801.000000000000 +392.068522384462 2797.000000000000 +394.066194691334 1609.439208984375 +404.036647250000 3756.000000000000 +424.362220661973 1680.073608398438 +445.118239809427 2256.000000000000 +457.032674519482 1580.000000000000 +468.387534165811 1625.361328125000 +487.228056299732 1735.000000000000 +500.275588301319 14065.000000000000 +501.278629401665 3579.000000000000 +502.286881001175 2107.000000000000 +505.851399270242 2207.884277343750 +531.255889309595 1828.000000000000 +536.162574795725 4348.000000000000 +537.164900413678 2412.000000000000 +538.160905924694 1840.207275390625 +542.321702796647 4110.075683593750 +543.325936834084 1425.000000000000 +544.336609702317 2008.000000000000 +546.912855890436 1498.000000000000 +592.225267665071 7023.000000000000 +593.153130472392 2079.229736328125 +593.228621623492 2593.859863281250 +594.223736830213 3021.337890625000 +607.216353924445 19371.000000000000 +608.219876548020 6018.000000000000 +609.216035675932 2735.843994140625 +610.184990477000 2845.000000000000 +612.185596819648 1643.000000000000 +613.224838309655 6730.896972656250 +614.227226894726 2411.000000000000 +629.198664613593 14632.000000000000 +630.201165251457 4128.000000000000 +631.197724705928 2446.000000000000 +639.156464406238 1485.000000000000 +641.154235888014 1515.855590820312 +654.147541437576 1594.000000000000 +692.150340948486 1581.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=678 experiment=8 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=678 experiment=8_0 +##scan 143 +##specref ms_run[1]:sample=1 period=1 cycle=678 experiment=8 +293.059125762703 13.000000000000 +336.030023024875 13.000000000000 +>compound 1_0-678009--144--UNKNOWN +>parentmass 500.275588301319 +>charge 1 +>rt 448.957000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +500.275588301319 14065.000000000000 +501.278629401665 3579.000000000000 +>ms1peaks +52.005617027968 2841.486083984375 +53.013411271366 13567.883789062500 +54.009125331887 341665.812500000000 +55.005857415052 5900.790039062500 +55.011242701615 6013.953125000000 +55.054093292119 2035.055908203125 +55.933978586076 5672.338378906250 +56.049467099919 1695.441040039062 +56.941782308930 2173.337402343750 +59.049339198083 62878.703125000000 +60.044404001763 9862.614257812500 +61.039435521241 1719.998779296875 +63.997664239141 3450.597167968750 +64.005081384586 3958.136474609375 +68.011443914678 27040.419921875000 +68.993714467215 12520.464843750000 +69.007373071731 1388.107910156250 +69.044312866744 13073.230468750000 +72.936423004110 2084.000000000000 +73.063871079142 1705.000000000000 +76.485830845774 2577.000000000000 +79.020684296263 13782.132812500000 +80.048779775419 11186.997070312500 +81.936674853257 8327.656250000000 +82.996269546702 8040.201660156250 +89.506005127285 1468.281982421875 +90.489095167913 1675.000000000000 +95.951948147015 2520.515136718750 +97.967758472339 6678.626953125000 +102.090788355145 2027.477661132812 +113.962336972098 2071.000000000000 +114.090407289761 9387.833984375000 +118.085129231385 6116.000000000000 +122.095638138110 3776.030761718750 +122.962814871209 10117.168945312500 +123.090715093470 1657.501464843750 +136.020905158615 1394.424438476562 +140.067586645329 1617.045654296875 +141.112054526426 1383.640991210938 +141.935709702620 1911.949829101562 +141.957347460629 13581.779296875000 +147.090339739564 2374.998291015625 +149.022576244489 3994.022705078125 +151.095387083973 2392.279052734375 +151.109293023596 2750.114746093750 +155.069699172730 1332.009765625000 +155.972973853574 3810.662841796875 +158.152617650358 10434.000000000000 +159.154821868580 1369.000000000000 +161.095811541558 1615.000000000000 +170.094786893830 2397.479492187500 +170.116223095026 1563.129394531250 +173.079809386205 6290.747070312500 +178.157999558146 1344.694458007812 +179.105474980732 1898.194946289062 +182.961052201833 2004.073364257812 +186.220351226598 1623.000000000000 +193.157127136625 1493.409179687500 +194.115785614334 2955.000000000000 +195.120763129781 1823.166137695312 +198.184413101409 2214.000000000000 +201.984090601891 2436.000000000000 +217.007207589124 6332.419433593750 +217.105727151964 16770.736328125000 +218.108791440056 2512.000000000000 +234.033555067529 7474.000000000000 +239.087847702990 2936.000000000000 +242.283076836300 1598.000000000000 +245.039110357630 1466.000000000000 +246.860750264023 2469.000000000000 +249.183092518468 1366.967651367188 +250.999128212314 2641.000000000000 +252.995944883436 1376.000000000000 +262.065576474895 11528.000000000000 +263.068397905954 1693.000000000000 +276.080823895982 18533.000000000000 +277.084470217057 2604.243652343750 +279.093578782719 2100.000000000000 +281.049703566301 1340.000000000000 +284.163284328388 2755.000000000000 +288.245192514905 2240.408203125000 +289.124028104405 571675.000000000000 +289.974079344843 2398.387451171875 +290.020293351816 2510.571777343750 +290.123004833560 37005.632812500000 +291.118405903154 172664.062500000000 +292.120440247980 30711.750000000000 +293.123309031099 2511.000000000000 +303.103999271490 1878.000000000000 +303.190085777343 1857.193237304688 +304.115683834546 552400.000000000000 +304.984847835069 1705.556396484375 +305.107785187759 57481.210937500000 +306.110327480189 29213.000000000000 +307.112384326980 4304.000000000000 +310.120384968947 4593.269531250000 +311.105475064582 1824.000000000000 +320.107323506761 2737.000000000000 +326.094810667410 41008.000000000000 +327.006437528123 3347.260986328125 +327.096455636030 6753.961425781250 +328.092188803708 2930.000000000000 +329.003747738298 3355.000000000000 +330.205009985617 6046.367675781250 +331.208059597585 1436.000000000000 +342.068061155461 2814.000000000000 +349.170060952900 13874.000000000000 +350.172621024257 2607.730712890625 +372.148688883306 1405.186401367188 +389.044748240917 7650.000000000000 +390.047497559210 1913.000000000000 +391.042419990568 2801.000000000000 +392.068522384462 2797.000000000000 +394.066194691334 1609.439208984375 +404.036647250000 3756.000000000000 +424.362220661973 1680.073608398438 +445.118239809427 2256.000000000000 +457.032674519482 1580.000000000000 +468.387534165811 1625.361328125000 +487.228056299732 1735.000000000000 +500.275588301319 14065.000000000000 +501.278629401665 3579.000000000000 +502.286881001175 2107.000000000000 +505.851399270242 2207.884277343750 +531.255889309595 1828.000000000000 +536.162574795725 4348.000000000000 +537.164900413678 2412.000000000000 +538.160905924694 1840.207275390625 +542.321702796647 4110.075683593750 +543.325936834084 1425.000000000000 +544.336609702317 2008.000000000000 +546.912855890436 1498.000000000000 +592.225267665071 7023.000000000000 +593.153130472392 2079.229736328125 +593.228621623492 2593.859863281250 +594.223736830213 3021.337890625000 +607.216353924445 19371.000000000000 +608.219876548020 6018.000000000000 +609.216035675932 2735.843994140625 +610.184990477000 2845.000000000000 +612.185596819648 1643.000000000000 +613.224838309655 6730.896972656250 +614.227226894726 2411.000000000000 +629.198664613593 14632.000000000000 +630.201165251457 4128.000000000000 +631.197724705928 2446.000000000000 +639.156464406238 1485.000000000000 +641.154235888014 1515.855590820312 +654.147541437576 1594.000000000000 +692.150340948486 1581.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=678 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=678 experiment=9_0 +##scan 144 +##specref ms_run[1]:sample=1 period=1 cycle=678 experiment=9 +79.056384212954 45.000000000000 +81.069211264472 44.869815826416 +81.076571530558 45.000000000000 +91.057498053349 30.000000000000 +105.072419796595 45.000000000000 +107.085263633216 45.000000000000 +129.054801444946 30.000000000000 +129.066440679839 30.000000000000 +131.081144700445 45.000000000000 +131.093442147470 45.000000000000 +133.100101592679 30.000000000000 +143.082581139460 30.000000000000 +201.161969960646 45.000000000000 +267.209991546144 90.000000000000 +328.255727701500 60.000000000000 +359.257313473260 502.000000000000 +>compound 1_0-679002--146--UNKNOWN +>parentmass 359.254768414607 +>charge 1 +>rt 449.887000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005301361246 2635.370605468750 +53.013407830788 14972.322265625000 +53.850215108883 1462.445190429688 +54.009291031996 338002.343750000000 +55.005715055501 5339.218261718750 +55.011197452783 5987.995117187500 +55.054283542890 2010.225585937500 +55.934105260881 5390.229003906250 +56.049496813396 1202.560913085938 +56.942045823261 2152.776367187500 +59.049421321471 48890.000000000000 +60.044303057183 9066.708007812500 +61.039172597031 2022.421997070312 +63.997299000407 3551.983154296875 +64.004823026729 4602.770019531250 +68.011419973746 27438.244140625000 +68.993453980072 11868.745117187500 +69.007541092297 1262.775512695312 +69.044528644052 13840.256835937500 +72.936548748232 2394.190429687500 +73.064192635706 2001.631225585938 +76.485968828895 1990.000000000000 +79.020673940612 14110.697265625000 +80.048733107804 11139.164062500000 +81.936957703768 7951.655273437500 +82.996258525347 7931.102050781250 +87.054069438849 1366.423706054688 +89.505817293813 1204.000000000000 +90.488742164793 1641.000000000000 +91.052764858515 1537.000000000000 +95.952050544998 2052.000000000000 +97.967665131144 6196.378906250000 +100.075095471512 1333.000000000000 +102.090316949580 2147.288330078125 +109.942412506017 1241.570068359375 +113.962458674848 2150.000000000000 +114.090679763433 10269.053710937500 +118.085140356246 6320.000000000000 +122.095172988930 3031.000000000000 +122.962786063022 9361.452148437500 +123.091201091683 1786.770996093750 +130.157517147424 1269.000000000000 +136.020464885105 1593.957397460938 +140.067387863518 1371.000000000000 +141.090084092559 1371.163940429688 +141.111625958412 1205.952270507812 +141.957344208167 14243.574218750000 +147.090120537191 3106.168212890625 +149.022266612100 4392.313964843750 +151.095065461641 2578.011718750000 +151.110461811602 2665.633789062500 +155.068829024235 1293.404052734375 +155.105603625514 1337.714843750000 +155.973029482816 4308.484375000000 +158.152826290915 10898.000000000000 +159.153571764499 1795.810424804688 +161.095373821916 1630.000000000000 +164.142318567662 1417.434692382812 +170.095313707982 2597.814941406250 +173.079939446366 6537.484863281250 +174.990091086945 1399.835693359375 +175.122326183025 1245.199340820312 +178.157497857370 1706.920166015625 +179.105070173912 1797.347778320312 +182.960213475136 2296.791748046875 +186.220324957036 1981.000000000000 +193.156503702470 1452.181030273438 +194.115624604541 2921.891113281250 +195.120937456382 1997.992919921875 +198.183848140452 1869.000000000000 +211.168101945574 1342.000000000000 +217.007432709798 2381.000000000000 +217.106110064748 19755.308593750000 +218.109094180053 2712.000000000000 +219.093473137464 1458.834228515625 +224.126621043557 1201.000000000000 +228.194389609794 1438.000000000000 +234.033283111319 2556.000000000000 +239.088619200185 3193.870361328125 +242.282596076115 1679.000000000000 +246.861483292156 3002.000000000000 +249.182593670922 1316.760498046875 +250.177639197715 1330.183593750000 +250.998765899209 2664.000000000000 +252.996823062001 1594.000000000000 +256.226468287941 1385.013427734375 +262.065106289011 4773.000000000000 +267.171205984646 1309.222412109375 +276.080725326928 7179.902832031250 +279.092257440619 2195.064453125000 +281.049894448697 1376.000000000000 +284.163353036362 2219.000000000000 +288.244513695094 1834.647216796875 +289.122939601486 479924.500000000000 +289.975858102028 1628.922973632812 +290.017073213232 1944.275634765625 +290.123276174305 45766.847656250000 +291.117781986290 152525.421875000000 +292.120054877663 26562.263671875000 +293.123552241730 2301.061279296875 +304.112901568851 200715.000000000000 +305.114305321306 29911.351562500000 +306.109716008443 11889.069335937500 +307.112175533629 1498.871093750000 +310.120039460115 2149.000000000000 +311.103750967643 1669.000000000000 +326.094169843769 20434.000000000000 +327.007171816990 2960.000000000000 +327.095583905555 3181.000000000000 +329.003320790834 3605.000000000000 +330.204958958646 4623.000000000000 +342.067821584495 1658.000000000000 +349.169582861039 6213.000000000000 +389.044583272152 6794.000000000000 +390.046858764703 1567.000000000000 +391.041761974480 2290.000000000000 +392.066883133660 3099.000000000000 +394.065312832328 2486.617431640625 +404.037150622340 1529.000000000000 +424.361136942239 1694.768188476562 +445.118020079459 2317.756103515625 +457.032355906111 1522.000000000000 +468.387588372118 1866.000000000000 +487.229205176248 1448.410644531250 +500.274794010574 12308.630859375000 +501.279022038205 3531.000000000000 +502.288756406048 1876.000000000000 +505.850709798444 1954.000000000000 +512.414703910442 1315.000000000000 +524.367767193391 1357.000000000000 +531.254607075587 1803.000000000000 +534.976359054533 1231.000000000000 +536.163271700398 4749.000000000000 +537.164413741742 2667.000000000000 +538.159786574791 1604.404663085938 +542.321491870211 6176.098632812500 +543.325733781487 1949.511596679688 +544.336050342091 2231.000000000000 +546.913662924833 1357.989746093750 +575.281457486142 1360.000000000000 +592.225182049818 2920.000000000000 +594.221446454610 1300.000000000000 +607.216533855689 3750.000000000000 +608.218684069541 1223.000000000000 +610.182588733515 2141.000000000000 +612.180853834742 1221.000000000000 +613.222615907063 1575.000000000000 +629.199036711105 2847.000000000000 +639.156476507882 1773.000000000000 +641.152138883811 2127.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=679 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=679 experiment=2_0 +##scan 146 +##specref ms_run[1]:sample=1 period=1 cycle=679 experiment=2 +145.098520654277 13.000000000000 +179.101415082787 13.000000000000 +213.029276173280 13.000000000000 +>compound 1_0-679003--147--UNKNOWN +>parentmass 394.065312832328 +>charge 1 +>rt 449.887000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +394.065312832328 2486.617431640625 +>ms1peaks +52.005301361246 2635.370605468750 +53.013407830788 14972.322265625000 +53.850215108883 1462.445190429688 +54.009291031996 338002.343750000000 +55.005715055501 5339.218261718750 +55.011197452783 5987.995117187500 +55.054283542890 2010.225585937500 +55.934105260881 5390.229003906250 +56.049496813396 1202.560913085938 +56.942045823261 2152.776367187500 +59.049421321471 48890.000000000000 +60.044303057183 9066.708007812500 +61.039172597031 2022.421997070312 +63.997299000407 3551.983154296875 +64.004823026729 4602.770019531250 +68.011419973746 27438.244140625000 +68.993453980072 11868.745117187500 +69.007541092297 1262.775512695312 +69.044528644052 13840.256835937500 +72.936548748232 2394.190429687500 +73.064192635706 2001.631225585938 +76.485968828895 1990.000000000000 +79.020673940612 14110.697265625000 +80.048733107804 11139.164062500000 +81.936957703768 7951.655273437500 +82.996258525347 7931.102050781250 +87.054069438849 1366.423706054688 +89.505817293813 1204.000000000000 +90.488742164793 1641.000000000000 +91.052764858515 1537.000000000000 +95.952050544998 2052.000000000000 +97.967665131144 6196.378906250000 +100.075095471512 1333.000000000000 +102.090316949580 2147.288330078125 +109.942412506017 1241.570068359375 +113.962458674848 2150.000000000000 +114.090679763433 10269.053710937500 +118.085140356246 6320.000000000000 +122.095172988930 3031.000000000000 +122.962786063022 9361.452148437500 +123.091201091683 1786.770996093750 +130.157517147424 1269.000000000000 +136.020464885105 1593.957397460938 +140.067387863518 1371.000000000000 +141.090084092559 1371.163940429688 +141.111625958412 1205.952270507812 +141.957344208167 14243.574218750000 +147.090120537191 3106.168212890625 +149.022266612100 4392.313964843750 +151.095065461641 2578.011718750000 +151.110461811602 2665.633789062500 +155.068829024235 1293.404052734375 +155.105603625514 1337.714843750000 +155.973029482816 4308.484375000000 +158.152826290915 10898.000000000000 +159.153571764499 1795.810424804688 +161.095373821916 1630.000000000000 +164.142318567662 1417.434692382812 +170.095313707982 2597.814941406250 +173.079939446366 6537.484863281250 +174.990091086945 1399.835693359375 +175.122326183025 1245.199340820312 +178.157497857370 1706.920166015625 +179.105070173912 1797.347778320312 +182.960213475136 2296.791748046875 +186.220324957036 1981.000000000000 +193.156503702470 1452.181030273438 +194.115624604541 2921.891113281250 +195.120937456382 1997.992919921875 +198.183848140452 1869.000000000000 +211.168101945574 1342.000000000000 +217.007432709798 2381.000000000000 +217.106110064748 19755.308593750000 +218.109094180053 2712.000000000000 +219.093473137464 1458.834228515625 +224.126621043557 1201.000000000000 +228.194389609794 1438.000000000000 +234.033283111319 2556.000000000000 +239.088619200185 3193.870361328125 +242.282596076115 1679.000000000000 +246.861483292156 3002.000000000000 +249.182593670922 1316.760498046875 +250.177639197715 1330.183593750000 +250.998765899209 2664.000000000000 +252.996823062001 1594.000000000000 +256.226468287941 1385.013427734375 +262.065106289011 4773.000000000000 +267.171205984646 1309.222412109375 +276.080725326928 7179.902832031250 +279.092257440619 2195.064453125000 +281.049894448697 1376.000000000000 +284.163353036362 2219.000000000000 +288.244513695094 1834.647216796875 +289.122939601486 479924.500000000000 +289.975858102028 1628.922973632812 +290.017073213232 1944.275634765625 +290.123276174305 45766.847656250000 +291.117781986290 152525.421875000000 +292.120054877663 26562.263671875000 +293.123552241730 2301.061279296875 +304.112901568851 200715.000000000000 +305.114305321306 29911.351562500000 +306.109716008443 11889.069335937500 +307.112175533629 1498.871093750000 +310.120039460115 2149.000000000000 +311.103750967643 1669.000000000000 +326.094169843769 20434.000000000000 +327.007171816990 2960.000000000000 +327.095583905555 3181.000000000000 +329.003320790834 3605.000000000000 +330.204958958646 4623.000000000000 +342.067821584495 1658.000000000000 +349.169582861039 6213.000000000000 +389.044583272152 6794.000000000000 +390.046858764703 1567.000000000000 +391.041761974480 2290.000000000000 +392.066883133660 3099.000000000000 +394.065312832328 2486.617431640625 +404.037150622340 1529.000000000000 +424.361136942239 1694.768188476562 +445.118020079459 2317.756103515625 +457.032355906111 1522.000000000000 +468.387588372118 1866.000000000000 +487.229205176248 1448.410644531250 +500.274794010574 12308.630859375000 +501.279022038205 3531.000000000000 +502.288756406048 1876.000000000000 +505.850709798444 1954.000000000000 +512.414703910442 1315.000000000000 +524.367767193391 1357.000000000000 +531.254607075587 1803.000000000000 +534.976359054533 1231.000000000000 +536.163271700398 4749.000000000000 +537.164413741742 2667.000000000000 +538.159786574791 1604.404663085938 +542.321491870211 6176.098632812500 +543.325733781487 1949.511596679688 +544.336050342091 2231.000000000000 +546.913662924833 1357.989746093750 +575.281457486142 1360.000000000000 +592.225182049818 2920.000000000000 +594.221446454610 1300.000000000000 +607.216533855689 3750.000000000000 +608.218684069541 1223.000000000000 +610.182588733515 2141.000000000000 +612.180853834742 1221.000000000000 +613.222615907063 1575.000000000000 +629.199036711105 2847.000000000000 +639.156476507882 1773.000000000000 +641.152138883811 2127.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=679 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=679 experiment=3_0 +##scan 147 +##specref ms_run[1]:sample=1 period=1 cycle=679 experiment=3 +116.060195383881 13.000000000000 +133.956781854337 13.000000000000 +254.956090804211 90.000000000000 +255.947187824541 90.000000000000 +271.001957700237 75.000000000000 +289.013361114643 30.000000000000 +296.996454597909 30.000000000000 +299.001872443292 45.000000000000 +299.024386003896 45.000000000000 +326.033051378114 105.000000000000 +352.041694893001 45.000000000000 +353.037471747100 75.000000000000 +>compound 1_0-679004--148--UNKNOWN +>parentmass 468.387588372118 +>charge 1 +>rt 449.887000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +468.387588372118 1866.000000000000 +>ms1peaks +52.005301361246 2635.370605468750 +53.013407830788 14972.322265625000 +53.850215108883 1462.445190429688 +54.009291031996 338002.343750000000 +55.005715055501 5339.218261718750 +55.011197452783 5987.995117187500 +55.054283542890 2010.225585937500 +55.934105260881 5390.229003906250 +56.049496813396 1202.560913085938 +56.942045823261 2152.776367187500 +59.049421321471 48890.000000000000 +60.044303057183 9066.708007812500 +61.039172597031 2022.421997070312 +63.997299000407 3551.983154296875 +64.004823026729 4602.770019531250 +68.011419973746 27438.244140625000 +68.993453980072 11868.745117187500 +69.007541092297 1262.775512695312 +69.044528644052 13840.256835937500 +72.936548748232 2394.190429687500 +73.064192635706 2001.631225585938 +76.485968828895 1990.000000000000 +79.020673940612 14110.697265625000 +80.048733107804 11139.164062500000 +81.936957703768 7951.655273437500 +82.996258525347 7931.102050781250 +87.054069438849 1366.423706054688 +89.505817293813 1204.000000000000 +90.488742164793 1641.000000000000 +91.052764858515 1537.000000000000 +95.952050544998 2052.000000000000 +97.967665131144 6196.378906250000 +100.075095471512 1333.000000000000 +102.090316949580 2147.288330078125 +109.942412506017 1241.570068359375 +113.962458674848 2150.000000000000 +114.090679763433 10269.053710937500 +118.085140356246 6320.000000000000 +122.095172988930 3031.000000000000 +122.962786063022 9361.452148437500 +123.091201091683 1786.770996093750 +130.157517147424 1269.000000000000 +136.020464885105 1593.957397460938 +140.067387863518 1371.000000000000 +141.090084092559 1371.163940429688 +141.111625958412 1205.952270507812 +141.957344208167 14243.574218750000 +147.090120537191 3106.168212890625 +149.022266612100 4392.313964843750 +151.095065461641 2578.011718750000 +151.110461811602 2665.633789062500 +155.068829024235 1293.404052734375 +155.105603625514 1337.714843750000 +155.973029482816 4308.484375000000 +158.152826290915 10898.000000000000 +159.153571764499 1795.810424804688 +161.095373821916 1630.000000000000 +164.142318567662 1417.434692382812 +170.095313707982 2597.814941406250 +173.079939446366 6537.484863281250 +174.990091086945 1399.835693359375 +175.122326183025 1245.199340820312 +178.157497857370 1706.920166015625 +179.105070173912 1797.347778320312 +182.960213475136 2296.791748046875 +186.220324957036 1981.000000000000 +193.156503702470 1452.181030273438 +194.115624604541 2921.891113281250 +195.120937456382 1997.992919921875 +198.183848140452 1869.000000000000 +211.168101945574 1342.000000000000 +217.007432709798 2381.000000000000 +217.106110064748 19755.308593750000 +218.109094180053 2712.000000000000 +219.093473137464 1458.834228515625 +224.126621043557 1201.000000000000 +228.194389609794 1438.000000000000 +234.033283111319 2556.000000000000 +239.088619200185 3193.870361328125 +242.282596076115 1679.000000000000 +246.861483292156 3002.000000000000 +249.182593670922 1316.760498046875 +250.177639197715 1330.183593750000 +250.998765899209 2664.000000000000 +252.996823062001 1594.000000000000 +256.226468287941 1385.013427734375 +262.065106289011 4773.000000000000 +267.171205984646 1309.222412109375 +276.080725326928 7179.902832031250 +279.092257440619 2195.064453125000 +281.049894448697 1376.000000000000 +284.163353036362 2219.000000000000 +288.244513695094 1834.647216796875 +289.122939601486 479924.500000000000 +289.975858102028 1628.922973632812 +290.017073213232 1944.275634765625 +290.123276174305 45766.847656250000 +291.117781986290 152525.421875000000 +292.120054877663 26562.263671875000 +293.123552241730 2301.061279296875 +304.112901568851 200715.000000000000 +305.114305321306 29911.351562500000 +306.109716008443 11889.069335937500 +307.112175533629 1498.871093750000 +310.120039460115 2149.000000000000 +311.103750967643 1669.000000000000 +326.094169843769 20434.000000000000 +327.007171816990 2960.000000000000 +327.095583905555 3181.000000000000 +329.003320790834 3605.000000000000 +330.204958958646 4623.000000000000 +342.067821584495 1658.000000000000 +349.169582861039 6213.000000000000 +389.044583272152 6794.000000000000 +390.046858764703 1567.000000000000 +391.041761974480 2290.000000000000 +392.066883133660 3099.000000000000 +394.065312832328 2486.617431640625 +404.037150622340 1529.000000000000 +424.361136942239 1694.768188476562 +445.118020079459 2317.756103515625 +457.032355906111 1522.000000000000 +468.387588372118 1866.000000000000 +487.229205176248 1448.410644531250 +500.274794010574 12308.630859375000 +501.279022038205 3531.000000000000 +502.288756406048 1876.000000000000 +505.850709798444 1954.000000000000 +512.414703910442 1315.000000000000 +524.367767193391 1357.000000000000 +531.254607075587 1803.000000000000 +534.976359054533 1231.000000000000 +536.163271700398 4749.000000000000 +537.164413741742 2667.000000000000 +538.159786574791 1604.404663085938 +542.321491870211 6176.098632812500 +543.325733781487 1949.511596679688 +544.336050342091 2231.000000000000 +546.913662924833 1357.989746093750 +575.281457486142 1360.000000000000 +592.225182049818 2920.000000000000 +594.221446454610 1300.000000000000 +607.216533855689 3750.000000000000 +608.218684069541 1223.000000000000 +610.182588733515 2141.000000000000 +612.180853834742 1221.000000000000 +613.222615907063 1575.000000000000 +629.199036711105 2847.000000000000 +639.156476507882 1773.000000000000 +641.152138883811 2127.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=679 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=679 experiment=4_0 +##scan 148 +##specref ms_run[1]:sample=1 period=1 cycle=679 experiment=4 +184.076906914627 45.000000000000 +233.039621516749 13.000000000000 +414.895128709882 13.000000000000 +468.230181004119 30.000000000000 +>compound 1_0-679005--149--UNKNOWN +>parentmass 487.229205176248 +>charge 1 +>rt 449.887000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +487.229205176248 1448.410644531250 +>ms1peaks +52.005301361246 2635.370605468750 +53.013407830788 14972.322265625000 +53.850215108883 1462.445190429688 +54.009291031996 338002.343750000000 +55.005715055501 5339.218261718750 +55.011197452783 5987.995117187500 +55.054283542890 2010.225585937500 +55.934105260881 5390.229003906250 +56.049496813396 1202.560913085938 +56.942045823261 2152.776367187500 +59.049421321471 48890.000000000000 +60.044303057183 9066.708007812500 +61.039172597031 2022.421997070312 +63.997299000407 3551.983154296875 +64.004823026729 4602.770019531250 +68.011419973746 27438.244140625000 +68.993453980072 11868.745117187500 +69.007541092297 1262.775512695312 +69.044528644052 13840.256835937500 +72.936548748232 2394.190429687500 +73.064192635706 2001.631225585938 +76.485968828895 1990.000000000000 +79.020673940612 14110.697265625000 +80.048733107804 11139.164062500000 +81.936957703768 7951.655273437500 +82.996258525347 7931.102050781250 +87.054069438849 1366.423706054688 +89.505817293813 1204.000000000000 +90.488742164793 1641.000000000000 +91.052764858515 1537.000000000000 +95.952050544998 2052.000000000000 +97.967665131144 6196.378906250000 +100.075095471512 1333.000000000000 +102.090316949580 2147.288330078125 +109.942412506017 1241.570068359375 +113.962458674848 2150.000000000000 +114.090679763433 10269.053710937500 +118.085140356246 6320.000000000000 +122.095172988930 3031.000000000000 +122.962786063022 9361.452148437500 +123.091201091683 1786.770996093750 +130.157517147424 1269.000000000000 +136.020464885105 1593.957397460938 +140.067387863518 1371.000000000000 +141.090084092559 1371.163940429688 +141.111625958412 1205.952270507812 +141.957344208167 14243.574218750000 +147.090120537191 3106.168212890625 +149.022266612100 4392.313964843750 +151.095065461641 2578.011718750000 +151.110461811602 2665.633789062500 +155.068829024235 1293.404052734375 +155.105603625514 1337.714843750000 +155.973029482816 4308.484375000000 +158.152826290915 10898.000000000000 +159.153571764499 1795.810424804688 +161.095373821916 1630.000000000000 +164.142318567662 1417.434692382812 +170.095313707982 2597.814941406250 +173.079939446366 6537.484863281250 +174.990091086945 1399.835693359375 +175.122326183025 1245.199340820312 +178.157497857370 1706.920166015625 +179.105070173912 1797.347778320312 +182.960213475136 2296.791748046875 +186.220324957036 1981.000000000000 +193.156503702470 1452.181030273438 +194.115624604541 2921.891113281250 +195.120937456382 1997.992919921875 +198.183848140452 1869.000000000000 +211.168101945574 1342.000000000000 +217.007432709798 2381.000000000000 +217.106110064748 19755.308593750000 +218.109094180053 2712.000000000000 +219.093473137464 1458.834228515625 +224.126621043557 1201.000000000000 +228.194389609794 1438.000000000000 +234.033283111319 2556.000000000000 +239.088619200185 3193.870361328125 +242.282596076115 1679.000000000000 +246.861483292156 3002.000000000000 +249.182593670922 1316.760498046875 +250.177639197715 1330.183593750000 +250.998765899209 2664.000000000000 +252.996823062001 1594.000000000000 +256.226468287941 1385.013427734375 +262.065106289011 4773.000000000000 +267.171205984646 1309.222412109375 +276.080725326928 7179.902832031250 +279.092257440619 2195.064453125000 +281.049894448697 1376.000000000000 +284.163353036362 2219.000000000000 +288.244513695094 1834.647216796875 +289.122939601486 479924.500000000000 +289.975858102028 1628.922973632812 +290.017073213232 1944.275634765625 +290.123276174305 45766.847656250000 +291.117781986290 152525.421875000000 +292.120054877663 26562.263671875000 +293.123552241730 2301.061279296875 +304.112901568851 200715.000000000000 +305.114305321306 29911.351562500000 +306.109716008443 11889.069335937500 +307.112175533629 1498.871093750000 +310.120039460115 2149.000000000000 +311.103750967643 1669.000000000000 +326.094169843769 20434.000000000000 +327.007171816990 2960.000000000000 +327.095583905555 3181.000000000000 +329.003320790834 3605.000000000000 +330.204958958646 4623.000000000000 +342.067821584495 1658.000000000000 +349.169582861039 6213.000000000000 +389.044583272152 6794.000000000000 +390.046858764703 1567.000000000000 +391.041761974480 2290.000000000000 +392.066883133660 3099.000000000000 +394.065312832328 2486.617431640625 +404.037150622340 1529.000000000000 +424.361136942239 1694.768188476562 +445.118020079459 2317.756103515625 +457.032355906111 1522.000000000000 +468.387588372118 1866.000000000000 +487.229205176248 1448.410644531250 +500.274794010574 12308.630859375000 +501.279022038205 3531.000000000000 +502.288756406048 1876.000000000000 +505.850709798444 1954.000000000000 +512.414703910442 1315.000000000000 +524.367767193391 1357.000000000000 +531.254607075587 1803.000000000000 +534.976359054533 1231.000000000000 +536.163271700398 4749.000000000000 +537.164413741742 2667.000000000000 +538.159786574791 1604.404663085938 +542.321491870211 6176.098632812500 +543.325733781487 1949.511596679688 +544.336050342091 2231.000000000000 +546.913662924833 1357.989746093750 +575.281457486142 1360.000000000000 +592.225182049818 2920.000000000000 +594.221446454610 1300.000000000000 +607.216533855689 3750.000000000000 +608.218684069541 1223.000000000000 +610.182588733515 2141.000000000000 +612.180853834742 1221.000000000000 +613.222615907063 1575.000000000000 +629.199036711105 2847.000000000000 +639.156476507882 1773.000000000000 +641.152138883811 2127.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=679 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=679 experiment=5_0 +##scan 149 +##specref ms_run[1]:sample=1 period=1 cycle=679 experiment=5 +487.224417696555 105.000000000000 +>compound 1_0-679006--150--UNKNOWN +>parentmass 534.976359054533 +>charge 1 +>rt 449.887000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +534.976359054533 1231.000000000000 +>ms1peaks +52.005301361246 2635.370605468750 +53.013407830788 14972.322265625000 +53.850215108883 1462.445190429688 +54.009291031996 338002.343750000000 +55.005715055501 5339.218261718750 +55.011197452783 5987.995117187500 +55.054283542890 2010.225585937500 +55.934105260881 5390.229003906250 +56.049496813396 1202.560913085938 +56.942045823261 2152.776367187500 +59.049421321471 48890.000000000000 +60.044303057183 9066.708007812500 +61.039172597031 2022.421997070312 +63.997299000407 3551.983154296875 +64.004823026729 4602.770019531250 +68.011419973746 27438.244140625000 +68.993453980072 11868.745117187500 +69.007541092297 1262.775512695312 +69.044528644052 13840.256835937500 +72.936548748232 2394.190429687500 +73.064192635706 2001.631225585938 +76.485968828895 1990.000000000000 +79.020673940612 14110.697265625000 +80.048733107804 11139.164062500000 +81.936957703768 7951.655273437500 +82.996258525347 7931.102050781250 +87.054069438849 1366.423706054688 +89.505817293813 1204.000000000000 +90.488742164793 1641.000000000000 +91.052764858515 1537.000000000000 +95.952050544998 2052.000000000000 +97.967665131144 6196.378906250000 +100.075095471512 1333.000000000000 +102.090316949580 2147.288330078125 +109.942412506017 1241.570068359375 +113.962458674848 2150.000000000000 +114.090679763433 10269.053710937500 +118.085140356246 6320.000000000000 +122.095172988930 3031.000000000000 +122.962786063022 9361.452148437500 +123.091201091683 1786.770996093750 +130.157517147424 1269.000000000000 +136.020464885105 1593.957397460938 +140.067387863518 1371.000000000000 +141.090084092559 1371.163940429688 +141.111625958412 1205.952270507812 +141.957344208167 14243.574218750000 +147.090120537191 3106.168212890625 +149.022266612100 4392.313964843750 +151.095065461641 2578.011718750000 +151.110461811602 2665.633789062500 +155.068829024235 1293.404052734375 +155.105603625514 1337.714843750000 +155.973029482816 4308.484375000000 +158.152826290915 10898.000000000000 +159.153571764499 1795.810424804688 +161.095373821916 1630.000000000000 +164.142318567662 1417.434692382812 +170.095313707982 2597.814941406250 +173.079939446366 6537.484863281250 +174.990091086945 1399.835693359375 +175.122326183025 1245.199340820312 +178.157497857370 1706.920166015625 +179.105070173912 1797.347778320312 +182.960213475136 2296.791748046875 +186.220324957036 1981.000000000000 +193.156503702470 1452.181030273438 +194.115624604541 2921.891113281250 +195.120937456382 1997.992919921875 +198.183848140452 1869.000000000000 +211.168101945574 1342.000000000000 +217.007432709798 2381.000000000000 +217.106110064748 19755.308593750000 +218.109094180053 2712.000000000000 +219.093473137464 1458.834228515625 +224.126621043557 1201.000000000000 +228.194389609794 1438.000000000000 +234.033283111319 2556.000000000000 +239.088619200185 3193.870361328125 +242.282596076115 1679.000000000000 +246.861483292156 3002.000000000000 +249.182593670922 1316.760498046875 +250.177639197715 1330.183593750000 +250.998765899209 2664.000000000000 +252.996823062001 1594.000000000000 +256.226468287941 1385.013427734375 +262.065106289011 4773.000000000000 +267.171205984646 1309.222412109375 +276.080725326928 7179.902832031250 +279.092257440619 2195.064453125000 +281.049894448697 1376.000000000000 +284.163353036362 2219.000000000000 +288.244513695094 1834.647216796875 +289.122939601486 479924.500000000000 +289.975858102028 1628.922973632812 +290.017073213232 1944.275634765625 +290.123276174305 45766.847656250000 +291.117781986290 152525.421875000000 +292.120054877663 26562.263671875000 +293.123552241730 2301.061279296875 +304.112901568851 200715.000000000000 +305.114305321306 29911.351562500000 +306.109716008443 11889.069335937500 +307.112175533629 1498.871093750000 +310.120039460115 2149.000000000000 +311.103750967643 1669.000000000000 +326.094169843769 20434.000000000000 +327.007171816990 2960.000000000000 +327.095583905555 3181.000000000000 +329.003320790834 3605.000000000000 +330.204958958646 4623.000000000000 +342.067821584495 1658.000000000000 +349.169582861039 6213.000000000000 +389.044583272152 6794.000000000000 +390.046858764703 1567.000000000000 +391.041761974480 2290.000000000000 +392.066883133660 3099.000000000000 +394.065312832328 2486.617431640625 +404.037150622340 1529.000000000000 +424.361136942239 1694.768188476562 +445.118020079459 2317.756103515625 +457.032355906111 1522.000000000000 +468.387588372118 1866.000000000000 +487.229205176248 1448.410644531250 +500.274794010574 12308.630859375000 +501.279022038205 3531.000000000000 +502.288756406048 1876.000000000000 +505.850709798444 1954.000000000000 +512.414703910442 1315.000000000000 +524.367767193391 1357.000000000000 +531.254607075587 1803.000000000000 +534.976359054533 1231.000000000000 +536.163271700398 4749.000000000000 +537.164413741742 2667.000000000000 +538.159786574791 1604.404663085938 +542.321491870211 6176.098632812500 +543.325733781487 1949.511596679688 +544.336050342091 2231.000000000000 +546.913662924833 1357.989746093750 +575.281457486142 1360.000000000000 +592.225182049818 2920.000000000000 +594.221446454610 1300.000000000000 +607.216533855689 3750.000000000000 +608.218684069541 1223.000000000000 +610.182588733515 2141.000000000000 +612.180853834742 1221.000000000000 +613.222615907063 1575.000000000000 +629.199036711105 2847.000000000000 +639.156476507882 1773.000000000000 +641.152138883811 2127.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=679 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=679 experiment=6_0 +##scan 150 +##specref ms_run[1]:sample=1 period=1 cycle=679 experiment=6 +349.144478065452 13.000000000000 +>compound 1_0-679007--151--UNKNOWN +>parentmass 543.325733781487 +>charge 1 +>rt 449.887000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +543.325733781487 1949.511596679688 +>ms1peaks +52.005301361246 2635.370605468750 +53.013407830788 14972.322265625000 +53.850215108883 1462.445190429688 +54.009291031996 338002.343750000000 +55.005715055501 5339.218261718750 +55.011197452783 5987.995117187500 +55.054283542890 2010.225585937500 +55.934105260881 5390.229003906250 +56.049496813396 1202.560913085938 +56.942045823261 2152.776367187500 +59.049421321471 48890.000000000000 +60.044303057183 9066.708007812500 +61.039172597031 2022.421997070312 +63.997299000407 3551.983154296875 +64.004823026729 4602.770019531250 +68.011419973746 27438.244140625000 +68.993453980072 11868.745117187500 +69.007541092297 1262.775512695312 +69.044528644052 13840.256835937500 +72.936548748232 2394.190429687500 +73.064192635706 2001.631225585938 +76.485968828895 1990.000000000000 +79.020673940612 14110.697265625000 +80.048733107804 11139.164062500000 +81.936957703768 7951.655273437500 +82.996258525347 7931.102050781250 +87.054069438849 1366.423706054688 +89.505817293813 1204.000000000000 +90.488742164793 1641.000000000000 +91.052764858515 1537.000000000000 +95.952050544998 2052.000000000000 +97.967665131144 6196.378906250000 +100.075095471512 1333.000000000000 +102.090316949580 2147.288330078125 +109.942412506017 1241.570068359375 +113.962458674848 2150.000000000000 +114.090679763433 10269.053710937500 +118.085140356246 6320.000000000000 +122.095172988930 3031.000000000000 +122.962786063022 9361.452148437500 +123.091201091683 1786.770996093750 +130.157517147424 1269.000000000000 +136.020464885105 1593.957397460938 +140.067387863518 1371.000000000000 +141.090084092559 1371.163940429688 +141.111625958412 1205.952270507812 +141.957344208167 14243.574218750000 +147.090120537191 3106.168212890625 +149.022266612100 4392.313964843750 +151.095065461641 2578.011718750000 +151.110461811602 2665.633789062500 +155.068829024235 1293.404052734375 +155.105603625514 1337.714843750000 +155.973029482816 4308.484375000000 +158.152826290915 10898.000000000000 +159.153571764499 1795.810424804688 +161.095373821916 1630.000000000000 +164.142318567662 1417.434692382812 +170.095313707982 2597.814941406250 +173.079939446366 6537.484863281250 +174.990091086945 1399.835693359375 +175.122326183025 1245.199340820312 +178.157497857370 1706.920166015625 +179.105070173912 1797.347778320312 +182.960213475136 2296.791748046875 +186.220324957036 1981.000000000000 +193.156503702470 1452.181030273438 +194.115624604541 2921.891113281250 +195.120937456382 1997.992919921875 +198.183848140452 1869.000000000000 +211.168101945574 1342.000000000000 +217.007432709798 2381.000000000000 +217.106110064748 19755.308593750000 +218.109094180053 2712.000000000000 +219.093473137464 1458.834228515625 +224.126621043557 1201.000000000000 +228.194389609794 1438.000000000000 +234.033283111319 2556.000000000000 +239.088619200185 3193.870361328125 +242.282596076115 1679.000000000000 +246.861483292156 3002.000000000000 +249.182593670922 1316.760498046875 +250.177639197715 1330.183593750000 +250.998765899209 2664.000000000000 +252.996823062001 1594.000000000000 +256.226468287941 1385.013427734375 +262.065106289011 4773.000000000000 +267.171205984646 1309.222412109375 +276.080725326928 7179.902832031250 +279.092257440619 2195.064453125000 +281.049894448697 1376.000000000000 +284.163353036362 2219.000000000000 +288.244513695094 1834.647216796875 +289.122939601486 479924.500000000000 +289.975858102028 1628.922973632812 +290.017073213232 1944.275634765625 +290.123276174305 45766.847656250000 +291.117781986290 152525.421875000000 +292.120054877663 26562.263671875000 +293.123552241730 2301.061279296875 +304.112901568851 200715.000000000000 +305.114305321306 29911.351562500000 +306.109716008443 11889.069335937500 +307.112175533629 1498.871093750000 +310.120039460115 2149.000000000000 +311.103750967643 1669.000000000000 +326.094169843769 20434.000000000000 +327.007171816990 2960.000000000000 +327.095583905555 3181.000000000000 +329.003320790834 3605.000000000000 +330.204958958646 4623.000000000000 +342.067821584495 1658.000000000000 +349.169582861039 6213.000000000000 +389.044583272152 6794.000000000000 +390.046858764703 1567.000000000000 +391.041761974480 2290.000000000000 +392.066883133660 3099.000000000000 +394.065312832328 2486.617431640625 +404.037150622340 1529.000000000000 +424.361136942239 1694.768188476562 +445.118020079459 2317.756103515625 +457.032355906111 1522.000000000000 +468.387588372118 1866.000000000000 +487.229205176248 1448.410644531250 +500.274794010574 12308.630859375000 +501.279022038205 3531.000000000000 +502.288756406048 1876.000000000000 +505.850709798444 1954.000000000000 +512.414703910442 1315.000000000000 +524.367767193391 1357.000000000000 +531.254607075587 1803.000000000000 +534.976359054533 1231.000000000000 +536.163271700398 4749.000000000000 +537.164413741742 2667.000000000000 +538.159786574791 1604.404663085938 +542.321491870211 6176.098632812500 +543.325733781487 1949.511596679688 +544.336050342091 2231.000000000000 +546.913662924833 1357.989746093750 +575.281457486142 1360.000000000000 +592.225182049818 2920.000000000000 +594.221446454610 1300.000000000000 +607.216533855689 3750.000000000000 +608.218684069541 1223.000000000000 +610.182588733515 2141.000000000000 +612.180853834742 1221.000000000000 +613.222615907063 1575.000000000000 +629.199036711105 2847.000000000000 +639.156476507882 1773.000000000000 +641.152138883811 2127.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=679 experiment=7 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=679 experiment=7_0 +##scan 151 +##specref ms_run[1]:sample=1 period=1 cycle=679 experiment=7 +184.070268175769 195.000000000000 +185.083517560082 45.000000000000 +>compound 1_0-679008--152--UNKNOWN +>parentmass 575.281457486142 +>charge 1 +>rt 449.887000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +575.281457486142 1360.000000000000 +>ms1peaks +52.005301361246 2635.370605468750 +53.013407830788 14972.322265625000 +53.850215108883 1462.445190429688 +54.009291031996 338002.343750000000 +55.005715055501 5339.218261718750 +55.011197452783 5987.995117187500 +55.054283542890 2010.225585937500 +55.934105260881 5390.229003906250 +56.049496813396 1202.560913085938 +56.942045823261 2152.776367187500 +59.049421321471 48890.000000000000 +60.044303057183 9066.708007812500 +61.039172597031 2022.421997070312 +63.997299000407 3551.983154296875 +64.004823026729 4602.770019531250 +68.011419973746 27438.244140625000 +68.993453980072 11868.745117187500 +69.007541092297 1262.775512695312 +69.044528644052 13840.256835937500 +72.936548748232 2394.190429687500 +73.064192635706 2001.631225585938 +76.485968828895 1990.000000000000 +79.020673940612 14110.697265625000 +80.048733107804 11139.164062500000 +81.936957703768 7951.655273437500 +82.996258525347 7931.102050781250 +87.054069438849 1366.423706054688 +89.505817293813 1204.000000000000 +90.488742164793 1641.000000000000 +91.052764858515 1537.000000000000 +95.952050544998 2052.000000000000 +97.967665131144 6196.378906250000 +100.075095471512 1333.000000000000 +102.090316949580 2147.288330078125 +109.942412506017 1241.570068359375 +113.962458674848 2150.000000000000 +114.090679763433 10269.053710937500 +118.085140356246 6320.000000000000 +122.095172988930 3031.000000000000 +122.962786063022 9361.452148437500 +123.091201091683 1786.770996093750 +130.157517147424 1269.000000000000 +136.020464885105 1593.957397460938 +140.067387863518 1371.000000000000 +141.090084092559 1371.163940429688 +141.111625958412 1205.952270507812 +141.957344208167 14243.574218750000 +147.090120537191 3106.168212890625 +149.022266612100 4392.313964843750 +151.095065461641 2578.011718750000 +151.110461811602 2665.633789062500 +155.068829024235 1293.404052734375 +155.105603625514 1337.714843750000 +155.973029482816 4308.484375000000 +158.152826290915 10898.000000000000 +159.153571764499 1795.810424804688 +161.095373821916 1630.000000000000 +164.142318567662 1417.434692382812 +170.095313707982 2597.814941406250 +173.079939446366 6537.484863281250 +174.990091086945 1399.835693359375 +175.122326183025 1245.199340820312 +178.157497857370 1706.920166015625 +179.105070173912 1797.347778320312 +182.960213475136 2296.791748046875 +186.220324957036 1981.000000000000 +193.156503702470 1452.181030273438 +194.115624604541 2921.891113281250 +195.120937456382 1997.992919921875 +198.183848140452 1869.000000000000 +211.168101945574 1342.000000000000 +217.007432709798 2381.000000000000 +217.106110064748 19755.308593750000 +218.109094180053 2712.000000000000 +219.093473137464 1458.834228515625 +224.126621043557 1201.000000000000 +228.194389609794 1438.000000000000 +234.033283111319 2556.000000000000 +239.088619200185 3193.870361328125 +242.282596076115 1679.000000000000 +246.861483292156 3002.000000000000 +249.182593670922 1316.760498046875 +250.177639197715 1330.183593750000 +250.998765899209 2664.000000000000 +252.996823062001 1594.000000000000 +256.226468287941 1385.013427734375 +262.065106289011 4773.000000000000 +267.171205984646 1309.222412109375 +276.080725326928 7179.902832031250 +279.092257440619 2195.064453125000 +281.049894448697 1376.000000000000 +284.163353036362 2219.000000000000 +288.244513695094 1834.647216796875 +289.122939601486 479924.500000000000 +289.975858102028 1628.922973632812 +290.017073213232 1944.275634765625 +290.123276174305 45766.847656250000 +291.117781986290 152525.421875000000 +292.120054877663 26562.263671875000 +293.123552241730 2301.061279296875 +304.112901568851 200715.000000000000 +305.114305321306 29911.351562500000 +306.109716008443 11889.069335937500 +307.112175533629 1498.871093750000 +310.120039460115 2149.000000000000 +311.103750967643 1669.000000000000 +326.094169843769 20434.000000000000 +327.007171816990 2960.000000000000 +327.095583905555 3181.000000000000 +329.003320790834 3605.000000000000 +330.204958958646 4623.000000000000 +342.067821584495 1658.000000000000 +349.169582861039 6213.000000000000 +389.044583272152 6794.000000000000 +390.046858764703 1567.000000000000 +391.041761974480 2290.000000000000 +392.066883133660 3099.000000000000 +394.065312832328 2486.617431640625 +404.037150622340 1529.000000000000 +424.361136942239 1694.768188476562 +445.118020079459 2317.756103515625 +457.032355906111 1522.000000000000 +468.387588372118 1866.000000000000 +487.229205176248 1448.410644531250 +500.274794010574 12308.630859375000 +501.279022038205 3531.000000000000 +502.288756406048 1876.000000000000 +505.850709798444 1954.000000000000 +512.414703910442 1315.000000000000 +524.367767193391 1357.000000000000 +531.254607075587 1803.000000000000 +534.976359054533 1231.000000000000 +536.163271700398 4749.000000000000 +537.164413741742 2667.000000000000 +538.159786574791 1604.404663085938 +542.321491870211 6176.098632812500 +543.325733781487 1949.511596679688 +544.336050342091 2231.000000000000 +546.913662924833 1357.989746093750 +575.281457486142 1360.000000000000 +592.225182049818 2920.000000000000 +594.221446454610 1300.000000000000 +607.216533855689 3750.000000000000 +608.218684069541 1223.000000000000 +610.182588733515 2141.000000000000 +612.180853834742 1221.000000000000 +613.222615907063 1575.000000000000 +629.199036711105 2847.000000000000 +639.156476507882 1773.000000000000 +641.152138883811 2127.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=679 experiment=8 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=679 experiment=8_0 +##scan 152 +##specref ms_run[1]:sample=1 period=1 cycle=679 experiment=8 +239.083070491028 30.000000000000 +455.335140007519 30.000000000000 +575.282586362447 345.000000000000 +>compound 1_0-679009--153--UNKNOWN +>parentmass 641.152138883811 +>charge 1 +>rt 449.887000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +641.152138883811 2127.000000000000 +>ms1peaks +52.005301361246 2635.370605468750 +53.013407830788 14972.322265625000 +53.850215108883 1462.445190429688 +54.009291031996 338002.343750000000 +55.005715055501 5339.218261718750 +55.011197452783 5987.995117187500 +55.054283542890 2010.225585937500 +55.934105260881 5390.229003906250 +56.049496813396 1202.560913085938 +56.942045823261 2152.776367187500 +59.049421321471 48890.000000000000 +60.044303057183 9066.708007812500 +61.039172597031 2022.421997070312 +63.997299000407 3551.983154296875 +64.004823026729 4602.770019531250 +68.011419973746 27438.244140625000 +68.993453980072 11868.745117187500 +69.007541092297 1262.775512695312 +69.044528644052 13840.256835937500 +72.936548748232 2394.190429687500 +73.064192635706 2001.631225585938 +76.485968828895 1990.000000000000 +79.020673940612 14110.697265625000 +80.048733107804 11139.164062500000 +81.936957703768 7951.655273437500 +82.996258525347 7931.102050781250 +87.054069438849 1366.423706054688 +89.505817293813 1204.000000000000 +90.488742164793 1641.000000000000 +91.052764858515 1537.000000000000 +95.952050544998 2052.000000000000 +97.967665131144 6196.378906250000 +100.075095471512 1333.000000000000 +102.090316949580 2147.288330078125 +109.942412506017 1241.570068359375 +113.962458674848 2150.000000000000 +114.090679763433 10269.053710937500 +118.085140356246 6320.000000000000 +122.095172988930 3031.000000000000 +122.962786063022 9361.452148437500 +123.091201091683 1786.770996093750 +130.157517147424 1269.000000000000 +136.020464885105 1593.957397460938 +140.067387863518 1371.000000000000 +141.090084092559 1371.163940429688 +141.111625958412 1205.952270507812 +141.957344208167 14243.574218750000 +147.090120537191 3106.168212890625 +149.022266612100 4392.313964843750 +151.095065461641 2578.011718750000 +151.110461811602 2665.633789062500 +155.068829024235 1293.404052734375 +155.105603625514 1337.714843750000 +155.973029482816 4308.484375000000 +158.152826290915 10898.000000000000 +159.153571764499 1795.810424804688 +161.095373821916 1630.000000000000 +164.142318567662 1417.434692382812 +170.095313707982 2597.814941406250 +173.079939446366 6537.484863281250 +174.990091086945 1399.835693359375 +175.122326183025 1245.199340820312 +178.157497857370 1706.920166015625 +179.105070173912 1797.347778320312 +182.960213475136 2296.791748046875 +186.220324957036 1981.000000000000 +193.156503702470 1452.181030273438 +194.115624604541 2921.891113281250 +195.120937456382 1997.992919921875 +198.183848140452 1869.000000000000 +211.168101945574 1342.000000000000 +217.007432709798 2381.000000000000 +217.106110064748 19755.308593750000 +218.109094180053 2712.000000000000 +219.093473137464 1458.834228515625 +224.126621043557 1201.000000000000 +228.194389609794 1438.000000000000 +234.033283111319 2556.000000000000 +239.088619200185 3193.870361328125 +242.282596076115 1679.000000000000 +246.861483292156 3002.000000000000 +249.182593670922 1316.760498046875 +250.177639197715 1330.183593750000 +250.998765899209 2664.000000000000 +252.996823062001 1594.000000000000 +256.226468287941 1385.013427734375 +262.065106289011 4773.000000000000 +267.171205984646 1309.222412109375 +276.080725326928 7179.902832031250 +279.092257440619 2195.064453125000 +281.049894448697 1376.000000000000 +284.163353036362 2219.000000000000 +288.244513695094 1834.647216796875 +289.122939601486 479924.500000000000 +289.975858102028 1628.922973632812 +290.017073213232 1944.275634765625 +290.123276174305 45766.847656250000 +291.117781986290 152525.421875000000 +292.120054877663 26562.263671875000 +293.123552241730 2301.061279296875 +304.112901568851 200715.000000000000 +305.114305321306 29911.351562500000 +306.109716008443 11889.069335937500 +307.112175533629 1498.871093750000 +310.120039460115 2149.000000000000 +311.103750967643 1669.000000000000 +326.094169843769 20434.000000000000 +327.007171816990 2960.000000000000 +327.095583905555 3181.000000000000 +329.003320790834 3605.000000000000 +330.204958958646 4623.000000000000 +342.067821584495 1658.000000000000 +349.169582861039 6213.000000000000 +389.044583272152 6794.000000000000 +390.046858764703 1567.000000000000 +391.041761974480 2290.000000000000 +392.066883133660 3099.000000000000 +394.065312832328 2486.617431640625 +404.037150622340 1529.000000000000 +424.361136942239 1694.768188476562 +445.118020079459 2317.756103515625 +457.032355906111 1522.000000000000 +468.387588372118 1866.000000000000 +487.229205176248 1448.410644531250 +500.274794010574 12308.630859375000 +501.279022038205 3531.000000000000 +502.288756406048 1876.000000000000 +505.850709798444 1954.000000000000 +512.414703910442 1315.000000000000 +524.367767193391 1357.000000000000 +531.254607075587 1803.000000000000 +534.976359054533 1231.000000000000 +536.163271700398 4749.000000000000 +537.164413741742 2667.000000000000 +538.159786574791 1604.404663085938 +542.321491870211 6176.098632812500 +543.325733781487 1949.511596679688 +544.336050342091 2231.000000000000 +546.913662924833 1357.989746093750 +575.281457486142 1360.000000000000 +592.225182049818 2920.000000000000 +594.221446454610 1300.000000000000 +607.216533855689 3750.000000000000 +608.218684069541 1223.000000000000 +610.182588733515 2141.000000000000 +612.180853834742 1221.000000000000 +613.222615907063 1575.000000000000 +629.199036711105 2847.000000000000 +639.156476507882 1773.000000000000 +641.152138883811 2127.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=679 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=679 experiment=9_0 +##scan 153 +##specref ms_run[1]:sample=1 period=1 cycle=679 experiment=9 +326.025296710547 60.000000000000 +351.048420104573 60.000000000000 +353.042458113329 135.000000000000 +474.145647953588 13.000000000000 +641.154719791115 45.000000000000 +>compound 1_0-680002--155--UNKNOWN +>parentmass 70.039562698972 +>charge 1 +>rt 450.814999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005343564747 2661.994384765625 +53.013385125175 13271.507812500000 +53.850476967498 1391.920166015625 +54.009100654412 336005.156250000000 +55.005731289196 5775.847167968750 +55.011312107080 6044.358398437500 +55.054328507982 1920.091674804688 +55.933909666392 5898.825683593750 +56.049556631987 1419.000000000000 +56.941489725245 2394.984619140625 +59.049343420921 69920.835937500000 +60.044407763222 10317.866210937500 +61.039459442535 1645.560913085938 +63.997408055194 4258.890625000000 +64.004816592533 4527.390136718750 +67.028483313166 1085.000000000000 +68.011431981380 26702.117187500000 +68.993517556250 11320.847656250000 +69.014168867455 1091.297363281250 +69.044241878275 14334.098632812500 +72.936518534224 1784.664062500000 +73.064542084775 1636.212524414062 +76.486057227486 2235.464111328125 +79.020593310930 17590.511718750000 +80.048675997656 13065.814453125000 +81.936806997743 8098.744140625000 +82.996186531690 8579.843750000000 +87.043070285163 1068.481689453125 +87.054146967597 1262.379760742188 +89.069538788375 1356.442260742188 +89.506368403730 1765.000000000000 +90.489081741746 1672.000000000000 +91.053495454914 1548.000000000000 +95.952207148227 2359.649414062500 +97.967739534626 6871.617187500000 +100.074424792713 1463.000000000000 +102.090417341375 1517.395996093750 +109.942158661513 1256.000000000000 +113.962673574856 1988.294433593750 +114.090381645787 11498.413085937500 +118.084991596504 7311.000000000000 +122.095295366358 3519.000000000000 +122.962568712149 9692.000000000000 +123.090854218821 1817.844970703125 +123.961118556349 1143.000000000000 +136.020459883317 1422.713012695312 +136.111675090745 1306.000000000000 +137.962851424034 1160.000000000000 +139.962343084174 1079.833862304688 +140.066928170002 1363.000000000000 +141.089785101301 1515.815185546875 +141.112263072467 1402.321777343750 +141.935839027835 1884.932861328125 +141.957196037315 15336.314453125000 +147.090223429618 2297.098876953125 +149.022364859644 4947.895996093750 +151.095334226171 2449.284423828125 +151.109551635596 2919.347412109375 +155.069543464769 1524.504882812500 +155.105982980506 1687.000000000000 +155.972621742705 4647.000000000000 +158.152670317843 12537.919921875000 +159.150732443442 2962.000000000000 +161.095071402530 1762.990356445312 +164.142457635074 1561.928955078125 +170.095055896620 2704.063476562500 +171.145877120117 1246.000000000000 +172.132075856329 1289.691040039062 +173.079593490043 6801.288574218750 +174.990675268099 1136.000000000000 +175.123045251899 1394.596679687500 +177.053138216396 1277.000000000000 +178.156990095226 1461.000000000000 +179.105082983511 1886.788574218750 +182.960923653289 2040.026855468750 +186.220332610646 1406.000000000000 +193.157849697356 1169.022949218750 +194.115281193486 3640.000000000000 +195.101911655734 1770.580200195312 +195.122219721336 2625.970703125000 +198.184260313155 2242.000000000000 +200.198679324630 1158.380981445312 +211.167689803064 1093.994750976562 +217.106102779804 21964.261718750000 +218.109717435144 2751.219726562500 +219.094756854711 1506.893554687500 +224.127455651753 1061.469360351562 +228.194062498798 1693.103637695312 +235.167291100570 1199.896728515625 +239.088098653821 4183.000000000000 +242.283582691416 1478.000000000000 +246.860538550555 3263.000000000000 +249.183374931893 1424.000000000000 +250.177058000477 1490.000000000000 +250.999163484783 2803.000000000000 +251.163376540352 1367.417846679688 +251.183187413220 1515.000000000000 +252.996081437357 1498.000000000000 +256.226836691977 2242.078369140625 +256.261301535389 1326.279418945312 +262.064930515707 1750.000000000000 +267.169543919843 1563.000000000000 +276.080773947899 2264.603027343750 +278.208143222897 1557.222290039062 +279.092407319410 2151.000000000000 +281.050459536580 1222.000000000000 +284.164012963651 1922.000000000000 +289.121206195720 227966.000000000000 +290.123438751439 38350.582031250000 +291.117214157794 76482.507812500000 +292.120204740582 12884.308593750000 +293.123331190419 1491.413574218750 +304.112758387991 66333.000000000000 +305.114692894673 9639.000000000000 +306.110277044476 4361.000000000000 +326.094108050306 7034.000000000000 +327.007026021957 3504.377197265625 +327.090922829994 1574.622802734375 +329.003251049878 3305.000000000000 +330.205868219882 3984.000000000000 +331.000956507864 1088.576171875000 +349.170464446063 2371.000000000000 +366.261196142564 1090.655273437500 +389.044175418163 3746.000000000000 +391.042802108017 1165.000000000000 +392.067905559729 2123.000000000000 +394.065753943135 1252.000000000000 +424.361228950152 1194.000000000000 +445.117584642901 2089.000000000000 +468.386167615386 2180.103027343750 +500.275205713566 9309.000000000000 +501.277657457944 2986.000000000000 +502.287290971659 2055.253662109375 +505.851062311906 1548.579345703125 +512.413967864068 1969.366943359375 +524.370069343817 1509.000000000000 +531.255739661149 1484.000000000000 +536.162338344571 5245.000000000000 +537.164087511315 2877.000000000000 +538.161524728415 1849.000000000000 +542.320934745513 7801.200195312500 +543.325018703842 2527.732177734375 +544.335163270887 2212.000000000000 +546.913921381722 1063.000000000000 +559.342025247183 1157.000000000000 +575.281154328019 1369.000000000000 +610.180737563876 1876.000000000000 +611.182145256290 1119.000000000000 +612.179115465054 1060.000000000000 +641.152738698222 1359.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=680 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=680 experiment=2_0 +##scan 155 +##specref ms_run[1]:sample=1 period=1 cycle=680 experiment=2 +70.047616645459 16.000000000000 +237.866221910839 16.000000000000 +237.986731408413 16.000000000000 +238.122321458765 24.000000000000 +238.139468675394 24.000000000000 +238.308147509360 24.000000000000 +238.525735840204 24.000000000000 +238.770977540205 24.000000000000 +238.963683414947 16.000000000000 +239.757739745973 16.000000000000 +240.480739349585 24.000000000000 +240.708601302318 23.000000000000 +240.908196872337 23.000000000000 +241.316060124127 16.000000000000 +241.865642091809 16.000000000000 +242.331889659680 24.000000000000 +242.359098364531 24.000000000000 +242.647068856886 16.000000000000 +242.691132374152 16.000000000000 +242.716849665416 16.000000000000 +>compound 1_0-680003--156--UNKNOWN +>parentmass 256.226836691977 +>charge 1 +>rt 450.814999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +256.226836691977 2242.078369140625 +>ms1peaks +52.005343564747 2661.994384765625 +53.013385125175 13271.507812500000 +53.850476967498 1391.920166015625 +54.009100654412 336005.156250000000 +55.005731289196 5775.847167968750 +55.011312107080 6044.358398437500 +55.054328507982 1920.091674804688 +55.933909666392 5898.825683593750 +56.049556631987 1419.000000000000 +56.941489725245 2394.984619140625 +59.049343420921 69920.835937500000 +60.044407763222 10317.866210937500 +61.039459442535 1645.560913085938 +63.997408055194 4258.890625000000 +64.004816592533 4527.390136718750 +67.028483313166 1085.000000000000 +68.011431981380 26702.117187500000 +68.993517556250 11320.847656250000 +69.014168867455 1091.297363281250 +69.044241878275 14334.098632812500 +72.936518534224 1784.664062500000 +73.064542084775 1636.212524414062 +76.486057227486 2235.464111328125 +79.020593310930 17590.511718750000 +80.048675997656 13065.814453125000 +81.936806997743 8098.744140625000 +82.996186531690 8579.843750000000 +87.043070285163 1068.481689453125 +87.054146967597 1262.379760742188 +89.069538788375 1356.442260742188 +89.506368403730 1765.000000000000 +90.489081741746 1672.000000000000 +91.053495454914 1548.000000000000 +95.952207148227 2359.649414062500 +97.967739534626 6871.617187500000 +100.074424792713 1463.000000000000 +102.090417341375 1517.395996093750 +109.942158661513 1256.000000000000 +113.962673574856 1988.294433593750 +114.090381645787 11498.413085937500 +118.084991596504 7311.000000000000 +122.095295366358 3519.000000000000 +122.962568712149 9692.000000000000 +123.090854218821 1817.844970703125 +123.961118556349 1143.000000000000 +136.020459883317 1422.713012695312 +136.111675090745 1306.000000000000 +137.962851424034 1160.000000000000 +139.962343084174 1079.833862304688 +140.066928170002 1363.000000000000 +141.089785101301 1515.815185546875 +141.112263072467 1402.321777343750 +141.935839027835 1884.932861328125 +141.957196037315 15336.314453125000 +147.090223429618 2297.098876953125 +149.022364859644 4947.895996093750 +151.095334226171 2449.284423828125 +151.109551635596 2919.347412109375 +155.069543464769 1524.504882812500 +155.105982980506 1687.000000000000 +155.972621742705 4647.000000000000 +158.152670317843 12537.919921875000 +159.150732443442 2962.000000000000 +161.095071402530 1762.990356445312 +164.142457635074 1561.928955078125 +170.095055896620 2704.063476562500 +171.145877120117 1246.000000000000 +172.132075856329 1289.691040039062 +173.079593490043 6801.288574218750 +174.990675268099 1136.000000000000 +175.123045251899 1394.596679687500 +177.053138216396 1277.000000000000 +178.156990095226 1461.000000000000 +179.105082983511 1886.788574218750 +182.960923653289 2040.026855468750 +186.220332610646 1406.000000000000 +193.157849697356 1169.022949218750 +194.115281193486 3640.000000000000 +195.101911655734 1770.580200195312 +195.122219721336 2625.970703125000 +198.184260313155 2242.000000000000 +200.198679324630 1158.380981445312 +211.167689803064 1093.994750976562 +217.106102779804 21964.261718750000 +218.109717435144 2751.219726562500 +219.094756854711 1506.893554687500 +224.127455651753 1061.469360351562 +228.194062498798 1693.103637695312 +235.167291100570 1199.896728515625 +239.088098653821 4183.000000000000 +242.283582691416 1478.000000000000 +246.860538550555 3263.000000000000 +249.183374931893 1424.000000000000 +250.177058000477 1490.000000000000 +250.999163484783 2803.000000000000 +251.163376540352 1367.417846679688 +251.183187413220 1515.000000000000 +252.996081437357 1498.000000000000 +256.226836691977 2242.078369140625 +256.261301535389 1326.279418945312 +262.064930515707 1750.000000000000 +267.169543919843 1563.000000000000 +276.080773947899 2264.603027343750 +278.208143222897 1557.222290039062 +279.092407319410 2151.000000000000 +281.050459536580 1222.000000000000 +284.164012963651 1922.000000000000 +289.121206195720 227966.000000000000 +290.123438751439 38350.582031250000 +291.117214157794 76482.507812500000 +292.120204740582 12884.308593750000 +293.123331190419 1491.413574218750 +304.112758387991 66333.000000000000 +305.114692894673 9639.000000000000 +306.110277044476 4361.000000000000 +326.094108050306 7034.000000000000 +327.007026021957 3504.377197265625 +327.090922829994 1574.622802734375 +329.003251049878 3305.000000000000 +330.205868219882 3984.000000000000 +331.000956507864 1088.576171875000 +349.170464446063 2371.000000000000 +366.261196142564 1090.655273437500 +389.044175418163 3746.000000000000 +391.042802108017 1165.000000000000 +392.067905559729 2123.000000000000 +394.065753943135 1252.000000000000 +424.361228950152 1194.000000000000 +445.117584642901 2089.000000000000 +468.386167615386 2180.103027343750 +500.275205713566 9309.000000000000 +501.277657457944 2986.000000000000 +502.287290971659 2055.253662109375 +505.851062311906 1548.579345703125 +512.413967864068 1969.366943359375 +524.370069343817 1509.000000000000 +531.255739661149 1484.000000000000 +536.162338344571 5245.000000000000 +537.164087511315 2877.000000000000 +538.161524728415 1849.000000000000 +542.320934745513 7801.200195312500 +543.325018703842 2527.732177734375 +544.335163270887 2212.000000000000 +546.913921381722 1063.000000000000 +559.342025247183 1157.000000000000 +575.281154328019 1369.000000000000 +610.180737563876 1876.000000000000 +611.182145256290 1119.000000000000 +612.179115465054 1060.000000000000 +641.152738698222 1359.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=680 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=680 experiment=3_0 +##scan 156 +##specref ms_run[1]:sample=1 period=1 cycle=680 experiment=3 +67.055989773944 24.000000000000 +69.069524485774 16.000000000000 +69.072562393336 16.000000000000 +95.084028132183 24.000000000000 +109.099468825002 16.000000000000 +148.110132147443 54.000000000000 +224.053376131318 23.000000000000 +224.085799813996 48.467803955078 +>compound 1_0-680004--157--UNKNOWN +>parentmass 512.413967864068 +>charge 1 +>rt 450.814999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +512.413967864068 1969.366943359375 +>ms1peaks +52.005343564747 2661.994384765625 +53.013385125175 13271.507812500000 +53.850476967498 1391.920166015625 +54.009100654412 336005.156250000000 +55.005731289196 5775.847167968750 +55.011312107080 6044.358398437500 +55.054328507982 1920.091674804688 +55.933909666392 5898.825683593750 +56.049556631987 1419.000000000000 +56.941489725245 2394.984619140625 +59.049343420921 69920.835937500000 +60.044407763222 10317.866210937500 +61.039459442535 1645.560913085938 +63.997408055194 4258.890625000000 +64.004816592533 4527.390136718750 +67.028483313166 1085.000000000000 +68.011431981380 26702.117187500000 +68.993517556250 11320.847656250000 +69.014168867455 1091.297363281250 +69.044241878275 14334.098632812500 +72.936518534224 1784.664062500000 +73.064542084775 1636.212524414062 +76.486057227486 2235.464111328125 +79.020593310930 17590.511718750000 +80.048675997656 13065.814453125000 +81.936806997743 8098.744140625000 +82.996186531690 8579.843750000000 +87.043070285163 1068.481689453125 +87.054146967597 1262.379760742188 +89.069538788375 1356.442260742188 +89.506368403730 1765.000000000000 +90.489081741746 1672.000000000000 +91.053495454914 1548.000000000000 +95.952207148227 2359.649414062500 +97.967739534626 6871.617187500000 +100.074424792713 1463.000000000000 +102.090417341375 1517.395996093750 +109.942158661513 1256.000000000000 +113.962673574856 1988.294433593750 +114.090381645787 11498.413085937500 +118.084991596504 7311.000000000000 +122.095295366358 3519.000000000000 +122.962568712149 9692.000000000000 +123.090854218821 1817.844970703125 +123.961118556349 1143.000000000000 +136.020459883317 1422.713012695312 +136.111675090745 1306.000000000000 +137.962851424034 1160.000000000000 +139.962343084174 1079.833862304688 +140.066928170002 1363.000000000000 +141.089785101301 1515.815185546875 +141.112263072467 1402.321777343750 +141.935839027835 1884.932861328125 +141.957196037315 15336.314453125000 +147.090223429618 2297.098876953125 +149.022364859644 4947.895996093750 +151.095334226171 2449.284423828125 +151.109551635596 2919.347412109375 +155.069543464769 1524.504882812500 +155.105982980506 1687.000000000000 +155.972621742705 4647.000000000000 +158.152670317843 12537.919921875000 +159.150732443442 2962.000000000000 +161.095071402530 1762.990356445312 +164.142457635074 1561.928955078125 +170.095055896620 2704.063476562500 +171.145877120117 1246.000000000000 +172.132075856329 1289.691040039062 +173.079593490043 6801.288574218750 +174.990675268099 1136.000000000000 +175.123045251899 1394.596679687500 +177.053138216396 1277.000000000000 +178.156990095226 1461.000000000000 +179.105082983511 1886.788574218750 +182.960923653289 2040.026855468750 +186.220332610646 1406.000000000000 +193.157849697356 1169.022949218750 +194.115281193486 3640.000000000000 +195.101911655734 1770.580200195312 +195.122219721336 2625.970703125000 +198.184260313155 2242.000000000000 +200.198679324630 1158.380981445312 +211.167689803064 1093.994750976562 +217.106102779804 21964.261718750000 +218.109717435144 2751.219726562500 +219.094756854711 1506.893554687500 +224.127455651753 1061.469360351562 +228.194062498798 1693.103637695312 +235.167291100570 1199.896728515625 +239.088098653821 4183.000000000000 +242.283582691416 1478.000000000000 +246.860538550555 3263.000000000000 +249.183374931893 1424.000000000000 +250.177058000477 1490.000000000000 +250.999163484783 2803.000000000000 +251.163376540352 1367.417846679688 +251.183187413220 1515.000000000000 +252.996081437357 1498.000000000000 +256.226836691977 2242.078369140625 +256.261301535389 1326.279418945312 +262.064930515707 1750.000000000000 +267.169543919843 1563.000000000000 +276.080773947899 2264.603027343750 +278.208143222897 1557.222290039062 +279.092407319410 2151.000000000000 +281.050459536580 1222.000000000000 +284.164012963651 1922.000000000000 +289.121206195720 227966.000000000000 +290.123438751439 38350.582031250000 +291.117214157794 76482.507812500000 +292.120204740582 12884.308593750000 +293.123331190419 1491.413574218750 +304.112758387991 66333.000000000000 +305.114692894673 9639.000000000000 +306.110277044476 4361.000000000000 +326.094108050306 7034.000000000000 +327.007026021957 3504.377197265625 +327.090922829994 1574.622802734375 +329.003251049878 3305.000000000000 +330.205868219882 3984.000000000000 +331.000956507864 1088.576171875000 +349.170464446063 2371.000000000000 +366.261196142564 1090.655273437500 +389.044175418163 3746.000000000000 +391.042802108017 1165.000000000000 +392.067905559729 2123.000000000000 +394.065753943135 1252.000000000000 +424.361228950152 1194.000000000000 +445.117584642901 2089.000000000000 +468.386167615386 2180.103027343750 +500.275205713566 9309.000000000000 +501.277657457944 2986.000000000000 +502.287290971659 2055.253662109375 +505.851062311906 1548.579345703125 +512.413967864068 1969.366943359375 +524.370069343817 1509.000000000000 +531.255739661149 1484.000000000000 +536.162338344571 5245.000000000000 +537.164087511315 2877.000000000000 +538.161524728415 1849.000000000000 +542.320934745513 7801.200195312500 +543.325018703842 2527.732177734375 +544.335163270887 2212.000000000000 +546.913921381722 1063.000000000000 +559.342025247183 1157.000000000000 +575.281154328019 1369.000000000000 +610.180737563876 1876.000000000000 +611.182145256290 1119.000000000000 +612.179115465054 1060.000000000000 +641.152738698222 1359.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=680 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=680 experiment=4_0 +##scan 157 +##specref ms_run[1]:sample=1 period=1 cycle=680 experiment=4 +177.115656514289 6.000000000000 +385.299759729369 6.000000000000 +>compound 1_0-680005--158--UNKNOWN +>parentmass 542.320934745513 +>charge 1 +>rt 450.814999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +542.320934745513 7801.200195312500 +>ms1peaks +52.005343564747 2661.994384765625 +53.013385125175 13271.507812500000 +53.850476967498 1391.920166015625 +54.009100654412 336005.156250000000 +55.005731289196 5775.847167968750 +55.011312107080 6044.358398437500 +55.054328507982 1920.091674804688 +55.933909666392 5898.825683593750 +56.049556631987 1419.000000000000 +56.941489725245 2394.984619140625 +59.049343420921 69920.835937500000 +60.044407763222 10317.866210937500 +61.039459442535 1645.560913085938 +63.997408055194 4258.890625000000 +64.004816592533 4527.390136718750 +67.028483313166 1085.000000000000 +68.011431981380 26702.117187500000 +68.993517556250 11320.847656250000 +69.014168867455 1091.297363281250 +69.044241878275 14334.098632812500 +72.936518534224 1784.664062500000 +73.064542084775 1636.212524414062 +76.486057227486 2235.464111328125 +79.020593310930 17590.511718750000 +80.048675997656 13065.814453125000 +81.936806997743 8098.744140625000 +82.996186531690 8579.843750000000 +87.043070285163 1068.481689453125 +87.054146967597 1262.379760742188 +89.069538788375 1356.442260742188 +89.506368403730 1765.000000000000 +90.489081741746 1672.000000000000 +91.053495454914 1548.000000000000 +95.952207148227 2359.649414062500 +97.967739534626 6871.617187500000 +100.074424792713 1463.000000000000 +102.090417341375 1517.395996093750 +109.942158661513 1256.000000000000 +113.962673574856 1988.294433593750 +114.090381645787 11498.413085937500 +118.084991596504 7311.000000000000 +122.095295366358 3519.000000000000 +122.962568712149 9692.000000000000 +123.090854218821 1817.844970703125 +123.961118556349 1143.000000000000 +136.020459883317 1422.713012695312 +136.111675090745 1306.000000000000 +137.962851424034 1160.000000000000 +139.962343084174 1079.833862304688 +140.066928170002 1363.000000000000 +141.089785101301 1515.815185546875 +141.112263072467 1402.321777343750 +141.935839027835 1884.932861328125 +141.957196037315 15336.314453125000 +147.090223429618 2297.098876953125 +149.022364859644 4947.895996093750 +151.095334226171 2449.284423828125 +151.109551635596 2919.347412109375 +155.069543464769 1524.504882812500 +155.105982980506 1687.000000000000 +155.972621742705 4647.000000000000 +158.152670317843 12537.919921875000 +159.150732443442 2962.000000000000 +161.095071402530 1762.990356445312 +164.142457635074 1561.928955078125 +170.095055896620 2704.063476562500 +171.145877120117 1246.000000000000 +172.132075856329 1289.691040039062 +173.079593490043 6801.288574218750 +174.990675268099 1136.000000000000 +175.123045251899 1394.596679687500 +177.053138216396 1277.000000000000 +178.156990095226 1461.000000000000 +179.105082983511 1886.788574218750 +182.960923653289 2040.026855468750 +186.220332610646 1406.000000000000 +193.157849697356 1169.022949218750 +194.115281193486 3640.000000000000 +195.101911655734 1770.580200195312 +195.122219721336 2625.970703125000 +198.184260313155 2242.000000000000 +200.198679324630 1158.380981445312 +211.167689803064 1093.994750976562 +217.106102779804 21964.261718750000 +218.109717435144 2751.219726562500 +219.094756854711 1506.893554687500 +224.127455651753 1061.469360351562 +228.194062498798 1693.103637695312 +235.167291100570 1199.896728515625 +239.088098653821 4183.000000000000 +242.283582691416 1478.000000000000 +246.860538550555 3263.000000000000 +249.183374931893 1424.000000000000 +250.177058000477 1490.000000000000 +250.999163484783 2803.000000000000 +251.163376540352 1367.417846679688 +251.183187413220 1515.000000000000 +252.996081437357 1498.000000000000 +256.226836691977 2242.078369140625 +256.261301535389 1326.279418945312 +262.064930515707 1750.000000000000 +267.169543919843 1563.000000000000 +276.080773947899 2264.603027343750 +278.208143222897 1557.222290039062 +279.092407319410 2151.000000000000 +281.050459536580 1222.000000000000 +284.164012963651 1922.000000000000 +289.121206195720 227966.000000000000 +290.123438751439 38350.582031250000 +291.117214157794 76482.507812500000 +292.120204740582 12884.308593750000 +293.123331190419 1491.413574218750 +304.112758387991 66333.000000000000 +305.114692894673 9639.000000000000 +306.110277044476 4361.000000000000 +326.094108050306 7034.000000000000 +327.007026021957 3504.377197265625 +327.090922829994 1574.622802734375 +329.003251049878 3305.000000000000 +330.205868219882 3984.000000000000 +331.000956507864 1088.576171875000 +349.170464446063 2371.000000000000 +366.261196142564 1090.655273437500 +389.044175418163 3746.000000000000 +391.042802108017 1165.000000000000 +392.067905559729 2123.000000000000 +394.065753943135 1252.000000000000 +424.361228950152 1194.000000000000 +445.117584642901 2089.000000000000 +468.386167615386 2180.103027343750 +500.275205713566 9309.000000000000 +501.277657457944 2986.000000000000 +502.287290971659 2055.253662109375 +505.851062311906 1548.579345703125 +512.413967864068 1969.366943359375 +524.370069343817 1509.000000000000 +531.255739661149 1484.000000000000 +536.162338344571 5245.000000000000 +537.164087511315 2877.000000000000 +538.161524728415 1849.000000000000 +542.320934745513 7801.200195312500 +543.325018703842 2527.732177734375 +544.335163270887 2212.000000000000 +546.913921381722 1063.000000000000 +559.342025247183 1157.000000000000 +575.281154328019 1369.000000000000 +610.180737563876 1876.000000000000 +611.182145256290 1119.000000000000 +612.179115465054 1060.000000000000 +641.152738698222 1359.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=680 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=680 experiment=5_0 +##scan 158 +##specref ms_run[1]:sample=1 period=1 cycle=680 experiment=5 +124.999298416270 39.000000000000 +184.042838352712 23.539966583252 +184.072322556266 993.000000000000 +524.304028635380 16.000000000000 +542.317715236812 45.000000000000 +>compound 1_0-681002--160--UNKNOWN +>parentmass 518.322055303106 +>charge 1 +>rt 451.743000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +518.322055303106 1082.000000000000 +>ms1peaks +52.005576429206 2853.014648437500 +53.013380062922 14075.734375000000 +53.850710432949 1391.374511718750 +54.009227328967 330212.500000000000 +55.006228537214 6441.640625000000 +55.011048140002 6499.890136718750 +55.054233906962 1856.235717773438 +55.934200644649 5552.520996093750 +56.942144972644 2049.958984375000 +59.049363348783 50683.523437500000 +60.044492678418 9306.683593750000 +61.039447755440 1805.350341796875 +63.997667023426 3825.146728515625 +64.004885487756 3981.375244140625 +68.011577339760 27294.117187500000 +68.993600191882 11188.708984375000 +69.009884783029 1113.458129882812 +69.033185573639 1286.520385742188 +69.044627222076 14280.912109375000 +72.044010219351 1281.779907226562 +72.936508268283 1945.000000000000 +73.064363416810 1904.847900390625 +76.485953156799 2117.004638671875 +79.020807857622 16263.730468750000 +80.048953598444 12888.979492187500 +81.936925216030 7662.147949218750 +82.996467308769 7703.216796875000 +87.043519689065 1530.706542968750 +87.054195502858 1518.154907226562 +89.070005900963 1091.785644531250 +89.506577556160 1323.000000000000 +90.488621903349 1340.406250000000 +91.053630060522 1293.000000000000 +95.952195670723 2102.000000000000 +97.967951235116 6497.000000000000 +100.075145899926 1396.000000000000 +102.090660991848 1629.000000000000 +109.942262730286 1360.000000000000 +113.962519480584 1974.000000000000 +114.090384125102 11848.033203125000 +118.085202977850 6280.114746093750 +122.095256536278 3698.000000000000 +122.963084126313 9551.000000000000 +123.091123208857 1703.146728515625 +129.051718426585 1005.000000000000 +130.158125900813 1511.000000000000 +136.020489893728 1778.000000000000 +136.111413979020 1238.000000000000 +137.962791553719 1192.000000000000 +139.962604505923 1030.000000000000 +140.067557676636 1189.000000000000 +141.089734039039 1316.911499023438 +141.112198852191 1558.557006835938 +141.957607958572 14082.356445312500 +142.958956933720 1117.000000000000 +147.090537422031 3201.958740234375 +149.022529303650 4644.175781250000 +151.096094515979 2949.302246093750 +151.110066550689 3522.460693359375 +153.126160067549 1074.000000000000 +155.069684972449 1690.000000000000 +155.105560651887 1383.562377929688 +155.973291494516 4089.000000000000 +158.095128814815 1165.998901367188 +158.153020247227 11949.726562500000 +159.150732943577 2886.000000000000 +159.968753987977 1042.000000000000 +161.094353577342 1778.060424804688 +163.130914598511 1233.635253906250 +164.142405630653 1251.216918945312 +170.095468709604 2754.746582031250 +171.146684895327 1462.609130859375 +172.132084016118 1041.175659179688 +173.079846806941 7331.000000000000 +174.127000134586 1064.623657226562 +174.990727286074 1392.614746093750 +175.121043158724 1245.644042968750 +177.053696443463 1211.069946289062 +178.158150828172 1730.000000000000 +179.106199967812 1930.000000000000 +182.960747319509 2163.126708984375 +186.220945764754 1700.000000000000 +194.115593326738 3525.000000000000 +195.122142493430 2723.962646484375 +198.184960303099 2278.000000000000 +200.200061505082 961.417602539062 +205.085522819518 964.000000000000 +211.108477577671 961.225463867188 +217.106378222468 24192.632812500000 +218.109446501397 2767.000000000000 +219.095224664154 1261.728027343750 +221.151817906056 1103.830322265625 +224.127752548423 1196.000000000000 +228.195181718002 1412.421875000000 +235.167696274773 1113.381958007812 +239.088087064319 4921.000000000000 +242.283750622928 1677.000000000000 +246.861424015648 3261.000000000000 +249.184851501803 1653.000000000000 +250.177784977897 1386.000000000000 +250.999715728808 2665.000000000000 +251.185166032673 1126.000000000000 +252.996390530032 1817.000000000000 +256.226014510365 2251.905517578125 +256.261286863166 1052.912719726562 +267.169952485687 1475.000000000000 +278.208825094190 1842.000000000000 +279.093855524120 2055.616699218750 +281.051501077891 1147.000000000000 +284.164451199371 1509.000000000000 +289.121703537817 77083.671875000000 +290.123981249754 13638.000000000000 +291.117677348848 28455.958984375000 +292.083797360052 3233.590820312500 +292.121120725437 5039.887695312500 +293.148526133674 1758.114868164062 +304.112886960222 24214.000000000000 +305.115919539365 3146.000000000000 +306.111478005267 1333.000000000000 +309.232383832205 1214.000000000000 +326.094711221209 2295.000000000000 +327.008055562071 3970.000000000000 +329.004811224427 3589.891357421875 +330.205672801721 2976.000000000000 +331.002287020591 1135.000000000000 +366.262965212394 972.072082519531 +367.248177507011 1085.000000000000 +371.315000382908 1229.000000000000 +389.044968829292 1283.000000000000 +430.887120059357 988.000000000000 +445.118959721494 2320.000000000000 +468.388365402503 1838.000000000000 +500.276551235455 6636.000000000000 +501.278450790753 2008.000000000000 +502.290181028980 1627.493652343750 +505.851549877935 1587.479125976562 +512.415591206300 2110.000000000000 +518.322055303106 1082.000000000000 +524.367964546690 1610.665283203125 +536.162837613935 4877.000000000000 +537.165078163092 2542.000000000000 +538.162032171901 1954.000000000000 +542.323132187101 8068.000000000000 +543.326179853984 2456.164550781250 +544.337204857267 2112.000000000000 +546.913446842504 1085.960937500000 +556.440343731206 997.000000000000 +575.283149889577 1038.000000000000 +610.181653764937 1916.000000000000 +611.182208922819 1018.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=681 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=681 experiment=2_0 +##scan 160 +##specref ms_run[1]:sample=1 period=1 cycle=681 experiment=2 +86.097217934661 4.000000000000 +110.098899692702 2.000000000000 +124.996206938038 4.000000000000 +125.006695681210 4.000000000000 +164.206284839889 2.000000000000 +184.072018067343 70.000000000000 +184.850168178446 2.000000000000 +186.875681075611 2.000000000000 +281.047988240446 10.000000000000 +288.907661123765 4.000000000000 +288.920814654975 4.000000000000 +313.822979467817 2.000000000000 +327.806632035600 2.000000000000 +372.882138395918 2.000000000000 +391.108583378890 2.000000000000 +395.132197029142 10.000000000000 +436.161731093603 10.000000000000 +466.787041318145 2.000000000000 +518.355369117857 12.000000000000 +518.404335283035 8.000000000000 +>compound 1_0-682002--162--UNKNOWN +>parentmass 159.151704211465 +>charge 1 +>rt 452.667000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +159.151704211465 2641.084960937500 +>ms1peaks +52.005589764867 2294.063720703125 +53.013445055958 12597.693359375000 +53.850425319649 1340.454467773438 +54.009222871737 339238.562500000000 +55.005731854491 5294.396972656250 +55.011476278488 6250.596679687500 +55.054379017860 1761.070800781250 +55.934267785328 5352.454589843750 +56.941893960122 2242.341308593750 +59.049484585653 52072.828125000000 +60.044294021645 9938.447265625000 +61.039589277099 2273.430419921875 +63.997573159871 4196.579589843750 +64.005237146342 4320.143066406250 +68.011481724460 26730.150390625000 +68.993546142298 10693.709960937500 +69.007869969105 1192.218139648438 +69.013671104337 1098.155395507812 +69.044372395553 14513.338867187500 +72.936598767302 2099.222656250000 +73.064317157751 1612.868530273438 +76.485864352811 2012.000000000000 +79.020756544033 15401.780273437500 +80.048830810306 12086.630859375000 +81.936737807275 7099.281250000000 +82.996379943200 7332.096191406250 +87.043937378063 1284.087280273438 +87.054691364444 1735.449462890625 +89.506704481264 1363.000000000000 +90.488978556361 1527.000000000000 +91.052697348342 1240.000000000000 +95.952180950491 2313.000000000000 +97.954766102337 1345.658203125000 +97.968168531205 6228.090820312500 +100.074623976155 1083.000000000000 +102.090792000469 1723.000000000000 +109.942217651910 1239.000000000000 +113.962972305211 1857.000000000000 +114.090655304988 11653.611328125000 +118.085028075816 6825.976562500000 +122.095330108551 3707.768310546875 +122.962730068033 9873.996093750000 +123.090992739460 1713.000000000000 +123.961301473066 1043.788330078125 +130.157775632365 1202.000000000000 +136.020931202558 1751.000000000000 +136.111249167538 1420.000000000000 +139.963101043342 1112.164794921875 +140.067069787693 1037.000000000000 +141.089892790143 1667.429199218750 +141.111191146003 1364.941406250000 +141.957452440810 15194.245117187500 +142.959210742743 1028.000000000000 +147.090437233968 2799.000000000000 +149.022167561345 4504.397949218750 +149.042732259286 1257.066284179688 +151.095707544593 2676.601318359375 +151.109931871901 2734.434814453125 +153.126931456222 1114.000000000000 +155.069323046609 1758.931274414062 +155.105812248814 1927.436035156250 +155.973694100858 4459.000000000000 +158.153189714534 11874.000000000000 +159.151704211465 2641.084960937500 +159.968387162402 1295.000000000000 +161.095793670235 1895.903320312500 +163.131410791805 1005.978149414062 +164.142255211263 1591.111206054688 +170.095523278980 2774.611572265625 +171.146216027920 1262.000000000000 +172.132900003481 1052.518554687500 +173.080096538435 7436.877929687500 +174.990530030646 1487.000000000000 +175.118390474848 1308.603881835938 +177.054006503523 1284.000000000000 +178.135931142129 1039.362915039062 +178.157412463421 1487.105957031250 +179.105395614597 1888.000000000000 +182.960780820378 2091.357421875000 +182.981256310748 1532.590698242188 +183.098292655109 1039.880004882812 +186.183974954504 1329.000000000000 +186.220644650150 1722.000000000000 +193.156717557870 1169.000000000000 +194.115722573230 3806.000000000000 +195.120778552538 2502.656494140625 +198.184244308753 2348.000000000000 +200.200425972196 1333.000000000000 +217.106406482092 25411.171875000000 +218.109613605337 3087.000000000000 +219.095178232219 1538.764648437500 +224.126545049974 1050.020874023438 +228.196367848999 1616.349121093750 +235.167380487027 1059.150878906250 +239.088546688063 4987.301269531250 +242.283835650883 1454.000000000000 +246.861896170149 3093.000000000000 +249.183716487324 1784.804565429688 +250.177588579370 1574.000000000000 +250.999577375738 2608.599853515625 +251.182995871213 1367.000000000000 +252.997167162173 1649.000000000000 +256.226821306475 2881.139892578125 +256.261446512021 2000.881713867188 +267.170373189617 1392.000000000000 +278.208459274448 1833.000000000000 +279.094351291055 2304.495361328125 +281.050439796354 1439.000000000000 +284.163848757263 1161.000000000000 +289.121050841171 27007.203125000000 +290.124235475954 4648.000000000000 +291.083596057139 7334.543945312500 +291.117907792554 9833.311523437500 +292.120773411831 2090.552246093750 +293.150701487073 1637.447631835938 +304.112931726935 11920.000000000000 +305.115452640037 2211.000000000000 +309.236161920162 1307.848876953125 +326.094660184282 1216.000000000000 +327.007805441544 3647.000000000000 +329.004767001635 4060.000000000000 +330.205647137349 3003.000000000000 +331.001649685159 998.000000000000 +366.263546636202 1082.000000000000 +367.246996337816 1487.260375976562 +430.887335006560 982.000000000000 +445.118172390324 2169.000000000000 +446.119320228071 1009.322937011719 +468.387685434732 1524.000000000000 +500.275268715638 4948.336914062500 +501.278374861979 1438.000000000000 +502.290164633684 1631.000000000000 +505.851046230680 1720.000000000000 +512.344397174232 1069.467651367188 +512.414484404275 2483.054443359375 +519.138249644308 990.000000000000 +520.337150342418 1220.000000000000 +524.370135972210 1635.000000000000 +536.163584977615 5205.000000000000 +537.164871551777 2866.000000000000 +538.162040361972 1820.000000000000 +542.322114113497 7889.408691406250 +543.325813515830 2782.664062500000 +544.337159119688 2752.000000000000 +546.915148271326 1119.000000000000 +556.440204658126 1446.868652343750 +559.347381876279 1174.000000000000 +575.283778976507 1152.000000000000 +610.183851092976 2209.000000000000 +611.184376861119 1181.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=682 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=682 experiment=2_0 +##scan 162 +##specref ms_run[1]:sample=1 period=1 cycle=682 experiment=2 +55.934006390929 70.000000000000 +56.942660933846 76.000000000000 +57.070990272584 16.000000000000 +58.888601031297 6.000000000000 +62.929769170920 6.000000000000 +71.928762838693 16.000000000000 +72.048343020825 6.000000000000 +72.937353588772 77.000000000000 +97.968088480508 24.000000000000 +100.932004127960 16.000000000000 +103.093397869431 6.000000000000 +115.976310468923 16.000000000000 +>compound 1_0-682003--163--UNKNOWN +>parentmass 221.187757714400 +>charge 1 +>rt 452.667000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005589764867 2294.063720703125 +53.013445055958 12597.693359375000 +53.850425319649 1340.454467773438 +54.009222871737 339238.562500000000 +55.005731854491 5294.396972656250 +55.011476278488 6250.596679687500 +55.054379017860 1761.070800781250 +55.934267785328 5352.454589843750 +56.941893960122 2242.341308593750 +59.049484585653 52072.828125000000 +60.044294021645 9938.447265625000 +61.039589277099 2273.430419921875 +63.997573159871 4196.579589843750 +64.005237146342 4320.143066406250 +68.011481724460 26730.150390625000 +68.993546142298 10693.709960937500 +69.007869969105 1192.218139648438 +69.013671104337 1098.155395507812 +69.044372395553 14513.338867187500 +72.936598767302 2099.222656250000 +73.064317157751 1612.868530273438 +76.485864352811 2012.000000000000 +79.020756544033 15401.780273437500 +80.048830810306 12086.630859375000 +81.936737807275 7099.281250000000 +82.996379943200 7332.096191406250 +87.043937378063 1284.087280273438 +87.054691364444 1735.449462890625 +89.506704481264 1363.000000000000 +90.488978556361 1527.000000000000 +91.052697348342 1240.000000000000 +95.952180950491 2313.000000000000 +97.954766102337 1345.658203125000 +97.968168531205 6228.090820312500 +100.074623976155 1083.000000000000 +102.090792000469 1723.000000000000 +109.942217651910 1239.000000000000 +113.962972305211 1857.000000000000 +114.090655304988 11653.611328125000 +118.085028075816 6825.976562500000 +122.095330108551 3707.768310546875 +122.962730068033 9873.996093750000 +123.090992739460 1713.000000000000 +123.961301473066 1043.788330078125 +130.157775632365 1202.000000000000 +136.020931202558 1751.000000000000 +136.111249167538 1420.000000000000 +139.963101043342 1112.164794921875 +140.067069787693 1037.000000000000 +141.089892790143 1667.429199218750 +141.111191146003 1364.941406250000 +141.957452440810 15194.245117187500 +142.959210742743 1028.000000000000 +147.090437233968 2799.000000000000 +149.022167561345 4504.397949218750 +149.042732259286 1257.066284179688 +151.095707544593 2676.601318359375 +151.109931871901 2734.434814453125 +153.126931456222 1114.000000000000 +155.069323046609 1758.931274414062 +155.105812248814 1927.436035156250 +155.973694100858 4459.000000000000 +158.153189714534 11874.000000000000 +159.151704211465 2641.084960937500 +159.968387162402 1295.000000000000 +161.095793670235 1895.903320312500 +163.131410791805 1005.978149414062 +164.142255211263 1591.111206054688 +170.095523278980 2774.611572265625 +171.146216027920 1262.000000000000 +172.132900003481 1052.518554687500 +173.080096538435 7436.877929687500 +174.990530030646 1487.000000000000 +175.118390474848 1308.603881835938 +177.054006503523 1284.000000000000 +178.135931142129 1039.362915039062 +178.157412463421 1487.105957031250 +179.105395614597 1888.000000000000 +182.960780820378 2091.357421875000 +182.981256310748 1532.590698242188 +183.098292655109 1039.880004882812 +186.183974954504 1329.000000000000 +186.220644650150 1722.000000000000 +193.156717557870 1169.000000000000 +194.115722573230 3806.000000000000 +195.120778552538 2502.656494140625 +198.184244308753 2348.000000000000 +200.200425972196 1333.000000000000 +217.106406482092 25411.171875000000 +218.109613605337 3087.000000000000 +219.095178232219 1538.764648437500 +224.126545049974 1050.020874023438 +228.196367848999 1616.349121093750 +235.167380487027 1059.150878906250 +239.088546688063 4987.301269531250 +242.283835650883 1454.000000000000 +246.861896170149 3093.000000000000 +249.183716487324 1784.804565429688 +250.177588579370 1574.000000000000 +250.999577375738 2608.599853515625 +251.182995871213 1367.000000000000 +252.997167162173 1649.000000000000 +256.226821306475 2881.139892578125 +256.261446512021 2000.881713867188 +267.170373189617 1392.000000000000 +278.208459274448 1833.000000000000 +279.094351291055 2304.495361328125 +281.050439796354 1439.000000000000 +284.163848757263 1161.000000000000 +289.121050841171 27007.203125000000 +290.124235475954 4648.000000000000 +291.083596057139 7334.543945312500 +291.117907792554 9833.311523437500 +292.120773411831 2090.552246093750 +293.150701487073 1637.447631835938 +304.112931726935 11920.000000000000 +305.115452640037 2211.000000000000 +309.236161920162 1307.848876953125 +326.094660184282 1216.000000000000 +327.007805441544 3647.000000000000 +329.004767001635 4060.000000000000 +330.205647137349 3003.000000000000 +331.001649685159 998.000000000000 +366.263546636202 1082.000000000000 +367.246996337816 1487.260375976562 +430.887335006560 982.000000000000 +445.118172390324 2169.000000000000 +446.119320228071 1009.322937011719 +468.387685434732 1524.000000000000 +500.275268715638 4948.336914062500 +501.278374861979 1438.000000000000 +502.290164633684 1631.000000000000 +505.851046230680 1720.000000000000 +512.344397174232 1069.467651367188 +512.414484404275 2483.054443359375 +519.138249644308 990.000000000000 +520.337150342418 1220.000000000000 +524.370135972210 1635.000000000000 +536.163584977615 5205.000000000000 +537.164871551777 2866.000000000000 +538.162040361972 1820.000000000000 +542.322114113497 7889.408691406250 +543.325813515830 2782.664062500000 +544.337159119688 2752.000000000000 +546.915148271326 1119.000000000000 +556.440204658126 1446.868652343750 +559.347381876279 1174.000000000000 +575.283778976507 1152.000000000000 +610.183851092976 2209.000000000000 +611.184376861119 1181.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=682 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=682 experiment=3_0 +##scan 163 +##specref ms_run[1]:sample=1 period=1 cycle=682 experiment=3 +55.053258132167 6.000000000000 +67.052989849680 16.000000000000 +88.979391089599 6.000000000000 +109.063050547042 6.000000000000 +109.101085144669 6.000000000000 +123.075345796204 6.000000000000 +140.063294286150 6.000000000000 +>compound 1_0-682004--164--UNKNOWN +>parentmass 249.107549984610 +>charge 1 +>rt 452.667000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005589764867 2294.063720703125 +53.013445055958 12597.693359375000 +53.850425319649 1340.454467773438 +54.009222871737 339238.562500000000 +55.005731854491 5294.396972656250 +55.011476278488 6250.596679687500 +55.054379017860 1761.070800781250 +55.934267785328 5352.454589843750 +56.941893960122 2242.341308593750 +59.049484585653 52072.828125000000 +60.044294021645 9938.447265625000 +61.039589277099 2273.430419921875 +63.997573159871 4196.579589843750 +64.005237146342 4320.143066406250 +68.011481724460 26730.150390625000 +68.993546142298 10693.709960937500 +69.007869969105 1192.218139648438 +69.013671104337 1098.155395507812 +69.044372395553 14513.338867187500 +72.936598767302 2099.222656250000 +73.064317157751 1612.868530273438 +76.485864352811 2012.000000000000 +79.020756544033 15401.780273437500 +80.048830810306 12086.630859375000 +81.936737807275 7099.281250000000 +82.996379943200 7332.096191406250 +87.043937378063 1284.087280273438 +87.054691364444 1735.449462890625 +89.506704481264 1363.000000000000 +90.488978556361 1527.000000000000 +91.052697348342 1240.000000000000 +95.952180950491 2313.000000000000 +97.954766102337 1345.658203125000 +97.968168531205 6228.090820312500 +100.074623976155 1083.000000000000 +102.090792000469 1723.000000000000 +109.942217651910 1239.000000000000 +113.962972305211 1857.000000000000 +114.090655304988 11653.611328125000 +118.085028075816 6825.976562500000 +122.095330108551 3707.768310546875 +122.962730068033 9873.996093750000 +123.090992739460 1713.000000000000 +123.961301473066 1043.788330078125 +130.157775632365 1202.000000000000 +136.020931202558 1751.000000000000 +136.111249167538 1420.000000000000 +139.963101043342 1112.164794921875 +140.067069787693 1037.000000000000 +141.089892790143 1667.429199218750 +141.111191146003 1364.941406250000 +141.957452440810 15194.245117187500 +142.959210742743 1028.000000000000 +147.090437233968 2799.000000000000 +149.022167561345 4504.397949218750 +149.042732259286 1257.066284179688 +151.095707544593 2676.601318359375 +151.109931871901 2734.434814453125 +153.126931456222 1114.000000000000 +155.069323046609 1758.931274414062 +155.105812248814 1927.436035156250 +155.973694100858 4459.000000000000 +158.153189714534 11874.000000000000 +159.151704211465 2641.084960937500 +159.968387162402 1295.000000000000 +161.095793670235 1895.903320312500 +163.131410791805 1005.978149414062 +164.142255211263 1591.111206054688 +170.095523278980 2774.611572265625 +171.146216027920 1262.000000000000 +172.132900003481 1052.518554687500 +173.080096538435 7436.877929687500 +174.990530030646 1487.000000000000 +175.118390474848 1308.603881835938 +177.054006503523 1284.000000000000 +178.135931142129 1039.362915039062 +178.157412463421 1487.105957031250 +179.105395614597 1888.000000000000 +182.960780820378 2091.357421875000 +182.981256310748 1532.590698242188 +183.098292655109 1039.880004882812 +186.183974954504 1329.000000000000 +186.220644650150 1722.000000000000 +193.156717557870 1169.000000000000 +194.115722573230 3806.000000000000 +195.120778552538 2502.656494140625 +198.184244308753 2348.000000000000 +200.200425972196 1333.000000000000 +217.106406482092 25411.171875000000 +218.109613605337 3087.000000000000 +219.095178232219 1538.764648437500 +224.126545049974 1050.020874023438 +228.196367848999 1616.349121093750 +235.167380487027 1059.150878906250 +239.088546688063 4987.301269531250 +242.283835650883 1454.000000000000 +246.861896170149 3093.000000000000 +249.183716487324 1784.804565429688 +250.177588579370 1574.000000000000 +250.999577375738 2608.599853515625 +251.182995871213 1367.000000000000 +252.997167162173 1649.000000000000 +256.226821306475 2881.139892578125 +256.261446512021 2000.881713867188 +267.170373189617 1392.000000000000 +278.208459274448 1833.000000000000 +279.094351291055 2304.495361328125 +281.050439796354 1439.000000000000 +284.163848757263 1161.000000000000 +289.121050841171 27007.203125000000 +290.124235475954 4648.000000000000 +291.083596057139 7334.543945312500 +291.117907792554 9833.311523437500 +292.120773411831 2090.552246093750 +293.150701487073 1637.447631835938 +304.112931726935 11920.000000000000 +305.115452640037 2211.000000000000 +309.236161920162 1307.848876953125 +326.094660184282 1216.000000000000 +327.007805441544 3647.000000000000 +329.004767001635 4060.000000000000 +330.205647137349 3003.000000000000 +331.001649685159 998.000000000000 +366.263546636202 1082.000000000000 +367.246996337816 1487.260375976562 +430.887335006560 982.000000000000 +445.118172390324 2169.000000000000 +446.119320228071 1009.322937011719 +468.387685434732 1524.000000000000 +500.275268715638 4948.336914062500 +501.278374861979 1438.000000000000 +502.290164633684 1631.000000000000 +505.851046230680 1720.000000000000 +512.344397174232 1069.467651367188 +512.414484404275 2483.054443359375 +519.138249644308 990.000000000000 +520.337150342418 1220.000000000000 +524.370135972210 1635.000000000000 +536.163584977615 5205.000000000000 +537.164871551777 2866.000000000000 +538.162040361972 1820.000000000000 +542.322114113497 7889.408691406250 +543.325813515830 2782.664062500000 +544.337159119688 2752.000000000000 +546.915148271326 1119.000000000000 +556.440204658126 1446.868652343750 +559.347381876279 1174.000000000000 +575.283778976507 1152.000000000000 +610.183851092976 2209.000000000000 +611.184376861119 1181.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=682 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=682 experiment=4_0 +##scan 164 +##specref ms_run[1]:sample=1 period=1 cycle=682 experiment=4 +57.068323351830 6.000000000000 +122.973265282065 6.000000000000 +132.670426378559 6.000000000000 +133.062741409098 39.000000000000 +150.043632114327 6.000000000000 +161.097119276413 31.000000000000 +>compound 1_0-682005--165--UNKNOWN +>parentmass 293.150701487073 +>charge 1 +>rt 452.667000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +293.150701487073 1637.447631835938 +>ms1peaks +52.005589764867 2294.063720703125 +53.013445055958 12597.693359375000 +53.850425319649 1340.454467773438 +54.009222871737 339238.562500000000 +55.005731854491 5294.396972656250 +55.011476278488 6250.596679687500 +55.054379017860 1761.070800781250 +55.934267785328 5352.454589843750 +56.941893960122 2242.341308593750 +59.049484585653 52072.828125000000 +60.044294021645 9938.447265625000 +61.039589277099 2273.430419921875 +63.997573159871 4196.579589843750 +64.005237146342 4320.143066406250 +68.011481724460 26730.150390625000 +68.993546142298 10693.709960937500 +69.007869969105 1192.218139648438 +69.013671104337 1098.155395507812 +69.044372395553 14513.338867187500 +72.936598767302 2099.222656250000 +73.064317157751 1612.868530273438 +76.485864352811 2012.000000000000 +79.020756544033 15401.780273437500 +80.048830810306 12086.630859375000 +81.936737807275 7099.281250000000 +82.996379943200 7332.096191406250 +87.043937378063 1284.087280273438 +87.054691364444 1735.449462890625 +89.506704481264 1363.000000000000 +90.488978556361 1527.000000000000 +91.052697348342 1240.000000000000 +95.952180950491 2313.000000000000 +97.954766102337 1345.658203125000 +97.968168531205 6228.090820312500 +100.074623976155 1083.000000000000 +102.090792000469 1723.000000000000 +109.942217651910 1239.000000000000 +113.962972305211 1857.000000000000 +114.090655304988 11653.611328125000 +118.085028075816 6825.976562500000 +122.095330108551 3707.768310546875 +122.962730068033 9873.996093750000 +123.090992739460 1713.000000000000 +123.961301473066 1043.788330078125 +130.157775632365 1202.000000000000 +136.020931202558 1751.000000000000 +136.111249167538 1420.000000000000 +139.963101043342 1112.164794921875 +140.067069787693 1037.000000000000 +141.089892790143 1667.429199218750 +141.111191146003 1364.941406250000 +141.957452440810 15194.245117187500 +142.959210742743 1028.000000000000 +147.090437233968 2799.000000000000 +149.022167561345 4504.397949218750 +149.042732259286 1257.066284179688 +151.095707544593 2676.601318359375 +151.109931871901 2734.434814453125 +153.126931456222 1114.000000000000 +155.069323046609 1758.931274414062 +155.105812248814 1927.436035156250 +155.973694100858 4459.000000000000 +158.153189714534 11874.000000000000 +159.151704211465 2641.084960937500 +159.968387162402 1295.000000000000 +161.095793670235 1895.903320312500 +163.131410791805 1005.978149414062 +164.142255211263 1591.111206054688 +170.095523278980 2774.611572265625 +171.146216027920 1262.000000000000 +172.132900003481 1052.518554687500 +173.080096538435 7436.877929687500 +174.990530030646 1487.000000000000 +175.118390474848 1308.603881835938 +177.054006503523 1284.000000000000 +178.135931142129 1039.362915039062 +178.157412463421 1487.105957031250 +179.105395614597 1888.000000000000 +182.960780820378 2091.357421875000 +182.981256310748 1532.590698242188 +183.098292655109 1039.880004882812 +186.183974954504 1329.000000000000 +186.220644650150 1722.000000000000 +193.156717557870 1169.000000000000 +194.115722573230 3806.000000000000 +195.120778552538 2502.656494140625 +198.184244308753 2348.000000000000 +200.200425972196 1333.000000000000 +217.106406482092 25411.171875000000 +218.109613605337 3087.000000000000 +219.095178232219 1538.764648437500 +224.126545049974 1050.020874023438 +228.196367848999 1616.349121093750 +235.167380487027 1059.150878906250 +239.088546688063 4987.301269531250 +242.283835650883 1454.000000000000 +246.861896170149 3093.000000000000 +249.183716487324 1784.804565429688 +250.177588579370 1574.000000000000 +250.999577375738 2608.599853515625 +251.182995871213 1367.000000000000 +252.997167162173 1649.000000000000 +256.226821306475 2881.139892578125 +256.261446512021 2000.881713867188 +267.170373189617 1392.000000000000 +278.208459274448 1833.000000000000 +279.094351291055 2304.495361328125 +281.050439796354 1439.000000000000 +284.163848757263 1161.000000000000 +289.121050841171 27007.203125000000 +290.124235475954 4648.000000000000 +291.083596057139 7334.543945312500 +291.117907792554 9833.311523437500 +292.120773411831 2090.552246093750 +293.150701487073 1637.447631835938 +304.112931726935 11920.000000000000 +305.115452640037 2211.000000000000 +309.236161920162 1307.848876953125 +326.094660184282 1216.000000000000 +327.007805441544 3647.000000000000 +329.004767001635 4060.000000000000 +330.205647137349 3003.000000000000 +331.001649685159 998.000000000000 +366.263546636202 1082.000000000000 +367.246996337816 1487.260375976562 +430.887335006560 982.000000000000 +445.118172390324 2169.000000000000 +446.119320228071 1009.322937011719 +468.387685434732 1524.000000000000 +500.275268715638 4948.336914062500 +501.278374861979 1438.000000000000 +502.290164633684 1631.000000000000 +505.851046230680 1720.000000000000 +512.344397174232 1069.467651367188 +512.414484404275 2483.054443359375 +519.138249644308 990.000000000000 +520.337150342418 1220.000000000000 +524.370135972210 1635.000000000000 +536.163584977615 5205.000000000000 +537.164871551777 2866.000000000000 +538.162040361972 1820.000000000000 +542.322114113497 7889.408691406250 +543.325813515830 2782.664062500000 +544.337159119688 2752.000000000000 +546.915148271326 1119.000000000000 +556.440204658126 1446.868652343750 +559.347381876279 1174.000000000000 +575.283778976507 1152.000000000000 +610.183851092976 2209.000000000000 +611.184376861119 1181.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=682 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=682 experiment=5_0 +##scan 165 +##specref ms_run[1]:sample=1 period=1 cycle=682 experiment=5 +151.027373232455 54.000000000000 +172.865140137620 16.000000000000 +194.031391099679 185.000000000000 +209.055063308217 39.000000000000 +233.097288475205 23.000000000000 +236.077597549157 24.000000000000 +251.102486828481 24.000000000000 +293.291008012348 93.000000000000 +>compound 1_0-683002--167--UNKNOWN +>parentmass 186.184131404061 +>charge 1 +>rt 453.589999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +186.184131404061 1538.000000000000 +>ms1peaks +52.005475792459 2617.124511718750 +53.013378314830 12539.880859375000 +53.850704389124 1315.354858398438 +54.009156764681 350222.906250000000 +55.005962503294 6616.327148437500 +55.011573107302 6340.225585937500 +55.054317064229 1912.099975585938 +55.934170412688 5194.190917968750 +56.049349757078 1206.987182617188 +56.941900792206 1984.687744140625 +59.049374045239 50821.675781250000 +60.044268282070 9960.265625000000 +61.039408948759 2155.941162109375 +63.997757490314 4011.974365234375 +64.005033453116 4309.461425781250 +68.011473491104 27279.937500000000 +68.993410304769 10618.767578125000 +69.044353322504 15616.364257812500 +72.936478151061 1935.000000000000 +73.064160411000 1754.000000000000 +76.486273623176 2300.000000000000 +79.020670531059 15054.637695312500 +80.048916231298 11225.356445312500 +81.936860683755 8093.134277343750 +82.996338954621 8549.000000000000 +87.043803331643 1316.723388671875 +87.054875471977 1271.582275390625 +89.059312744262 1050.566162109375 +89.069709879200 1212.011230468750 +89.505907868273 1402.975952148438 +90.488823648736 1502.000000000000 +91.053208392747 1108.000000000000 +95.951921805964 1979.000000000000 +97.953785478913 982.440002441406 +97.968121015875 6916.000000000000 +100.074934261927 1326.000000000000 +102.090753048495 1640.784423828125 +103.954380806602 1024.000000000000 +109.942491586746 1162.000000000000 +113.962307834797 2020.322265625000 +114.090548402732 10476.377929687500 +118.085346318486 8077.000000000000 +122.095246292939 3798.896972656250 +122.962908829486 10226.000000000000 +123.090454686165 1827.000000000000 +123.960818348367 1044.000000000000 +129.051289316031 995.000000000000 +130.157829615359 1187.000000000000 +136.020472313019 1676.000000000000 +136.110884772152 1266.000000000000 +137.963232394383 1110.000000000000 +141.089289767371 1312.505737304688 +141.111958982864 1253.000000000000 +141.957296859184 14377.864257812500 +142.960171174130 1134.000000000000 +147.090251831089 2691.000000000000 +149.022108330062 4420.826171875000 +149.042054759884 1381.723999023438 +151.096005454731 2146.172119140625 +151.110486882567 2375.535156250000 +155.068578386131 1401.430297851562 +155.105121160501 1915.811279296875 +155.972702802119 3926.000000000000 +158.001435920737 994.574768066406 +158.094922913936 1034.786743164062 +158.115258469613 1057.655639648438 +158.152885305428 12370.983398437500 +159.154241367963 1786.531250000000 +159.967380624338 1012.000000000000 +161.095431806967 1523.706909179688 +163.124346097238 1092.053222656250 +164.141559918882 1356.968750000000 +170.095283585753 2452.661865234375 +171.146114238463 1308.000000000000 +172.132277911255 988.843933105469 +173.079497766031 7396.000000000000 +174.126882446625 1059.000000000000 +174.990836266533 1288.000000000000 +175.120934645394 1380.284179687500 +177.053202644538 1157.000000000000 +178.157015559642 1506.022827148438 +179.104779209374 1997.000000000000 +182.960294879212 2168.488525390625 +182.979844671846 1636.538085937500 +183.097251263676 975.970886230469 +186.184131404061 1538.000000000000 +186.220316530702 1978.395996093750 +194.115887925534 3994.000000000000 +195.120290075932 2135.307373046875 +197.077120306349 1145.289794921875 +198.183476446623 2461.486572265625 +199.167914034556 997.509704589844 +200.199605164190 1208.000000000000 +217.105900026809 23007.000000000000 +218.108987420819 2646.000000000000 +219.094205779128 1198.057739257812 +221.151561647748 1218.945068359375 +224.126226799556 1194.000000000000 +228.195286797571 1616.183349609375 +235.168761941494 1134.605834960938 +239.087777368419 5352.000000000000 +242.282623522391 1852.000000000000 +246.860583400481 3359.000000000000 +249.183196945845 1408.000000000000 +250.179975975092 1339.061889648438 +250.998877572208 2553.740966796875 +251.183298578374 1152.000000000000 +252.996160148286 1628.124267578125 +256.226353669723 2254.442138671875 +267.170527873108 1361.000000000000 +278.209131593116 1533.918457031250 +279.092299969221 2061.947021484375 +281.049622305741 1292.000000000000 +284.163054834456 1115.000000000000 +289.120096934377 10287.241210937500 +290.123088085653 1560.000000000000 +291.081684168627 2371.477539062500 +291.117756445809 3689.470214843750 +292.119039202753 1249.000000000000 +293.148220258563 1097.490722656250 +304.112440693313 7674.000000000000 +305.114296405000 1470.000000000000 +309.230230347687 1272.000000000000 +327.006684140753 3801.950683593750 +329.003887686998 3451.000000000000 +330.204508769869 2445.000000000000 +331.001097065232 1024.000000000000 +367.248567151117 988.174438476562 +371.313964112879 985.000000000000 +430.886392055683 1083.000000000000 +432.883860091270 1010.000000000000 +445.118038418407 1968.693969726562 +468.388790144399 1219.000000000000 +500.274228987555 3302.108398437500 +502.289892027090 1892.000000000000 +505.850511314647 1636.000000000000 +512.413213573025 2137.378417968750 +519.136476435531 989.311035156250 +520.335944368793 1085.000000000000 +524.368461140809 1654.000000000000 +536.163935932083 4706.000000000000 +537.163829357755 2301.000000000000 +538.160747649950 2022.000000000000 +542.321738808865 7222.184570312500 +543.324639525781 2316.000000000000 +544.336501336759 2655.000000000000 +546.912069818784 1021.000000000000 +556.438375470961 1482.722656250000 +610.182385281537 2028.000000000000 +611.181898223835 1122.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=683 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=683 experiment=2_0 +##scan 167 +##specref ms_run[1]:sample=1 period=1 cycle=683 experiment=2 +56.941110364060 13.000000000000 +57.037378575583 30.000000000000 +57.069271016999 30.000000000000 +57.075696210235 30.000000000000 +74.097211035446 30.000000000000 +170.089788354449 30.000000000000 +711.823817949091 13.000000000000 +>compound 1_0-683003--168--UNKNOWN +>parentmass 256.226353669723 +>charge 1 +>rt 453.589999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +256.226353669723 2254.442138671875 +>ms1peaks +52.005475792459 2617.124511718750 +53.013378314830 12539.880859375000 +53.850704389124 1315.354858398438 +54.009156764681 350222.906250000000 +55.005962503294 6616.327148437500 +55.011573107302 6340.225585937500 +55.054317064229 1912.099975585938 +55.934170412688 5194.190917968750 +56.049349757078 1206.987182617188 +56.941900792206 1984.687744140625 +59.049374045239 50821.675781250000 +60.044268282070 9960.265625000000 +61.039408948759 2155.941162109375 +63.997757490314 4011.974365234375 +64.005033453116 4309.461425781250 +68.011473491104 27279.937500000000 +68.993410304769 10618.767578125000 +69.044353322504 15616.364257812500 +72.936478151061 1935.000000000000 +73.064160411000 1754.000000000000 +76.486273623176 2300.000000000000 +79.020670531059 15054.637695312500 +80.048916231298 11225.356445312500 +81.936860683755 8093.134277343750 +82.996338954621 8549.000000000000 +87.043803331643 1316.723388671875 +87.054875471977 1271.582275390625 +89.059312744262 1050.566162109375 +89.069709879200 1212.011230468750 +89.505907868273 1402.975952148438 +90.488823648736 1502.000000000000 +91.053208392747 1108.000000000000 +95.951921805964 1979.000000000000 +97.953785478913 982.440002441406 +97.968121015875 6916.000000000000 +100.074934261927 1326.000000000000 +102.090753048495 1640.784423828125 +103.954380806602 1024.000000000000 +109.942491586746 1162.000000000000 +113.962307834797 2020.322265625000 +114.090548402732 10476.377929687500 +118.085346318486 8077.000000000000 +122.095246292939 3798.896972656250 +122.962908829486 10226.000000000000 +123.090454686165 1827.000000000000 +123.960818348367 1044.000000000000 +129.051289316031 995.000000000000 +130.157829615359 1187.000000000000 +136.020472313019 1676.000000000000 +136.110884772152 1266.000000000000 +137.963232394383 1110.000000000000 +141.089289767371 1312.505737304688 +141.111958982864 1253.000000000000 +141.957296859184 14377.864257812500 +142.960171174130 1134.000000000000 +147.090251831089 2691.000000000000 +149.022108330062 4420.826171875000 +149.042054759884 1381.723999023438 +151.096005454731 2146.172119140625 +151.110486882567 2375.535156250000 +155.068578386131 1401.430297851562 +155.105121160501 1915.811279296875 +155.972702802119 3926.000000000000 +158.001435920737 994.574768066406 +158.094922913936 1034.786743164062 +158.115258469613 1057.655639648438 +158.152885305428 12370.983398437500 +159.154241367963 1786.531250000000 +159.967380624338 1012.000000000000 +161.095431806967 1523.706909179688 +163.124346097238 1092.053222656250 +164.141559918882 1356.968750000000 +170.095283585753 2452.661865234375 +171.146114238463 1308.000000000000 +172.132277911255 988.843933105469 +173.079497766031 7396.000000000000 +174.126882446625 1059.000000000000 +174.990836266533 1288.000000000000 +175.120934645394 1380.284179687500 +177.053202644538 1157.000000000000 +178.157015559642 1506.022827148438 +179.104779209374 1997.000000000000 +182.960294879212 2168.488525390625 +182.979844671846 1636.538085937500 +183.097251263676 975.970886230469 +186.184131404061 1538.000000000000 +186.220316530702 1978.395996093750 +194.115887925534 3994.000000000000 +195.120290075932 2135.307373046875 +197.077120306349 1145.289794921875 +198.183476446623 2461.486572265625 +199.167914034556 997.509704589844 +200.199605164190 1208.000000000000 +217.105900026809 23007.000000000000 +218.108987420819 2646.000000000000 +219.094205779128 1198.057739257812 +221.151561647748 1218.945068359375 +224.126226799556 1194.000000000000 +228.195286797571 1616.183349609375 +235.168761941494 1134.605834960938 +239.087777368419 5352.000000000000 +242.282623522391 1852.000000000000 +246.860583400481 3359.000000000000 +249.183196945845 1408.000000000000 +250.179975975092 1339.061889648438 +250.998877572208 2553.740966796875 +251.183298578374 1152.000000000000 +252.996160148286 1628.124267578125 +256.226353669723 2254.442138671875 +267.170527873108 1361.000000000000 +278.209131593116 1533.918457031250 +279.092299969221 2061.947021484375 +281.049622305741 1292.000000000000 +284.163054834456 1115.000000000000 +289.120096934377 10287.241210937500 +290.123088085653 1560.000000000000 +291.081684168627 2371.477539062500 +291.117756445809 3689.470214843750 +292.119039202753 1249.000000000000 +293.148220258563 1097.490722656250 +304.112440693313 7674.000000000000 +305.114296405000 1470.000000000000 +309.230230347687 1272.000000000000 +327.006684140753 3801.950683593750 +329.003887686998 3451.000000000000 +330.204508769869 2445.000000000000 +331.001097065232 1024.000000000000 +367.248567151117 988.174438476562 +371.313964112879 985.000000000000 +430.886392055683 1083.000000000000 +432.883860091270 1010.000000000000 +445.118038418407 1968.693969726562 +468.388790144399 1219.000000000000 +500.274228987555 3302.108398437500 +502.289892027090 1892.000000000000 +505.850511314647 1636.000000000000 +512.413213573025 2137.378417968750 +519.136476435531 989.311035156250 +520.335944368793 1085.000000000000 +524.368461140809 1654.000000000000 +536.163935932083 4706.000000000000 +537.163829357755 2301.000000000000 +538.160747649950 2022.000000000000 +542.321738808865 7222.184570312500 +543.324639525781 2316.000000000000 +544.336501336759 2655.000000000000 +546.912069818784 1021.000000000000 +556.438375470961 1482.722656250000 +610.182385281537 2028.000000000000 +611.181898223835 1122.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=683 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=683 experiment=3_0 +##scan 168 +##specref ms_run[1]:sample=1 period=1 cycle=683 experiment=3 +55.054340360629 45.000000000000 +119.083765035463 30.000000000000 +123.114810642395 30.000000000000 +181.969567335032 45.000000000000 +256.263449695917 30.000000000000 +>compound 1_0-683004--169--UNKNOWN +>parentmass 512.413213573025 +>charge 1 +>rt 453.589999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +512.413213573025 2137.378417968750 +>ms1peaks +52.005475792459 2617.124511718750 +53.013378314830 12539.880859375000 +53.850704389124 1315.354858398438 +54.009156764681 350222.906250000000 +55.005962503294 6616.327148437500 +55.011573107302 6340.225585937500 +55.054317064229 1912.099975585938 +55.934170412688 5194.190917968750 +56.049349757078 1206.987182617188 +56.941900792206 1984.687744140625 +59.049374045239 50821.675781250000 +60.044268282070 9960.265625000000 +61.039408948759 2155.941162109375 +63.997757490314 4011.974365234375 +64.005033453116 4309.461425781250 +68.011473491104 27279.937500000000 +68.993410304769 10618.767578125000 +69.044353322504 15616.364257812500 +72.936478151061 1935.000000000000 +73.064160411000 1754.000000000000 +76.486273623176 2300.000000000000 +79.020670531059 15054.637695312500 +80.048916231298 11225.356445312500 +81.936860683755 8093.134277343750 +82.996338954621 8549.000000000000 +87.043803331643 1316.723388671875 +87.054875471977 1271.582275390625 +89.059312744262 1050.566162109375 +89.069709879200 1212.011230468750 +89.505907868273 1402.975952148438 +90.488823648736 1502.000000000000 +91.053208392747 1108.000000000000 +95.951921805964 1979.000000000000 +97.953785478913 982.440002441406 +97.968121015875 6916.000000000000 +100.074934261927 1326.000000000000 +102.090753048495 1640.784423828125 +103.954380806602 1024.000000000000 +109.942491586746 1162.000000000000 +113.962307834797 2020.322265625000 +114.090548402732 10476.377929687500 +118.085346318486 8077.000000000000 +122.095246292939 3798.896972656250 +122.962908829486 10226.000000000000 +123.090454686165 1827.000000000000 +123.960818348367 1044.000000000000 +129.051289316031 995.000000000000 +130.157829615359 1187.000000000000 +136.020472313019 1676.000000000000 +136.110884772152 1266.000000000000 +137.963232394383 1110.000000000000 +141.089289767371 1312.505737304688 +141.111958982864 1253.000000000000 +141.957296859184 14377.864257812500 +142.960171174130 1134.000000000000 +147.090251831089 2691.000000000000 +149.022108330062 4420.826171875000 +149.042054759884 1381.723999023438 +151.096005454731 2146.172119140625 +151.110486882567 2375.535156250000 +155.068578386131 1401.430297851562 +155.105121160501 1915.811279296875 +155.972702802119 3926.000000000000 +158.001435920737 994.574768066406 +158.094922913936 1034.786743164062 +158.115258469613 1057.655639648438 +158.152885305428 12370.983398437500 +159.154241367963 1786.531250000000 +159.967380624338 1012.000000000000 +161.095431806967 1523.706909179688 +163.124346097238 1092.053222656250 +164.141559918882 1356.968750000000 +170.095283585753 2452.661865234375 +171.146114238463 1308.000000000000 +172.132277911255 988.843933105469 +173.079497766031 7396.000000000000 +174.126882446625 1059.000000000000 +174.990836266533 1288.000000000000 +175.120934645394 1380.284179687500 +177.053202644538 1157.000000000000 +178.157015559642 1506.022827148438 +179.104779209374 1997.000000000000 +182.960294879212 2168.488525390625 +182.979844671846 1636.538085937500 +183.097251263676 975.970886230469 +186.184131404061 1538.000000000000 +186.220316530702 1978.395996093750 +194.115887925534 3994.000000000000 +195.120290075932 2135.307373046875 +197.077120306349 1145.289794921875 +198.183476446623 2461.486572265625 +199.167914034556 997.509704589844 +200.199605164190 1208.000000000000 +217.105900026809 23007.000000000000 +218.108987420819 2646.000000000000 +219.094205779128 1198.057739257812 +221.151561647748 1218.945068359375 +224.126226799556 1194.000000000000 +228.195286797571 1616.183349609375 +235.168761941494 1134.605834960938 +239.087777368419 5352.000000000000 +242.282623522391 1852.000000000000 +246.860583400481 3359.000000000000 +249.183196945845 1408.000000000000 +250.179975975092 1339.061889648438 +250.998877572208 2553.740966796875 +251.183298578374 1152.000000000000 +252.996160148286 1628.124267578125 +256.226353669723 2254.442138671875 +267.170527873108 1361.000000000000 +278.209131593116 1533.918457031250 +279.092299969221 2061.947021484375 +281.049622305741 1292.000000000000 +284.163054834456 1115.000000000000 +289.120096934377 10287.241210937500 +290.123088085653 1560.000000000000 +291.081684168627 2371.477539062500 +291.117756445809 3689.470214843750 +292.119039202753 1249.000000000000 +293.148220258563 1097.490722656250 +304.112440693313 7674.000000000000 +305.114296405000 1470.000000000000 +309.230230347687 1272.000000000000 +327.006684140753 3801.950683593750 +329.003887686998 3451.000000000000 +330.204508769869 2445.000000000000 +331.001097065232 1024.000000000000 +367.248567151117 988.174438476562 +371.313964112879 985.000000000000 +430.886392055683 1083.000000000000 +432.883860091270 1010.000000000000 +445.118038418407 1968.693969726562 +468.388790144399 1219.000000000000 +500.274228987555 3302.108398437500 +502.289892027090 1892.000000000000 +505.850511314647 1636.000000000000 +512.413213573025 2137.378417968750 +519.136476435531 989.311035156250 +520.335944368793 1085.000000000000 +524.368461140809 1654.000000000000 +536.163935932083 4706.000000000000 +537.163829357755 2301.000000000000 +538.160747649950 2022.000000000000 +542.321738808865 7222.184570312500 +543.324639525781 2316.000000000000 +544.336501336759 2655.000000000000 +546.912069818784 1021.000000000000 +556.438375470961 1482.722656250000 +610.182385281537 2028.000000000000 +611.181898223835 1122.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=683 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=683 experiment=4_0 +##scan 169 +##specref ms_run[1]:sample=1 period=1 cycle=683 experiment=4 +333.167098981034 6.000000000000 +>compound 1_0-683005--170--UNKNOWN +>parentmass 556.438375470961 +>charge 1 +>rt 453.589999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +556.438375470961 1482.722656250000 +>ms1peaks +52.005475792459 2617.124511718750 +53.013378314830 12539.880859375000 +53.850704389124 1315.354858398438 +54.009156764681 350222.906250000000 +55.005962503294 6616.327148437500 +55.011573107302 6340.225585937500 +55.054317064229 1912.099975585938 +55.934170412688 5194.190917968750 +56.049349757078 1206.987182617188 +56.941900792206 1984.687744140625 +59.049374045239 50821.675781250000 +60.044268282070 9960.265625000000 +61.039408948759 2155.941162109375 +63.997757490314 4011.974365234375 +64.005033453116 4309.461425781250 +68.011473491104 27279.937500000000 +68.993410304769 10618.767578125000 +69.044353322504 15616.364257812500 +72.936478151061 1935.000000000000 +73.064160411000 1754.000000000000 +76.486273623176 2300.000000000000 +79.020670531059 15054.637695312500 +80.048916231298 11225.356445312500 +81.936860683755 8093.134277343750 +82.996338954621 8549.000000000000 +87.043803331643 1316.723388671875 +87.054875471977 1271.582275390625 +89.059312744262 1050.566162109375 +89.069709879200 1212.011230468750 +89.505907868273 1402.975952148438 +90.488823648736 1502.000000000000 +91.053208392747 1108.000000000000 +95.951921805964 1979.000000000000 +97.953785478913 982.440002441406 +97.968121015875 6916.000000000000 +100.074934261927 1326.000000000000 +102.090753048495 1640.784423828125 +103.954380806602 1024.000000000000 +109.942491586746 1162.000000000000 +113.962307834797 2020.322265625000 +114.090548402732 10476.377929687500 +118.085346318486 8077.000000000000 +122.095246292939 3798.896972656250 +122.962908829486 10226.000000000000 +123.090454686165 1827.000000000000 +123.960818348367 1044.000000000000 +129.051289316031 995.000000000000 +130.157829615359 1187.000000000000 +136.020472313019 1676.000000000000 +136.110884772152 1266.000000000000 +137.963232394383 1110.000000000000 +141.089289767371 1312.505737304688 +141.111958982864 1253.000000000000 +141.957296859184 14377.864257812500 +142.960171174130 1134.000000000000 +147.090251831089 2691.000000000000 +149.022108330062 4420.826171875000 +149.042054759884 1381.723999023438 +151.096005454731 2146.172119140625 +151.110486882567 2375.535156250000 +155.068578386131 1401.430297851562 +155.105121160501 1915.811279296875 +155.972702802119 3926.000000000000 +158.001435920737 994.574768066406 +158.094922913936 1034.786743164062 +158.115258469613 1057.655639648438 +158.152885305428 12370.983398437500 +159.154241367963 1786.531250000000 +159.967380624338 1012.000000000000 +161.095431806967 1523.706909179688 +163.124346097238 1092.053222656250 +164.141559918882 1356.968750000000 +170.095283585753 2452.661865234375 +171.146114238463 1308.000000000000 +172.132277911255 988.843933105469 +173.079497766031 7396.000000000000 +174.126882446625 1059.000000000000 +174.990836266533 1288.000000000000 +175.120934645394 1380.284179687500 +177.053202644538 1157.000000000000 +178.157015559642 1506.022827148438 +179.104779209374 1997.000000000000 +182.960294879212 2168.488525390625 +182.979844671846 1636.538085937500 +183.097251263676 975.970886230469 +186.184131404061 1538.000000000000 +186.220316530702 1978.395996093750 +194.115887925534 3994.000000000000 +195.120290075932 2135.307373046875 +197.077120306349 1145.289794921875 +198.183476446623 2461.486572265625 +199.167914034556 997.509704589844 +200.199605164190 1208.000000000000 +217.105900026809 23007.000000000000 +218.108987420819 2646.000000000000 +219.094205779128 1198.057739257812 +221.151561647748 1218.945068359375 +224.126226799556 1194.000000000000 +228.195286797571 1616.183349609375 +235.168761941494 1134.605834960938 +239.087777368419 5352.000000000000 +242.282623522391 1852.000000000000 +246.860583400481 3359.000000000000 +249.183196945845 1408.000000000000 +250.179975975092 1339.061889648438 +250.998877572208 2553.740966796875 +251.183298578374 1152.000000000000 +252.996160148286 1628.124267578125 +256.226353669723 2254.442138671875 +267.170527873108 1361.000000000000 +278.209131593116 1533.918457031250 +279.092299969221 2061.947021484375 +281.049622305741 1292.000000000000 +284.163054834456 1115.000000000000 +289.120096934377 10287.241210937500 +290.123088085653 1560.000000000000 +291.081684168627 2371.477539062500 +291.117756445809 3689.470214843750 +292.119039202753 1249.000000000000 +293.148220258563 1097.490722656250 +304.112440693313 7674.000000000000 +305.114296405000 1470.000000000000 +309.230230347687 1272.000000000000 +327.006684140753 3801.950683593750 +329.003887686998 3451.000000000000 +330.204508769869 2445.000000000000 +331.001097065232 1024.000000000000 +367.248567151117 988.174438476562 +371.313964112879 985.000000000000 +430.886392055683 1083.000000000000 +432.883860091270 1010.000000000000 +445.118038418407 1968.693969726562 +468.388790144399 1219.000000000000 +500.274228987555 3302.108398437500 +502.289892027090 1892.000000000000 +505.850511314647 1636.000000000000 +512.413213573025 2137.378417968750 +519.136476435531 989.311035156250 +520.335944368793 1085.000000000000 +524.368461140809 1654.000000000000 +536.163935932083 4706.000000000000 +537.163829357755 2301.000000000000 +538.160747649950 2022.000000000000 +542.321738808865 7222.184570312500 +543.324639525781 2316.000000000000 +544.336501336759 2655.000000000000 +546.912069818784 1021.000000000000 +556.438375470961 1482.722656250000 +610.182385281537 2028.000000000000 +611.181898223835 1122.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=683 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=683 experiment=5_0 +##scan 170 +##specref ms_run[1]:sample=1 period=1 cycle=683 experiment=5 +71.089080009548 6.000000000000 +79.050264286183 6.000000000000 +89.057038828256 40.000000000000 +113.130979280619 16.000000000000 +257.249155051833 16.000000000000 +311.131756011085 6.000000000000 +342.092356628605 6.000000000000 +539.413753739958 24.000000000000 +>compound 1_0-683006--171--UNKNOWN +>parentmass 600.465169220820 +>charge 1 +>rt 453.589999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005475792459 2617.124511718750 +53.013378314830 12539.880859375000 +53.850704389124 1315.354858398438 +54.009156764681 350222.906250000000 +55.005962503294 6616.327148437500 +55.011573107302 6340.225585937500 +55.054317064229 1912.099975585938 +55.934170412688 5194.190917968750 +56.049349757078 1206.987182617188 +56.941900792206 1984.687744140625 +59.049374045239 50821.675781250000 +60.044268282070 9960.265625000000 +61.039408948759 2155.941162109375 +63.997757490314 4011.974365234375 +64.005033453116 4309.461425781250 +68.011473491104 27279.937500000000 +68.993410304769 10618.767578125000 +69.044353322504 15616.364257812500 +72.936478151061 1935.000000000000 +73.064160411000 1754.000000000000 +76.486273623176 2300.000000000000 +79.020670531059 15054.637695312500 +80.048916231298 11225.356445312500 +81.936860683755 8093.134277343750 +82.996338954621 8549.000000000000 +87.043803331643 1316.723388671875 +87.054875471977 1271.582275390625 +89.059312744262 1050.566162109375 +89.069709879200 1212.011230468750 +89.505907868273 1402.975952148438 +90.488823648736 1502.000000000000 +91.053208392747 1108.000000000000 +95.951921805964 1979.000000000000 +97.953785478913 982.440002441406 +97.968121015875 6916.000000000000 +100.074934261927 1326.000000000000 +102.090753048495 1640.784423828125 +103.954380806602 1024.000000000000 +109.942491586746 1162.000000000000 +113.962307834797 2020.322265625000 +114.090548402732 10476.377929687500 +118.085346318486 8077.000000000000 +122.095246292939 3798.896972656250 +122.962908829486 10226.000000000000 +123.090454686165 1827.000000000000 +123.960818348367 1044.000000000000 +129.051289316031 995.000000000000 +130.157829615359 1187.000000000000 +136.020472313019 1676.000000000000 +136.110884772152 1266.000000000000 +137.963232394383 1110.000000000000 +141.089289767371 1312.505737304688 +141.111958982864 1253.000000000000 +141.957296859184 14377.864257812500 +142.960171174130 1134.000000000000 +147.090251831089 2691.000000000000 +149.022108330062 4420.826171875000 +149.042054759884 1381.723999023438 +151.096005454731 2146.172119140625 +151.110486882567 2375.535156250000 +155.068578386131 1401.430297851562 +155.105121160501 1915.811279296875 +155.972702802119 3926.000000000000 +158.001435920737 994.574768066406 +158.094922913936 1034.786743164062 +158.115258469613 1057.655639648438 +158.152885305428 12370.983398437500 +159.154241367963 1786.531250000000 +159.967380624338 1012.000000000000 +161.095431806967 1523.706909179688 +163.124346097238 1092.053222656250 +164.141559918882 1356.968750000000 +170.095283585753 2452.661865234375 +171.146114238463 1308.000000000000 +172.132277911255 988.843933105469 +173.079497766031 7396.000000000000 +174.126882446625 1059.000000000000 +174.990836266533 1288.000000000000 +175.120934645394 1380.284179687500 +177.053202644538 1157.000000000000 +178.157015559642 1506.022827148438 +179.104779209374 1997.000000000000 +182.960294879212 2168.488525390625 +182.979844671846 1636.538085937500 +183.097251263676 975.970886230469 +186.184131404061 1538.000000000000 +186.220316530702 1978.395996093750 +194.115887925534 3994.000000000000 +195.120290075932 2135.307373046875 +197.077120306349 1145.289794921875 +198.183476446623 2461.486572265625 +199.167914034556 997.509704589844 +200.199605164190 1208.000000000000 +217.105900026809 23007.000000000000 +218.108987420819 2646.000000000000 +219.094205779128 1198.057739257812 +221.151561647748 1218.945068359375 +224.126226799556 1194.000000000000 +228.195286797571 1616.183349609375 +235.168761941494 1134.605834960938 +239.087777368419 5352.000000000000 +242.282623522391 1852.000000000000 +246.860583400481 3359.000000000000 +249.183196945845 1408.000000000000 +250.179975975092 1339.061889648438 +250.998877572208 2553.740966796875 +251.183298578374 1152.000000000000 +252.996160148286 1628.124267578125 +256.226353669723 2254.442138671875 +267.170527873108 1361.000000000000 +278.209131593116 1533.918457031250 +279.092299969221 2061.947021484375 +281.049622305741 1292.000000000000 +284.163054834456 1115.000000000000 +289.120096934377 10287.241210937500 +290.123088085653 1560.000000000000 +291.081684168627 2371.477539062500 +291.117756445809 3689.470214843750 +292.119039202753 1249.000000000000 +293.148220258563 1097.490722656250 +304.112440693313 7674.000000000000 +305.114296405000 1470.000000000000 +309.230230347687 1272.000000000000 +327.006684140753 3801.950683593750 +329.003887686998 3451.000000000000 +330.204508769869 2445.000000000000 +331.001097065232 1024.000000000000 +367.248567151117 988.174438476562 +371.313964112879 985.000000000000 +430.886392055683 1083.000000000000 +432.883860091270 1010.000000000000 +445.118038418407 1968.693969726562 +468.388790144399 1219.000000000000 +500.274228987555 3302.108398437500 +502.289892027090 1892.000000000000 +505.850511314647 1636.000000000000 +512.413213573025 2137.378417968750 +519.136476435531 989.311035156250 +520.335944368793 1085.000000000000 +524.368461140809 1654.000000000000 +536.163935932083 4706.000000000000 +537.163829357755 2301.000000000000 +538.160747649950 2022.000000000000 +542.321738808865 7222.184570312500 +543.324639525781 2316.000000000000 +544.336501336759 2655.000000000000 +546.912069818784 1021.000000000000 +556.438375470961 1482.722656250000 +610.182385281537 2028.000000000000 +611.181898223835 1122.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=683 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=683 experiment=6_0 +##scan 171 +##specref ms_run[1]:sample=1 period=1 cycle=683 experiment=6 +583.430194358394 16.000000000000 +600.471702085433 16.000000000000 +>compound 1_0-684002--173--UNKNOWN +>parentmass 197.076196888252 +>charge 1 +>rt 454.516000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005055752743 2535.964355468750 +53.013304387882 13524.087890625000 +53.850466238024 1189.000000000000 +54.009168155297 353300.781250000000 +55.005867838546 6321.625488281250 +55.011096389479 6395.116699218750 +55.054048764476 1667.644042968750 +55.933744861774 5517.931640625000 +56.941678501836 2385.528808593750 +59.049246215078 62577.765625000000 +60.044272562846 11294.218750000000 +61.039109845214 1753.034912109375 +63.997184367771 4165.606445312500 +64.004750648025 4249.142089843750 +68.011158941272 26967.845703125000 +68.993356336228 11891.033203125000 +69.009273188190 1077.398315429688 +69.044228412240 14899.603515625000 +72.936468187320 2032.373413085938 +73.063852449522 1719.634399414062 +76.485919231129 2172.000000000000 +79.020524571197 16902.101562500000 +80.048647839426 12657.626953125000 +81.936696543330 8232.779296875000 +82.996080678623 8146.264648437500 +87.043475160411 1395.252319335938 +87.054352310828 1558.482177734375 +89.058909693116 1269.118896484375 +89.069350868807 1247.488525390625 +89.505589887121 1342.000000000000 +90.488691498550 1942.000000000000 +91.053378263618 1475.000000000000 +95.951669732691 1976.000000000000 +97.967560868981 7359.775390625000 +100.074534978752 1189.000000000000 +102.090338226360 1826.376220703125 +109.942414205150 1188.000000000000 +113.962012843210 1736.000000000000 +114.090204103750 11387.237304687500 +115.093936155418 1026.477294921875 +118.084824300069 7671.000000000000 +122.095254248058 3649.000000000000 +122.962559128453 10112.945312500000 +123.090679016705 1699.000000000000 +123.961217643039 1068.000000000000 +130.157297802018 994.000000000000 +136.020183489680 1322.000000000000 +136.111243273071 1445.000000000000 +137.962665914090 1202.000000000000 +139.962346851635 1044.000000000000 +141.089611087824 1626.178955078125 +141.111315482047 1498.598510742188 +141.934405531056 2084.462402343750 +141.957003969247 15281.953125000000 +147.089927402646 2716.236816406250 +149.021952430256 5215.276855468750 +151.095029441084 2611.063720703125 +151.109299282509 3043.490966796875 +155.068716413981 1815.925781250000 +155.104692907060 1465.157470703125 +155.972438501058 4353.000000000000 +158.152200943323 12348.822265625000 +159.154956605569 1635.504028320312 +159.967803132941 1244.507446289062 +161.095175826667 1739.000000000000 +163.129926212915 1158.326904296875 +164.141946259428 1718.425781250000 +170.094715935231 2753.855468750000 +171.145377171095 1550.000000000000 +172.132577603702 1445.519653320312 +173.079147806049 8056.288574218750 +174.126251925613 1018.000000000000 +174.990645538544 1161.000000000000 +175.122110492133 1170.411743164062 +177.052488517392 1051.659423828125 +178.157387143850 1352.390502929688 +179.104449390129 1822.000000000000 +182.960513183082 2466.002441406250 +182.982893863190 1238.924926757812 +183.078198978970 1427.060058593750 +183.097659692423 1378.870727539062 +186.184710056301 1091.000000000000 +186.220156978700 1745.000000000000 +194.114989559698 3824.000000000000 +195.102013459731 2090.739746093750 +195.120720998964 2570.564453125000 +198.183752557279 2298.281738281250 +199.167445330918 1079.616577148438 +200.199182211058 1213.000000000000 +205.084290329945 996.000000000000 +211.107662654521 1040.748901367188 +211.126844372442 1047.980834960938 +217.105638765104 26745.580078125000 +218.109080318901 2892.000000000000 +219.093891661045 1471.017944335938 +221.151414683949 1411.084838867188 +223.062156383341 1011.187377929688 +223.113584496198 1057.747558593750 +224.126501131170 1396.085937500000 +228.193498338851 1717.108154296875 +235.167367598480 1268.345458984375 +235.203348790223 1014.675109863281 +239.087708963045 6146.106933593750 +242.282676845201 1728.000000000000 +246.860945003884 3475.000000000000 +249.183065513133 1588.561889648438 +250.176636932456 1366.377441406250 +250.998640546851 2659.000000000000 +251.181320564304 1150.891967773438 +252.995743699801 1989.000000000000 +256.224312470076 1526.016723632812 +267.170376627160 1639.885620117188 +278.208499725280 1244.000000000000 +279.092328768907 2042.000000000000 +281.049924199324 1627.000000000000 +284.162752099009 1097.000000000000 +289.119930492523 5051.885253906250 +290.121926056623 1045.000000000000 +291.116846102720 1626.000000000000 +304.111834403142 5771.000000000000 +305.115013708988 1041.000000000000 +309.227944713182 992.105407714844 +327.007466942849 3904.000000000000 +329.003581472897 3646.000000000000 +330.205068564965 2091.202148437500 +331.001047005985 1017.994262695312 +367.245746012184 1118.183349609375 +371.099142491710 1139.000000000000 +371.312999785903 1091.000000000000 +430.886671499821 1115.000000000000 +445.117775583424 2600.000000000000 +446.118588613662 999.000000000000 +500.273782823440 2782.000000000000 +502.288804355749 1789.000000000000 +505.850127143100 1506.000000000000 +512.413609192773 1457.411132812500 +519.133662820407 1026.000000000000 +520.335877972225 1195.000000000000 +524.368508006775 1667.000000000000 +536.162270956731 5375.000000000000 +537.162507713913 2702.000000000000 +538.161398187637 1920.000000000000 +542.320515114008 6963.231933593750 +543.325336207388 2300.000000000000 +544.334190717716 2569.000000000000 +546.911594543114 1103.000000000000 +556.437447753826 1659.000000000000 +610.180935335645 2124.000000000000 +611.179779797249 1379.000000000000 +612.179314588833 1053.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=684 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=684 experiment=2_0 +##scan 173 +##specref ms_run[1]:sample=1 period=1 cycle=684 experiment=2 +55.933453323450 16.000000000000 +67.052799400525 16.000000000000 +68.933728980340 16.000000000000 +68.950945180433 8.000000000000 +70.957415259418 164.000000000000 +72.937687471363 236.000000000000 +81.069218822999 16.000000000000 +95.081679690084 16.000000000000 +95.087709641414 16.000000000000 +114.947359874553 116.000000000000 +132.958736190957 16.000000000000 +138.896787794429 24.000000000000 +142.953896729598 69.000000000000 +181.047994019430 16.000000000000 +>compound 1_0-684003--174--UNKNOWN +>parentmass 209.187110889596 +>charge 1 +>rt 454.516000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005055752743 2535.964355468750 +53.013304387882 13524.087890625000 +53.850466238024 1189.000000000000 +54.009168155297 353300.781250000000 +55.005867838546 6321.625488281250 +55.011096389479 6395.116699218750 +55.054048764476 1667.644042968750 +55.933744861774 5517.931640625000 +56.941678501836 2385.528808593750 +59.049246215078 62577.765625000000 +60.044272562846 11294.218750000000 +61.039109845214 1753.034912109375 +63.997184367771 4165.606445312500 +64.004750648025 4249.142089843750 +68.011158941272 26967.845703125000 +68.993356336228 11891.033203125000 +69.009273188190 1077.398315429688 +69.044228412240 14899.603515625000 +72.936468187320 2032.373413085938 +73.063852449522 1719.634399414062 +76.485919231129 2172.000000000000 +79.020524571197 16902.101562500000 +80.048647839426 12657.626953125000 +81.936696543330 8232.779296875000 +82.996080678623 8146.264648437500 +87.043475160411 1395.252319335938 +87.054352310828 1558.482177734375 +89.058909693116 1269.118896484375 +89.069350868807 1247.488525390625 +89.505589887121 1342.000000000000 +90.488691498550 1942.000000000000 +91.053378263618 1475.000000000000 +95.951669732691 1976.000000000000 +97.967560868981 7359.775390625000 +100.074534978752 1189.000000000000 +102.090338226360 1826.376220703125 +109.942414205150 1188.000000000000 +113.962012843210 1736.000000000000 +114.090204103750 11387.237304687500 +115.093936155418 1026.477294921875 +118.084824300069 7671.000000000000 +122.095254248058 3649.000000000000 +122.962559128453 10112.945312500000 +123.090679016705 1699.000000000000 +123.961217643039 1068.000000000000 +130.157297802018 994.000000000000 +136.020183489680 1322.000000000000 +136.111243273071 1445.000000000000 +137.962665914090 1202.000000000000 +139.962346851635 1044.000000000000 +141.089611087824 1626.178955078125 +141.111315482047 1498.598510742188 +141.934405531056 2084.462402343750 +141.957003969247 15281.953125000000 +147.089927402646 2716.236816406250 +149.021952430256 5215.276855468750 +151.095029441084 2611.063720703125 +151.109299282509 3043.490966796875 +155.068716413981 1815.925781250000 +155.104692907060 1465.157470703125 +155.972438501058 4353.000000000000 +158.152200943323 12348.822265625000 +159.154956605569 1635.504028320312 +159.967803132941 1244.507446289062 +161.095175826667 1739.000000000000 +163.129926212915 1158.326904296875 +164.141946259428 1718.425781250000 +170.094715935231 2753.855468750000 +171.145377171095 1550.000000000000 +172.132577603702 1445.519653320312 +173.079147806049 8056.288574218750 +174.126251925613 1018.000000000000 +174.990645538544 1161.000000000000 +175.122110492133 1170.411743164062 +177.052488517392 1051.659423828125 +178.157387143850 1352.390502929688 +179.104449390129 1822.000000000000 +182.960513183082 2466.002441406250 +182.982893863190 1238.924926757812 +183.078198978970 1427.060058593750 +183.097659692423 1378.870727539062 +186.184710056301 1091.000000000000 +186.220156978700 1745.000000000000 +194.114989559698 3824.000000000000 +195.102013459731 2090.739746093750 +195.120720998964 2570.564453125000 +198.183752557279 2298.281738281250 +199.167445330918 1079.616577148438 +200.199182211058 1213.000000000000 +205.084290329945 996.000000000000 +211.107662654521 1040.748901367188 +211.126844372442 1047.980834960938 +217.105638765104 26745.580078125000 +218.109080318901 2892.000000000000 +219.093891661045 1471.017944335938 +221.151414683949 1411.084838867188 +223.062156383341 1011.187377929688 +223.113584496198 1057.747558593750 +224.126501131170 1396.085937500000 +228.193498338851 1717.108154296875 +235.167367598480 1268.345458984375 +235.203348790223 1014.675109863281 +239.087708963045 6146.106933593750 +242.282676845201 1728.000000000000 +246.860945003884 3475.000000000000 +249.183065513133 1588.561889648438 +250.176636932456 1366.377441406250 +250.998640546851 2659.000000000000 +251.181320564304 1150.891967773438 +252.995743699801 1989.000000000000 +256.224312470076 1526.016723632812 +267.170376627160 1639.885620117188 +278.208499725280 1244.000000000000 +279.092328768907 2042.000000000000 +281.049924199324 1627.000000000000 +284.162752099009 1097.000000000000 +289.119930492523 5051.885253906250 +290.121926056623 1045.000000000000 +291.116846102720 1626.000000000000 +304.111834403142 5771.000000000000 +305.115013708988 1041.000000000000 +309.227944713182 992.105407714844 +327.007466942849 3904.000000000000 +329.003581472897 3646.000000000000 +330.205068564965 2091.202148437500 +331.001047005985 1017.994262695312 +367.245746012184 1118.183349609375 +371.099142491710 1139.000000000000 +371.312999785903 1091.000000000000 +430.886671499821 1115.000000000000 +445.117775583424 2600.000000000000 +446.118588613662 999.000000000000 +500.273782823440 2782.000000000000 +502.288804355749 1789.000000000000 +505.850127143100 1506.000000000000 +512.413609192773 1457.411132812500 +519.133662820407 1026.000000000000 +520.335877972225 1195.000000000000 +524.368508006775 1667.000000000000 +536.162270956731 5375.000000000000 +537.162507713913 2702.000000000000 +538.161398187637 1920.000000000000 +542.320515114008 6963.231933593750 +543.325336207388 2300.000000000000 +544.334190717716 2569.000000000000 +546.911594543114 1103.000000000000 +556.437447753826 1659.000000000000 +610.180935335645 2124.000000000000 +611.179779797249 1379.000000000000 +612.179314588833 1053.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=684 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=684 experiment=3_0 +##scan 174 +##specref ms_run[1]:sample=1 period=1 cycle=684 experiment=3 +55.933399713683 4.000000000000 +132.907473414682 4.000000000000 +148.966093321176 4.000000000000 +149.906893640473 10.000000000000 +149.943081001765 5.000000000000 +193.129040282373 5.000000000000 +207.582964645885 4.000000000000 +209.155253484210 15.000000000000 +>compound 1_0-684004--175--UNKNOWN +>parentmass 304.111834403142 +>charge 1 +>rt 454.516000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +304.111834403142 5771.000000000000 +305.115013708988 1041.000000000000 +>ms1peaks +52.005055752743 2535.964355468750 +53.013304387882 13524.087890625000 +53.850466238024 1189.000000000000 +54.009168155297 353300.781250000000 +55.005867838546 6321.625488281250 +55.011096389479 6395.116699218750 +55.054048764476 1667.644042968750 +55.933744861774 5517.931640625000 +56.941678501836 2385.528808593750 +59.049246215078 62577.765625000000 +60.044272562846 11294.218750000000 +61.039109845214 1753.034912109375 +63.997184367771 4165.606445312500 +64.004750648025 4249.142089843750 +68.011158941272 26967.845703125000 +68.993356336228 11891.033203125000 +69.009273188190 1077.398315429688 +69.044228412240 14899.603515625000 +72.936468187320 2032.373413085938 +73.063852449522 1719.634399414062 +76.485919231129 2172.000000000000 +79.020524571197 16902.101562500000 +80.048647839426 12657.626953125000 +81.936696543330 8232.779296875000 +82.996080678623 8146.264648437500 +87.043475160411 1395.252319335938 +87.054352310828 1558.482177734375 +89.058909693116 1269.118896484375 +89.069350868807 1247.488525390625 +89.505589887121 1342.000000000000 +90.488691498550 1942.000000000000 +91.053378263618 1475.000000000000 +95.951669732691 1976.000000000000 +97.967560868981 7359.775390625000 +100.074534978752 1189.000000000000 +102.090338226360 1826.376220703125 +109.942414205150 1188.000000000000 +113.962012843210 1736.000000000000 +114.090204103750 11387.237304687500 +115.093936155418 1026.477294921875 +118.084824300069 7671.000000000000 +122.095254248058 3649.000000000000 +122.962559128453 10112.945312500000 +123.090679016705 1699.000000000000 +123.961217643039 1068.000000000000 +130.157297802018 994.000000000000 +136.020183489680 1322.000000000000 +136.111243273071 1445.000000000000 +137.962665914090 1202.000000000000 +139.962346851635 1044.000000000000 +141.089611087824 1626.178955078125 +141.111315482047 1498.598510742188 +141.934405531056 2084.462402343750 +141.957003969247 15281.953125000000 +147.089927402646 2716.236816406250 +149.021952430256 5215.276855468750 +151.095029441084 2611.063720703125 +151.109299282509 3043.490966796875 +155.068716413981 1815.925781250000 +155.104692907060 1465.157470703125 +155.972438501058 4353.000000000000 +158.152200943323 12348.822265625000 +159.154956605569 1635.504028320312 +159.967803132941 1244.507446289062 +161.095175826667 1739.000000000000 +163.129926212915 1158.326904296875 +164.141946259428 1718.425781250000 +170.094715935231 2753.855468750000 +171.145377171095 1550.000000000000 +172.132577603702 1445.519653320312 +173.079147806049 8056.288574218750 +174.126251925613 1018.000000000000 +174.990645538544 1161.000000000000 +175.122110492133 1170.411743164062 +177.052488517392 1051.659423828125 +178.157387143850 1352.390502929688 +179.104449390129 1822.000000000000 +182.960513183082 2466.002441406250 +182.982893863190 1238.924926757812 +183.078198978970 1427.060058593750 +183.097659692423 1378.870727539062 +186.184710056301 1091.000000000000 +186.220156978700 1745.000000000000 +194.114989559698 3824.000000000000 +195.102013459731 2090.739746093750 +195.120720998964 2570.564453125000 +198.183752557279 2298.281738281250 +199.167445330918 1079.616577148438 +200.199182211058 1213.000000000000 +205.084290329945 996.000000000000 +211.107662654521 1040.748901367188 +211.126844372442 1047.980834960938 +217.105638765104 26745.580078125000 +218.109080318901 2892.000000000000 +219.093891661045 1471.017944335938 +221.151414683949 1411.084838867188 +223.062156383341 1011.187377929688 +223.113584496198 1057.747558593750 +224.126501131170 1396.085937500000 +228.193498338851 1717.108154296875 +235.167367598480 1268.345458984375 +235.203348790223 1014.675109863281 +239.087708963045 6146.106933593750 +242.282676845201 1728.000000000000 +246.860945003884 3475.000000000000 +249.183065513133 1588.561889648438 +250.176636932456 1366.377441406250 +250.998640546851 2659.000000000000 +251.181320564304 1150.891967773438 +252.995743699801 1989.000000000000 +256.224312470076 1526.016723632812 +267.170376627160 1639.885620117188 +278.208499725280 1244.000000000000 +279.092328768907 2042.000000000000 +281.049924199324 1627.000000000000 +284.162752099009 1097.000000000000 +289.119930492523 5051.885253906250 +290.121926056623 1045.000000000000 +291.116846102720 1626.000000000000 +304.111834403142 5771.000000000000 +305.115013708988 1041.000000000000 +309.227944713182 992.105407714844 +327.007466942849 3904.000000000000 +329.003581472897 3646.000000000000 +330.205068564965 2091.202148437500 +331.001047005985 1017.994262695312 +367.245746012184 1118.183349609375 +371.099142491710 1139.000000000000 +371.312999785903 1091.000000000000 +430.886671499821 1115.000000000000 +445.117775583424 2600.000000000000 +446.118588613662 999.000000000000 +500.273782823440 2782.000000000000 +502.288804355749 1789.000000000000 +505.850127143100 1506.000000000000 +512.413609192773 1457.411132812500 +519.133662820407 1026.000000000000 +520.335877972225 1195.000000000000 +524.368508006775 1667.000000000000 +536.162270956731 5375.000000000000 +537.162507713913 2702.000000000000 +538.161398187637 1920.000000000000 +542.320515114008 6963.231933593750 +543.325336207388 2300.000000000000 +544.334190717716 2569.000000000000 +546.911594543114 1103.000000000000 +556.437447753826 1659.000000000000 +610.180935335645 2124.000000000000 +611.179779797249 1379.000000000000 +612.179314588833 1053.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=684 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=684 experiment=4_0 +##scan 175 +##specref ms_run[1]:sample=1 period=1 cycle=684 experiment=4 +58.065756662563 10.000000000000 +69.034469033042 10.000000000000 +69.070288089627 30.000000000000 +79.052768862105 15.000000000000 +79.061120803744 11.982326507568 +91.055155550254 45.000000000000 +111.117417408241 10.000000000000 +122.015699048448 10.000000000000 +153.035584424956 20.000000000000 +155.050735391808 10.000000000000 +168.984459760219 23.232782363892 +172.857985176874 10.000000000000 +184.981382012323 25.000000000000 +201.984304482606 235.000000000000 +214.990142693153 10.000000000000 +216.024018679503 10.000000000000 +217.007526902892 371.000000000000 +218.014323254882 10.000000000000 +234.037138132386 45.000000000000 +304.297688394723 10.000000000000 +>compound 1_0-687003--179--UNKNOWN +>parentmass 183.079154221527 +>charge 1 +>rt 455.986000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +183.079154221527 7850.959472656250 +>ms1peaks +52.005490913142 2856.815917968750 +53.013343072022 13812.188476562500 +53.850605831311 1291.431884765625 +54.009115880991 328155.000000000000 +55.005744354225 5757.590332031250 +55.011072694396 6215.563964843750 +55.054119575502 2154.577392578125 +55.933944296354 5630.660156250000 +56.941744735643 1912.926635742188 +59.049351001022 66858.421875000000 +60.044151449451 10781.885742187500 +61.039084713489 1591.516601562500 +63.997518372518 4162.436523437500 +64.004696904780 4781.064453125000 +68.011304808230 26746.746093750000 +68.993303810563 11162.061523437500 +69.008378115545 1132.745971679688 +69.044389768907 14594.750976562500 +72.043754055495 1322.000000000000 +72.936537933002 1607.783325195312 +73.064105559664 1895.620971679688 +76.485680791647 1972.000000000000 +79.020611107817 17992.046875000000 +80.048603805394 13594.717773437500 +81.936710304506 7198.053222656250 +82.996193322152 7376.406738281250 +87.043600561504 1255.485473632812 +87.053783220161 1553.396606445312 +89.058907427357 1123.208007812500 +89.069819681631 1055.785766601562 +89.505899677732 1156.000000000000 +90.488769944096 1533.000000000000 +91.053145860518 1431.000000000000 +95.952165865680 2182.000000000000 +97.967631362833 6497.294433593750 +100.074545449931 1716.000000000000 +102.090221028263 1387.000000000000 +109.063049483947 1012.116699218750 +109.942153345069 1452.000000000000 +113.962445333259 1684.000000000000 +114.090276853774 12082.453125000000 +118.084773692065 6530.000000000000 +122.094857747024 3047.322021484375 +122.962432868335 9416.000000000000 +123.090585410840 1822.000000000000 +123.963982814853 988.000000000000 +124.086550553996 1074.477783203125 +130.157886479404 1240.000000000000 +136.020390443747 1587.000000000000 +136.110956552157 1500.000000000000 +137.962846866810 1256.000000000000 +141.089603018162 1519.407104492188 +141.111472948240 1413.114990234375 +141.935054228464 1116.855590820312 +141.957097279681 13660.073242187500 +142.958591669352 1117.000000000000 +147.089829357582 2806.230468750000 +149.021902216367 5177.710449218750 +151.095342394980 2997.552001953125 +151.108557059425 3360.613037109375 +155.068806099042 1598.362915039062 +155.104952752278 1765.000000000000 +155.950110686475 1433.680908203125 +155.972427035923 4323.499511718750 +158.095134507456 1020.880249023438 +158.152388441329 11159.541015625000 +159.154838096350 1503.372192382812 +159.966885303469 1170.000000000000 +161.094444513946 1756.540771484375 +163.130177704431 1001.379089355469 +164.142104330731 1715.624145507812 +170.094165109319 3045.087890625000 +171.145446226058 1368.332031250000 +172.131808411455 1113.198120117188 +173.079261647493 8306.517578125000 +174.125838124071 1115.136596679688 +174.989707397947 1276.000000000000 +175.112448974743 1086.958007812500 +175.124005162229 1289.271484375000 +177.052712430960 1327.259765625000 +178.157052341563 1630.944335937500 +179.104408799888 1827.331665039062 +182.959559693001 2180.209472656250 +182.981790518244 1145.477783203125 +183.079154221527 7850.959472656250 +183.135342912680 1087.518188476562 +184.081746370060 1324.000000000000 +186.219743283093 1302.000000000000 +193.156052471170 1133.000000000000 +194.115226761582 3466.569580078125 +195.119978231816 2249.003417968750 +198.183473402098 2189.993652343750 +199.167841921681 1202.129638671875 +200.199542555887 1122.438842773438 +215.079677034874 2276.823974609375 +217.105550728725 26923.291015625000 +218.108382747653 3014.975097656250 +219.093821633479 1262.008056640625 +221.151012269173 1225.000000000000 +224.126230501999 1303.000000000000 +228.193909496411 1772.000000000000 +235.167295298072 1244.723510742188 +239.087282171578 5422.000000000000 +240.089411155141 999.000000000000 +242.282354136822 1568.000000000000 +246.860420711226 2813.000000000000 +249.183139074826 1754.000000000000 +250.176815657417 1552.000000000000 +250.998509242609 2922.779052734375 +251.184045000521 1305.000000000000 +252.995381034730 1991.000000000000 +267.170407683590 1500.481689453125 +279.092208106162 2221.044433593750 +281.049630405504 1461.000000000000 +289.118879430632 3075.139404296875 +294.134282279592 7102.458007812500 +295.137497230959 1145.000000000000 +296.131528242740 2281.315185546875 +304.111413307086 3993.000000000000 +309.231362806436 1280.000000000000 +327.006412578177 4079.000000000000 +329.003384820870 3862.000000000000 +330.204624838179 1937.828125000000 +331.000081272182 1236.000000000000 +366.261220987441 1000.000000000000 +367.245152709250 2543.728271484375 +371.099389101826 1023.869445800781 +371.312072920541 1306.000000000000 +432.881296968492 1089.351074218750 +445.116584481209 2522.311279296875 +446.116818119442 1126.916748046875 +500.273638483063 1762.000000000000 +502.289932482603 2009.000000000000 +505.850198942561 1165.000000000000 +512.410045377136 1082.000000000000 +519.136324972972 1034.000000000000 +520.335378109865 1339.000000000000 +524.366912669160 1737.044799804688 +536.161580652092 5032.000000000000 +537.162984439978 2928.000000000000 +538.160917314474 2287.627441406250 +542.320056209620 5526.704101562500 +543.324693498787 1598.000000000000 +544.334274329341 2597.676757812500 +546.911003055161 1109.000000000000 +556.437301996231 996.000000000000 +559.345805360171 1012.000000000000 +610.179922446670 1952.000000000000 +611.180926288014 1305.000000000000 +612.178846241889 1229.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=687 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=687 experiment=3_0 +##scan 179 +##specref ms_run[1]:sample=1 period=1 cycle=687 experiment=3 +51.021703201076 75.000000000000 +51.026581301372 70.944709777832 +52.948135080807 13.000000000000 +55.054860824190 30.000000000000 +55.934631962387 443.000000000000 +56.942241444421 3408.759521484375 +57.942780838039 60.000000000000 +67.933424173347 75.000000000000 +67.938546014682 75.000000000000 +72.936325429933 75.000000000000 +77.038493708339 1212.000000000000 +83.943164342165 30.000000000000 +96.935076029163 60.000000000000 +96.959185559529 15.000000000000 +97.935287693416 30.000000000000 +97.968408780280 1010.703002929688 +98.944253428690 15.000000000000 +98.971961663209 45.000000000000 +98.981338481859 45.000000000000 +100.932460595523 135.000000000000 +105.032857183944 591.000000000000 +128.935348255251 60.000000000000 +>compound 1_0-687004--180--UNKNOWN +>parentmass 215.079677034874 +>charge 1 +>rt 455.986000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +215.079677034874 2276.823974609375 +>ms1peaks +52.005490913142 2856.815917968750 +53.013343072022 13812.188476562500 +53.850605831311 1291.431884765625 +54.009115880991 328155.000000000000 +55.005744354225 5757.590332031250 +55.011072694396 6215.563964843750 +55.054119575502 2154.577392578125 +55.933944296354 5630.660156250000 +56.941744735643 1912.926635742188 +59.049351001022 66858.421875000000 +60.044151449451 10781.885742187500 +61.039084713489 1591.516601562500 +63.997518372518 4162.436523437500 +64.004696904780 4781.064453125000 +68.011304808230 26746.746093750000 +68.993303810563 11162.061523437500 +69.008378115545 1132.745971679688 +69.044389768907 14594.750976562500 +72.043754055495 1322.000000000000 +72.936537933002 1607.783325195312 +73.064105559664 1895.620971679688 +76.485680791647 1972.000000000000 +79.020611107817 17992.046875000000 +80.048603805394 13594.717773437500 +81.936710304506 7198.053222656250 +82.996193322152 7376.406738281250 +87.043600561504 1255.485473632812 +87.053783220161 1553.396606445312 +89.058907427357 1123.208007812500 +89.069819681631 1055.785766601562 +89.505899677732 1156.000000000000 +90.488769944096 1533.000000000000 +91.053145860518 1431.000000000000 +95.952165865680 2182.000000000000 +97.967631362833 6497.294433593750 +100.074545449931 1716.000000000000 +102.090221028263 1387.000000000000 +109.063049483947 1012.116699218750 +109.942153345069 1452.000000000000 +113.962445333259 1684.000000000000 +114.090276853774 12082.453125000000 +118.084773692065 6530.000000000000 +122.094857747024 3047.322021484375 +122.962432868335 9416.000000000000 +123.090585410840 1822.000000000000 +123.963982814853 988.000000000000 +124.086550553996 1074.477783203125 +130.157886479404 1240.000000000000 +136.020390443747 1587.000000000000 +136.110956552157 1500.000000000000 +137.962846866810 1256.000000000000 +141.089603018162 1519.407104492188 +141.111472948240 1413.114990234375 +141.935054228464 1116.855590820312 +141.957097279681 13660.073242187500 +142.958591669352 1117.000000000000 +147.089829357582 2806.230468750000 +149.021902216367 5177.710449218750 +151.095342394980 2997.552001953125 +151.108557059425 3360.613037109375 +155.068806099042 1598.362915039062 +155.104952752278 1765.000000000000 +155.950110686475 1433.680908203125 +155.972427035923 4323.499511718750 +158.095134507456 1020.880249023438 +158.152388441329 11159.541015625000 +159.154838096350 1503.372192382812 +159.966885303469 1170.000000000000 +161.094444513946 1756.540771484375 +163.130177704431 1001.379089355469 +164.142104330731 1715.624145507812 +170.094165109319 3045.087890625000 +171.145446226058 1368.332031250000 +172.131808411455 1113.198120117188 +173.079261647493 8306.517578125000 +174.125838124071 1115.136596679688 +174.989707397947 1276.000000000000 +175.112448974743 1086.958007812500 +175.124005162229 1289.271484375000 +177.052712430960 1327.259765625000 +178.157052341563 1630.944335937500 +179.104408799888 1827.331665039062 +182.959559693001 2180.209472656250 +182.981790518244 1145.477783203125 +183.079154221527 7850.959472656250 +183.135342912680 1087.518188476562 +184.081746370060 1324.000000000000 +186.219743283093 1302.000000000000 +193.156052471170 1133.000000000000 +194.115226761582 3466.569580078125 +195.119978231816 2249.003417968750 +198.183473402098 2189.993652343750 +199.167841921681 1202.129638671875 +200.199542555887 1122.438842773438 +215.079677034874 2276.823974609375 +217.105550728725 26923.291015625000 +218.108382747653 3014.975097656250 +219.093821633479 1262.008056640625 +221.151012269173 1225.000000000000 +224.126230501999 1303.000000000000 +228.193909496411 1772.000000000000 +235.167295298072 1244.723510742188 +239.087282171578 5422.000000000000 +240.089411155141 999.000000000000 +242.282354136822 1568.000000000000 +246.860420711226 2813.000000000000 +249.183139074826 1754.000000000000 +250.176815657417 1552.000000000000 +250.998509242609 2922.779052734375 +251.184045000521 1305.000000000000 +252.995381034730 1991.000000000000 +267.170407683590 1500.481689453125 +279.092208106162 2221.044433593750 +281.049630405504 1461.000000000000 +289.118879430632 3075.139404296875 +294.134282279592 7102.458007812500 +295.137497230959 1145.000000000000 +296.131528242740 2281.315185546875 +304.111413307086 3993.000000000000 +309.231362806436 1280.000000000000 +327.006412578177 4079.000000000000 +329.003384820870 3862.000000000000 +330.204624838179 1937.828125000000 +331.000081272182 1236.000000000000 +366.261220987441 1000.000000000000 +367.245152709250 2543.728271484375 +371.099389101826 1023.869445800781 +371.312072920541 1306.000000000000 +432.881296968492 1089.351074218750 +445.116584481209 2522.311279296875 +446.116818119442 1126.916748046875 +500.273638483063 1762.000000000000 +502.289932482603 2009.000000000000 +505.850198942561 1165.000000000000 +512.410045377136 1082.000000000000 +519.136324972972 1034.000000000000 +520.335378109865 1339.000000000000 +524.366912669160 1737.044799804688 +536.161580652092 5032.000000000000 +537.162984439978 2928.000000000000 +538.160917314474 2287.627441406250 +542.320056209620 5526.704101562500 +543.324693498787 1598.000000000000 +544.334274329341 2597.676757812500 +546.911003055161 1109.000000000000 +556.437301996231 996.000000000000 +559.345805360171 1012.000000000000 +610.179922446670 1952.000000000000 +611.180926288014 1305.000000000000 +612.178846241889 1229.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=687 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=687 experiment=4_0 +##scan 180 +##specref ms_run[1]:sample=1 period=1 cycle=687 experiment=4 +123.084346152165 13.000000000000 +167.071345579415 411.000000000000 +167.101821731739 45.000000000000 +168.079828407572 180.000000000000 +169.085714769963 13.000000000000 +179.661687111518 13.000000000000 +198.078945766776 30.000000000000 +>compound 1_0-687005--181--UNKNOWN +>parentmass 294.134282279592 +>charge 1 +>rt 455.986000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +294.134282279592 7102.458007812500 +295.137497230959 1145.000000000000 +>ms1peaks +52.005490913142 2856.815917968750 +53.013343072022 13812.188476562500 +53.850605831311 1291.431884765625 +54.009115880991 328155.000000000000 +55.005744354225 5757.590332031250 +55.011072694396 6215.563964843750 +55.054119575502 2154.577392578125 +55.933944296354 5630.660156250000 +56.941744735643 1912.926635742188 +59.049351001022 66858.421875000000 +60.044151449451 10781.885742187500 +61.039084713489 1591.516601562500 +63.997518372518 4162.436523437500 +64.004696904780 4781.064453125000 +68.011304808230 26746.746093750000 +68.993303810563 11162.061523437500 +69.008378115545 1132.745971679688 +69.044389768907 14594.750976562500 +72.043754055495 1322.000000000000 +72.936537933002 1607.783325195312 +73.064105559664 1895.620971679688 +76.485680791647 1972.000000000000 +79.020611107817 17992.046875000000 +80.048603805394 13594.717773437500 +81.936710304506 7198.053222656250 +82.996193322152 7376.406738281250 +87.043600561504 1255.485473632812 +87.053783220161 1553.396606445312 +89.058907427357 1123.208007812500 +89.069819681631 1055.785766601562 +89.505899677732 1156.000000000000 +90.488769944096 1533.000000000000 +91.053145860518 1431.000000000000 +95.952165865680 2182.000000000000 +97.967631362833 6497.294433593750 +100.074545449931 1716.000000000000 +102.090221028263 1387.000000000000 +109.063049483947 1012.116699218750 +109.942153345069 1452.000000000000 +113.962445333259 1684.000000000000 +114.090276853774 12082.453125000000 +118.084773692065 6530.000000000000 +122.094857747024 3047.322021484375 +122.962432868335 9416.000000000000 +123.090585410840 1822.000000000000 +123.963982814853 988.000000000000 +124.086550553996 1074.477783203125 +130.157886479404 1240.000000000000 +136.020390443747 1587.000000000000 +136.110956552157 1500.000000000000 +137.962846866810 1256.000000000000 +141.089603018162 1519.407104492188 +141.111472948240 1413.114990234375 +141.935054228464 1116.855590820312 +141.957097279681 13660.073242187500 +142.958591669352 1117.000000000000 +147.089829357582 2806.230468750000 +149.021902216367 5177.710449218750 +151.095342394980 2997.552001953125 +151.108557059425 3360.613037109375 +155.068806099042 1598.362915039062 +155.104952752278 1765.000000000000 +155.950110686475 1433.680908203125 +155.972427035923 4323.499511718750 +158.095134507456 1020.880249023438 +158.152388441329 11159.541015625000 +159.154838096350 1503.372192382812 +159.966885303469 1170.000000000000 +161.094444513946 1756.540771484375 +163.130177704431 1001.379089355469 +164.142104330731 1715.624145507812 +170.094165109319 3045.087890625000 +171.145446226058 1368.332031250000 +172.131808411455 1113.198120117188 +173.079261647493 8306.517578125000 +174.125838124071 1115.136596679688 +174.989707397947 1276.000000000000 +175.112448974743 1086.958007812500 +175.124005162229 1289.271484375000 +177.052712430960 1327.259765625000 +178.157052341563 1630.944335937500 +179.104408799888 1827.331665039062 +182.959559693001 2180.209472656250 +182.981790518244 1145.477783203125 +183.079154221527 7850.959472656250 +183.135342912680 1087.518188476562 +184.081746370060 1324.000000000000 +186.219743283093 1302.000000000000 +193.156052471170 1133.000000000000 +194.115226761582 3466.569580078125 +195.119978231816 2249.003417968750 +198.183473402098 2189.993652343750 +199.167841921681 1202.129638671875 +200.199542555887 1122.438842773438 +215.079677034874 2276.823974609375 +217.105550728725 26923.291015625000 +218.108382747653 3014.975097656250 +219.093821633479 1262.008056640625 +221.151012269173 1225.000000000000 +224.126230501999 1303.000000000000 +228.193909496411 1772.000000000000 +235.167295298072 1244.723510742188 +239.087282171578 5422.000000000000 +240.089411155141 999.000000000000 +242.282354136822 1568.000000000000 +246.860420711226 2813.000000000000 +249.183139074826 1754.000000000000 +250.176815657417 1552.000000000000 +250.998509242609 2922.779052734375 +251.184045000521 1305.000000000000 +252.995381034730 1991.000000000000 +267.170407683590 1500.481689453125 +279.092208106162 2221.044433593750 +281.049630405504 1461.000000000000 +289.118879430632 3075.139404296875 +294.134282279592 7102.458007812500 +295.137497230959 1145.000000000000 +296.131528242740 2281.315185546875 +304.111413307086 3993.000000000000 +309.231362806436 1280.000000000000 +327.006412578177 4079.000000000000 +329.003384820870 3862.000000000000 +330.204624838179 1937.828125000000 +331.000081272182 1236.000000000000 +366.261220987441 1000.000000000000 +367.245152709250 2543.728271484375 +371.099389101826 1023.869445800781 +371.312072920541 1306.000000000000 +432.881296968492 1089.351074218750 +445.116584481209 2522.311279296875 +446.116818119442 1126.916748046875 +500.273638483063 1762.000000000000 +502.289932482603 2009.000000000000 +505.850198942561 1165.000000000000 +512.410045377136 1082.000000000000 +519.136324972972 1034.000000000000 +520.335378109865 1339.000000000000 +524.366912669160 1737.044799804688 +536.161580652092 5032.000000000000 +537.162984439978 2928.000000000000 +538.160917314474 2287.627441406250 +542.320056209620 5526.704101562500 +543.324693498787 1598.000000000000 +544.334274329341 2597.676757812500 +546.911003055161 1109.000000000000 +556.437301996231 996.000000000000 +559.345805360171 1012.000000000000 +610.179922446670 1952.000000000000 +611.180926288014 1305.000000000000 +612.178846241889 1229.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=687 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=687 experiment=5_0 +##scan 181 +##specref ms_run[1]:sample=1 period=1 cycle=687 experiment=5 +70.039359100061 379.000000000000 +92.054778728593 13.000000000000 +125.013354375462 165.000000000000 +127.015014494636 30.000000000000 +>compound 1_0-687006--182--UNKNOWN +>parentmass 367.245152709250 +>charge 1 +>rt 455.986000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +367.245152709250 2543.728271484375 +>ms1peaks +52.005490913142 2856.815917968750 +53.013343072022 13812.188476562500 +53.850605831311 1291.431884765625 +54.009115880991 328155.000000000000 +55.005744354225 5757.590332031250 +55.011072694396 6215.563964843750 +55.054119575502 2154.577392578125 +55.933944296354 5630.660156250000 +56.941744735643 1912.926635742188 +59.049351001022 66858.421875000000 +60.044151449451 10781.885742187500 +61.039084713489 1591.516601562500 +63.997518372518 4162.436523437500 +64.004696904780 4781.064453125000 +68.011304808230 26746.746093750000 +68.993303810563 11162.061523437500 +69.008378115545 1132.745971679688 +69.044389768907 14594.750976562500 +72.043754055495 1322.000000000000 +72.936537933002 1607.783325195312 +73.064105559664 1895.620971679688 +76.485680791647 1972.000000000000 +79.020611107817 17992.046875000000 +80.048603805394 13594.717773437500 +81.936710304506 7198.053222656250 +82.996193322152 7376.406738281250 +87.043600561504 1255.485473632812 +87.053783220161 1553.396606445312 +89.058907427357 1123.208007812500 +89.069819681631 1055.785766601562 +89.505899677732 1156.000000000000 +90.488769944096 1533.000000000000 +91.053145860518 1431.000000000000 +95.952165865680 2182.000000000000 +97.967631362833 6497.294433593750 +100.074545449931 1716.000000000000 +102.090221028263 1387.000000000000 +109.063049483947 1012.116699218750 +109.942153345069 1452.000000000000 +113.962445333259 1684.000000000000 +114.090276853774 12082.453125000000 +118.084773692065 6530.000000000000 +122.094857747024 3047.322021484375 +122.962432868335 9416.000000000000 +123.090585410840 1822.000000000000 +123.963982814853 988.000000000000 +124.086550553996 1074.477783203125 +130.157886479404 1240.000000000000 +136.020390443747 1587.000000000000 +136.110956552157 1500.000000000000 +137.962846866810 1256.000000000000 +141.089603018162 1519.407104492188 +141.111472948240 1413.114990234375 +141.935054228464 1116.855590820312 +141.957097279681 13660.073242187500 +142.958591669352 1117.000000000000 +147.089829357582 2806.230468750000 +149.021902216367 5177.710449218750 +151.095342394980 2997.552001953125 +151.108557059425 3360.613037109375 +155.068806099042 1598.362915039062 +155.104952752278 1765.000000000000 +155.950110686475 1433.680908203125 +155.972427035923 4323.499511718750 +158.095134507456 1020.880249023438 +158.152388441329 11159.541015625000 +159.154838096350 1503.372192382812 +159.966885303469 1170.000000000000 +161.094444513946 1756.540771484375 +163.130177704431 1001.379089355469 +164.142104330731 1715.624145507812 +170.094165109319 3045.087890625000 +171.145446226058 1368.332031250000 +172.131808411455 1113.198120117188 +173.079261647493 8306.517578125000 +174.125838124071 1115.136596679688 +174.989707397947 1276.000000000000 +175.112448974743 1086.958007812500 +175.124005162229 1289.271484375000 +177.052712430960 1327.259765625000 +178.157052341563 1630.944335937500 +179.104408799888 1827.331665039062 +182.959559693001 2180.209472656250 +182.981790518244 1145.477783203125 +183.079154221527 7850.959472656250 +183.135342912680 1087.518188476562 +184.081746370060 1324.000000000000 +186.219743283093 1302.000000000000 +193.156052471170 1133.000000000000 +194.115226761582 3466.569580078125 +195.119978231816 2249.003417968750 +198.183473402098 2189.993652343750 +199.167841921681 1202.129638671875 +200.199542555887 1122.438842773438 +215.079677034874 2276.823974609375 +217.105550728725 26923.291015625000 +218.108382747653 3014.975097656250 +219.093821633479 1262.008056640625 +221.151012269173 1225.000000000000 +224.126230501999 1303.000000000000 +228.193909496411 1772.000000000000 +235.167295298072 1244.723510742188 +239.087282171578 5422.000000000000 +240.089411155141 999.000000000000 +242.282354136822 1568.000000000000 +246.860420711226 2813.000000000000 +249.183139074826 1754.000000000000 +250.176815657417 1552.000000000000 +250.998509242609 2922.779052734375 +251.184045000521 1305.000000000000 +252.995381034730 1991.000000000000 +267.170407683590 1500.481689453125 +279.092208106162 2221.044433593750 +281.049630405504 1461.000000000000 +289.118879430632 3075.139404296875 +294.134282279592 7102.458007812500 +295.137497230959 1145.000000000000 +296.131528242740 2281.315185546875 +304.111413307086 3993.000000000000 +309.231362806436 1280.000000000000 +327.006412578177 4079.000000000000 +329.003384820870 3862.000000000000 +330.204624838179 1937.828125000000 +331.000081272182 1236.000000000000 +366.261220987441 1000.000000000000 +367.245152709250 2543.728271484375 +371.099389101826 1023.869445800781 +371.312072920541 1306.000000000000 +432.881296968492 1089.351074218750 +445.116584481209 2522.311279296875 +446.116818119442 1126.916748046875 +500.273638483063 1762.000000000000 +502.289932482603 2009.000000000000 +505.850198942561 1165.000000000000 +512.410045377136 1082.000000000000 +519.136324972972 1034.000000000000 +520.335378109865 1339.000000000000 +524.366912669160 1737.044799804688 +536.161580652092 5032.000000000000 +537.162984439978 2928.000000000000 +538.160917314474 2287.627441406250 +542.320056209620 5526.704101562500 +543.324693498787 1598.000000000000 +544.334274329341 2597.676757812500 +546.911003055161 1109.000000000000 +556.437301996231 996.000000000000 +559.345805360171 1012.000000000000 +610.179922446670 1952.000000000000 +611.180926288014 1305.000000000000 +612.178846241889 1229.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=687 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=687 experiment=6_0 +##scan 182 +##specref ms_run[1]:sample=1 period=1 cycle=687 experiment=6 +59.050126987362 6.000000000000 +367.246890875925 55.000000000000 +>compound 1_0-687007--183--UNKNOWN +>parentmass 526.285347016419 +>charge 1 +>rt 455.986000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005490913142 2856.815917968750 +53.013343072022 13812.188476562500 +53.850605831311 1291.431884765625 +54.009115880991 328155.000000000000 +55.005744354225 5757.590332031250 +55.011072694396 6215.563964843750 +55.054119575502 2154.577392578125 +55.933944296354 5630.660156250000 +56.941744735643 1912.926635742188 +59.049351001022 66858.421875000000 +60.044151449451 10781.885742187500 +61.039084713489 1591.516601562500 +63.997518372518 4162.436523437500 +64.004696904780 4781.064453125000 +68.011304808230 26746.746093750000 +68.993303810563 11162.061523437500 +69.008378115545 1132.745971679688 +69.044389768907 14594.750976562500 +72.043754055495 1322.000000000000 +72.936537933002 1607.783325195312 +73.064105559664 1895.620971679688 +76.485680791647 1972.000000000000 +79.020611107817 17992.046875000000 +80.048603805394 13594.717773437500 +81.936710304506 7198.053222656250 +82.996193322152 7376.406738281250 +87.043600561504 1255.485473632812 +87.053783220161 1553.396606445312 +89.058907427357 1123.208007812500 +89.069819681631 1055.785766601562 +89.505899677732 1156.000000000000 +90.488769944096 1533.000000000000 +91.053145860518 1431.000000000000 +95.952165865680 2182.000000000000 +97.967631362833 6497.294433593750 +100.074545449931 1716.000000000000 +102.090221028263 1387.000000000000 +109.063049483947 1012.116699218750 +109.942153345069 1452.000000000000 +113.962445333259 1684.000000000000 +114.090276853774 12082.453125000000 +118.084773692065 6530.000000000000 +122.094857747024 3047.322021484375 +122.962432868335 9416.000000000000 +123.090585410840 1822.000000000000 +123.963982814853 988.000000000000 +124.086550553996 1074.477783203125 +130.157886479404 1240.000000000000 +136.020390443747 1587.000000000000 +136.110956552157 1500.000000000000 +137.962846866810 1256.000000000000 +141.089603018162 1519.407104492188 +141.111472948240 1413.114990234375 +141.935054228464 1116.855590820312 +141.957097279681 13660.073242187500 +142.958591669352 1117.000000000000 +147.089829357582 2806.230468750000 +149.021902216367 5177.710449218750 +151.095342394980 2997.552001953125 +151.108557059425 3360.613037109375 +155.068806099042 1598.362915039062 +155.104952752278 1765.000000000000 +155.950110686475 1433.680908203125 +155.972427035923 4323.499511718750 +158.095134507456 1020.880249023438 +158.152388441329 11159.541015625000 +159.154838096350 1503.372192382812 +159.966885303469 1170.000000000000 +161.094444513946 1756.540771484375 +163.130177704431 1001.379089355469 +164.142104330731 1715.624145507812 +170.094165109319 3045.087890625000 +171.145446226058 1368.332031250000 +172.131808411455 1113.198120117188 +173.079261647493 8306.517578125000 +174.125838124071 1115.136596679688 +174.989707397947 1276.000000000000 +175.112448974743 1086.958007812500 +175.124005162229 1289.271484375000 +177.052712430960 1327.259765625000 +178.157052341563 1630.944335937500 +179.104408799888 1827.331665039062 +182.959559693001 2180.209472656250 +182.981790518244 1145.477783203125 +183.079154221527 7850.959472656250 +183.135342912680 1087.518188476562 +184.081746370060 1324.000000000000 +186.219743283093 1302.000000000000 +193.156052471170 1133.000000000000 +194.115226761582 3466.569580078125 +195.119978231816 2249.003417968750 +198.183473402098 2189.993652343750 +199.167841921681 1202.129638671875 +200.199542555887 1122.438842773438 +215.079677034874 2276.823974609375 +217.105550728725 26923.291015625000 +218.108382747653 3014.975097656250 +219.093821633479 1262.008056640625 +221.151012269173 1225.000000000000 +224.126230501999 1303.000000000000 +228.193909496411 1772.000000000000 +235.167295298072 1244.723510742188 +239.087282171578 5422.000000000000 +240.089411155141 999.000000000000 +242.282354136822 1568.000000000000 +246.860420711226 2813.000000000000 +249.183139074826 1754.000000000000 +250.176815657417 1552.000000000000 +250.998509242609 2922.779052734375 +251.184045000521 1305.000000000000 +252.995381034730 1991.000000000000 +267.170407683590 1500.481689453125 +279.092208106162 2221.044433593750 +281.049630405504 1461.000000000000 +289.118879430632 3075.139404296875 +294.134282279592 7102.458007812500 +295.137497230959 1145.000000000000 +296.131528242740 2281.315185546875 +304.111413307086 3993.000000000000 +309.231362806436 1280.000000000000 +327.006412578177 4079.000000000000 +329.003384820870 3862.000000000000 +330.204624838179 1937.828125000000 +331.000081272182 1236.000000000000 +366.261220987441 1000.000000000000 +367.245152709250 2543.728271484375 +371.099389101826 1023.869445800781 +371.312072920541 1306.000000000000 +432.881296968492 1089.351074218750 +445.116584481209 2522.311279296875 +446.116818119442 1126.916748046875 +500.273638483063 1762.000000000000 +502.289932482603 2009.000000000000 +505.850198942561 1165.000000000000 +512.410045377136 1082.000000000000 +519.136324972972 1034.000000000000 +520.335378109865 1339.000000000000 +524.366912669160 1737.044799804688 +536.161580652092 5032.000000000000 +537.162984439978 2928.000000000000 +538.160917314474 2287.627441406250 +542.320056209620 5526.704101562500 +543.324693498787 1598.000000000000 +544.334274329341 2597.676757812500 +546.911003055161 1109.000000000000 +556.437301996231 996.000000000000 +559.345805360171 1012.000000000000 +610.179922446670 1952.000000000000 +611.180926288014 1305.000000000000 +612.178846241889 1229.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=687 experiment=7 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=687 experiment=7_0 +##scan 183 +##specref ms_run[1]:sample=1 period=1 cycle=687 experiment=7 +226.361422828215 6.000000000000 +>compound 1_0-689002--186--UNKNOWN +>parentmass 105.031632449428 +>charge 1 +>rt 457.185000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005462937563 2404.005859375000 +53.013291366738 14382.492187500000 +53.850539553305 1229.187622070312 +54.009137311492 335318.000000000000 +55.005948620481 6161.950683593750 +55.011128007332 6285.288085937500 +55.054325576409 1904.291870117188 +55.934034663954 5424.790039062500 +56.941630178150 2073.437011718750 +59.049263704528 45991.808593750000 +60.044265496272 10028.100585937500 +61.039219981197 1866.554443359375 +63.997551212800 4047.327392578125 +64.004651365857 4144.961425781250 +68.011321078807 28311.681640625000 +68.993468824753 10369.397460937500 +69.008330083518 1076.394409179688 +69.014780961627 1031.417968750000 +69.034006623211 1372.284179687500 +69.044386265012 14840.317382812500 +72.043967729324 961.000000000000 +72.936188600152 2275.410400390625 +73.063939083279 1847.228393554688 +76.486070495145 1946.000000000000 +79.020643149971 15263.070312500000 +80.048737130547 12141.673828125000 +81.936659734558 7420.991699218750 +82.996161374814 7954.683105468750 +87.044343635950 1145.286743164062 +87.054280514165 1440.349121093750 +89.058652188735 1042.975463867188 +89.069441604273 1391.003295898438 +89.505888388333 1419.000000000000 +90.488676329376 1646.358642578125 +91.053308419714 1221.000000000000 +95.952111940460 1863.000000000000 +97.967641857491 6593.246093750000 +100.074145856940 1294.309326171875 +102.090348283833 1653.000000000000 +109.942333319895 1240.000000000000 +113.962095949677 1891.904907226562 +114.090277449217 11240.656250000000 +118.084964478938 6656.282226562500 +122.095248338368 3579.000000000000 +122.962621350821 9606.000000000000 +123.091751966098 1626.335327148438 +123.961858399993 1077.000000000000 +129.051454066560 957.292175292969 +130.157834981831 1121.000000000000 +136.020382584948 1638.000000000000 +136.110904453860 1209.000000000000 +137.963169325275 1085.686401367188 +138.968688854948 945.000000000000 +141.089809710014 1620.046997070312 +141.111682323879 1569.642211914062 +141.957273542779 14288.949218750000 +142.959737655472 1012.329345703125 +147.090337414184 2504.000000000000 +149.022021871638 4632.739746093750 +149.041582734414 2016.745361328125 +151.095167567069 2825.406005859375 +151.110049739141 3314.160888671875 +155.068980344091 1536.570190429688 +155.104752512375 2317.000000000000 +155.972625015581 3891.629150390625 +158.095129691286 1219.298461914062 +158.152598167441 11767.000000000000 +159.155086324762 1635.707519531250 +159.968174619078 1195.000000000000 +161.095291598324 1520.091796875000 +163.130701462733 1176.503540039062 +164.141925774250 1498.388916015625 +170.094531250990 2684.532226562500 +171.099200185526 1002.465209960938 +171.145851696422 1668.000000000000 +172.131464583877 1427.059082031250 +173.079412347408 7576.692871093750 +174.125997274925 1246.000000000000 +174.990512217255 1408.000000000000 +175.112243989843 1216.865112304688 +177.052924868716 943.000000000000 +178.157812588331 1543.762939453125 +179.105184029538 1979.000000000000 +182.960779543919 2177.131103515625 +183.079291017897 9365.041992187500 +183.135962143350 950.983337402344 +184.081574508754 1558.816284179688 +186.219805518930 1652.000000000000 +193.157067173133 1038.000000000000 +194.116062385202 4196.000000000000 +195.121553672965 2164.767089843750 +198.184510207575 2324.000000000000 +200.198764613695 1109.907592773438 +215.080394723136 2952.000000000000 +217.105714936069 25356.156250000000 +218.109166987098 2841.000000000000 +219.094215469340 1412.398559570312 +221.151646030092 943.833679199219 +223.114905631113 998.539367675781 +224.126818598156 1201.000000000000 +227.126338620981 3072.884277343750 +227.158228343459 939.111328125000 +228.194343102588 1649.035522460938 +235.167565514045 1124.013427734375 +239.087483577433 5670.000000000000 +242.282534898909 2001.000000000000 +246.860905861795 3298.000000000000 +249.108530541089 1570.259887695312 +249.183555112515 1594.000000000000 +250.177920056779 1214.311523437500 +250.998285620431 2621.433593750000 +251.182611644515 1186.000000000000 +252.995541403401 1651.000000000000 +267.170989220468 1681.956176757812 +279.092351342498 1873.000000000000 +281.049332169974 1243.000000000000 +289.120224828919 1876.277954101562 +294.135548677238 8432.645507812500 +295.138434098782 1394.059326171875 +295.188945664971 1586.712036132812 +295.224952419882 1034.511840820312 +296.132198968461 2976.000000000000 +304.111105892876 3524.000000000000 +309.231658422928 1464.458862304688 +327.006917332691 3517.268310546875 +329.004024426409 3549.000000000000 +330.204970084658 1869.000000000000 +331.000500497877 1235.000000000000 +367.244334927149 2268.000000000000 +371.100005273709 1020.000000000000 +430.886196232651 1149.000000000000 +432.882414950513 969.000000000000 +445.117374886945 2196.000000000000 +446.118763222018 990.000000000000 +500.274994020911 1622.000000000000 +502.289500833904 2127.746093750000 +505.849174205835 1470.000000000000 +519.136713363770 1134.000000000000 +520.337556483937 1116.000000000000 +524.368037745285 1992.000000000000 +536.162614219819 5338.000000000000 +537.163957528246 2803.000000000000 +538.161870396621 1979.000000000000 +542.321562116618 4335.332031250000 +543.325313211853 1399.000000000000 +544.338326321649 2276.697509765625 +546.911868347399 987.000000000000 +610.182073897910 2326.000000000000 +611.184087071901 1402.000000000000 +612.179777935645 1132.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=689 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=689 experiment=2_0 +##scan 186 +##specref ms_run[1]:sample=1 period=1 cycle=689 experiment=2 +51.022005604104 43.000000000000 +55.932537622123 3.000000000000 +67.934354346966 11.000000000000 +77.037722203118 8.000000000000 +117.925101555053 3.000000000000 +>compound 1_0-689003--187--UNKNOWN +>parentmass 450.208044108914 +>charge 1 +>rt 457.185000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005462937563 2404.005859375000 +53.013291366738 14382.492187500000 +53.850539553305 1229.187622070312 +54.009137311492 335318.000000000000 +55.005948620481 6161.950683593750 +55.011128007332 6285.288085937500 +55.054325576409 1904.291870117188 +55.934034663954 5424.790039062500 +56.941630178150 2073.437011718750 +59.049263704528 45991.808593750000 +60.044265496272 10028.100585937500 +61.039219981197 1866.554443359375 +63.997551212800 4047.327392578125 +64.004651365857 4144.961425781250 +68.011321078807 28311.681640625000 +68.993468824753 10369.397460937500 +69.008330083518 1076.394409179688 +69.014780961627 1031.417968750000 +69.034006623211 1372.284179687500 +69.044386265012 14840.317382812500 +72.043967729324 961.000000000000 +72.936188600152 2275.410400390625 +73.063939083279 1847.228393554688 +76.486070495145 1946.000000000000 +79.020643149971 15263.070312500000 +80.048737130547 12141.673828125000 +81.936659734558 7420.991699218750 +82.996161374814 7954.683105468750 +87.044343635950 1145.286743164062 +87.054280514165 1440.349121093750 +89.058652188735 1042.975463867188 +89.069441604273 1391.003295898438 +89.505888388333 1419.000000000000 +90.488676329376 1646.358642578125 +91.053308419714 1221.000000000000 +95.952111940460 1863.000000000000 +97.967641857491 6593.246093750000 +100.074145856940 1294.309326171875 +102.090348283833 1653.000000000000 +109.942333319895 1240.000000000000 +113.962095949677 1891.904907226562 +114.090277449217 11240.656250000000 +118.084964478938 6656.282226562500 +122.095248338368 3579.000000000000 +122.962621350821 9606.000000000000 +123.091751966098 1626.335327148438 +123.961858399993 1077.000000000000 +129.051454066560 957.292175292969 +130.157834981831 1121.000000000000 +136.020382584948 1638.000000000000 +136.110904453860 1209.000000000000 +137.963169325275 1085.686401367188 +138.968688854948 945.000000000000 +141.089809710014 1620.046997070312 +141.111682323879 1569.642211914062 +141.957273542779 14288.949218750000 +142.959737655472 1012.329345703125 +147.090337414184 2504.000000000000 +149.022021871638 4632.739746093750 +149.041582734414 2016.745361328125 +151.095167567069 2825.406005859375 +151.110049739141 3314.160888671875 +155.068980344091 1536.570190429688 +155.104752512375 2317.000000000000 +155.972625015581 3891.629150390625 +158.095129691286 1219.298461914062 +158.152598167441 11767.000000000000 +159.155086324762 1635.707519531250 +159.968174619078 1195.000000000000 +161.095291598324 1520.091796875000 +163.130701462733 1176.503540039062 +164.141925774250 1498.388916015625 +170.094531250990 2684.532226562500 +171.099200185526 1002.465209960938 +171.145851696422 1668.000000000000 +172.131464583877 1427.059082031250 +173.079412347408 7576.692871093750 +174.125997274925 1246.000000000000 +174.990512217255 1408.000000000000 +175.112243989843 1216.865112304688 +177.052924868716 943.000000000000 +178.157812588331 1543.762939453125 +179.105184029538 1979.000000000000 +182.960779543919 2177.131103515625 +183.079291017897 9365.041992187500 +183.135962143350 950.983337402344 +184.081574508754 1558.816284179688 +186.219805518930 1652.000000000000 +193.157067173133 1038.000000000000 +194.116062385202 4196.000000000000 +195.121553672965 2164.767089843750 +198.184510207575 2324.000000000000 +200.198764613695 1109.907592773438 +215.080394723136 2952.000000000000 +217.105714936069 25356.156250000000 +218.109166987098 2841.000000000000 +219.094215469340 1412.398559570312 +221.151646030092 943.833679199219 +223.114905631113 998.539367675781 +224.126818598156 1201.000000000000 +227.126338620981 3072.884277343750 +227.158228343459 939.111328125000 +228.194343102588 1649.035522460938 +235.167565514045 1124.013427734375 +239.087483577433 5670.000000000000 +242.282534898909 2001.000000000000 +246.860905861795 3298.000000000000 +249.108530541089 1570.259887695312 +249.183555112515 1594.000000000000 +250.177920056779 1214.311523437500 +250.998285620431 2621.433593750000 +251.182611644515 1186.000000000000 +252.995541403401 1651.000000000000 +267.170989220468 1681.956176757812 +279.092351342498 1873.000000000000 +281.049332169974 1243.000000000000 +289.120224828919 1876.277954101562 +294.135548677238 8432.645507812500 +295.138434098782 1394.059326171875 +295.188945664971 1586.712036132812 +295.224952419882 1034.511840820312 +296.132198968461 2976.000000000000 +304.111105892876 3524.000000000000 +309.231658422928 1464.458862304688 +327.006917332691 3517.268310546875 +329.004024426409 3549.000000000000 +330.204970084658 1869.000000000000 +331.000500497877 1235.000000000000 +367.244334927149 2268.000000000000 +371.100005273709 1020.000000000000 +430.886196232651 1149.000000000000 +432.882414950513 969.000000000000 +445.117374886945 2196.000000000000 +446.118763222018 990.000000000000 +500.274994020911 1622.000000000000 +502.289500833904 2127.746093750000 +505.849174205835 1470.000000000000 +519.136713363770 1134.000000000000 +520.337556483937 1116.000000000000 +524.368037745285 1992.000000000000 +536.162614219819 5338.000000000000 +537.163957528246 2803.000000000000 +538.161870396621 1979.000000000000 +542.321562116618 4335.332031250000 +543.325313211853 1399.000000000000 +544.338326321649 2276.697509765625 +546.911868347399 987.000000000000 +610.182073897910 2326.000000000000 +611.184087071901 1402.000000000000 +612.179777935645 1132.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=689 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=689 experiment=3_0 +##scan 187 +##specref ms_run[1]:sample=1 period=1 cycle=689 experiment=3 +98.985348089152 12.000000000000 +165.070893393068 3.000000000000 +246.805164464836 3.000000000000 +253.016878406790 3.000000000000 +306.768989217042 3.000000000000 +>compound 1_0-691002--191--UNKNOWN +>parentmass 83.084846425827 +>charge 1 +>rt 459.034999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +83.084846425827 2619.000000000000 +>ms1peaks +52.005460768039 2632.474609375000 +52.018216605071 1453.331787109375 +53.013504878262 13629.050781250000 +53.849980694050 1426.347900390625 +54.009228946889 336414.500000000000 +55.006192155745 5923.077148437500 +55.011510780469 6201.034179687500 +55.054252354012 2748.183837890625 +55.934342759512 5029.362792968750 +56.049718574756 3820.462890625000 +56.941798954376 2040.369384765625 +59.049450389379 63100.214843750000 +60.044446622738 10277.622070312500 +61.039574586144 1639.209472656250 +63.997833501230 3457.696044921875 +64.005356757182 3922.083740234375 +67.028813659264 2927.124267578125 +68.011568906879 27184.011718750000 +68.993799166752 11291.774414062500 +69.008782671073 1110.820922851562 +69.044422525384 14576.621093750000 +72.044090470135 1069.000000000000 +72.936647746103 1867.645996093750 +73.064241969654 1890.270141601562 +76.486566607142 2154.000000000000 +79.021060621858 16402.000000000000 +80.048912504147 11908.904296875000 +81.936948519663 7659.439453125000 +82.996456601784 7432.041015625000 +83.084846425827 2619.000000000000 +87.044234628717 1642.456787109375 +87.054412582263 1764.396362304688 +89.070136748709 1188.329101562500 +89.506769824945 1309.000000000000 +90.489346677114 1261.775878906250 +91.053422064295 1599.987548828125 +95.952556829344 1954.000000000000 +97.967937653882 6272.680175781250 +100.074820050407 1313.661132812500 +102.090442487468 2018.000000000000 +109.942993258045 1292.210815429688 +113.962358113491 1857.055419921875 +114.090543897348 10782.883789062500 +118.085193271831 6439.585937500000 +122.095576433333 3719.300781250000 +122.963045289522 8831.000000000000 +123.090127906704 2032.145874023438 +123.961671902554 1039.000000000000 +130.158410860949 1108.000000000000 +136.020580299746 1385.000000000000 +136.110973601797 1208.185180664062 +137.963495288748 1038.000000000000 +138.970185164931 1044.000000000000 +141.090483230390 1714.842407226562 +141.112072140860 1217.862182617188 +141.957625571099 14848.524414062500 +142.959933648058 1183.193115234375 +147.090750731097 2692.000000000000 +149.022586318358 4677.753906250000 +151.095818189897 2463.614501953125 +151.109403980113 2852.661376953125 +155.069856888985 1644.906494140625 +155.105634666236 8124.955078125000 +155.973077442175 3878.003173828125 +158.095390272769 1041.850830078125 +158.153110530602 11433.902343750000 +159.156138029756 1255.307250976562 +159.968790133864 1084.000000000000 +161.096047015176 1855.838989257812 +163.131292514217 1081.046264648438 +164.142338808225 1538.000000000000 +170.095249905282 2481.923583984375 +170.114818729424 1586.174682617188 +171.144577817449 1465.000000000000 +172.133060054694 1132.135253906250 +173.080138735239 6781.958007812500 +174.126750381227 1146.000000000000 +174.990894555098 1459.000000000000 +175.124197631539 1158.163574218750 +177.054313185370 1050.000000000000 +178.158439439061 1351.589477539062 +179.106069845588 2217.652832031250 +182.960683036176 2721.000000000000 +183.079572975077 3558.392822265625 +186.220577305634 1472.000000000000 +194.115833443496 3200.611816406250 +195.099867813526 1492.162719726562 +195.121670053083 2089.949218750000 +198.184355819996 2036.034667968750 +199.185771412889 1053.000000000000 +200.199994101328 1045.000000000000 +217.106066147047 23700.000000000000 +218.109880969704 2669.000000000000 +219.095458161270 1180.932006835938 +224.126383591275 1239.964111328125 +227.127075688130 24915.439453125000 +228.130566679052 3475.000000000000 +228.195672567193 1184.000000000000 +233.135519600916 1606.236083984375 +235.167213939552 1131.541503906250 +239.088391913188 5292.000000000000 +242.283165125348 1763.000000000000 +246.861456391400 2687.000000000000 +249.108966407852 11636.693359375000 +250.113738299007 1549.000000000000 +250.178629966588 1340.000000000000 +250.999377894033 2470.000000000000 +252.996369939032 1431.000000000000 +267.169859968301 1516.000000000000 +279.093360326372 2198.000000000000 +281.049935707172 1718.359741210938 +289.120421172109 1505.223999023438 +294.135805745070 1954.000000000000 +295.190643010298 1597.599243164062 +304.112579156761 2114.000000000000 +327.007179750003 3429.369384765625 +327.051990179871 1964.440551757812 +329.004854748166 3098.000000000000 +330.205970450676 2139.970947265625 +331.001810666775 1124.000000000000 +367.245375431034 1096.678710937500 +371.099956255100 1145.000000000000 +371.315850471733 1077.000000000000 +382.972477955693 57862.191406250000 +383.973581113624 9390.000000000000 +384.969379705317 56829.000000000000 +385.971610318225 8858.000000000000 +386.966433781431 18577.000000000000 +387.968684254304 3112.000000000000 +388.968200016670 2893.000000000000 +404.953693248965 4478.000000000000 +406.950549247024 5007.000000000000 +408.948134552343 1602.000000000000 +430.886087934454 1034.000000000000 +445.119126674486 2384.000000000000 +446.119450710310 1082.000000000000 +500.276347970652 1519.000000000000 +502.291527770051 2163.919189453125 +505.851373232660 1515.000000000000 +520.336525060874 1398.000000000000 +524.368789804896 2012.000000000000 +526.290251526751 1047.306762695312 +536.163216797749 5403.000000000000 +537.165736905426 2653.000000000000 +538.162249785514 1911.000000000000 +542.322969125465 2655.288330078125 +544.337954764480 2683.000000000000 +546.913572609430 1216.000000000000 +610.182763261579 2011.580444335938 +611.182765882529 1285.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=691 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=691 experiment=2_0 +##scan 191 +##specref ms_run[1]:sample=1 period=1 cycle=691 experiment=2 +55.934193747419 422.000000000000 +81.936575521886 718.386169433594 +109.942691355464 60.000000000000 +>compound 1_0-691003--192--UNKNOWN +>parentmass 127.073934085462 +>charge 1 +>rt 459.034999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005460768039 2632.474609375000 +52.018216605071 1453.331787109375 +53.013504878262 13629.050781250000 +53.849980694050 1426.347900390625 +54.009228946889 336414.500000000000 +55.006192155745 5923.077148437500 +55.011510780469 6201.034179687500 +55.054252354012 2748.183837890625 +55.934342759512 5029.362792968750 +56.049718574756 3820.462890625000 +56.941798954376 2040.369384765625 +59.049450389379 63100.214843750000 +60.044446622738 10277.622070312500 +61.039574586144 1639.209472656250 +63.997833501230 3457.696044921875 +64.005356757182 3922.083740234375 +67.028813659264 2927.124267578125 +68.011568906879 27184.011718750000 +68.993799166752 11291.774414062500 +69.008782671073 1110.820922851562 +69.044422525384 14576.621093750000 +72.044090470135 1069.000000000000 +72.936647746103 1867.645996093750 +73.064241969654 1890.270141601562 +76.486566607142 2154.000000000000 +79.021060621858 16402.000000000000 +80.048912504147 11908.904296875000 +81.936948519663 7659.439453125000 +82.996456601784 7432.041015625000 +83.084846425827 2619.000000000000 +87.044234628717 1642.456787109375 +87.054412582263 1764.396362304688 +89.070136748709 1188.329101562500 +89.506769824945 1309.000000000000 +90.489346677114 1261.775878906250 +91.053422064295 1599.987548828125 +95.952556829344 1954.000000000000 +97.967937653882 6272.680175781250 +100.074820050407 1313.661132812500 +102.090442487468 2018.000000000000 +109.942993258045 1292.210815429688 +113.962358113491 1857.055419921875 +114.090543897348 10782.883789062500 +118.085193271831 6439.585937500000 +122.095576433333 3719.300781250000 +122.963045289522 8831.000000000000 +123.090127906704 2032.145874023438 +123.961671902554 1039.000000000000 +130.158410860949 1108.000000000000 +136.020580299746 1385.000000000000 +136.110973601797 1208.185180664062 +137.963495288748 1038.000000000000 +138.970185164931 1044.000000000000 +141.090483230390 1714.842407226562 +141.112072140860 1217.862182617188 +141.957625571099 14848.524414062500 +142.959933648058 1183.193115234375 +147.090750731097 2692.000000000000 +149.022586318358 4677.753906250000 +151.095818189897 2463.614501953125 +151.109403980113 2852.661376953125 +155.069856888985 1644.906494140625 +155.105634666236 8124.955078125000 +155.973077442175 3878.003173828125 +158.095390272769 1041.850830078125 +158.153110530602 11433.902343750000 +159.156138029756 1255.307250976562 +159.968790133864 1084.000000000000 +161.096047015176 1855.838989257812 +163.131292514217 1081.046264648438 +164.142338808225 1538.000000000000 +170.095249905282 2481.923583984375 +170.114818729424 1586.174682617188 +171.144577817449 1465.000000000000 +172.133060054694 1132.135253906250 +173.080138735239 6781.958007812500 +174.126750381227 1146.000000000000 +174.990894555098 1459.000000000000 +175.124197631539 1158.163574218750 +177.054313185370 1050.000000000000 +178.158439439061 1351.589477539062 +179.106069845588 2217.652832031250 +182.960683036176 2721.000000000000 +183.079572975077 3558.392822265625 +186.220577305634 1472.000000000000 +194.115833443496 3200.611816406250 +195.099867813526 1492.162719726562 +195.121670053083 2089.949218750000 +198.184355819996 2036.034667968750 +199.185771412889 1053.000000000000 +200.199994101328 1045.000000000000 +217.106066147047 23700.000000000000 +218.109880969704 2669.000000000000 +219.095458161270 1180.932006835938 +224.126383591275 1239.964111328125 +227.127075688130 24915.439453125000 +228.130566679052 3475.000000000000 +228.195672567193 1184.000000000000 +233.135519600916 1606.236083984375 +235.167213939552 1131.541503906250 +239.088391913188 5292.000000000000 +242.283165125348 1763.000000000000 +246.861456391400 2687.000000000000 +249.108966407852 11636.693359375000 +250.113738299007 1549.000000000000 +250.178629966588 1340.000000000000 +250.999377894033 2470.000000000000 +252.996369939032 1431.000000000000 +267.169859968301 1516.000000000000 +279.093360326372 2198.000000000000 +281.049935707172 1718.359741210938 +289.120421172109 1505.223999023438 +294.135805745070 1954.000000000000 +295.190643010298 1597.599243164062 +304.112579156761 2114.000000000000 +327.007179750003 3429.369384765625 +327.051990179871 1964.440551757812 +329.004854748166 3098.000000000000 +330.205970450676 2139.970947265625 +331.001810666775 1124.000000000000 +367.245375431034 1096.678710937500 +371.099956255100 1145.000000000000 +371.315850471733 1077.000000000000 +382.972477955693 57862.191406250000 +383.973581113624 9390.000000000000 +384.969379705317 56829.000000000000 +385.971610318225 8858.000000000000 +386.966433781431 18577.000000000000 +387.968684254304 3112.000000000000 +388.968200016670 2893.000000000000 +404.953693248965 4478.000000000000 +406.950549247024 5007.000000000000 +408.948134552343 1602.000000000000 +430.886087934454 1034.000000000000 +445.119126674486 2384.000000000000 +446.119450710310 1082.000000000000 +500.276347970652 1519.000000000000 +502.291527770051 2163.919189453125 +505.851373232660 1515.000000000000 +520.336525060874 1398.000000000000 +524.368789804896 2012.000000000000 +526.290251526751 1047.306762695312 +536.163216797749 5403.000000000000 +537.165736905426 2653.000000000000 +538.162249785514 1911.000000000000 +542.322969125465 2655.288330078125 +544.337954764480 2683.000000000000 +546.913572609430 1216.000000000000 +610.182763261579 2011.580444335938 +611.182765882529 1285.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=691 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=691 experiment=3_0 +##scan 192 +##specref ms_run[1]:sample=1 period=1 cycle=691 experiment=3 +53.037920112149 13.000000000000 +>compound 1_0-691004--193--UNKNOWN +>parentmass 233.135519600916 +>charge 1 +>rt 459.034999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +233.135519600916 1606.236083984375 +>ms1peaks +52.005460768039 2632.474609375000 +52.018216605071 1453.331787109375 +53.013504878262 13629.050781250000 +53.849980694050 1426.347900390625 +54.009228946889 336414.500000000000 +55.006192155745 5923.077148437500 +55.011510780469 6201.034179687500 +55.054252354012 2748.183837890625 +55.934342759512 5029.362792968750 +56.049718574756 3820.462890625000 +56.941798954376 2040.369384765625 +59.049450389379 63100.214843750000 +60.044446622738 10277.622070312500 +61.039574586144 1639.209472656250 +63.997833501230 3457.696044921875 +64.005356757182 3922.083740234375 +67.028813659264 2927.124267578125 +68.011568906879 27184.011718750000 +68.993799166752 11291.774414062500 +69.008782671073 1110.820922851562 +69.044422525384 14576.621093750000 +72.044090470135 1069.000000000000 +72.936647746103 1867.645996093750 +73.064241969654 1890.270141601562 +76.486566607142 2154.000000000000 +79.021060621858 16402.000000000000 +80.048912504147 11908.904296875000 +81.936948519663 7659.439453125000 +82.996456601784 7432.041015625000 +83.084846425827 2619.000000000000 +87.044234628717 1642.456787109375 +87.054412582263 1764.396362304688 +89.070136748709 1188.329101562500 +89.506769824945 1309.000000000000 +90.489346677114 1261.775878906250 +91.053422064295 1599.987548828125 +95.952556829344 1954.000000000000 +97.967937653882 6272.680175781250 +100.074820050407 1313.661132812500 +102.090442487468 2018.000000000000 +109.942993258045 1292.210815429688 +113.962358113491 1857.055419921875 +114.090543897348 10782.883789062500 +118.085193271831 6439.585937500000 +122.095576433333 3719.300781250000 +122.963045289522 8831.000000000000 +123.090127906704 2032.145874023438 +123.961671902554 1039.000000000000 +130.158410860949 1108.000000000000 +136.020580299746 1385.000000000000 +136.110973601797 1208.185180664062 +137.963495288748 1038.000000000000 +138.970185164931 1044.000000000000 +141.090483230390 1714.842407226562 +141.112072140860 1217.862182617188 +141.957625571099 14848.524414062500 +142.959933648058 1183.193115234375 +147.090750731097 2692.000000000000 +149.022586318358 4677.753906250000 +151.095818189897 2463.614501953125 +151.109403980113 2852.661376953125 +155.069856888985 1644.906494140625 +155.105634666236 8124.955078125000 +155.973077442175 3878.003173828125 +158.095390272769 1041.850830078125 +158.153110530602 11433.902343750000 +159.156138029756 1255.307250976562 +159.968790133864 1084.000000000000 +161.096047015176 1855.838989257812 +163.131292514217 1081.046264648438 +164.142338808225 1538.000000000000 +170.095249905282 2481.923583984375 +170.114818729424 1586.174682617188 +171.144577817449 1465.000000000000 +172.133060054694 1132.135253906250 +173.080138735239 6781.958007812500 +174.126750381227 1146.000000000000 +174.990894555098 1459.000000000000 +175.124197631539 1158.163574218750 +177.054313185370 1050.000000000000 +178.158439439061 1351.589477539062 +179.106069845588 2217.652832031250 +182.960683036176 2721.000000000000 +183.079572975077 3558.392822265625 +186.220577305634 1472.000000000000 +194.115833443496 3200.611816406250 +195.099867813526 1492.162719726562 +195.121670053083 2089.949218750000 +198.184355819996 2036.034667968750 +199.185771412889 1053.000000000000 +200.199994101328 1045.000000000000 +217.106066147047 23700.000000000000 +218.109880969704 2669.000000000000 +219.095458161270 1180.932006835938 +224.126383591275 1239.964111328125 +227.127075688130 24915.439453125000 +228.130566679052 3475.000000000000 +228.195672567193 1184.000000000000 +233.135519600916 1606.236083984375 +235.167213939552 1131.541503906250 +239.088391913188 5292.000000000000 +242.283165125348 1763.000000000000 +246.861456391400 2687.000000000000 +249.108966407852 11636.693359375000 +250.113738299007 1549.000000000000 +250.178629966588 1340.000000000000 +250.999377894033 2470.000000000000 +252.996369939032 1431.000000000000 +267.169859968301 1516.000000000000 +279.093360326372 2198.000000000000 +281.049935707172 1718.359741210938 +289.120421172109 1505.223999023438 +294.135805745070 1954.000000000000 +295.190643010298 1597.599243164062 +304.112579156761 2114.000000000000 +327.007179750003 3429.369384765625 +327.051990179871 1964.440551757812 +329.004854748166 3098.000000000000 +330.205970450676 2139.970947265625 +331.001810666775 1124.000000000000 +367.245375431034 1096.678710937500 +371.099956255100 1145.000000000000 +371.315850471733 1077.000000000000 +382.972477955693 57862.191406250000 +383.973581113624 9390.000000000000 +384.969379705317 56829.000000000000 +385.971610318225 8858.000000000000 +386.966433781431 18577.000000000000 +387.968684254304 3112.000000000000 +388.968200016670 2893.000000000000 +404.953693248965 4478.000000000000 +406.950549247024 5007.000000000000 +408.948134552343 1602.000000000000 +430.886087934454 1034.000000000000 +445.119126674486 2384.000000000000 +446.119450710310 1082.000000000000 +500.276347970652 1519.000000000000 +502.291527770051 2163.919189453125 +505.851373232660 1515.000000000000 +520.336525060874 1398.000000000000 +524.368789804896 2012.000000000000 +526.290251526751 1047.306762695312 +536.163216797749 5403.000000000000 +537.165736905426 2653.000000000000 +538.162249785514 1911.000000000000 +542.322969125465 2655.288330078125 +544.337954764480 2683.000000000000 +546.913572609430 1216.000000000000 +610.182763261579 2011.580444335938 +611.182765882529 1285.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=691 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=691 experiment=4_0 +##scan 193 +##specref ms_run[1]:sample=1 period=1 cycle=691 experiment=4 +166.007683274588 13.000000000000 +173.079013683895 13.000000000000 +>compound 1_0-691006--195--UNKNOWN +>parentmass 387.968684254304 +>charge 1 +>rt 459.034999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +387.968684254304 3112.000000000000 +>ms1peaks +52.005460768039 2632.474609375000 +52.018216605071 1453.331787109375 +53.013504878262 13629.050781250000 +53.849980694050 1426.347900390625 +54.009228946889 336414.500000000000 +55.006192155745 5923.077148437500 +55.011510780469 6201.034179687500 +55.054252354012 2748.183837890625 +55.934342759512 5029.362792968750 +56.049718574756 3820.462890625000 +56.941798954376 2040.369384765625 +59.049450389379 63100.214843750000 +60.044446622738 10277.622070312500 +61.039574586144 1639.209472656250 +63.997833501230 3457.696044921875 +64.005356757182 3922.083740234375 +67.028813659264 2927.124267578125 +68.011568906879 27184.011718750000 +68.993799166752 11291.774414062500 +69.008782671073 1110.820922851562 +69.044422525384 14576.621093750000 +72.044090470135 1069.000000000000 +72.936647746103 1867.645996093750 +73.064241969654 1890.270141601562 +76.486566607142 2154.000000000000 +79.021060621858 16402.000000000000 +80.048912504147 11908.904296875000 +81.936948519663 7659.439453125000 +82.996456601784 7432.041015625000 +83.084846425827 2619.000000000000 +87.044234628717 1642.456787109375 +87.054412582263 1764.396362304688 +89.070136748709 1188.329101562500 +89.506769824945 1309.000000000000 +90.489346677114 1261.775878906250 +91.053422064295 1599.987548828125 +95.952556829344 1954.000000000000 +97.967937653882 6272.680175781250 +100.074820050407 1313.661132812500 +102.090442487468 2018.000000000000 +109.942993258045 1292.210815429688 +113.962358113491 1857.055419921875 +114.090543897348 10782.883789062500 +118.085193271831 6439.585937500000 +122.095576433333 3719.300781250000 +122.963045289522 8831.000000000000 +123.090127906704 2032.145874023438 +123.961671902554 1039.000000000000 +130.158410860949 1108.000000000000 +136.020580299746 1385.000000000000 +136.110973601797 1208.185180664062 +137.963495288748 1038.000000000000 +138.970185164931 1044.000000000000 +141.090483230390 1714.842407226562 +141.112072140860 1217.862182617188 +141.957625571099 14848.524414062500 +142.959933648058 1183.193115234375 +147.090750731097 2692.000000000000 +149.022586318358 4677.753906250000 +151.095818189897 2463.614501953125 +151.109403980113 2852.661376953125 +155.069856888985 1644.906494140625 +155.105634666236 8124.955078125000 +155.973077442175 3878.003173828125 +158.095390272769 1041.850830078125 +158.153110530602 11433.902343750000 +159.156138029756 1255.307250976562 +159.968790133864 1084.000000000000 +161.096047015176 1855.838989257812 +163.131292514217 1081.046264648438 +164.142338808225 1538.000000000000 +170.095249905282 2481.923583984375 +170.114818729424 1586.174682617188 +171.144577817449 1465.000000000000 +172.133060054694 1132.135253906250 +173.080138735239 6781.958007812500 +174.126750381227 1146.000000000000 +174.990894555098 1459.000000000000 +175.124197631539 1158.163574218750 +177.054313185370 1050.000000000000 +178.158439439061 1351.589477539062 +179.106069845588 2217.652832031250 +182.960683036176 2721.000000000000 +183.079572975077 3558.392822265625 +186.220577305634 1472.000000000000 +194.115833443496 3200.611816406250 +195.099867813526 1492.162719726562 +195.121670053083 2089.949218750000 +198.184355819996 2036.034667968750 +199.185771412889 1053.000000000000 +200.199994101328 1045.000000000000 +217.106066147047 23700.000000000000 +218.109880969704 2669.000000000000 +219.095458161270 1180.932006835938 +224.126383591275 1239.964111328125 +227.127075688130 24915.439453125000 +228.130566679052 3475.000000000000 +228.195672567193 1184.000000000000 +233.135519600916 1606.236083984375 +235.167213939552 1131.541503906250 +239.088391913188 5292.000000000000 +242.283165125348 1763.000000000000 +246.861456391400 2687.000000000000 +249.108966407852 11636.693359375000 +250.113738299007 1549.000000000000 +250.178629966588 1340.000000000000 +250.999377894033 2470.000000000000 +252.996369939032 1431.000000000000 +267.169859968301 1516.000000000000 +279.093360326372 2198.000000000000 +281.049935707172 1718.359741210938 +289.120421172109 1505.223999023438 +294.135805745070 1954.000000000000 +295.190643010298 1597.599243164062 +304.112579156761 2114.000000000000 +327.007179750003 3429.369384765625 +327.051990179871 1964.440551757812 +329.004854748166 3098.000000000000 +330.205970450676 2139.970947265625 +331.001810666775 1124.000000000000 +367.245375431034 1096.678710937500 +371.099956255100 1145.000000000000 +371.315850471733 1077.000000000000 +382.972477955693 57862.191406250000 +383.973581113624 9390.000000000000 +384.969379705317 56829.000000000000 +385.971610318225 8858.000000000000 +386.966433781431 18577.000000000000 +387.968684254304 3112.000000000000 +388.968200016670 2893.000000000000 +404.953693248965 4478.000000000000 +406.950549247024 5007.000000000000 +408.948134552343 1602.000000000000 +430.886087934454 1034.000000000000 +445.119126674486 2384.000000000000 +446.119450710310 1082.000000000000 +500.276347970652 1519.000000000000 +502.291527770051 2163.919189453125 +505.851373232660 1515.000000000000 +520.336525060874 1398.000000000000 +524.368789804896 2012.000000000000 +526.290251526751 1047.306762695312 +536.163216797749 5403.000000000000 +537.165736905426 2653.000000000000 +538.162249785514 1911.000000000000 +542.322969125465 2655.288330078125 +544.337954764480 2683.000000000000 +546.913572609430 1216.000000000000 +610.182763261579 2011.580444335938 +611.182765882529 1285.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=691 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=691 experiment=6_0 +##scan 195 +##specref ms_run[1]:sample=1 period=1 cycle=691 experiment=6 +98.508054722686 16.000000000000 +146.955638001610 84.000000000000 +147.961090896970 47.000000000000 +148.955796295990 32.000000000000 +172.960431251169 40.000000000000 +174.952304150173 678.000000000000 +175.956122188497 618.000000000000 +175.993362971801 16.176900863647 +176.949642178787 385.000000000000 +177.952217559683 302.000000000000 +193.999472514428 16.000000000000 +195.001611227709 16.000000000000 +195.992975011081 24.000000000000 +196.998367077382 23.000000000000 +369.956017158403 63.000000000000 +370.012660843796 16.000000000000 +387.964449221884 32.000000000000 +>compound 1_0-691007--196--UNKNOWN +>parentmass 406.950549247024 +>charge 1 +>rt 459.034999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +406.950549247024 5007.000000000000 +>ms1peaks +52.005460768039 2632.474609375000 +52.018216605071 1453.331787109375 +53.013504878262 13629.050781250000 +53.849980694050 1426.347900390625 +54.009228946889 336414.500000000000 +55.006192155745 5923.077148437500 +55.011510780469 6201.034179687500 +55.054252354012 2748.183837890625 +55.934342759512 5029.362792968750 +56.049718574756 3820.462890625000 +56.941798954376 2040.369384765625 +59.049450389379 63100.214843750000 +60.044446622738 10277.622070312500 +61.039574586144 1639.209472656250 +63.997833501230 3457.696044921875 +64.005356757182 3922.083740234375 +67.028813659264 2927.124267578125 +68.011568906879 27184.011718750000 +68.993799166752 11291.774414062500 +69.008782671073 1110.820922851562 +69.044422525384 14576.621093750000 +72.044090470135 1069.000000000000 +72.936647746103 1867.645996093750 +73.064241969654 1890.270141601562 +76.486566607142 2154.000000000000 +79.021060621858 16402.000000000000 +80.048912504147 11908.904296875000 +81.936948519663 7659.439453125000 +82.996456601784 7432.041015625000 +83.084846425827 2619.000000000000 +87.044234628717 1642.456787109375 +87.054412582263 1764.396362304688 +89.070136748709 1188.329101562500 +89.506769824945 1309.000000000000 +90.489346677114 1261.775878906250 +91.053422064295 1599.987548828125 +95.952556829344 1954.000000000000 +97.967937653882 6272.680175781250 +100.074820050407 1313.661132812500 +102.090442487468 2018.000000000000 +109.942993258045 1292.210815429688 +113.962358113491 1857.055419921875 +114.090543897348 10782.883789062500 +118.085193271831 6439.585937500000 +122.095576433333 3719.300781250000 +122.963045289522 8831.000000000000 +123.090127906704 2032.145874023438 +123.961671902554 1039.000000000000 +130.158410860949 1108.000000000000 +136.020580299746 1385.000000000000 +136.110973601797 1208.185180664062 +137.963495288748 1038.000000000000 +138.970185164931 1044.000000000000 +141.090483230390 1714.842407226562 +141.112072140860 1217.862182617188 +141.957625571099 14848.524414062500 +142.959933648058 1183.193115234375 +147.090750731097 2692.000000000000 +149.022586318358 4677.753906250000 +151.095818189897 2463.614501953125 +151.109403980113 2852.661376953125 +155.069856888985 1644.906494140625 +155.105634666236 8124.955078125000 +155.973077442175 3878.003173828125 +158.095390272769 1041.850830078125 +158.153110530602 11433.902343750000 +159.156138029756 1255.307250976562 +159.968790133864 1084.000000000000 +161.096047015176 1855.838989257812 +163.131292514217 1081.046264648438 +164.142338808225 1538.000000000000 +170.095249905282 2481.923583984375 +170.114818729424 1586.174682617188 +171.144577817449 1465.000000000000 +172.133060054694 1132.135253906250 +173.080138735239 6781.958007812500 +174.126750381227 1146.000000000000 +174.990894555098 1459.000000000000 +175.124197631539 1158.163574218750 +177.054313185370 1050.000000000000 +178.158439439061 1351.589477539062 +179.106069845588 2217.652832031250 +182.960683036176 2721.000000000000 +183.079572975077 3558.392822265625 +186.220577305634 1472.000000000000 +194.115833443496 3200.611816406250 +195.099867813526 1492.162719726562 +195.121670053083 2089.949218750000 +198.184355819996 2036.034667968750 +199.185771412889 1053.000000000000 +200.199994101328 1045.000000000000 +217.106066147047 23700.000000000000 +218.109880969704 2669.000000000000 +219.095458161270 1180.932006835938 +224.126383591275 1239.964111328125 +227.127075688130 24915.439453125000 +228.130566679052 3475.000000000000 +228.195672567193 1184.000000000000 +233.135519600916 1606.236083984375 +235.167213939552 1131.541503906250 +239.088391913188 5292.000000000000 +242.283165125348 1763.000000000000 +246.861456391400 2687.000000000000 +249.108966407852 11636.693359375000 +250.113738299007 1549.000000000000 +250.178629966588 1340.000000000000 +250.999377894033 2470.000000000000 +252.996369939032 1431.000000000000 +267.169859968301 1516.000000000000 +279.093360326372 2198.000000000000 +281.049935707172 1718.359741210938 +289.120421172109 1505.223999023438 +294.135805745070 1954.000000000000 +295.190643010298 1597.599243164062 +304.112579156761 2114.000000000000 +327.007179750003 3429.369384765625 +327.051990179871 1964.440551757812 +329.004854748166 3098.000000000000 +330.205970450676 2139.970947265625 +331.001810666775 1124.000000000000 +367.245375431034 1096.678710937500 +371.099956255100 1145.000000000000 +371.315850471733 1077.000000000000 +382.972477955693 57862.191406250000 +383.973581113624 9390.000000000000 +384.969379705317 56829.000000000000 +385.971610318225 8858.000000000000 +386.966433781431 18577.000000000000 +387.968684254304 3112.000000000000 +388.968200016670 2893.000000000000 +404.953693248965 4478.000000000000 +406.950549247024 5007.000000000000 +408.948134552343 1602.000000000000 +430.886087934454 1034.000000000000 +445.119126674486 2384.000000000000 +446.119450710310 1082.000000000000 +500.276347970652 1519.000000000000 +502.291527770051 2163.919189453125 +505.851373232660 1515.000000000000 +520.336525060874 1398.000000000000 +524.368789804896 2012.000000000000 +526.290251526751 1047.306762695312 +536.163216797749 5403.000000000000 +537.165736905426 2653.000000000000 +538.162249785514 1911.000000000000 +542.322969125465 2655.288330078125 +544.337954764480 2683.000000000000 +546.913572609430 1216.000000000000 +610.182763261579 2011.580444335938 +611.182765882529 1285.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=691 experiment=7 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=691 experiment=7_0 +##scan 196 +##specref ms_run[1]:sample=1 period=1 cycle=691 experiment=7 +212.136422067413 6.000000000000 +314.924871233192 6.000000000000 +406.959534456791 16.000000000000 +>compound 1_0-692002--198--UNKNOWN +>parentmass 155.105682901057 +>charge 1 +>rt 459.961000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +155.105682901057 6263.000000000000 +>ms1peaks +52.005836971133 3275.866210937500 +53.013585641217 16462.654296875000 +53.850547505716 1247.490844726562 +54.009388977537 348598.687500000000 +55.005798963074 5869.680175781250 +55.011774372187 6856.918945312500 +55.054475601255 2473.953125000000 +55.934129107275 5180.807128906250 +56.942113043098 2081.341552734375 +59.049544533559 54336.714843750000 +60.044465740627 9898.330078125000 +61.039478346007 2105.842529296875 +63.997412764298 3413.259765625000 +64.005106461592 4299.035644531250 +68.011655111553 26417.048828125000 +68.993451225116 10495.742187500000 +69.007351634483 1155.211425781250 +69.044667736537 14631.378906250000 +72.043977843220 1186.000000000000 +72.936644856416 1760.000000000000 +73.064218143049 1938.000000000000 +76.486218455988 2096.923095703125 +79.020975495578 13874.204101562500 +80.049052003255 11024.270507812500 +81.937175489519 7138.000000000000 +82.996514044878 7636.792968750000 +83.084688813927 2161.000000000000 +87.055001018332 1330.756225585938 +89.506504228804 1366.624267578125 +90.488814793493 1655.000000000000 +91.053863900189 1343.637695312500 +95.952451549397 2123.438964843750 +97.968285613023 6437.601562500000 +100.075459222547 1156.000000000000 +102.090554022445 2543.457763671875 +109.942873698046 1245.000000000000 +113.962843649207 1932.000000000000 +114.090883078011 10019.290039062500 +118.085186987492 5823.000000000000 +122.095548751359 3537.398681640625 +122.963008452569 9425.616210937500 +123.090974567516 1817.215332031250 +130.158162499144 1132.000000000000 +136.020346034918 1611.000000000000 +136.111299179502 1360.000000000000 +137.963423713638 1128.155029296875 +141.090309448831 1352.879638671875 +141.112097614347 1262.819458007812 +141.957702024079 13826.095703125000 +147.090234918404 2477.000000000000 +149.022728714815 4238.566406250000 +149.040599298318 2635.204589843750 +151.095643482255 2393.002197265625 +151.110516034735 2442.884033203125 +155.069236883933 1544.777343750000 +155.105682901057 6263.000000000000 +155.972920410543 3385.000000000000 +158.094774385335 1080.967773437500 +158.153283576062 10534.000000000000 +159.155715172952 1385.000000000000 +161.095525142910 1630.366088867188 +164.142719377118 1265.000000000000 +167.106064869970 1152.309692382812 +170.095316404580 2395.057128906250 +171.144151746612 1479.045532226562 +172.954917719732 3206.000000000000 +173.079795077697 6212.281250000000 +174.952323772485 2424.000000000000 +178.158429128963 1377.000000000000 +179.105591924166 1772.772583007812 +182.961056624651 2308.843750000000 +183.078937804238 2289.022460937500 +183.097572106613 2258.250732421875 +186.221163786911 2129.000000000000 +194.115692438393 3322.000000000000 +195.103289455477 1601.895141601562 +195.120972579400 2060.433593750000 +198.184905525686 1955.000000000000 +200.199697056482 1183.000000000000 +217.106496007309 21462.582031250000 +218.109589696743 2767.000000000000 +219.096136534848 1306.856933593750 +227.127499347418 20629.291015625000 +228.130602306645 2679.707519531250 +228.195447315902 1383.987548828125 +233.134864609403 1301.000000000000 +235.168088751500 1208.444580078125 +239.087982722321 4171.939453125000 +239.159768930624 1207.720947265625 +242.283982386371 1928.000000000000 +246.861553572729 3012.000000000000 +249.109091723811 8774.000000000000 +249.183639586712 1240.879272460938 +250.113239684645 1437.000000000000 +250.178995652493 1182.339599609375 +250.999391894301 2202.000000000000 +251.183548791076 1320.392822265625 +252.996248929911 1545.000000000000 +267.171855191852 1381.224731445312 +279.093783189418 1990.000000000000 +281.051297150952 1339.000000000000 +289.120539945877 1142.618652343750 +304.112680718611 1976.000000000000 +327.007958530185 3305.037597656250 +329.004432449253 2885.000000000000 +330.205630510121 1599.646240234375 +364.962497539327 2062.000000000000 +366.958495480631 1832.000000000000 +382.972703481593 260479.000000000000 +383.796497384394 1154.792724609375 +383.974478286219 40275.000000000000 +384.970213041589 255218.000000000000 +385.971633062117 39022.000000000000 +386.966672062113 82162.000000000000 +387.969272726093 12025.615234375000 +388.966510755465 11969.900390625000 +389.969399976371 1962.000000000000 +390.976493102306 2563.000000000000 +404.954387561958 18217.000000000000 +405.956423697963 3149.000000000000 +406.951091509102 17869.000000000000 +407.954017373214 2785.000000000000 +408.948152813757 6017.000000000000 +428.030637612530 2273.000000000000 +430.027236075757 2378.539794921875 +445.118317831487 2268.000000000000 +482.896699661800 1928.000000000000 +484.894570839957 2183.009277343750 +500.275380576856 1496.000000000000 +502.290948639293 2197.000000000000 +505.852798723386 2232.000000000000 +520.337594021166 1251.000000000000 +524.369861286564 1845.000000000000 +536.163207287856 4803.000000000000 +537.164642261465 2595.000000000000 +538.162041431171 1826.000000000000 +542.323226994846 1949.156982421875 +544.339119685474 3064.000000000000 +546.913615628767 1652.000000000000 +610.181827147267 2083.000000000000 +611.182099563802 1208.000000000000 +770.947018975967 1126.442626953125 +772.941639246509 2253.000000000000 +774.943054052942 1912.000000000000 +786.919336659213 2904.000000000000 +788.915401365752 6123.000000000000 +789.918370920915 1906.000000000000 +790.914122108700 4577.000000000000 +791.916902705136 1354.000000000000 +792.910231210434 2284.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=692 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=692 experiment=2_0 +##scan 198 +##specref ms_run[1]:sample=1 period=1 cycle=692 experiment=2 +55.056256159531 45.000000000000 +55.933539597440 30.000000000000 +67.936328895608 44.823822021484 +67.942957082388 42.351158142090 +70.958269830993 30.000000000000 +72.936595902493 135.000000000000 +>compound 1_0-692003--199--UNKNOWN +>parentmass 227.127499347418 +>charge 1 +>rt 459.961000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +227.127499347418 20629.291015625000 +>ms1peaks +52.005836971133 3275.866210937500 +53.013585641217 16462.654296875000 +53.850547505716 1247.490844726562 +54.009388977537 348598.687500000000 +55.005798963074 5869.680175781250 +55.011774372187 6856.918945312500 +55.054475601255 2473.953125000000 +55.934129107275 5180.807128906250 +56.942113043098 2081.341552734375 +59.049544533559 54336.714843750000 +60.044465740627 9898.330078125000 +61.039478346007 2105.842529296875 +63.997412764298 3413.259765625000 +64.005106461592 4299.035644531250 +68.011655111553 26417.048828125000 +68.993451225116 10495.742187500000 +69.007351634483 1155.211425781250 +69.044667736537 14631.378906250000 +72.043977843220 1186.000000000000 +72.936644856416 1760.000000000000 +73.064218143049 1938.000000000000 +76.486218455988 2096.923095703125 +79.020975495578 13874.204101562500 +80.049052003255 11024.270507812500 +81.937175489519 7138.000000000000 +82.996514044878 7636.792968750000 +83.084688813927 2161.000000000000 +87.055001018332 1330.756225585938 +89.506504228804 1366.624267578125 +90.488814793493 1655.000000000000 +91.053863900189 1343.637695312500 +95.952451549397 2123.438964843750 +97.968285613023 6437.601562500000 +100.075459222547 1156.000000000000 +102.090554022445 2543.457763671875 +109.942873698046 1245.000000000000 +113.962843649207 1932.000000000000 +114.090883078011 10019.290039062500 +118.085186987492 5823.000000000000 +122.095548751359 3537.398681640625 +122.963008452569 9425.616210937500 +123.090974567516 1817.215332031250 +130.158162499144 1132.000000000000 +136.020346034918 1611.000000000000 +136.111299179502 1360.000000000000 +137.963423713638 1128.155029296875 +141.090309448831 1352.879638671875 +141.112097614347 1262.819458007812 +141.957702024079 13826.095703125000 +147.090234918404 2477.000000000000 +149.022728714815 4238.566406250000 +149.040599298318 2635.204589843750 +151.095643482255 2393.002197265625 +151.110516034735 2442.884033203125 +155.069236883933 1544.777343750000 +155.105682901057 6263.000000000000 +155.972920410543 3385.000000000000 +158.094774385335 1080.967773437500 +158.153283576062 10534.000000000000 +159.155715172952 1385.000000000000 +161.095525142910 1630.366088867188 +164.142719377118 1265.000000000000 +167.106064869970 1152.309692382812 +170.095316404580 2395.057128906250 +171.144151746612 1479.045532226562 +172.954917719732 3206.000000000000 +173.079795077697 6212.281250000000 +174.952323772485 2424.000000000000 +178.158429128963 1377.000000000000 +179.105591924166 1772.772583007812 +182.961056624651 2308.843750000000 +183.078937804238 2289.022460937500 +183.097572106613 2258.250732421875 +186.221163786911 2129.000000000000 +194.115692438393 3322.000000000000 +195.103289455477 1601.895141601562 +195.120972579400 2060.433593750000 +198.184905525686 1955.000000000000 +200.199697056482 1183.000000000000 +217.106496007309 21462.582031250000 +218.109589696743 2767.000000000000 +219.096136534848 1306.856933593750 +227.127499347418 20629.291015625000 +228.130602306645 2679.707519531250 +228.195447315902 1383.987548828125 +233.134864609403 1301.000000000000 +235.168088751500 1208.444580078125 +239.087982722321 4171.939453125000 +239.159768930624 1207.720947265625 +242.283982386371 1928.000000000000 +246.861553572729 3012.000000000000 +249.109091723811 8774.000000000000 +249.183639586712 1240.879272460938 +250.113239684645 1437.000000000000 +250.178995652493 1182.339599609375 +250.999391894301 2202.000000000000 +251.183548791076 1320.392822265625 +252.996248929911 1545.000000000000 +267.171855191852 1381.224731445312 +279.093783189418 1990.000000000000 +281.051297150952 1339.000000000000 +289.120539945877 1142.618652343750 +304.112680718611 1976.000000000000 +327.007958530185 3305.037597656250 +329.004432449253 2885.000000000000 +330.205630510121 1599.646240234375 +364.962497539327 2062.000000000000 +366.958495480631 1832.000000000000 +382.972703481593 260479.000000000000 +383.796497384394 1154.792724609375 +383.974478286219 40275.000000000000 +384.970213041589 255218.000000000000 +385.971633062117 39022.000000000000 +386.966672062113 82162.000000000000 +387.969272726093 12025.615234375000 +388.966510755465 11969.900390625000 +389.969399976371 1962.000000000000 +390.976493102306 2563.000000000000 +404.954387561958 18217.000000000000 +405.956423697963 3149.000000000000 +406.951091509102 17869.000000000000 +407.954017373214 2785.000000000000 +408.948152813757 6017.000000000000 +428.030637612530 2273.000000000000 +430.027236075757 2378.539794921875 +445.118317831487 2268.000000000000 +482.896699661800 1928.000000000000 +484.894570839957 2183.009277343750 +500.275380576856 1496.000000000000 +502.290948639293 2197.000000000000 +505.852798723386 2232.000000000000 +520.337594021166 1251.000000000000 +524.369861286564 1845.000000000000 +536.163207287856 4803.000000000000 +537.164642261465 2595.000000000000 +538.162041431171 1826.000000000000 +542.323226994846 1949.156982421875 +544.339119685474 3064.000000000000 +546.913615628767 1652.000000000000 +610.181827147267 2083.000000000000 +611.182099563802 1208.000000000000 +770.947018975967 1126.442626953125 +772.941639246509 2253.000000000000 +774.943054052942 1912.000000000000 +786.919336659213 2904.000000000000 +788.915401365752 6123.000000000000 +789.918370920915 1906.000000000000 +790.914122108700 4577.000000000000 +791.916902705136 1354.000000000000 +792.910231210434 2284.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=692 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=692 experiment=3_0 +##scan 199 +##specref ms_run[1]:sample=1 period=1 cycle=692 experiment=3 +54.894190083511 30.000000000000 +55.016994306394 90.000000000000 +55.054917066703 1516.000000000000 +73.027851892659 150.000000000000 +83.084481692623 105.000000000000 +>compound 1_0-692004--200--UNKNOWN +>parentmass 249.109091723811 +>charge 1 +>rt 459.961000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +249.109091723811 8774.000000000000 +>ms1peaks +52.005836971133 3275.866210937500 +53.013585641217 16462.654296875000 +53.850547505716 1247.490844726562 +54.009388977537 348598.687500000000 +55.005798963074 5869.680175781250 +55.011774372187 6856.918945312500 +55.054475601255 2473.953125000000 +55.934129107275 5180.807128906250 +56.942113043098 2081.341552734375 +59.049544533559 54336.714843750000 +60.044465740627 9898.330078125000 +61.039478346007 2105.842529296875 +63.997412764298 3413.259765625000 +64.005106461592 4299.035644531250 +68.011655111553 26417.048828125000 +68.993451225116 10495.742187500000 +69.007351634483 1155.211425781250 +69.044667736537 14631.378906250000 +72.043977843220 1186.000000000000 +72.936644856416 1760.000000000000 +73.064218143049 1938.000000000000 +76.486218455988 2096.923095703125 +79.020975495578 13874.204101562500 +80.049052003255 11024.270507812500 +81.937175489519 7138.000000000000 +82.996514044878 7636.792968750000 +83.084688813927 2161.000000000000 +87.055001018332 1330.756225585938 +89.506504228804 1366.624267578125 +90.488814793493 1655.000000000000 +91.053863900189 1343.637695312500 +95.952451549397 2123.438964843750 +97.968285613023 6437.601562500000 +100.075459222547 1156.000000000000 +102.090554022445 2543.457763671875 +109.942873698046 1245.000000000000 +113.962843649207 1932.000000000000 +114.090883078011 10019.290039062500 +118.085186987492 5823.000000000000 +122.095548751359 3537.398681640625 +122.963008452569 9425.616210937500 +123.090974567516 1817.215332031250 +130.158162499144 1132.000000000000 +136.020346034918 1611.000000000000 +136.111299179502 1360.000000000000 +137.963423713638 1128.155029296875 +141.090309448831 1352.879638671875 +141.112097614347 1262.819458007812 +141.957702024079 13826.095703125000 +147.090234918404 2477.000000000000 +149.022728714815 4238.566406250000 +149.040599298318 2635.204589843750 +151.095643482255 2393.002197265625 +151.110516034735 2442.884033203125 +155.069236883933 1544.777343750000 +155.105682901057 6263.000000000000 +155.972920410543 3385.000000000000 +158.094774385335 1080.967773437500 +158.153283576062 10534.000000000000 +159.155715172952 1385.000000000000 +161.095525142910 1630.366088867188 +164.142719377118 1265.000000000000 +167.106064869970 1152.309692382812 +170.095316404580 2395.057128906250 +171.144151746612 1479.045532226562 +172.954917719732 3206.000000000000 +173.079795077697 6212.281250000000 +174.952323772485 2424.000000000000 +178.158429128963 1377.000000000000 +179.105591924166 1772.772583007812 +182.961056624651 2308.843750000000 +183.078937804238 2289.022460937500 +183.097572106613 2258.250732421875 +186.221163786911 2129.000000000000 +194.115692438393 3322.000000000000 +195.103289455477 1601.895141601562 +195.120972579400 2060.433593750000 +198.184905525686 1955.000000000000 +200.199697056482 1183.000000000000 +217.106496007309 21462.582031250000 +218.109589696743 2767.000000000000 +219.096136534848 1306.856933593750 +227.127499347418 20629.291015625000 +228.130602306645 2679.707519531250 +228.195447315902 1383.987548828125 +233.134864609403 1301.000000000000 +235.168088751500 1208.444580078125 +239.087982722321 4171.939453125000 +239.159768930624 1207.720947265625 +242.283982386371 1928.000000000000 +246.861553572729 3012.000000000000 +249.109091723811 8774.000000000000 +249.183639586712 1240.879272460938 +250.113239684645 1437.000000000000 +250.178995652493 1182.339599609375 +250.999391894301 2202.000000000000 +251.183548791076 1320.392822265625 +252.996248929911 1545.000000000000 +267.171855191852 1381.224731445312 +279.093783189418 1990.000000000000 +281.051297150952 1339.000000000000 +289.120539945877 1142.618652343750 +304.112680718611 1976.000000000000 +327.007958530185 3305.037597656250 +329.004432449253 2885.000000000000 +330.205630510121 1599.646240234375 +364.962497539327 2062.000000000000 +366.958495480631 1832.000000000000 +382.972703481593 260479.000000000000 +383.796497384394 1154.792724609375 +383.974478286219 40275.000000000000 +384.970213041589 255218.000000000000 +385.971633062117 39022.000000000000 +386.966672062113 82162.000000000000 +387.969272726093 12025.615234375000 +388.966510755465 11969.900390625000 +389.969399976371 1962.000000000000 +390.976493102306 2563.000000000000 +404.954387561958 18217.000000000000 +405.956423697963 3149.000000000000 +406.951091509102 17869.000000000000 +407.954017373214 2785.000000000000 +408.948152813757 6017.000000000000 +428.030637612530 2273.000000000000 +430.027236075757 2378.539794921875 +445.118317831487 2268.000000000000 +482.896699661800 1928.000000000000 +484.894570839957 2183.009277343750 +500.275380576856 1496.000000000000 +502.290948639293 2197.000000000000 +505.852798723386 2232.000000000000 +520.337594021166 1251.000000000000 +524.369861286564 1845.000000000000 +536.163207287856 4803.000000000000 +537.164642261465 2595.000000000000 +538.162041431171 1826.000000000000 +542.323226994846 1949.156982421875 +544.339119685474 3064.000000000000 +546.913615628767 1652.000000000000 +610.181827147267 2083.000000000000 +611.182099563802 1208.000000000000 +770.947018975967 1126.442626953125 +772.941639246509 2253.000000000000 +774.943054052942 1912.000000000000 +786.919336659213 2904.000000000000 +788.915401365752 6123.000000000000 +789.918370920915 1906.000000000000 +790.914122108700 4577.000000000000 +791.916902705136 1354.000000000000 +792.910231210434 2284.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=692 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=692 experiment=4_0 +##scan 200 +##specref ms_run[1]:sample=1 period=1 cycle=692 experiment=4 +79.056467038766 13.000000000000 +91.054202103907 30.000000000000 +116.995332013225 30.000000000000 +133.063107476668 75.000000000000 +145.100631158174 30.000000000000 +161.095525080936 60.000000000000 +>compound 1_0-692005--201--UNKNOWN +>parentmass 384.970213041589 +>charge 1 +>rt 459.961000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +384.970213041589 255218.000000000000 +>ms1peaks +52.005836971133 3275.866210937500 +53.013585641217 16462.654296875000 +53.850547505716 1247.490844726562 +54.009388977537 348598.687500000000 +55.005798963074 5869.680175781250 +55.011774372187 6856.918945312500 +55.054475601255 2473.953125000000 +55.934129107275 5180.807128906250 +56.942113043098 2081.341552734375 +59.049544533559 54336.714843750000 +60.044465740627 9898.330078125000 +61.039478346007 2105.842529296875 +63.997412764298 3413.259765625000 +64.005106461592 4299.035644531250 +68.011655111553 26417.048828125000 +68.993451225116 10495.742187500000 +69.007351634483 1155.211425781250 +69.044667736537 14631.378906250000 +72.043977843220 1186.000000000000 +72.936644856416 1760.000000000000 +73.064218143049 1938.000000000000 +76.486218455988 2096.923095703125 +79.020975495578 13874.204101562500 +80.049052003255 11024.270507812500 +81.937175489519 7138.000000000000 +82.996514044878 7636.792968750000 +83.084688813927 2161.000000000000 +87.055001018332 1330.756225585938 +89.506504228804 1366.624267578125 +90.488814793493 1655.000000000000 +91.053863900189 1343.637695312500 +95.952451549397 2123.438964843750 +97.968285613023 6437.601562500000 +100.075459222547 1156.000000000000 +102.090554022445 2543.457763671875 +109.942873698046 1245.000000000000 +113.962843649207 1932.000000000000 +114.090883078011 10019.290039062500 +118.085186987492 5823.000000000000 +122.095548751359 3537.398681640625 +122.963008452569 9425.616210937500 +123.090974567516 1817.215332031250 +130.158162499144 1132.000000000000 +136.020346034918 1611.000000000000 +136.111299179502 1360.000000000000 +137.963423713638 1128.155029296875 +141.090309448831 1352.879638671875 +141.112097614347 1262.819458007812 +141.957702024079 13826.095703125000 +147.090234918404 2477.000000000000 +149.022728714815 4238.566406250000 +149.040599298318 2635.204589843750 +151.095643482255 2393.002197265625 +151.110516034735 2442.884033203125 +155.069236883933 1544.777343750000 +155.105682901057 6263.000000000000 +155.972920410543 3385.000000000000 +158.094774385335 1080.967773437500 +158.153283576062 10534.000000000000 +159.155715172952 1385.000000000000 +161.095525142910 1630.366088867188 +164.142719377118 1265.000000000000 +167.106064869970 1152.309692382812 +170.095316404580 2395.057128906250 +171.144151746612 1479.045532226562 +172.954917719732 3206.000000000000 +173.079795077697 6212.281250000000 +174.952323772485 2424.000000000000 +178.158429128963 1377.000000000000 +179.105591924166 1772.772583007812 +182.961056624651 2308.843750000000 +183.078937804238 2289.022460937500 +183.097572106613 2258.250732421875 +186.221163786911 2129.000000000000 +194.115692438393 3322.000000000000 +195.103289455477 1601.895141601562 +195.120972579400 2060.433593750000 +198.184905525686 1955.000000000000 +200.199697056482 1183.000000000000 +217.106496007309 21462.582031250000 +218.109589696743 2767.000000000000 +219.096136534848 1306.856933593750 +227.127499347418 20629.291015625000 +228.130602306645 2679.707519531250 +228.195447315902 1383.987548828125 +233.134864609403 1301.000000000000 +235.168088751500 1208.444580078125 +239.087982722321 4171.939453125000 +239.159768930624 1207.720947265625 +242.283982386371 1928.000000000000 +246.861553572729 3012.000000000000 +249.109091723811 8774.000000000000 +249.183639586712 1240.879272460938 +250.113239684645 1437.000000000000 +250.178995652493 1182.339599609375 +250.999391894301 2202.000000000000 +251.183548791076 1320.392822265625 +252.996248929911 1545.000000000000 +267.171855191852 1381.224731445312 +279.093783189418 1990.000000000000 +281.051297150952 1339.000000000000 +289.120539945877 1142.618652343750 +304.112680718611 1976.000000000000 +327.007958530185 3305.037597656250 +329.004432449253 2885.000000000000 +330.205630510121 1599.646240234375 +364.962497539327 2062.000000000000 +366.958495480631 1832.000000000000 +382.972703481593 260479.000000000000 +383.796497384394 1154.792724609375 +383.974478286219 40275.000000000000 +384.970213041589 255218.000000000000 +385.971633062117 39022.000000000000 +386.966672062113 82162.000000000000 +387.969272726093 12025.615234375000 +388.966510755465 11969.900390625000 +389.969399976371 1962.000000000000 +390.976493102306 2563.000000000000 +404.954387561958 18217.000000000000 +405.956423697963 3149.000000000000 +406.951091509102 17869.000000000000 +407.954017373214 2785.000000000000 +408.948152813757 6017.000000000000 +428.030637612530 2273.000000000000 +430.027236075757 2378.539794921875 +445.118317831487 2268.000000000000 +482.896699661800 1928.000000000000 +484.894570839957 2183.009277343750 +500.275380576856 1496.000000000000 +502.290948639293 2197.000000000000 +505.852798723386 2232.000000000000 +520.337594021166 1251.000000000000 +524.369861286564 1845.000000000000 +536.163207287856 4803.000000000000 +537.164642261465 2595.000000000000 +538.162041431171 1826.000000000000 +542.323226994846 1949.156982421875 +544.339119685474 3064.000000000000 +546.913615628767 1652.000000000000 +610.181827147267 2083.000000000000 +611.182099563802 1208.000000000000 +770.947018975967 1126.442626953125 +772.941639246509 2253.000000000000 +774.943054052942 1912.000000000000 +786.919336659213 2904.000000000000 +788.915401365752 6123.000000000000 +789.918370920915 1906.000000000000 +790.914122108700 4577.000000000000 +791.916902705136 1354.000000000000 +792.910231210434 2284.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=692 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=692 experiment=5_0 +##scan 201 +##specref ms_run[1]:sample=1 period=1 cycle=692 experiment=5 +73.006994936174 30.000000000000 +74.016659552445 45.000000000000 +108.983233839123 225.000000000000 +110.977748376368 111.045951843262 +110.990396639386 98.268615722656 +144.959863566314 2473.000000000000 +146.534046089739 15.000000000000 +146.957272415751 5417.000000000000 +158.021847176398 165.000000000000 +159.025987564447 135.000000000000 +166.988765101308 45.000000000000 +168.985224209269 45.000000000000 +172.436019066210 165.000000000000 +172.955511093070 29911.593750000000 +173.364056617396 30.000000000000 +173.597669680189 30.000000000000 +173.958094401950 692.000000000000 +173.990146859076 177.494705200195 +174.104133683624 30.000000000000 +174.424506605924 357.788055419922 +174.570668736998 60.000000000000 +174.583871722187 60.000000000000 +174.913614902699 44.392593383789 +174.952837597745 60801.078125000000 +175.044449885784 30.000000000000 +175.052371359168 30.000000000000 +175.211544827836 30.000000000000 +175.250684148797 45.000000000000 +175.270117953287 59.999328613281 +175.286520718277 30.000000000000 +175.451835355373 45.000000000000 +175.472918794636 69.033996582031 +175.494649894174 45.000000000000 +175.521594825570 15.000000000000 +175.659549172693 30.000000000000 +175.686833306406 26.865440368652 +175.812225772767 45.000000000000 +175.831838930508 60.000000000000 +175.849466249748 33.478050231934 +175.870447195761 30.000000000000 +175.946158610361 60.000000000000 +175.955167110913 60.000000000000 +175.990276185564 150.000000000000 +176.772368002787 30.000000000000 +177.124598772214 30.000000000000 +177.145214260284 30.000000000000 +177.364831389632 45.000000000000 +177.582321533417 30.000000000000 +177.593500652701 30.000000000000 +177.888129961599 30.000000000000 +178.994008852119 29.424285888672 +179.016801643184 33.984897613525 +179.042204031983 30.000000000000 +193.997551626700 2602.000000000000 +195.001910690646 30.000000000000 +195.407182201364 30.000000000000 +195.993974579510 1431.000000000000 +212.006781579235 60.000000000000 +213.978639695592 30.000000000000 +214.012052468176 45.000000000000 +366.959814059250 3155.000000000000 +384.971435837587 1680.000000000000 +385.967044081790 30.000000000000 +>compound 1_0-692006--202--UNKNOWN +>parentmass 404.954387561958 +>charge 1 +>rt 459.961000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +404.954387561958 18217.000000000000 +>ms1peaks +52.005836971133 3275.866210937500 +53.013585641217 16462.654296875000 +53.850547505716 1247.490844726562 +54.009388977537 348598.687500000000 +55.005798963074 5869.680175781250 +55.011774372187 6856.918945312500 +55.054475601255 2473.953125000000 +55.934129107275 5180.807128906250 +56.942113043098 2081.341552734375 +59.049544533559 54336.714843750000 +60.044465740627 9898.330078125000 +61.039478346007 2105.842529296875 +63.997412764298 3413.259765625000 +64.005106461592 4299.035644531250 +68.011655111553 26417.048828125000 +68.993451225116 10495.742187500000 +69.007351634483 1155.211425781250 +69.044667736537 14631.378906250000 +72.043977843220 1186.000000000000 +72.936644856416 1760.000000000000 +73.064218143049 1938.000000000000 +76.486218455988 2096.923095703125 +79.020975495578 13874.204101562500 +80.049052003255 11024.270507812500 +81.937175489519 7138.000000000000 +82.996514044878 7636.792968750000 +83.084688813927 2161.000000000000 +87.055001018332 1330.756225585938 +89.506504228804 1366.624267578125 +90.488814793493 1655.000000000000 +91.053863900189 1343.637695312500 +95.952451549397 2123.438964843750 +97.968285613023 6437.601562500000 +100.075459222547 1156.000000000000 +102.090554022445 2543.457763671875 +109.942873698046 1245.000000000000 +113.962843649207 1932.000000000000 +114.090883078011 10019.290039062500 +118.085186987492 5823.000000000000 +122.095548751359 3537.398681640625 +122.963008452569 9425.616210937500 +123.090974567516 1817.215332031250 +130.158162499144 1132.000000000000 +136.020346034918 1611.000000000000 +136.111299179502 1360.000000000000 +137.963423713638 1128.155029296875 +141.090309448831 1352.879638671875 +141.112097614347 1262.819458007812 +141.957702024079 13826.095703125000 +147.090234918404 2477.000000000000 +149.022728714815 4238.566406250000 +149.040599298318 2635.204589843750 +151.095643482255 2393.002197265625 +151.110516034735 2442.884033203125 +155.069236883933 1544.777343750000 +155.105682901057 6263.000000000000 +155.972920410543 3385.000000000000 +158.094774385335 1080.967773437500 +158.153283576062 10534.000000000000 +159.155715172952 1385.000000000000 +161.095525142910 1630.366088867188 +164.142719377118 1265.000000000000 +167.106064869970 1152.309692382812 +170.095316404580 2395.057128906250 +171.144151746612 1479.045532226562 +172.954917719732 3206.000000000000 +173.079795077697 6212.281250000000 +174.952323772485 2424.000000000000 +178.158429128963 1377.000000000000 +179.105591924166 1772.772583007812 +182.961056624651 2308.843750000000 +183.078937804238 2289.022460937500 +183.097572106613 2258.250732421875 +186.221163786911 2129.000000000000 +194.115692438393 3322.000000000000 +195.103289455477 1601.895141601562 +195.120972579400 2060.433593750000 +198.184905525686 1955.000000000000 +200.199697056482 1183.000000000000 +217.106496007309 21462.582031250000 +218.109589696743 2767.000000000000 +219.096136534848 1306.856933593750 +227.127499347418 20629.291015625000 +228.130602306645 2679.707519531250 +228.195447315902 1383.987548828125 +233.134864609403 1301.000000000000 +235.168088751500 1208.444580078125 +239.087982722321 4171.939453125000 +239.159768930624 1207.720947265625 +242.283982386371 1928.000000000000 +246.861553572729 3012.000000000000 +249.109091723811 8774.000000000000 +249.183639586712 1240.879272460938 +250.113239684645 1437.000000000000 +250.178995652493 1182.339599609375 +250.999391894301 2202.000000000000 +251.183548791076 1320.392822265625 +252.996248929911 1545.000000000000 +267.171855191852 1381.224731445312 +279.093783189418 1990.000000000000 +281.051297150952 1339.000000000000 +289.120539945877 1142.618652343750 +304.112680718611 1976.000000000000 +327.007958530185 3305.037597656250 +329.004432449253 2885.000000000000 +330.205630510121 1599.646240234375 +364.962497539327 2062.000000000000 +366.958495480631 1832.000000000000 +382.972703481593 260479.000000000000 +383.796497384394 1154.792724609375 +383.974478286219 40275.000000000000 +384.970213041589 255218.000000000000 +385.971633062117 39022.000000000000 +386.966672062113 82162.000000000000 +387.969272726093 12025.615234375000 +388.966510755465 11969.900390625000 +389.969399976371 1962.000000000000 +390.976493102306 2563.000000000000 +404.954387561958 18217.000000000000 +405.956423697963 3149.000000000000 +406.951091509102 17869.000000000000 +407.954017373214 2785.000000000000 +408.948152813757 6017.000000000000 +428.030637612530 2273.000000000000 +430.027236075757 2378.539794921875 +445.118317831487 2268.000000000000 +482.896699661800 1928.000000000000 +484.894570839957 2183.009277343750 +500.275380576856 1496.000000000000 +502.290948639293 2197.000000000000 +505.852798723386 2232.000000000000 +520.337594021166 1251.000000000000 +524.369861286564 1845.000000000000 +536.163207287856 4803.000000000000 +537.164642261465 2595.000000000000 +538.162041431171 1826.000000000000 +542.323226994846 1949.156982421875 +544.339119685474 3064.000000000000 +546.913615628767 1652.000000000000 +610.181827147267 2083.000000000000 +611.182099563802 1208.000000000000 +770.947018975967 1126.442626953125 +772.941639246509 2253.000000000000 +774.943054052942 1912.000000000000 +786.919336659213 2904.000000000000 +788.915401365752 6123.000000000000 +789.918370920915 1906.000000000000 +790.914122108700 4577.000000000000 +791.916902705136 1354.000000000000 +792.910231210434 2284.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=692 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=692 experiment=6_0 +##scan 202 +##specref ms_run[1]:sample=1 period=1 cycle=692 experiment=6 +172.958647070493 105.000000000000 +174.953082858282 75.000000000000 +218.865008703367 13.000000000000 +404.948189573306 45.000000000000 +>compound 1_0-692007--203--UNKNOWN +>parentmass 430.027236075757 +>charge 1 +>rt 459.961000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +430.027236075757 2378.539794921875 +>ms1peaks +52.005836971133 3275.866210937500 +53.013585641217 16462.654296875000 +53.850547505716 1247.490844726562 +54.009388977537 348598.687500000000 +55.005798963074 5869.680175781250 +55.011774372187 6856.918945312500 +55.054475601255 2473.953125000000 +55.934129107275 5180.807128906250 +56.942113043098 2081.341552734375 +59.049544533559 54336.714843750000 +60.044465740627 9898.330078125000 +61.039478346007 2105.842529296875 +63.997412764298 3413.259765625000 +64.005106461592 4299.035644531250 +68.011655111553 26417.048828125000 +68.993451225116 10495.742187500000 +69.007351634483 1155.211425781250 +69.044667736537 14631.378906250000 +72.043977843220 1186.000000000000 +72.936644856416 1760.000000000000 +73.064218143049 1938.000000000000 +76.486218455988 2096.923095703125 +79.020975495578 13874.204101562500 +80.049052003255 11024.270507812500 +81.937175489519 7138.000000000000 +82.996514044878 7636.792968750000 +83.084688813927 2161.000000000000 +87.055001018332 1330.756225585938 +89.506504228804 1366.624267578125 +90.488814793493 1655.000000000000 +91.053863900189 1343.637695312500 +95.952451549397 2123.438964843750 +97.968285613023 6437.601562500000 +100.075459222547 1156.000000000000 +102.090554022445 2543.457763671875 +109.942873698046 1245.000000000000 +113.962843649207 1932.000000000000 +114.090883078011 10019.290039062500 +118.085186987492 5823.000000000000 +122.095548751359 3537.398681640625 +122.963008452569 9425.616210937500 +123.090974567516 1817.215332031250 +130.158162499144 1132.000000000000 +136.020346034918 1611.000000000000 +136.111299179502 1360.000000000000 +137.963423713638 1128.155029296875 +141.090309448831 1352.879638671875 +141.112097614347 1262.819458007812 +141.957702024079 13826.095703125000 +147.090234918404 2477.000000000000 +149.022728714815 4238.566406250000 +149.040599298318 2635.204589843750 +151.095643482255 2393.002197265625 +151.110516034735 2442.884033203125 +155.069236883933 1544.777343750000 +155.105682901057 6263.000000000000 +155.972920410543 3385.000000000000 +158.094774385335 1080.967773437500 +158.153283576062 10534.000000000000 +159.155715172952 1385.000000000000 +161.095525142910 1630.366088867188 +164.142719377118 1265.000000000000 +167.106064869970 1152.309692382812 +170.095316404580 2395.057128906250 +171.144151746612 1479.045532226562 +172.954917719732 3206.000000000000 +173.079795077697 6212.281250000000 +174.952323772485 2424.000000000000 +178.158429128963 1377.000000000000 +179.105591924166 1772.772583007812 +182.961056624651 2308.843750000000 +183.078937804238 2289.022460937500 +183.097572106613 2258.250732421875 +186.221163786911 2129.000000000000 +194.115692438393 3322.000000000000 +195.103289455477 1601.895141601562 +195.120972579400 2060.433593750000 +198.184905525686 1955.000000000000 +200.199697056482 1183.000000000000 +217.106496007309 21462.582031250000 +218.109589696743 2767.000000000000 +219.096136534848 1306.856933593750 +227.127499347418 20629.291015625000 +228.130602306645 2679.707519531250 +228.195447315902 1383.987548828125 +233.134864609403 1301.000000000000 +235.168088751500 1208.444580078125 +239.087982722321 4171.939453125000 +239.159768930624 1207.720947265625 +242.283982386371 1928.000000000000 +246.861553572729 3012.000000000000 +249.109091723811 8774.000000000000 +249.183639586712 1240.879272460938 +250.113239684645 1437.000000000000 +250.178995652493 1182.339599609375 +250.999391894301 2202.000000000000 +251.183548791076 1320.392822265625 +252.996248929911 1545.000000000000 +267.171855191852 1381.224731445312 +279.093783189418 1990.000000000000 +281.051297150952 1339.000000000000 +289.120539945877 1142.618652343750 +304.112680718611 1976.000000000000 +327.007958530185 3305.037597656250 +329.004432449253 2885.000000000000 +330.205630510121 1599.646240234375 +364.962497539327 2062.000000000000 +366.958495480631 1832.000000000000 +382.972703481593 260479.000000000000 +383.796497384394 1154.792724609375 +383.974478286219 40275.000000000000 +384.970213041589 255218.000000000000 +385.971633062117 39022.000000000000 +386.966672062113 82162.000000000000 +387.969272726093 12025.615234375000 +388.966510755465 11969.900390625000 +389.969399976371 1962.000000000000 +390.976493102306 2563.000000000000 +404.954387561958 18217.000000000000 +405.956423697963 3149.000000000000 +406.951091509102 17869.000000000000 +407.954017373214 2785.000000000000 +408.948152813757 6017.000000000000 +428.030637612530 2273.000000000000 +430.027236075757 2378.539794921875 +445.118317831487 2268.000000000000 +482.896699661800 1928.000000000000 +484.894570839957 2183.009277343750 +500.275380576856 1496.000000000000 +502.290948639293 2197.000000000000 +505.852798723386 2232.000000000000 +520.337594021166 1251.000000000000 +524.369861286564 1845.000000000000 +536.163207287856 4803.000000000000 +537.164642261465 2595.000000000000 +538.162041431171 1826.000000000000 +542.323226994846 1949.156982421875 +544.339119685474 3064.000000000000 +546.913615628767 1652.000000000000 +610.181827147267 2083.000000000000 +611.182099563802 1208.000000000000 +770.947018975967 1126.442626953125 +772.941639246509 2253.000000000000 +774.943054052942 1912.000000000000 +786.919336659213 2904.000000000000 +788.915401365752 6123.000000000000 +789.918370920915 1906.000000000000 +790.914122108700 4577.000000000000 +791.916902705136 1354.000000000000 +792.910231210434 2284.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=692 experiment=7 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=692 experiment=7_0 +##scan 203 +##specref ms_run[1]:sample=1 period=1 cycle=692 experiment=7 +144.961295765380 75.000000000000 +146.956365682666 45.000000000000 +172.955425905940 1274.000000000000 +174.952333671209 2640.000000000000 +193.997000328140 90.000000000000 +366.961771433037 375.000000000000 +384.971458004953 619.000000000000 +388.977616886454 300.000000000000 +>compound 1_0-692008--204--UNKNOWN +>parentmass 772.941639246509 +>charge 1 +>rt 459.961000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +772.941639246509 2253.000000000000 +>ms1peaks +52.005836971133 3275.866210937500 +53.013585641217 16462.654296875000 +53.850547505716 1247.490844726562 +54.009388977537 348598.687500000000 +55.005798963074 5869.680175781250 +55.011774372187 6856.918945312500 +55.054475601255 2473.953125000000 +55.934129107275 5180.807128906250 +56.942113043098 2081.341552734375 +59.049544533559 54336.714843750000 +60.044465740627 9898.330078125000 +61.039478346007 2105.842529296875 +63.997412764298 3413.259765625000 +64.005106461592 4299.035644531250 +68.011655111553 26417.048828125000 +68.993451225116 10495.742187500000 +69.007351634483 1155.211425781250 +69.044667736537 14631.378906250000 +72.043977843220 1186.000000000000 +72.936644856416 1760.000000000000 +73.064218143049 1938.000000000000 +76.486218455988 2096.923095703125 +79.020975495578 13874.204101562500 +80.049052003255 11024.270507812500 +81.937175489519 7138.000000000000 +82.996514044878 7636.792968750000 +83.084688813927 2161.000000000000 +87.055001018332 1330.756225585938 +89.506504228804 1366.624267578125 +90.488814793493 1655.000000000000 +91.053863900189 1343.637695312500 +95.952451549397 2123.438964843750 +97.968285613023 6437.601562500000 +100.075459222547 1156.000000000000 +102.090554022445 2543.457763671875 +109.942873698046 1245.000000000000 +113.962843649207 1932.000000000000 +114.090883078011 10019.290039062500 +118.085186987492 5823.000000000000 +122.095548751359 3537.398681640625 +122.963008452569 9425.616210937500 +123.090974567516 1817.215332031250 +130.158162499144 1132.000000000000 +136.020346034918 1611.000000000000 +136.111299179502 1360.000000000000 +137.963423713638 1128.155029296875 +141.090309448831 1352.879638671875 +141.112097614347 1262.819458007812 +141.957702024079 13826.095703125000 +147.090234918404 2477.000000000000 +149.022728714815 4238.566406250000 +149.040599298318 2635.204589843750 +151.095643482255 2393.002197265625 +151.110516034735 2442.884033203125 +155.069236883933 1544.777343750000 +155.105682901057 6263.000000000000 +155.972920410543 3385.000000000000 +158.094774385335 1080.967773437500 +158.153283576062 10534.000000000000 +159.155715172952 1385.000000000000 +161.095525142910 1630.366088867188 +164.142719377118 1265.000000000000 +167.106064869970 1152.309692382812 +170.095316404580 2395.057128906250 +171.144151746612 1479.045532226562 +172.954917719732 3206.000000000000 +173.079795077697 6212.281250000000 +174.952323772485 2424.000000000000 +178.158429128963 1377.000000000000 +179.105591924166 1772.772583007812 +182.961056624651 2308.843750000000 +183.078937804238 2289.022460937500 +183.097572106613 2258.250732421875 +186.221163786911 2129.000000000000 +194.115692438393 3322.000000000000 +195.103289455477 1601.895141601562 +195.120972579400 2060.433593750000 +198.184905525686 1955.000000000000 +200.199697056482 1183.000000000000 +217.106496007309 21462.582031250000 +218.109589696743 2767.000000000000 +219.096136534848 1306.856933593750 +227.127499347418 20629.291015625000 +228.130602306645 2679.707519531250 +228.195447315902 1383.987548828125 +233.134864609403 1301.000000000000 +235.168088751500 1208.444580078125 +239.087982722321 4171.939453125000 +239.159768930624 1207.720947265625 +242.283982386371 1928.000000000000 +246.861553572729 3012.000000000000 +249.109091723811 8774.000000000000 +249.183639586712 1240.879272460938 +250.113239684645 1437.000000000000 +250.178995652493 1182.339599609375 +250.999391894301 2202.000000000000 +251.183548791076 1320.392822265625 +252.996248929911 1545.000000000000 +267.171855191852 1381.224731445312 +279.093783189418 1990.000000000000 +281.051297150952 1339.000000000000 +289.120539945877 1142.618652343750 +304.112680718611 1976.000000000000 +327.007958530185 3305.037597656250 +329.004432449253 2885.000000000000 +330.205630510121 1599.646240234375 +364.962497539327 2062.000000000000 +366.958495480631 1832.000000000000 +382.972703481593 260479.000000000000 +383.796497384394 1154.792724609375 +383.974478286219 40275.000000000000 +384.970213041589 255218.000000000000 +385.971633062117 39022.000000000000 +386.966672062113 82162.000000000000 +387.969272726093 12025.615234375000 +388.966510755465 11969.900390625000 +389.969399976371 1962.000000000000 +390.976493102306 2563.000000000000 +404.954387561958 18217.000000000000 +405.956423697963 3149.000000000000 +406.951091509102 17869.000000000000 +407.954017373214 2785.000000000000 +408.948152813757 6017.000000000000 +428.030637612530 2273.000000000000 +430.027236075757 2378.539794921875 +445.118317831487 2268.000000000000 +482.896699661800 1928.000000000000 +484.894570839957 2183.009277343750 +500.275380576856 1496.000000000000 +502.290948639293 2197.000000000000 +505.852798723386 2232.000000000000 +520.337594021166 1251.000000000000 +524.369861286564 1845.000000000000 +536.163207287856 4803.000000000000 +537.164642261465 2595.000000000000 +538.162041431171 1826.000000000000 +542.323226994846 1949.156982421875 +544.339119685474 3064.000000000000 +546.913615628767 1652.000000000000 +610.181827147267 2083.000000000000 +611.182099563802 1208.000000000000 +770.947018975967 1126.442626953125 +772.941639246509 2253.000000000000 +774.943054052942 1912.000000000000 +786.919336659213 2904.000000000000 +788.915401365752 6123.000000000000 +789.918370920915 1906.000000000000 +790.914122108700 4577.000000000000 +791.916902705136 1354.000000000000 +792.910231210434 2284.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=692 experiment=8 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=692 experiment=8_0 +##scan 204 +##specref ms_run[1]:sample=1 period=1 cycle=692 experiment=8 +281.049199638916 13.000000000000 +387.984779085330 30.000000000000 +388.980664513613 953.000000000000 +389.992410499529 13.000000000000 +390.976314031973 1013.000000000000 +408.992149941861 13.000000000000 +>compound 1_0-692009--205--UNKNOWN +>parentmass 788.915401365752 +>charge 1 +>rt 459.961000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +788.915401365752 6123.000000000000 +789.918370920915 1906.000000000000 +>ms1peaks +52.005836971133 3275.866210937500 +53.013585641217 16462.654296875000 +53.850547505716 1247.490844726562 +54.009388977537 348598.687500000000 +55.005798963074 5869.680175781250 +55.011774372187 6856.918945312500 +55.054475601255 2473.953125000000 +55.934129107275 5180.807128906250 +56.942113043098 2081.341552734375 +59.049544533559 54336.714843750000 +60.044465740627 9898.330078125000 +61.039478346007 2105.842529296875 +63.997412764298 3413.259765625000 +64.005106461592 4299.035644531250 +68.011655111553 26417.048828125000 +68.993451225116 10495.742187500000 +69.007351634483 1155.211425781250 +69.044667736537 14631.378906250000 +72.043977843220 1186.000000000000 +72.936644856416 1760.000000000000 +73.064218143049 1938.000000000000 +76.486218455988 2096.923095703125 +79.020975495578 13874.204101562500 +80.049052003255 11024.270507812500 +81.937175489519 7138.000000000000 +82.996514044878 7636.792968750000 +83.084688813927 2161.000000000000 +87.055001018332 1330.756225585938 +89.506504228804 1366.624267578125 +90.488814793493 1655.000000000000 +91.053863900189 1343.637695312500 +95.952451549397 2123.438964843750 +97.968285613023 6437.601562500000 +100.075459222547 1156.000000000000 +102.090554022445 2543.457763671875 +109.942873698046 1245.000000000000 +113.962843649207 1932.000000000000 +114.090883078011 10019.290039062500 +118.085186987492 5823.000000000000 +122.095548751359 3537.398681640625 +122.963008452569 9425.616210937500 +123.090974567516 1817.215332031250 +130.158162499144 1132.000000000000 +136.020346034918 1611.000000000000 +136.111299179502 1360.000000000000 +137.963423713638 1128.155029296875 +141.090309448831 1352.879638671875 +141.112097614347 1262.819458007812 +141.957702024079 13826.095703125000 +147.090234918404 2477.000000000000 +149.022728714815 4238.566406250000 +149.040599298318 2635.204589843750 +151.095643482255 2393.002197265625 +151.110516034735 2442.884033203125 +155.069236883933 1544.777343750000 +155.105682901057 6263.000000000000 +155.972920410543 3385.000000000000 +158.094774385335 1080.967773437500 +158.153283576062 10534.000000000000 +159.155715172952 1385.000000000000 +161.095525142910 1630.366088867188 +164.142719377118 1265.000000000000 +167.106064869970 1152.309692382812 +170.095316404580 2395.057128906250 +171.144151746612 1479.045532226562 +172.954917719732 3206.000000000000 +173.079795077697 6212.281250000000 +174.952323772485 2424.000000000000 +178.158429128963 1377.000000000000 +179.105591924166 1772.772583007812 +182.961056624651 2308.843750000000 +183.078937804238 2289.022460937500 +183.097572106613 2258.250732421875 +186.221163786911 2129.000000000000 +194.115692438393 3322.000000000000 +195.103289455477 1601.895141601562 +195.120972579400 2060.433593750000 +198.184905525686 1955.000000000000 +200.199697056482 1183.000000000000 +217.106496007309 21462.582031250000 +218.109589696743 2767.000000000000 +219.096136534848 1306.856933593750 +227.127499347418 20629.291015625000 +228.130602306645 2679.707519531250 +228.195447315902 1383.987548828125 +233.134864609403 1301.000000000000 +235.168088751500 1208.444580078125 +239.087982722321 4171.939453125000 +239.159768930624 1207.720947265625 +242.283982386371 1928.000000000000 +246.861553572729 3012.000000000000 +249.109091723811 8774.000000000000 +249.183639586712 1240.879272460938 +250.113239684645 1437.000000000000 +250.178995652493 1182.339599609375 +250.999391894301 2202.000000000000 +251.183548791076 1320.392822265625 +252.996248929911 1545.000000000000 +267.171855191852 1381.224731445312 +279.093783189418 1990.000000000000 +281.051297150952 1339.000000000000 +289.120539945877 1142.618652343750 +304.112680718611 1976.000000000000 +327.007958530185 3305.037597656250 +329.004432449253 2885.000000000000 +330.205630510121 1599.646240234375 +364.962497539327 2062.000000000000 +366.958495480631 1832.000000000000 +382.972703481593 260479.000000000000 +383.796497384394 1154.792724609375 +383.974478286219 40275.000000000000 +384.970213041589 255218.000000000000 +385.971633062117 39022.000000000000 +386.966672062113 82162.000000000000 +387.969272726093 12025.615234375000 +388.966510755465 11969.900390625000 +389.969399976371 1962.000000000000 +390.976493102306 2563.000000000000 +404.954387561958 18217.000000000000 +405.956423697963 3149.000000000000 +406.951091509102 17869.000000000000 +407.954017373214 2785.000000000000 +408.948152813757 6017.000000000000 +428.030637612530 2273.000000000000 +430.027236075757 2378.539794921875 +445.118317831487 2268.000000000000 +482.896699661800 1928.000000000000 +484.894570839957 2183.009277343750 +500.275380576856 1496.000000000000 +502.290948639293 2197.000000000000 +505.852798723386 2232.000000000000 +520.337594021166 1251.000000000000 +524.369861286564 1845.000000000000 +536.163207287856 4803.000000000000 +537.164642261465 2595.000000000000 +538.162041431171 1826.000000000000 +542.323226994846 1949.156982421875 +544.339119685474 3064.000000000000 +546.913615628767 1652.000000000000 +610.181827147267 2083.000000000000 +611.182099563802 1208.000000000000 +770.947018975967 1126.442626953125 +772.941639246509 2253.000000000000 +774.943054052942 1912.000000000000 +786.919336659213 2904.000000000000 +788.915401365752 6123.000000000000 +789.918370920915 1906.000000000000 +790.914122108700 4577.000000000000 +791.916902705136 1354.000000000000 +792.910231210434 2284.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=692 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=692 experiment=9_0 +##scan 205 +##specref ms_run[1]:sample=1 period=1 cycle=692 experiment=9 +404.954947111314 1302.000000000000 +405.026135823838 79.605567932129 +405.707501530053 30.000000000000 +405.733230950239 30.000000000000 +405.955627369166 30.000000000000 +406.950214690636 1282.000000000000 +788.721792359159 13.000000000000 +>compound 1_0-693002--207--UNKNOWN +>parentmass 364.961489231765 +>charge 1 +>rt 460.888000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +364.961489231765 3826.000000000000 +>ms1peaks +52.005376076017 2883.880126953125 +53.013413907114 13058.982421875000 +54.009310504902 336971.593750000000 +55.006164410265 6084.639160156250 +55.011253279137 6804.312011718750 +55.053973268647 2094.136962890625 +55.933959042129 4944.510253906250 +56.941986222623 2084.266357421875 +59.049551500331 79191.015625000000 +60.044493631405 10838.423828125000 +61.039424138051 1510.310058593750 +63.997587302487 3447.318359375000 +64.005172264091 4602.720214843750 +68.011537684837 26478.115234375000 +68.993632019046 10816.396484375000 +69.044529545307 13642.217773437500 +72.936457767817 1786.218261718750 +73.064222660914 1621.299560546875 +76.486209729505 2229.000000000000 +79.020780389523 15598.791015625000 +80.048897845504 11696.743164062500 +81.936905624127 7513.618652343750 +82.996288344821 6976.000000000000 +83.085026087494 1412.000000000000 +87.054730595182 1436.109375000000 +90.489074787757 1427.000000000000 +91.053464991945 1569.000000000000 +95.952550974511 1837.000000000000 +97.967889624898 5804.188476562500 +102.090389946825 2039.000000000000 +109.942394290071 1355.000000000000 +113.962677921364 1715.000000000000 +114.090495581394 10508.503906250000 +118.085030169406 5793.618164062500 +122.095373734435 3261.000000000000 +122.962956356250 8717.000000000000 +123.091283307129 1822.000000000000 +130.157670347755 1372.000000000000 +136.020442497348 1484.000000000000 +141.089545548276 1505.945922851562 +141.111778196613 1273.170654296875 +141.957370263974 13080.325195312500 +147.090827326784 2735.116699218750 +149.022417633201 4598.868652343750 +151.094984589248 2634.482177734375 +151.111228898694 2781.670654296875 +153.126508682277 1347.000000000000 +155.069230805975 1501.910400390625 +155.105168844558 3718.000000000000 +155.973236471256 3793.457519531250 +158.153233560066 9991.886718750000 +159.137906167157 1576.519409179688 +159.155197345679 1728.316040039062 +161.095712954709 1618.000000000000 +164.142678923314 1584.981079101562 +167.105510572415 2103.879638671875 +170.095065256490 3113.855224609375 +171.146178907250 1450.000000000000 +172.954475044148 6486.615722656250 +173.080086580295 6165.000000000000 +174.951826947852 4038.934082031250 +178.157729569686 1308.461181640625 +179.105523367591 1776.000000000000 +182.960746875297 2551.042724609375 +183.079117402757 1340.139282226562 +183.098838604879 1426.173706054688 +186.220920447180 1344.000000000000 +194.115874579098 2606.000000000000 +195.120457994010 1963.229248046875 +198.184587323981 1835.946166992188 +201.194786366141 1244.618774414062 +217.106362896158 23584.000000000000 +218.109168688688 2603.000000000000 +227.127432730232 10516.948242187500 +228.129909544275 1526.000000000000 +239.088104333017 4048.000000000000 +242.283621376797 1694.000000000000 +246.861551486243 2459.000000000000 +249.109044797754 4284.000000000000 +249.183712414887 1332.089477539062 +250.999288828692 2323.000000000000 +251.182658791365 1347.000000000000 +252.996889183114 1537.976440429688 +254.083522016681 1687.000000000000 +267.170945735844 1374.012573242188 +279.092405514593 2060.151123046875 +281.051044087152 1406.000000000000 +304.111107217598 1705.000000000000 +327.007198326562 3294.460205078125 +329.004058351650 2860.000000000000 +330.205390821964 1624.000000000000 +364.961489231765 3826.000000000000 +366.957898526556 3996.233642578125 +381.808013272895 1578.000000000000 +382.974668199450 512123.812500000000 +383.797795773412 1974.817016601562 +383.973804988344 67649.023437500000 +384.972138308465 495302.968750000000 +385.971246198787 70765.046875000000 +386.966528657686 146591.000000000000 +387.969530993471 23030.000000000000 +388.965530388284 21448.000000000000 +389.968451613555 3733.000000000000 +390.976895115200 4097.000000000000 +392.974710796671 1289.681884765625 +404.954362223910 29937.207031250000 +405.956940932654 4597.000000000000 +406.951031367430 29269.568359375000 +407.954600492350 4851.000000000000 +408.948223942359 9862.279296875000 +409.950274004296 1622.000000000000 +410.945900982911 1240.446289062500 +422.924309561339 1321.314331054688 +428.029862424963 3127.000000000000 +430.025829985642 3375.565917968750 +432.023389778043 1241.000000000000 +445.118540650774 2403.000000000000 +482.896343711522 3766.000000000000 +484.893208509576 3436.493652343750 +486.890337640381 1470.000000000000 +500.275964022219 1326.000000000000 +502.290774394394 2533.000000000000 +505.852131030981 2176.208984375000 +520.337158711044 1461.000000000000 +522.879856177194 1440.671630859375 +524.369108967211 1804.000000000000 +536.163737753906 5207.000000000000 +537.164639268191 2756.000000000000 +538.162878717604 1773.000000000000 +542.322704071625 1648.782958984375 +544.339131186130 2994.000000000000 +546.913981193515 1696.000000000000 +610.182116523211 2119.000000000000 +611.183653272311 1499.000000000000 +770.945625211386 2752.000000000000 +771.945498320437 1251.000000000000 +772.941790932239 5463.000000000000 +773.942311008502 1795.000000000000 +774.938554076670 4221.000000000000 +775.941076669102 1561.000000000000 +776.936676421416 1997.000000000000 +786.918540331440 6080.000000000000 +787.923055465852 2216.000000000000 +788.915183876064 12922.929687500000 +789.918908612778 3577.000000000000 +790.913402804955 10338.000000000000 +791.914597259040 3343.090820312500 +792.910156420632 5118.000000000000 +793.914375013341 1534.000000000000 +794.907901025846 1263.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=693 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=693 experiment=2_0 +##scan 207 +##specref ms_run[1]:sample=1 period=1 cycle=693 experiment=2 +364.963163927810 45.000000000000 +>compound 1_0-693003--208--UNKNOWN +>parentmass 384.972138308465 +>charge 1 +>rt 460.888000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +384.972138308465 495302.968750000000 +>ms1peaks +52.005376076017 2883.880126953125 +53.013413907114 13058.982421875000 +54.009310504902 336971.593750000000 +55.006164410265 6084.639160156250 +55.011253279137 6804.312011718750 +55.053973268647 2094.136962890625 +55.933959042129 4944.510253906250 +56.941986222623 2084.266357421875 +59.049551500331 79191.015625000000 +60.044493631405 10838.423828125000 +61.039424138051 1510.310058593750 +63.997587302487 3447.318359375000 +64.005172264091 4602.720214843750 +68.011537684837 26478.115234375000 +68.993632019046 10816.396484375000 +69.044529545307 13642.217773437500 +72.936457767817 1786.218261718750 +73.064222660914 1621.299560546875 +76.486209729505 2229.000000000000 +79.020780389523 15598.791015625000 +80.048897845504 11696.743164062500 +81.936905624127 7513.618652343750 +82.996288344821 6976.000000000000 +83.085026087494 1412.000000000000 +87.054730595182 1436.109375000000 +90.489074787757 1427.000000000000 +91.053464991945 1569.000000000000 +95.952550974511 1837.000000000000 +97.967889624898 5804.188476562500 +102.090389946825 2039.000000000000 +109.942394290071 1355.000000000000 +113.962677921364 1715.000000000000 +114.090495581394 10508.503906250000 +118.085030169406 5793.618164062500 +122.095373734435 3261.000000000000 +122.962956356250 8717.000000000000 +123.091283307129 1822.000000000000 +130.157670347755 1372.000000000000 +136.020442497348 1484.000000000000 +141.089545548276 1505.945922851562 +141.111778196613 1273.170654296875 +141.957370263974 13080.325195312500 +147.090827326784 2735.116699218750 +149.022417633201 4598.868652343750 +151.094984589248 2634.482177734375 +151.111228898694 2781.670654296875 +153.126508682277 1347.000000000000 +155.069230805975 1501.910400390625 +155.105168844558 3718.000000000000 +155.973236471256 3793.457519531250 +158.153233560066 9991.886718750000 +159.137906167157 1576.519409179688 +159.155197345679 1728.316040039062 +161.095712954709 1618.000000000000 +164.142678923314 1584.981079101562 +167.105510572415 2103.879638671875 +170.095065256490 3113.855224609375 +171.146178907250 1450.000000000000 +172.954475044148 6486.615722656250 +173.080086580295 6165.000000000000 +174.951826947852 4038.934082031250 +178.157729569686 1308.461181640625 +179.105523367591 1776.000000000000 +182.960746875297 2551.042724609375 +183.079117402757 1340.139282226562 +183.098838604879 1426.173706054688 +186.220920447180 1344.000000000000 +194.115874579098 2606.000000000000 +195.120457994010 1963.229248046875 +198.184587323981 1835.946166992188 +201.194786366141 1244.618774414062 +217.106362896158 23584.000000000000 +218.109168688688 2603.000000000000 +227.127432730232 10516.948242187500 +228.129909544275 1526.000000000000 +239.088104333017 4048.000000000000 +242.283621376797 1694.000000000000 +246.861551486243 2459.000000000000 +249.109044797754 4284.000000000000 +249.183712414887 1332.089477539062 +250.999288828692 2323.000000000000 +251.182658791365 1347.000000000000 +252.996889183114 1537.976440429688 +254.083522016681 1687.000000000000 +267.170945735844 1374.012573242188 +279.092405514593 2060.151123046875 +281.051044087152 1406.000000000000 +304.111107217598 1705.000000000000 +327.007198326562 3294.460205078125 +329.004058351650 2860.000000000000 +330.205390821964 1624.000000000000 +364.961489231765 3826.000000000000 +366.957898526556 3996.233642578125 +381.808013272895 1578.000000000000 +382.974668199450 512123.812500000000 +383.797795773412 1974.817016601562 +383.973804988344 67649.023437500000 +384.972138308465 495302.968750000000 +385.971246198787 70765.046875000000 +386.966528657686 146591.000000000000 +387.969530993471 23030.000000000000 +388.965530388284 21448.000000000000 +389.968451613555 3733.000000000000 +390.976895115200 4097.000000000000 +392.974710796671 1289.681884765625 +404.954362223910 29937.207031250000 +405.956940932654 4597.000000000000 +406.951031367430 29269.568359375000 +407.954600492350 4851.000000000000 +408.948223942359 9862.279296875000 +409.950274004296 1622.000000000000 +410.945900982911 1240.446289062500 +422.924309561339 1321.314331054688 +428.029862424963 3127.000000000000 +430.025829985642 3375.565917968750 +432.023389778043 1241.000000000000 +445.118540650774 2403.000000000000 +482.896343711522 3766.000000000000 +484.893208509576 3436.493652343750 +486.890337640381 1470.000000000000 +500.275964022219 1326.000000000000 +502.290774394394 2533.000000000000 +505.852131030981 2176.208984375000 +520.337158711044 1461.000000000000 +522.879856177194 1440.671630859375 +524.369108967211 1804.000000000000 +536.163737753906 5207.000000000000 +537.164639268191 2756.000000000000 +538.162878717604 1773.000000000000 +542.322704071625 1648.782958984375 +544.339131186130 2994.000000000000 +546.913981193515 1696.000000000000 +610.182116523211 2119.000000000000 +611.183653272311 1499.000000000000 +770.945625211386 2752.000000000000 +771.945498320437 1251.000000000000 +772.941790932239 5463.000000000000 +773.942311008502 1795.000000000000 +774.938554076670 4221.000000000000 +775.941076669102 1561.000000000000 +776.936676421416 1997.000000000000 +786.918540331440 6080.000000000000 +787.923055465852 2216.000000000000 +788.915183876064 12922.929687500000 +789.918908612778 3577.000000000000 +790.913402804955 10338.000000000000 +791.914597259040 3343.090820312500 +792.910156420632 5118.000000000000 +793.914375013341 1534.000000000000 +794.907901025846 1263.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=693 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=693 experiment=3_0 +##scan 208 +##specref ms_run[1]:sample=1 period=1 cycle=693 experiment=3 +74.015593730219 90.000000000000 +108.982725487353 335.000000000000 +110.980768197449 195.000000000000 +132.015411292184 75.000000000000 +138.012495802589 45.000000000000 +144.520438740081 30.000000000000 +144.532721880812 30.000000000000 +144.960106948252 3504.000000000000 +145.957607336012 30.000000000000 +145.969427497898 30.000000000000 +146.514296625917 120.000000000000 +146.957391558555 6979.000000000000 +158.019923338228 105.000000000000 +159.028444651052 169.000000000000 +164.971316184505 60.000000000000 +166.985844205731 75.000000000000 +172.435350097285 255.000000000000 +172.459699927151 58.119884490967 +172.928273347062 572.491333007812 +172.955729041754 42829.562500000000 +173.026800988173 15.000000000000 +173.108276706294 30.000000000000 +173.119254998714 30.000000000000 +173.422116833841 30.000000000000 +173.469100178471 30.000000000000 +173.478998018262 30.000000000000 +173.741516370764 15.000000000000 +173.801502478554 30.000000000000 +173.957994826025 962.000000000000 +173.992342522631 318.729431152344 +174.017377893141 105.699356079102 +174.427178741903 421.865417480469 +174.463907253913 60.000000000000 +174.508844707030 45.000000000000 +174.521312165992 45.000000000000 +174.556989458470 15.000000000000 +174.670068585907 30.000000000000 +174.837750187503 28.553567886353 +174.858142593857 43.146827697754 +174.953363083605 86387.000000000000 +174.992175798626 124.503494262695 +175.018579778074 30.000000000000 +175.029679219328 30.000000000000 +175.136724101142 45.000000000000 +175.151327442613 45.000000000000 +175.327662444915 45.000000000000 +175.376291062904 30.000000000000 +175.485257380445 60.000000000000 +175.507255194518 56.273757934570 +175.812323420458 30.000000000000 +175.823543948794 53.027351379395 +175.844841567932 60.000000000000 +175.875047614561 30.000000000000 +175.955324056536 135.000000000000 +175.984777630208 162.850494384766 +175.997602535924 150.000000000000 +176.016791758033 88.245552062988 +176.033642224152 30.000000000000 +176.066476169565 45.000000000000 +176.084532670339 45.000000000000 +176.117863823048 15.000000000000 +176.225963046224 30.000000000000 +176.237139058089 30.000000000000 +176.427738552784 45.000000000000 +176.448139246840 45.000000000000 +176.511001160107 30.000000000000 +176.591315511026 30.000000000000 +176.780852678878 30.000000000000 +176.965579585738 30.000000000000 +177.220372655802 30.000000000000 +178.229465667584 15.000000000000 +178.272114634569 48.814983367920 +178.296052419568 45.000000000000 +178.376160517198 45.000000000000 +181.991613788006 30.000000000000 +193.410537683552 45.000000000000 +193.997841265756 4326.000000000000 +194.615111680861 30.000000000000 +194.631478436694 30.000000000000 +194.997221661598 30.000000000000 +195.995134049376 2362.000000000000 +211.010735094111 30.000000000000 +212.008766892979 45.000000000000 +366.961187299296 6298.000000000000 +367.391154523436 30.000000000000 +367.441479337402 30.000000000000 +367.456748558207 30.000000000000 +384.970238550546 2481.000000000000 +385.977029951077 30.000000000000 +>compound 1_0-693004--209--UNKNOWN +>parentmass 390.976895115200 +>charge 1 +>rt 460.888000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +390.976895115200 4097.000000000000 +>ms1peaks +52.005376076017 2883.880126953125 +53.013413907114 13058.982421875000 +54.009310504902 336971.593750000000 +55.006164410265 6084.639160156250 +55.011253279137 6804.312011718750 +55.053973268647 2094.136962890625 +55.933959042129 4944.510253906250 +56.941986222623 2084.266357421875 +59.049551500331 79191.015625000000 +60.044493631405 10838.423828125000 +61.039424138051 1510.310058593750 +63.997587302487 3447.318359375000 +64.005172264091 4602.720214843750 +68.011537684837 26478.115234375000 +68.993632019046 10816.396484375000 +69.044529545307 13642.217773437500 +72.936457767817 1786.218261718750 +73.064222660914 1621.299560546875 +76.486209729505 2229.000000000000 +79.020780389523 15598.791015625000 +80.048897845504 11696.743164062500 +81.936905624127 7513.618652343750 +82.996288344821 6976.000000000000 +83.085026087494 1412.000000000000 +87.054730595182 1436.109375000000 +90.489074787757 1427.000000000000 +91.053464991945 1569.000000000000 +95.952550974511 1837.000000000000 +97.967889624898 5804.188476562500 +102.090389946825 2039.000000000000 +109.942394290071 1355.000000000000 +113.962677921364 1715.000000000000 +114.090495581394 10508.503906250000 +118.085030169406 5793.618164062500 +122.095373734435 3261.000000000000 +122.962956356250 8717.000000000000 +123.091283307129 1822.000000000000 +130.157670347755 1372.000000000000 +136.020442497348 1484.000000000000 +141.089545548276 1505.945922851562 +141.111778196613 1273.170654296875 +141.957370263974 13080.325195312500 +147.090827326784 2735.116699218750 +149.022417633201 4598.868652343750 +151.094984589248 2634.482177734375 +151.111228898694 2781.670654296875 +153.126508682277 1347.000000000000 +155.069230805975 1501.910400390625 +155.105168844558 3718.000000000000 +155.973236471256 3793.457519531250 +158.153233560066 9991.886718750000 +159.137906167157 1576.519409179688 +159.155197345679 1728.316040039062 +161.095712954709 1618.000000000000 +164.142678923314 1584.981079101562 +167.105510572415 2103.879638671875 +170.095065256490 3113.855224609375 +171.146178907250 1450.000000000000 +172.954475044148 6486.615722656250 +173.080086580295 6165.000000000000 +174.951826947852 4038.934082031250 +178.157729569686 1308.461181640625 +179.105523367591 1776.000000000000 +182.960746875297 2551.042724609375 +183.079117402757 1340.139282226562 +183.098838604879 1426.173706054688 +186.220920447180 1344.000000000000 +194.115874579098 2606.000000000000 +195.120457994010 1963.229248046875 +198.184587323981 1835.946166992188 +201.194786366141 1244.618774414062 +217.106362896158 23584.000000000000 +218.109168688688 2603.000000000000 +227.127432730232 10516.948242187500 +228.129909544275 1526.000000000000 +239.088104333017 4048.000000000000 +242.283621376797 1694.000000000000 +246.861551486243 2459.000000000000 +249.109044797754 4284.000000000000 +249.183712414887 1332.089477539062 +250.999288828692 2323.000000000000 +251.182658791365 1347.000000000000 +252.996889183114 1537.976440429688 +254.083522016681 1687.000000000000 +267.170945735844 1374.012573242188 +279.092405514593 2060.151123046875 +281.051044087152 1406.000000000000 +304.111107217598 1705.000000000000 +327.007198326562 3294.460205078125 +329.004058351650 2860.000000000000 +330.205390821964 1624.000000000000 +364.961489231765 3826.000000000000 +366.957898526556 3996.233642578125 +381.808013272895 1578.000000000000 +382.974668199450 512123.812500000000 +383.797795773412 1974.817016601562 +383.973804988344 67649.023437500000 +384.972138308465 495302.968750000000 +385.971246198787 70765.046875000000 +386.966528657686 146591.000000000000 +387.969530993471 23030.000000000000 +388.965530388284 21448.000000000000 +389.968451613555 3733.000000000000 +390.976895115200 4097.000000000000 +392.974710796671 1289.681884765625 +404.954362223910 29937.207031250000 +405.956940932654 4597.000000000000 +406.951031367430 29269.568359375000 +407.954600492350 4851.000000000000 +408.948223942359 9862.279296875000 +409.950274004296 1622.000000000000 +410.945900982911 1240.446289062500 +422.924309561339 1321.314331054688 +428.029862424963 3127.000000000000 +430.025829985642 3375.565917968750 +432.023389778043 1241.000000000000 +445.118540650774 2403.000000000000 +482.896343711522 3766.000000000000 +484.893208509576 3436.493652343750 +486.890337640381 1470.000000000000 +500.275964022219 1326.000000000000 +502.290774394394 2533.000000000000 +505.852131030981 2176.208984375000 +520.337158711044 1461.000000000000 +522.879856177194 1440.671630859375 +524.369108967211 1804.000000000000 +536.163737753906 5207.000000000000 +537.164639268191 2756.000000000000 +538.162878717604 1773.000000000000 +542.322704071625 1648.782958984375 +544.339131186130 2994.000000000000 +546.913981193515 1696.000000000000 +610.182116523211 2119.000000000000 +611.183653272311 1499.000000000000 +770.945625211386 2752.000000000000 +771.945498320437 1251.000000000000 +772.941790932239 5463.000000000000 +773.942311008502 1795.000000000000 +774.938554076670 4221.000000000000 +775.941076669102 1561.000000000000 +776.936676421416 1997.000000000000 +786.918540331440 6080.000000000000 +787.923055465852 2216.000000000000 +788.915183876064 12922.929687500000 +789.918908612778 3577.000000000000 +790.913402804955 10338.000000000000 +791.914597259040 3343.090820312500 +792.910156420632 5118.000000000000 +793.914375013341 1534.000000000000 +794.907901025846 1263.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=693 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=693 experiment=4_0 +##scan 209 +##specref ms_run[1]:sample=1 period=1 cycle=693 experiment=4 +172.966126067652 90.000000000000 +174.951259857183 172.639129638672 +177.954965759204 30.000000000000 +390.976559812069 120.000000000000 +>compound 1_0-693005--210--UNKNOWN +>parentmass 404.954362223910 +>charge 1 +>rt 460.888000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +404.954362223910 29937.207031250000 +>ms1peaks +52.005376076017 2883.880126953125 +53.013413907114 13058.982421875000 +54.009310504902 336971.593750000000 +55.006164410265 6084.639160156250 +55.011253279137 6804.312011718750 +55.053973268647 2094.136962890625 +55.933959042129 4944.510253906250 +56.941986222623 2084.266357421875 +59.049551500331 79191.015625000000 +60.044493631405 10838.423828125000 +61.039424138051 1510.310058593750 +63.997587302487 3447.318359375000 +64.005172264091 4602.720214843750 +68.011537684837 26478.115234375000 +68.993632019046 10816.396484375000 +69.044529545307 13642.217773437500 +72.936457767817 1786.218261718750 +73.064222660914 1621.299560546875 +76.486209729505 2229.000000000000 +79.020780389523 15598.791015625000 +80.048897845504 11696.743164062500 +81.936905624127 7513.618652343750 +82.996288344821 6976.000000000000 +83.085026087494 1412.000000000000 +87.054730595182 1436.109375000000 +90.489074787757 1427.000000000000 +91.053464991945 1569.000000000000 +95.952550974511 1837.000000000000 +97.967889624898 5804.188476562500 +102.090389946825 2039.000000000000 +109.942394290071 1355.000000000000 +113.962677921364 1715.000000000000 +114.090495581394 10508.503906250000 +118.085030169406 5793.618164062500 +122.095373734435 3261.000000000000 +122.962956356250 8717.000000000000 +123.091283307129 1822.000000000000 +130.157670347755 1372.000000000000 +136.020442497348 1484.000000000000 +141.089545548276 1505.945922851562 +141.111778196613 1273.170654296875 +141.957370263974 13080.325195312500 +147.090827326784 2735.116699218750 +149.022417633201 4598.868652343750 +151.094984589248 2634.482177734375 +151.111228898694 2781.670654296875 +153.126508682277 1347.000000000000 +155.069230805975 1501.910400390625 +155.105168844558 3718.000000000000 +155.973236471256 3793.457519531250 +158.153233560066 9991.886718750000 +159.137906167157 1576.519409179688 +159.155197345679 1728.316040039062 +161.095712954709 1618.000000000000 +164.142678923314 1584.981079101562 +167.105510572415 2103.879638671875 +170.095065256490 3113.855224609375 +171.146178907250 1450.000000000000 +172.954475044148 6486.615722656250 +173.080086580295 6165.000000000000 +174.951826947852 4038.934082031250 +178.157729569686 1308.461181640625 +179.105523367591 1776.000000000000 +182.960746875297 2551.042724609375 +183.079117402757 1340.139282226562 +183.098838604879 1426.173706054688 +186.220920447180 1344.000000000000 +194.115874579098 2606.000000000000 +195.120457994010 1963.229248046875 +198.184587323981 1835.946166992188 +201.194786366141 1244.618774414062 +217.106362896158 23584.000000000000 +218.109168688688 2603.000000000000 +227.127432730232 10516.948242187500 +228.129909544275 1526.000000000000 +239.088104333017 4048.000000000000 +242.283621376797 1694.000000000000 +246.861551486243 2459.000000000000 +249.109044797754 4284.000000000000 +249.183712414887 1332.089477539062 +250.999288828692 2323.000000000000 +251.182658791365 1347.000000000000 +252.996889183114 1537.976440429688 +254.083522016681 1687.000000000000 +267.170945735844 1374.012573242188 +279.092405514593 2060.151123046875 +281.051044087152 1406.000000000000 +304.111107217598 1705.000000000000 +327.007198326562 3294.460205078125 +329.004058351650 2860.000000000000 +330.205390821964 1624.000000000000 +364.961489231765 3826.000000000000 +366.957898526556 3996.233642578125 +381.808013272895 1578.000000000000 +382.974668199450 512123.812500000000 +383.797795773412 1974.817016601562 +383.973804988344 67649.023437500000 +384.972138308465 495302.968750000000 +385.971246198787 70765.046875000000 +386.966528657686 146591.000000000000 +387.969530993471 23030.000000000000 +388.965530388284 21448.000000000000 +389.968451613555 3733.000000000000 +390.976895115200 4097.000000000000 +392.974710796671 1289.681884765625 +404.954362223910 29937.207031250000 +405.956940932654 4597.000000000000 +406.951031367430 29269.568359375000 +407.954600492350 4851.000000000000 +408.948223942359 9862.279296875000 +409.950274004296 1622.000000000000 +410.945900982911 1240.446289062500 +422.924309561339 1321.314331054688 +428.029862424963 3127.000000000000 +430.025829985642 3375.565917968750 +432.023389778043 1241.000000000000 +445.118540650774 2403.000000000000 +482.896343711522 3766.000000000000 +484.893208509576 3436.493652343750 +486.890337640381 1470.000000000000 +500.275964022219 1326.000000000000 +502.290774394394 2533.000000000000 +505.852131030981 2176.208984375000 +520.337158711044 1461.000000000000 +522.879856177194 1440.671630859375 +524.369108967211 1804.000000000000 +536.163737753906 5207.000000000000 +537.164639268191 2756.000000000000 +538.162878717604 1773.000000000000 +542.322704071625 1648.782958984375 +544.339131186130 2994.000000000000 +546.913981193515 1696.000000000000 +610.182116523211 2119.000000000000 +611.183653272311 1499.000000000000 +770.945625211386 2752.000000000000 +771.945498320437 1251.000000000000 +772.941790932239 5463.000000000000 +773.942311008502 1795.000000000000 +774.938554076670 4221.000000000000 +775.941076669102 1561.000000000000 +776.936676421416 1997.000000000000 +786.918540331440 6080.000000000000 +787.923055465852 2216.000000000000 +788.915183876064 12922.929687500000 +789.918908612778 3577.000000000000 +790.913402804955 10338.000000000000 +791.914597259040 3343.090820312500 +792.910156420632 5118.000000000000 +793.914375013341 1534.000000000000 +794.907901025846 1263.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=693 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=693 experiment=5_0 +##scan 210 +##specref ms_run[1]:sample=1 period=1 cycle=693 experiment=5 +157.872645263788 13.000000000000 +>compound 1_0-693006--211--UNKNOWN +>parentmass 428.029862424963 +>charge 1 +>rt 460.888000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +428.029862424963 3127.000000000000 +>ms1peaks +52.005376076017 2883.880126953125 +53.013413907114 13058.982421875000 +54.009310504902 336971.593750000000 +55.006164410265 6084.639160156250 +55.011253279137 6804.312011718750 +55.053973268647 2094.136962890625 +55.933959042129 4944.510253906250 +56.941986222623 2084.266357421875 +59.049551500331 79191.015625000000 +60.044493631405 10838.423828125000 +61.039424138051 1510.310058593750 +63.997587302487 3447.318359375000 +64.005172264091 4602.720214843750 +68.011537684837 26478.115234375000 +68.993632019046 10816.396484375000 +69.044529545307 13642.217773437500 +72.936457767817 1786.218261718750 +73.064222660914 1621.299560546875 +76.486209729505 2229.000000000000 +79.020780389523 15598.791015625000 +80.048897845504 11696.743164062500 +81.936905624127 7513.618652343750 +82.996288344821 6976.000000000000 +83.085026087494 1412.000000000000 +87.054730595182 1436.109375000000 +90.489074787757 1427.000000000000 +91.053464991945 1569.000000000000 +95.952550974511 1837.000000000000 +97.967889624898 5804.188476562500 +102.090389946825 2039.000000000000 +109.942394290071 1355.000000000000 +113.962677921364 1715.000000000000 +114.090495581394 10508.503906250000 +118.085030169406 5793.618164062500 +122.095373734435 3261.000000000000 +122.962956356250 8717.000000000000 +123.091283307129 1822.000000000000 +130.157670347755 1372.000000000000 +136.020442497348 1484.000000000000 +141.089545548276 1505.945922851562 +141.111778196613 1273.170654296875 +141.957370263974 13080.325195312500 +147.090827326784 2735.116699218750 +149.022417633201 4598.868652343750 +151.094984589248 2634.482177734375 +151.111228898694 2781.670654296875 +153.126508682277 1347.000000000000 +155.069230805975 1501.910400390625 +155.105168844558 3718.000000000000 +155.973236471256 3793.457519531250 +158.153233560066 9991.886718750000 +159.137906167157 1576.519409179688 +159.155197345679 1728.316040039062 +161.095712954709 1618.000000000000 +164.142678923314 1584.981079101562 +167.105510572415 2103.879638671875 +170.095065256490 3113.855224609375 +171.146178907250 1450.000000000000 +172.954475044148 6486.615722656250 +173.080086580295 6165.000000000000 +174.951826947852 4038.934082031250 +178.157729569686 1308.461181640625 +179.105523367591 1776.000000000000 +182.960746875297 2551.042724609375 +183.079117402757 1340.139282226562 +183.098838604879 1426.173706054688 +186.220920447180 1344.000000000000 +194.115874579098 2606.000000000000 +195.120457994010 1963.229248046875 +198.184587323981 1835.946166992188 +201.194786366141 1244.618774414062 +217.106362896158 23584.000000000000 +218.109168688688 2603.000000000000 +227.127432730232 10516.948242187500 +228.129909544275 1526.000000000000 +239.088104333017 4048.000000000000 +242.283621376797 1694.000000000000 +246.861551486243 2459.000000000000 +249.109044797754 4284.000000000000 +249.183712414887 1332.089477539062 +250.999288828692 2323.000000000000 +251.182658791365 1347.000000000000 +252.996889183114 1537.976440429688 +254.083522016681 1687.000000000000 +267.170945735844 1374.012573242188 +279.092405514593 2060.151123046875 +281.051044087152 1406.000000000000 +304.111107217598 1705.000000000000 +327.007198326562 3294.460205078125 +329.004058351650 2860.000000000000 +330.205390821964 1624.000000000000 +364.961489231765 3826.000000000000 +366.957898526556 3996.233642578125 +381.808013272895 1578.000000000000 +382.974668199450 512123.812500000000 +383.797795773412 1974.817016601562 +383.973804988344 67649.023437500000 +384.972138308465 495302.968750000000 +385.971246198787 70765.046875000000 +386.966528657686 146591.000000000000 +387.969530993471 23030.000000000000 +388.965530388284 21448.000000000000 +389.968451613555 3733.000000000000 +390.976895115200 4097.000000000000 +392.974710796671 1289.681884765625 +404.954362223910 29937.207031250000 +405.956940932654 4597.000000000000 +406.951031367430 29269.568359375000 +407.954600492350 4851.000000000000 +408.948223942359 9862.279296875000 +409.950274004296 1622.000000000000 +410.945900982911 1240.446289062500 +422.924309561339 1321.314331054688 +428.029862424963 3127.000000000000 +430.025829985642 3375.565917968750 +432.023389778043 1241.000000000000 +445.118540650774 2403.000000000000 +482.896343711522 3766.000000000000 +484.893208509576 3436.493652343750 +486.890337640381 1470.000000000000 +500.275964022219 1326.000000000000 +502.290774394394 2533.000000000000 +505.852131030981 2176.208984375000 +520.337158711044 1461.000000000000 +522.879856177194 1440.671630859375 +524.369108967211 1804.000000000000 +536.163737753906 5207.000000000000 +537.164639268191 2756.000000000000 +538.162878717604 1773.000000000000 +542.322704071625 1648.782958984375 +544.339131186130 2994.000000000000 +546.913981193515 1696.000000000000 +610.182116523211 2119.000000000000 +611.183653272311 1499.000000000000 +770.945625211386 2752.000000000000 +771.945498320437 1251.000000000000 +772.941790932239 5463.000000000000 +773.942311008502 1795.000000000000 +774.938554076670 4221.000000000000 +775.941076669102 1561.000000000000 +776.936676421416 1997.000000000000 +786.918540331440 6080.000000000000 +787.923055465852 2216.000000000000 +788.915183876064 12922.929687500000 +789.918908612778 3577.000000000000 +790.913402804955 10338.000000000000 +791.914597259040 3343.090820312500 +792.910156420632 5118.000000000000 +793.914375013341 1534.000000000000 +794.907901025846 1263.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=693 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=693 experiment=6_0 +##scan 211 +##specref ms_run[1]:sample=1 period=1 cycle=693 experiment=6 +123.766263425830 13.000000000000 +144.960938498779 210.000000000000 +172.955129218481 5364.000000000000 +173.784879147319 13.000000000000 +174.952613354693 30.000000000000 +193.996978247269 120.000000000000 +306.827873465163 13.000000000000 +338.863140559372 45.000000000000 +364.961485612129 478.000000000000 +382.974312198239 633.000000000000 +384.967450046293 13.000000000000 +>compound 1_0-693007--212--UNKNOWN +>parentmass 482.896343711522 +>charge 1 +>rt 460.888000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +482.896343711522 3766.000000000000 +>ms1peaks +52.005376076017 2883.880126953125 +53.013413907114 13058.982421875000 +54.009310504902 336971.593750000000 +55.006164410265 6084.639160156250 +55.011253279137 6804.312011718750 +55.053973268647 2094.136962890625 +55.933959042129 4944.510253906250 +56.941986222623 2084.266357421875 +59.049551500331 79191.015625000000 +60.044493631405 10838.423828125000 +61.039424138051 1510.310058593750 +63.997587302487 3447.318359375000 +64.005172264091 4602.720214843750 +68.011537684837 26478.115234375000 +68.993632019046 10816.396484375000 +69.044529545307 13642.217773437500 +72.936457767817 1786.218261718750 +73.064222660914 1621.299560546875 +76.486209729505 2229.000000000000 +79.020780389523 15598.791015625000 +80.048897845504 11696.743164062500 +81.936905624127 7513.618652343750 +82.996288344821 6976.000000000000 +83.085026087494 1412.000000000000 +87.054730595182 1436.109375000000 +90.489074787757 1427.000000000000 +91.053464991945 1569.000000000000 +95.952550974511 1837.000000000000 +97.967889624898 5804.188476562500 +102.090389946825 2039.000000000000 +109.942394290071 1355.000000000000 +113.962677921364 1715.000000000000 +114.090495581394 10508.503906250000 +118.085030169406 5793.618164062500 +122.095373734435 3261.000000000000 +122.962956356250 8717.000000000000 +123.091283307129 1822.000000000000 +130.157670347755 1372.000000000000 +136.020442497348 1484.000000000000 +141.089545548276 1505.945922851562 +141.111778196613 1273.170654296875 +141.957370263974 13080.325195312500 +147.090827326784 2735.116699218750 +149.022417633201 4598.868652343750 +151.094984589248 2634.482177734375 +151.111228898694 2781.670654296875 +153.126508682277 1347.000000000000 +155.069230805975 1501.910400390625 +155.105168844558 3718.000000000000 +155.973236471256 3793.457519531250 +158.153233560066 9991.886718750000 +159.137906167157 1576.519409179688 +159.155197345679 1728.316040039062 +161.095712954709 1618.000000000000 +164.142678923314 1584.981079101562 +167.105510572415 2103.879638671875 +170.095065256490 3113.855224609375 +171.146178907250 1450.000000000000 +172.954475044148 6486.615722656250 +173.080086580295 6165.000000000000 +174.951826947852 4038.934082031250 +178.157729569686 1308.461181640625 +179.105523367591 1776.000000000000 +182.960746875297 2551.042724609375 +183.079117402757 1340.139282226562 +183.098838604879 1426.173706054688 +186.220920447180 1344.000000000000 +194.115874579098 2606.000000000000 +195.120457994010 1963.229248046875 +198.184587323981 1835.946166992188 +201.194786366141 1244.618774414062 +217.106362896158 23584.000000000000 +218.109168688688 2603.000000000000 +227.127432730232 10516.948242187500 +228.129909544275 1526.000000000000 +239.088104333017 4048.000000000000 +242.283621376797 1694.000000000000 +246.861551486243 2459.000000000000 +249.109044797754 4284.000000000000 +249.183712414887 1332.089477539062 +250.999288828692 2323.000000000000 +251.182658791365 1347.000000000000 +252.996889183114 1537.976440429688 +254.083522016681 1687.000000000000 +267.170945735844 1374.012573242188 +279.092405514593 2060.151123046875 +281.051044087152 1406.000000000000 +304.111107217598 1705.000000000000 +327.007198326562 3294.460205078125 +329.004058351650 2860.000000000000 +330.205390821964 1624.000000000000 +364.961489231765 3826.000000000000 +366.957898526556 3996.233642578125 +381.808013272895 1578.000000000000 +382.974668199450 512123.812500000000 +383.797795773412 1974.817016601562 +383.973804988344 67649.023437500000 +384.972138308465 495302.968750000000 +385.971246198787 70765.046875000000 +386.966528657686 146591.000000000000 +387.969530993471 23030.000000000000 +388.965530388284 21448.000000000000 +389.968451613555 3733.000000000000 +390.976895115200 4097.000000000000 +392.974710796671 1289.681884765625 +404.954362223910 29937.207031250000 +405.956940932654 4597.000000000000 +406.951031367430 29269.568359375000 +407.954600492350 4851.000000000000 +408.948223942359 9862.279296875000 +409.950274004296 1622.000000000000 +410.945900982911 1240.446289062500 +422.924309561339 1321.314331054688 +428.029862424963 3127.000000000000 +430.025829985642 3375.565917968750 +432.023389778043 1241.000000000000 +445.118540650774 2403.000000000000 +482.896343711522 3766.000000000000 +484.893208509576 3436.493652343750 +486.890337640381 1470.000000000000 +500.275964022219 1326.000000000000 +502.290774394394 2533.000000000000 +505.852131030981 2176.208984375000 +520.337158711044 1461.000000000000 +522.879856177194 1440.671630859375 +524.369108967211 1804.000000000000 +536.163737753906 5207.000000000000 +537.164639268191 2756.000000000000 +538.162878717604 1773.000000000000 +542.322704071625 1648.782958984375 +544.339131186130 2994.000000000000 +546.913981193515 1696.000000000000 +610.182116523211 2119.000000000000 +611.183653272311 1499.000000000000 +770.945625211386 2752.000000000000 +771.945498320437 1251.000000000000 +772.941790932239 5463.000000000000 +773.942311008502 1795.000000000000 +774.938554076670 4221.000000000000 +775.941076669102 1561.000000000000 +776.936676421416 1997.000000000000 +786.918540331440 6080.000000000000 +787.923055465852 2216.000000000000 +788.915183876064 12922.929687500000 +789.918908612778 3577.000000000000 +790.913402804955 10338.000000000000 +791.914597259040 3343.090820312500 +792.910156420632 5118.000000000000 +793.914375013341 1534.000000000000 +794.907901025846 1263.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=693 experiment=7 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=693 experiment=7_0 +##scan 212 +##specref ms_run[1]:sample=1 period=1 cycle=693 experiment=7 +193.999772457325 60.000000000000 +286.081676946140 30.000000000000 +354.069081281972 45.000000000000 +364.965079570188 30.000000000000 +436.886134996512 75.000000000000 +482.894487135925 30.000000000000 +>compound 1_0-693008--213--UNKNOWN +>parentmass 772.941790932239 +>charge 1 +>rt 460.888000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +772.941790932239 5463.000000000000 +>ms1peaks +52.005376076017 2883.880126953125 +53.013413907114 13058.982421875000 +54.009310504902 336971.593750000000 +55.006164410265 6084.639160156250 +55.011253279137 6804.312011718750 +55.053973268647 2094.136962890625 +55.933959042129 4944.510253906250 +56.941986222623 2084.266357421875 +59.049551500331 79191.015625000000 +60.044493631405 10838.423828125000 +61.039424138051 1510.310058593750 +63.997587302487 3447.318359375000 +64.005172264091 4602.720214843750 +68.011537684837 26478.115234375000 +68.993632019046 10816.396484375000 +69.044529545307 13642.217773437500 +72.936457767817 1786.218261718750 +73.064222660914 1621.299560546875 +76.486209729505 2229.000000000000 +79.020780389523 15598.791015625000 +80.048897845504 11696.743164062500 +81.936905624127 7513.618652343750 +82.996288344821 6976.000000000000 +83.085026087494 1412.000000000000 +87.054730595182 1436.109375000000 +90.489074787757 1427.000000000000 +91.053464991945 1569.000000000000 +95.952550974511 1837.000000000000 +97.967889624898 5804.188476562500 +102.090389946825 2039.000000000000 +109.942394290071 1355.000000000000 +113.962677921364 1715.000000000000 +114.090495581394 10508.503906250000 +118.085030169406 5793.618164062500 +122.095373734435 3261.000000000000 +122.962956356250 8717.000000000000 +123.091283307129 1822.000000000000 +130.157670347755 1372.000000000000 +136.020442497348 1484.000000000000 +141.089545548276 1505.945922851562 +141.111778196613 1273.170654296875 +141.957370263974 13080.325195312500 +147.090827326784 2735.116699218750 +149.022417633201 4598.868652343750 +151.094984589248 2634.482177734375 +151.111228898694 2781.670654296875 +153.126508682277 1347.000000000000 +155.069230805975 1501.910400390625 +155.105168844558 3718.000000000000 +155.973236471256 3793.457519531250 +158.153233560066 9991.886718750000 +159.137906167157 1576.519409179688 +159.155197345679 1728.316040039062 +161.095712954709 1618.000000000000 +164.142678923314 1584.981079101562 +167.105510572415 2103.879638671875 +170.095065256490 3113.855224609375 +171.146178907250 1450.000000000000 +172.954475044148 6486.615722656250 +173.080086580295 6165.000000000000 +174.951826947852 4038.934082031250 +178.157729569686 1308.461181640625 +179.105523367591 1776.000000000000 +182.960746875297 2551.042724609375 +183.079117402757 1340.139282226562 +183.098838604879 1426.173706054688 +186.220920447180 1344.000000000000 +194.115874579098 2606.000000000000 +195.120457994010 1963.229248046875 +198.184587323981 1835.946166992188 +201.194786366141 1244.618774414062 +217.106362896158 23584.000000000000 +218.109168688688 2603.000000000000 +227.127432730232 10516.948242187500 +228.129909544275 1526.000000000000 +239.088104333017 4048.000000000000 +242.283621376797 1694.000000000000 +246.861551486243 2459.000000000000 +249.109044797754 4284.000000000000 +249.183712414887 1332.089477539062 +250.999288828692 2323.000000000000 +251.182658791365 1347.000000000000 +252.996889183114 1537.976440429688 +254.083522016681 1687.000000000000 +267.170945735844 1374.012573242188 +279.092405514593 2060.151123046875 +281.051044087152 1406.000000000000 +304.111107217598 1705.000000000000 +327.007198326562 3294.460205078125 +329.004058351650 2860.000000000000 +330.205390821964 1624.000000000000 +364.961489231765 3826.000000000000 +366.957898526556 3996.233642578125 +381.808013272895 1578.000000000000 +382.974668199450 512123.812500000000 +383.797795773412 1974.817016601562 +383.973804988344 67649.023437500000 +384.972138308465 495302.968750000000 +385.971246198787 70765.046875000000 +386.966528657686 146591.000000000000 +387.969530993471 23030.000000000000 +388.965530388284 21448.000000000000 +389.968451613555 3733.000000000000 +390.976895115200 4097.000000000000 +392.974710796671 1289.681884765625 +404.954362223910 29937.207031250000 +405.956940932654 4597.000000000000 +406.951031367430 29269.568359375000 +407.954600492350 4851.000000000000 +408.948223942359 9862.279296875000 +409.950274004296 1622.000000000000 +410.945900982911 1240.446289062500 +422.924309561339 1321.314331054688 +428.029862424963 3127.000000000000 +430.025829985642 3375.565917968750 +432.023389778043 1241.000000000000 +445.118540650774 2403.000000000000 +482.896343711522 3766.000000000000 +484.893208509576 3436.493652343750 +486.890337640381 1470.000000000000 +500.275964022219 1326.000000000000 +502.290774394394 2533.000000000000 +505.852131030981 2176.208984375000 +520.337158711044 1461.000000000000 +522.879856177194 1440.671630859375 +524.369108967211 1804.000000000000 +536.163737753906 5207.000000000000 +537.164639268191 2756.000000000000 +538.162878717604 1773.000000000000 +542.322704071625 1648.782958984375 +544.339131186130 2994.000000000000 +546.913981193515 1696.000000000000 +610.182116523211 2119.000000000000 +611.183653272311 1499.000000000000 +770.945625211386 2752.000000000000 +771.945498320437 1251.000000000000 +772.941790932239 5463.000000000000 +773.942311008502 1795.000000000000 +774.938554076670 4221.000000000000 +775.941076669102 1561.000000000000 +776.936676421416 1997.000000000000 +786.918540331440 6080.000000000000 +787.923055465852 2216.000000000000 +788.915183876064 12922.929687500000 +789.918908612778 3577.000000000000 +790.913402804955 10338.000000000000 +791.914597259040 3343.090820312500 +792.910156420632 5118.000000000000 +793.914375013341 1534.000000000000 +794.907901025846 1263.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=693 experiment=8 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=693 experiment=8_0 +##scan 213 +##specref ms_run[1]:sample=1 period=1 cycle=693 experiment=8 +73.166007230582 13.000000000000 +386.968081364068 45.000000000000 +388.981548197082 854.000000000000 +389.985652339274 135.000000000000 +390.977687234328 860.000000000000 +772.941944774933 90.000000000000 +>compound 1_0-693009--214--UNKNOWN +>parentmass 788.915183876064 +>charge 1 +>rt 460.888000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +788.915183876064 12922.929687500000 +789.918908612778 3577.000000000000 +>ms1peaks +52.005376076017 2883.880126953125 +53.013413907114 13058.982421875000 +54.009310504902 336971.593750000000 +55.006164410265 6084.639160156250 +55.011253279137 6804.312011718750 +55.053973268647 2094.136962890625 +55.933959042129 4944.510253906250 +56.941986222623 2084.266357421875 +59.049551500331 79191.015625000000 +60.044493631405 10838.423828125000 +61.039424138051 1510.310058593750 +63.997587302487 3447.318359375000 +64.005172264091 4602.720214843750 +68.011537684837 26478.115234375000 +68.993632019046 10816.396484375000 +69.044529545307 13642.217773437500 +72.936457767817 1786.218261718750 +73.064222660914 1621.299560546875 +76.486209729505 2229.000000000000 +79.020780389523 15598.791015625000 +80.048897845504 11696.743164062500 +81.936905624127 7513.618652343750 +82.996288344821 6976.000000000000 +83.085026087494 1412.000000000000 +87.054730595182 1436.109375000000 +90.489074787757 1427.000000000000 +91.053464991945 1569.000000000000 +95.952550974511 1837.000000000000 +97.967889624898 5804.188476562500 +102.090389946825 2039.000000000000 +109.942394290071 1355.000000000000 +113.962677921364 1715.000000000000 +114.090495581394 10508.503906250000 +118.085030169406 5793.618164062500 +122.095373734435 3261.000000000000 +122.962956356250 8717.000000000000 +123.091283307129 1822.000000000000 +130.157670347755 1372.000000000000 +136.020442497348 1484.000000000000 +141.089545548276 1505.945922851562 +141.111778196613 1273.170654296875 +141.957370263974 13080.325195312500 +147.090827326784 2735.116699218750 +149.022417633201 4598.868652343750 +151.094984589248 2634.482177734375 +151.111228898694 2781.670654296875 +153.126508682277 1347.000000000000 +155.069230805975 1501.910400390625 +155.105168844558 3718.000000000000 +155.973236471256 3793.457519531250 +158.153233560066 9991.886718750000 +159.137906167157 1576.519409179688 +159.155197345679 1728.316040039062 +161.095712954709 1618.000000000000 +164.142678923314 1584.981079101562 +167.105510572415 2103.879638671875 +170.095065256490 3113.855224609375 +171.146178907250 1450.000000000000 +172.954475044148 6486.615722656250 +173.080086580295 6165.000000000000 +174.951826947852 4038.934082031250 +178.157729569686 1308.461181640625 +179.105523367591 1776.000000000000 +182.960746875297 2551.042724609375 +183.079117402757 1340.139282226562 +183.098838604879 1426.173706054688 +186.220920447180 1344.000000000000 +194.115874579098 2606.000000000000 +195.120457994010 1963.229248046875 +198.184587323981 1835.946166992188 +201.194786366141 1244.618774414062 +217.106362896158 23584.000000000000 +218.109168688688 2603.000000000000 +227.127432730232 10516.948242187500 +228.129909544275 1526.000000000000 +239.088104333017 4048.000000000000 +242.283621376797 1694.000000000000 +246.861551486243 2459.000000000000 +249.109044797754 4284.000000000000 +249.183712414887 1332.089477539062 +250.999288828692 2323.000000000000 +251.182658791365 1347.000000000000 +252.996889183114 1537.976440429688 +254.083522016681 1687.000000000000 +267.170945735844 1374.012573242188 +279.092405514593 2060.151123046875 +281.051044087152 1406.000000000000 +304.111107217598 1705.000000000000 +327.007198326562 3294.460205078125 +329.004058351650 2860.000000000000 +330.205390821964 1624.000000000000 +364.961489231765 3826.000000000000 +366.957898526556 3996.233642578125 +381.808013272895 1578.000000000000 +382.974668199450 512123.812500000000 +383.797795773412 1974.817016601562 +383.973804988344 67649.023437500000 +384.972138308465 495302.968750000000 +385.971246198787 70765.046875000000 +386.966528657686 146591.000000000000 +387.969530993471 23030.000000000000 +388.965530388284 21448.000000000000 +389.968451613555 3733.000000000000 +390.976895115200 4097.000000000000 +392.974710796671 1289.681884765625 +404.954362223910 29937.207031250000 +405.956940932654 4597.000000000000 +406.951031367430 29269.568359375000 +407.954600492350 4851.000000000000 +408.948223942359 9862.279296875000 +409.950274004296 1622.000000000000 +410.945900982911 1240.446289062500 +422.924309561339 1321.314331054688 +428.029862424963 3127.000000000000 +430.025829985642 3375.565917968750 +432.023389778043 1241.000000000000 +445.118540650774 2403.000000000000 +482.896343711522 3766.000000000000 +484.893208509576 3436.493652343750 +486.890337640381 1470.000000000000 +500.275964022219 1326.000000000000 +502.290774394394 2533.000000000000 +505.852131030981 2176.208984375000 +520.337158711044 1461.000000000000 +522.879856177194 1440.671630859375 +524.369108967211 1804.000000000000 +536.163737753906 5207.000000000000 +537.164639268191 2756.000000000000 +538.162878717604 1773.000000000000 +542.322704071625 1648.782958984375 +544.339131186130 2994.000000000000 +546.913981193515 1696.000000000000 +610.182116523211 2119.000000000000 +611.183653272311 1499.000000000000 +770.945625211386 2752.000000000000 +771.945498320437 1251.000000000000 +772.941790932239 5463.000000000000 +773.942311008502 1795.000000000000 +774.938554076670 4221.000000000000 +775.941076669102 1561.000000000000 +776.936676421416 1997.000000000000 +786.918540331440 6080.000000000000 +787.923055465852 2216.000000000000 +788.915183876064 12922.929687500000 +789.918908612778 3577.000000000000 +790.913402804955 10338.000000000000 +791.914597259040 3343.090820312500 +792.910156420632 5118.000000000000 +793.914375013341 1534.000000000000 +794.907901025846 1263.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=693 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=693 experiment=9_0 +##scan 214 +##specref ms_run[1]:sample=1 period=1 cycle=693 experiment=9 +404.955168730957 1861.000000000000 +405.959973325311 105.000000000000 +406.952877057856 1527.000000000000 +>compound 1_0-694002--216--UNKNOWN +>parentmass 167.105463158741 +>charge 1 +>rt 461.815000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +167.105463158741 2212.506103515625 +>ms1peaks +52.005496386189 2738.622558593750 +53.013522862396 13891.174804687500 +53.850363537980 1464.000000000000 +54.009260084007 336400.468750000000 +55.005903794519 5511.014648437500 +55.010643924211 6241.218261718750 +55.054192408251 1967.229614257812 +55.934141177867 4482.000000000000 +56.049452188079 2198.212646484375 +56.941833904715 1792.011962890625 +59.049520182802 50016.500000000000 +60.044372488695 9947.728515625000 +61.039230172717 1531.269287109375 +63.997723154775 4503.361328125000 +64.004640290386 4503.543945312500 +67.029231386141 1343.709472656250 +68.011491758230 27131.720703125000 +68.993563170451 10725.029296875000 +69.044343896055 13633.430664062500 +72.936417222659 1981.698974609375 +73.064445763175 1738.000000000000 +76.486394770203 1838.000000000000 +79.020585693496 15476.331054687500 +80.049006763762 13098.345703125000 +81.936977066056 6700.097167968750 +82.996241956981 7046.000000000000 +87.054126951141 1509.432250976562 +90.489226124406 1310.000000000000 +95.952458919171 1959.000000000000 +97.967820753592 5628.000000000000 +100.075023872587 1364.000000000000 +102.090717931479 1512.646362304688 +113.962912260353 1701.000000000000 +114.090473225831 9595.784179687500 +118.084972131069 5075.000000000000 +122.095259772197 3214.795898437500 +122.962712406475 8085.558593750000 +123.091005423741 1581.128295898438 +130.158069734033 1299.000000000000 +136.020125332517 1746.000000000000 +136.111770067837 1350.000000000000 +141.112230336779 1334.011352539062 +141.957521382107 12383.362304687500 +147.090293807929 2791.311035156250 +149.022412837668 4677.629882812500 +151.096077644405 2393.391845703125 +151.110831801713 2600.533691406250 +155.069364216762 1716.784790039062 +155.105050133083 2456.074218750000 +155.973083245733 3283.000000000000 +158.153038315973 9929.551757812500 +159.116421722834 1485.743652343750 +159.137129674197 2772.861083984375 +159.155141577333 2776.414794921875 +161.095320875659 1573.519287109375 +164.142473682751 1421.000000000000 +167.105463158741 2212.506103515625 +170.094814045000 2688.513916015625 +171.139657517471 1933.299194335938 +172.954638688149 6057.178710937500 +173.079774514200 5662.676757812500 +174.951964559785 3863.824218750000 +178.158707978837 1362.208984375000 +179.104674624533 1800.117431640625 +182.961013319998 2148.433837890625 +182.981707985947 1468.088867187500 +183.098317402296 1261.667114257812 +186.220433974755 1479.000000000000 +194.116224184204 2789.894531250000 +195.102887218782 1287.299560546875 +195.121447766424 1610.618530273438 +198.184723560877 1941.571533203125 +201.194876036569 2167.000000000000 +217.106462800418 22947.000000000000 +218.108801330897 2636.000000000000 +219.097893861214 1342.000000000000 +227.126933149165 5004.911621093750 +228.195484069757 1305.000000000000 +239.088370009945 3960.000000000000 +240.460237390798 1427.000000000000 +242.283564093719 1830.000000000000 +246.861247027643 1938.000000000000 +249.108853260228 1800.000000000000 +249.183558440427 1294.426879882812 +250.999684342695 2698.000000000000 +251.183554091458 1477.002685546875 +254.083019303799 6058.000000000000 +279.093247230272 1966.815429687500 +281.049869935059 1670.000000000000 +294.135274654822 1900.000000000000 +304.112614798856 1293.000000000000 +327.006716420204 2586.074218750000 +329.003944250381 3053.000000000000 +330.205270226645 1449.000000000000 +364.961495290551 3901.000000000000 +366.958492691864 3703.921142578125 +381.808124091571 1803.154785156250 +382.974810010956 492494.000000000000 +383.797344688783 1758.993530273438 +383.973947678520 67017.000000000000 +384.971945599632 472104.000000000000 +385.971269588019 67474.414062500000 +386.966647061682 144016.781250000000 +387.969459859037 22293.000000000000 +388.966113727801 20172.000000000000 +389.970234999273 3733.000000000000 +390.977642286943 3807.000000000000 +395.362814968665 3505.000000000000 +404.954373005418 29709.000000000000 +405.957605814404 4596.000000000000 +406.951351507527 29748.000000000000 +407.954360642682 5225.000000000000 +408.947993467304 9999.000000000000 +409.950364620524 1525.000000000000 +410.945267428678 1352.000000000000 +420.926691374900 1390.664306640625 +422.923874232736 1486.000000000000 +428.029208662762 3986.000000000000 +430.025947746618 3948.657226562500 +445.119162074542 2228.000000000000 +482.896752691829 3090.000000000000 +484.893432613963 3026.647216796875 +502.291152978353 2267.953857421875 +505.851682314566 3196.000000000000 +520.337904050717 1518.000000000000 +522.878625367766 1435.000000000000 +524.369325390993 2192.000000000000 +525.894221085136 1272.042236328125 +536.163484623680 5334.000000000000 +537.164113274746 2751.000000000000 +538.162435462394 1972.000000000000 +542.322553871971 1723.000000000000 +544.338869478628 2967.000000000000 +546.915820439704 2265.156250000000 +610.181290021850 2226.000000000000 +770.944784003773 2430.996093750000 +771.944730947705 1288.000000000000 +772.941688134604 4659.000000000000 +773.942987828510 2027.000000000000 +774.938540423107 4303.000000000000 +776.937402889811 1926.000000000000 +786.918769211300 6319.000000000000 +787.922182773427 2038.134521484375 +788.915957873075 13314.000000000000 +789.918553365845 4066.000000000000 +790.913325395940 10740.000000000000 +791.915649574834 3424.000000000000 +792.909829405629 4948.000000000000 +793.913410948963 1431.000000000000 +794.907848876695 1317.702636718750 +>ms2peaks +##n_id sample=1 period=1 cycle=694 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=694 experiment=2_0 +##scan 216 +##specref ms_run[1]:sample=1 period=1 cycle=694 experiment=2 +53.038958721754 13.000000000000 +67.933191444128 60.000000000000 +67.941024551546 55.952743530273 +81.068805544502 13.000000000000 +84.930610900164 30.000000000000 +85.938023177066 13.000000000000 +97.029865263967 13.000000000000 +149.938124144096 13.000000000000 +>compound 1_0-694003--217--UNKNOWN +>parentmass 172.954638688149 +>charge 1 +>rt 461.815000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +172.954638688149 6057.178710937500 +>ms1peaks +52.005496386189 2738.622558593750 +53.013522862396 13891.174804687500 +53.850363537980 1464.000000000000 +54.009260084007 336400.468750000000 +55.005903794519 5511.014648437500 +55.010643924211 6241.218261718750 +55.054192408251 1967.229614257812 +55.934141177867 4482.000000000000 +56.049452188079 2198.212646484375 +56.941833904715 1792.011962890625 +59.049520182802 50016.500000000000 +60.044372488695 9947.728515625000 +61.039230172717 1531.269287109375 +63.997723154775 4503.361328125000 +64.004640290386 4503.543945312500 +67.029231386141 1343.709472656250 +68.011491758230 27131.720703125000 +68.993563170451 10725.029296875000 +69.044343896055 13633.430664062500 +72.936417222659 1981.698974609375 +73.064445763175 1738.000000000000 +76.486394770203 1838.000000000000 +79.020585693496 15476.331054687500 +80.049006763762 13098.345703125000 +81.936977066056 6700.097167968750 +82.996241956981 7046.000000000000 +87.054126951141 1509.432250976562 +90.489226124406 1310.000000000000 +95.952458919171 1959.000000000000 +97.967820753592 5628.000000000000 +100.075023872587 1364.000000000000 +102.090717931479 1512.646362304688 +113.962912260353 1701.000000000000 +114.090473225831 9595.784179687500 +118.084972131069 5075.000000000000 +122.095259772197 3214.795898437500 +122.962712406475 8085.558593750000 +123.091005423741 1581.128295898438 +130.158069734033 1299.000000000000 +136.020125332517 1746.000000000000 +136.111770067837 1350.000000000000 +141.112230336779 1334.011352539062 +141.957521382107 12383.362304687500 +147.090293807929 2791.311035156250 +149.022412837668 4677.629882812500 +151.096077644405 2393.391845703125 +151.110831801713 2600.533691406250 +155.069364216762 1716.784790039062 +155.105050133083 2456.074218750000 +155.973083245733 3283.000000000000 +158.153038315973 9929.551757812500 +159.116421722834 1485.743652343750 +159.137129674197 2772.861083984375 +159.155141577333 2776.414794921875 +161.095320875659 1573.519287109375 +164.142473682751 1421.000000000000 +167.105463158741 2212.506103515625 +170.094814045000 2688.513916015625 +171.139657517471 1933.299194335938 +172.954638688149 6057.178710937500 +173.079774514200 5662.676757812500 +174.951964559785 3863.824218750000 +178.158707978837 1362.208984375000 +179.104674624533 1800.117431640625 +182.961013319998 2148.433837890625 +182.981707985947 1468.088867187500 +183.098317402296 1261.667114257812 +186.220433974755 1479.000000000000 +194.116224184204 2789.894531250000 +195.102887218782 1287.299560546875 +195.121447766424 1610.618530273438 +198.184723560877 1941.571533203125 +201.194876036569 2167.000000000000 +217.106462800418 22947.000000000000 +218.108801330897 2636.000000000000 +219.097893861214 1342.000000000000 +227.126933149165 5004.911621093750 +228.195484069757 1305.000000000000 +239.088370009945 3960.000000000000 +240.460237390798 1427.000000000000 +242.283564093719 1830.000000000000 +246.861247027643 1938.000000000000 +249.108853260228 1800.000000000000 +249.183558440427 1294.426879882812 +250.999684342695 2698.000000000000 +251.183554091458 1477.002685546875 +254.083019303799 6058.000000000000 +279.093247230272 1966.815429687500 +281.049869935059 1670.000000000000 +294.135274654822 1900.000000000000 +304.112614798856 1293.000000000000 +327.006716420204 2586.074218750000 +329.003944250381 3053.000000000000 +330.205270226645 1449.000000000000 +364.961495290551 3901.000000000000 +366.958492691864 3703.921142578125 +381.808124091571 1803.154785156250 +382.974810010956 492494.000000000000 +383.797344688783 1758.993530273438 +383.973947678520 67017.000000000000 +384.971945599632 472104.000000000000 +385.971269588019 67474.414062500000 +386.966647061682 144016.781250000000 +387.969459859037 22293.000000000000 +388.966113727801 20172.000000000000 +389.970234999273 3733.000000000000 +390.977642286943 3807.000000000000 +395.362814968665 3505.000000000000 +404.954373005418 29709.000000000000 +405.957605814404 4596.000000000000 +406.951351507527 29748.000000000000 +407.954360642682 5225.000000000000 +408.947993467304 9999.000000000000 +409.950364620524 1525.000000000000 +410.945267428678 1352.000000000000 +420.926691374900 1390.664306640625 +422.923874232736 1486.000000000000 +428.029208662762 3986.000000000000 +430.025947746618 3948.657226562500 +445.119162074542 2228.000000000000 +482.896752691829 3090.000000000000 +484.893432613963 3026.647216796875 +502.291152978353 2267.953857421875 +505.851682314566 3196.000000000000 +520.337904050717 1518.000000000000 +522.878625367766 1435.000000000000 +524.369325390993 2192.000000000000 +525.894221085136 1272.042236328125 +536.163484623680 5334.000000000000 +537.164113274746 2751.000000000000 +538.162435462394 1972.000000000000 +542.322553871971 1723.000000000000 +544.338869478628 2967.000000000000 +546.915820439704 2265.156250000000 +610.181290021850 2226.000000000000 +770.944784003773 2430.996093750000 +771.944730947705 1288.000000000000 +772.941688134604 4659.000000000000 +773.942987828510 2027.000000000000 +774.938540423107 4303.000000000000 +776.937402889811 1926.000000000000 +786.918769211300 6319.000000000000 +787.922182773427 2038.134521484375 +788.915957873075 13314.000000000000 +789.918553365845 4066.000000000000 +790.913325395940 10740.000000000000 +791.915649574834 3424.000000000000 +792.909829405629 4948.000000000000 +793.913410948963 1431.000000000000 +794.907848876695 1317.702636718750 +>ms2peaks +##n_id sample=1 period=1 cycle=694 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=694 experiment=3_0 +##scan 217 +##specref ms_run[1]:sample=1 period=1 cycle=694 experiment=3 +55.054519883551 30.000000000000 +71.060196309801 30.000000000000 +76.021405533635 30.000000000000 +88.007485937921 30.000000000000 +90.902448227607 165.000000000000 +>compound 1_0-694004--218--UNKNOWN +>parentmass 366.958492691864 +>charge 1 +>rt 461.815000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +366.958492691864 3703.921142578125 +>ms1peaks +52.005496386189 2738.622558593750 +53.013522862396 13891.174804687500 +53.850363537980 1464.000000000000 +54.009260084007 336400.468750000000 +55.005903794519 5511.014648437500 +55.010643924211 6241.218261718750 +55.054192408251 1967.229614257812 +55.934141177867 4482.000000000000 +56.049452188079 2198.212646484375 +56.941833904715 1792.011962890625 +59.049520182802 50016.500000000000 +60.044372488695 9947.728515625000 +61.039230172717 1531.269287109375 +63.997723154775 4503.361328125000 +64.004640290386 4503.543945312500 +67.029231386141 1343.709472656250 +68.011491758230 27131.720703125000 +68.993563170451 10725.029296875000 +69.044343896055 13633.430664062500 +72.936417222659 1981.698974609375 +73.064445763175 1738.000000000000 +76.486394770203 1838.000000000000 +79.020585693496 15476.331054687500 +80.049006763762 13098.345703125000 +81.936977066056 6700.097167968750 +82.996241956981 7046.000000000000 +87.054126951141 1509.432250976562 +90.489226124406 1310.000000000000 +95.952458919171 1959.000000000000 +97.967820753592 5628.000000000000 +100.075023872587 1364.000000000000 +102.090717931479 1512.646362304688 +113.962912260353 1701.000000000000 +114.090473225831 9595.784179687500 +118.084972131069 5075.000000000000 +122.095259772197 3214.795898437500 +122.962712406475 8085.558593750000 +123.091005423741 1581.128295898438 +130.158069734033 1299.000000000000 +136.020125332517 1746.000000000000 +136.111770067837 1350.000000000000 +141.112230336779 1334.011352539062 +141.957521382107 12383.362304687500 +147.090293807929 2791.311035156250 +149.022412837668 4677.629882812500 +151.096077644405 2393.391845703125 +151.110831801713 2600.533691406250 +155.069364216762 1716.784790039062 +155.105050133083 2456.074218750000 +155.973083245733 3283.000000000000 +158.153038315973 9929.551757812500 +159.116421722834 1485.743652343750 +159.137129674197 2772.861083984375 +159.155141577333 2776.414794921875 +161.095320875659 1573.519287109375 +164.142473682751 1421.000000000000 +167.105463158741 2212.506103515625 +170.094814045000 2688.513916015625 +171.139657517471 1933.299194335938 +172.954638688149 6057.178710937500 +173.079774514200 5662.676757812500 +174.951964559785 3863.824218750000 +178.158707978837 1362.208984375000 +179.104674624533 1800.117431640625 +182.961013319998 2148.433837890625 +182.981707985947 1468.088867187500 +183.098317402296 1261.667114257812 +186.220433974755 1479.000000000000 +194.116224184204 2789.894531250000 +195.102887218782 1287.299560546875 +195.121447766424 1610.618530273438 +198.184723560877 1941.571533203125 +201.194876036569 2167.000000000000 +217.106462800418 22947.000000000000 +218.108801330897 2636.000000000000 +219.097893861214 1342.000000000000 +227.126933149165 5004.911621093750 +228.195484069757 1305.000000000000 +239.088370009945 3960.000000000000 +240.460237390798 1427.000000000000 +242.283564093719 1830.000000000000 +246.861247027643 1938.000000000000 +249.108853260228 1800.000000000000 +249.183558440427 1294.426879882812 +250.999684342695 2698.000000000000 +251.183554091458 1477.002685546875 +254.083019303799 6058.000000000000 +279.093247230272 1966.815429687500 +281.049869935059 1670.000000000000 +294.135274654822 1900.000000000000 +304.112614798856 1293.000000000000 +327.006716420204 2586.074218750000 +329.003944250381 3053.000000000000 +330.205270226645 1449.000000000000 +364.961495290551 3901.000000000000 +366.958492691864 3703.921142578125 +381.808124091571 1803.154785156250 +382.974810010956 492494.000000000000 +383.797344688783 1758.993530273438 +383.973947678520 67017.000000000000 +384.971945599632 472104.000000000000 +385.971269588019 67474.414062500000 +386.966647061682 144016.781250000000 +387.969459859037 22293.000000000000 +388.966113727801 20172.000000000000 +389.970234999273 3733.000000000000 +390.977642286943 3807.000000000000 +395.362814968665 3505.000000000000 +404.954373005418 29709.000000000000 +405.957605814404 4596.000000000000 +406.951351507527 29748.000000000000 +407.954360642682 5225.000000000000 +408.947993467304 9999.000000000000 +409.950364620524 1525.000000000000 +410.945267428678 1352.000000000000 +420.926691374900 1390.664306640625 +422.923874232736 1486.000000000000 +428.029208662762 3986.000000000000 +430.025947746618 3948.657226562500 +445.119162074542 2228.000000000000 +482.896752691829 3090.000000000000 +484.893432613963 3026.647216796875 +502.291152978353 2267.953857421875 +505.851682314566 3196.000000000000 +520.337904050717 1518.000000000000 +522.878625367766 1435.000000000000 +524.369325390993 2192.000000000000 +525.894221085136 1272.042236328125 +536.163484623680 5334.000000000000 +537.164113274746 2751.000000000000 +538.162435462394 1972.000000000000 +542.322553871971 1723.000000000000 +544.338869478628 2967.000000000000 +546.915820439704 2265.156250000000 +610.181290021850 2226.000000000000 +770.944784003773 2430.996093750000 +771.944730947705 1288.000000000000 +772.941688134604 4659.000000000000 +773.942987828510 2027.000000000000 +774.938540423107 4303.000000000000 +776.937402889811 1926.000000000000 +786.918769211300 6319.000000000000 +787.922182773427 2038.134521484375 +788.915957873075 13314.000000000000 +789.918553365845 4066.000000000000 +790.913325395940 10740.000000000000 +791.915649574834 3424.000000000000 +792.909829405629 4948.000000000000 +793.913410948963 1431.000000000000 +794.907848876695 1317.702636718750 +>ms2peaks +##n_id sample=1 period=1 cycle=694 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=694 experiment=4_0 +##scan 218 +##specref ms_run[1]:sample=1 period=1 cycle=694 experiment=4 +270.858538988484 13.000000000000 +337.128286506106 13.000000000000 +366.966168219533 30.000000000000 +>compound 1_0-694005--219--UNKNOWN +>parentmass 384.971945599632 +>charge 1 +>rt 461.815000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +384.971945599632 472104.000000000000 +>ms1peaks +52.005496386189 2738.622558593750 +53.013522862396 13891.174804687500 +53.850363537980 1464.000000000000 +54.009260084007 336400.468750000000 +55.005903794519 5511.014648437500 +55.010643924211 6241.218261718750 +55.054192408251 1967.229614257812 +55.934141177867 4482.000000000000 +56.049452188079 2198.212646484375 +56.941833904715 1792.011962890625 +59.049520182802 50016.500000000000 +60.044372488695 9947.728515625000 +61.039230172717 1531.269287109375 +63.997723154775 4503.361328125000 +64.004640290386 4503.543945312500 +67.029231386141 1343.709472656250 +68.011491758230 27131.720703125000 +68.993563170451 10725.029296875000 +69.044343896055 13633.430664062500 +72.936417222659 1981.698974609375 +73.064445763175 1738.000000000000 +76.486394770203 1838.000000000000 +79.020585693496 15476.331054687500 +80.049006763762 13098.345703125000 +81.936977066056 6700.097167968750 +82.996241956981 7046.000000000000 +87.054126951141 1509.432250976562 +90.489226124406 1310.000000000000 +95.952458919171 1959.000000000000 +97.967820753592 5628.000000000000 +100.075023872587 1364.000000000000 +102.090717931479 1512.646362304688 +113.962912260353 1701.000000000000 +114.090473225831 9595.784179687500 +118.084972131069 5075.000000000000 +122.095259772197 3214.795898437500 +122.962712406475 8085.558593750000 +123.091005423741 1581.128295898438 +130.158069734033 1299.000000000000 +136.020125332517 1746.000000000000 +136.111770067837 1350.000000000000 +141.112230336779 1334.011352539062 +141.957521382107 12383.362304687500 +147.090293807929 2791.311035156250 +149.022412837668 4677.629882812500 +151.096077644405 2393.391845703125 +151.110831801713 2600.533691406250 +155.069364216762 1716.784790039062 +155.105050133083 2456.074218750000 +155.973083245733 3283.000000000000 +158.153038315973 9929.551757812500 +159.116421722834 1485.743652343750 +159.137129674197 2772.861083984375 +159.155141577333 2776.414794921875 +161.095320875659 1573.519287109375 +164.142473682751 1421.000000000000 +167.105463158741 2212.506103515625 +170.094814045000 2688.513916015625 +171.139657517471 1933.299194335938 +172.954638688149 6057.178710937500 +173.079774514200 5662.676757812500 +174.951964559785 3863.824218750000 +178.158707978837 1362.208984375000 +179.104674624533 1800.117431640625 +182.961013319998 2148.433837890625 +182.981707985947 1468.088867187500 +183.098317402296 1261.667114257812 +186.220433974755 1479.000000000000 +194.116224184204 2789.894531250000 +195.102887218782 1287.299560546875 +195.121447766424 1610.618530273438 +198.184723560877 1941.571533203125 +201.194876036569 2167.000000000000 +217.106462800418 22947.000000000000 +218.108801330897 2636.000000000000 +219.097893861214 1342.000000000000 +227.126933149165 5004.911621093750 +228.195484069757 1305.000000000000 +239.088370009945 3960.000000000000 +240.460237390798 1427.000000000000 +242.283564093719 1830.000000000000 +246.861247027643 1938.000000000000 +249.108853260228 1800.000000000000 +249.183558440427 1294.426879882812 +250.999684342695 2698.000000000000 +251.183554091458 1477.002685546875 +254.083019303799 6058.000000000000 +279.093247230272 1966.815429687500 +281.049869935059 1670.000000000000 +294.135274654822 1900.000000000000 +304.112614798856 1293.000000000000 +327.006716420204 2586.074218750000 +329.003944250381 3053.000000000000 +330.205270226645 1449.000000000000 +364.961495290551 3901.000000000000 +366.958492691864 3703.921142578125 +381.808124091571 1803.154785156250 +382.974810010956 492494.000000000000 +383.797344688783 1758.993530273438 +383.973947678520 67017.000000000000 +384.971945599632 472104.000000000000 +385.971269588019 67474.414062500000 +386.966647061682 144016.781250000000 +387.969459859037 22293.000000000000 +388.966113727801 20172.000000000000 +389.970234999273 3733.000000000000 +390.977642286943 3807.000000000000 +395.362814968665 3505.000000000000 +404.954373005418 29709.000000000000 +405.957605814404 4596.000000000000 +406.951351507527 29748.000000000000 +407.954360642682 5225.000000000000 +408.947993467304 9999.000000000000 +409.950364620524 1525.000000000000 +410.945267428678 1352.000000000000 +420.926691374900 1390.664306640625 +422.923874232736 1486.000000000000 +428.029208662762 3986.000000000000 +430.025947746618 3948.657226562500 +445.119162074542 2228.000000000000 +482.896752691829 3090.000000000000 +484.893432613963 3026.647216796875 +502.291152978353 2267.953857421875 +505.851682314566 3196.000000000000 +520.337904050717 1518.000000000000 +522.878625367766 1435.000000000000 +524.369325390993 2192.000000000000 +525.894221085136 1272.042236328125 +536.163484623680 5334.000000000000 +537.164113274746 2751.000000000000 +538.162435462394 1972.000000000000 +542.322553871971 1723.000000000000 +544.338869478628 2967.000000000000 +546.915820439704 2265.156250000000 +610.181290021850 2226.000000000000 +770.944784003773 2430.996093750000 +771.944730947705 1288.000000000000 +772.941688134604 4659.000000000000 +773.942987828510 2027.000000000000 +774.938540423107 4303.000000000000 +776.937402889811 1926.000000000000 +786.918769211300 6319.000000000000 +787.922182773427 2038.134521484375 +788.915957873075 13314.000000000000 +789.918553365845 4066.000000000000 +790.913325395940 10740.000000000000 +791.915649574834 3424.000000000000 +792.909829405629 4948.000000000000 +793.913410948963 1431.000000000000 +794.907848876695 1317.702636718750 +>ms2peaks +##n_id sample=1 period=1 cycle=694 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=694 experiment=5_0 +##scan 219 +##specref ms_run[1]:sample=1 period=1 cycle=694 experiment=5 +74.013908031535 105.000000000000 +74.024974444989 45.000000000000 +108.984365980255 362.000000000000 +110.980715838853 195.000000000000 +126.994003224023 45.000000000000 +138.022339318090 60.000000000000 +139.022909403716 45.000000000000 +144.960121741039 2871.000000000000 +144.988569209541 47.973838806152 +146.957474816141 5787.634277343750 +158.021219074746 75.000000000000 +159.028393125431 135.000000000000 +166.020805259383 45.000000000000 +172.433988104383 165.000000000000 +172.955247483705 31868.570312500000 +173.706320324889 45.000000000000 +173.959042440242 375.000000000000 +173.991173186960 195.000000000000 +174.397310118098 55.971485137939 +174.427401309007 285.000000000000 +174.953081519004 64993.000000000000 +175.556666120507 75.000000000000 +175.578393674887 61.759723663330 +175.684746459907 45.000000000000 +175.700777042167 60.000000000000 +175.955488657803 90.000000000000 +175.987708932959 90.000000000000 +193.997571805663 2756.000000000000 +195.969414811496 347.602355957031 +195.994543334412 1883.000000000000 +212.008003973928 105.000000000000 +214.008401040785 45.000000000000 +366.959087219136 3789.000000000000 +384.969476984780 2002.000000000000 +385.971986600589 60.000000000000 +>compound 1_0-694006--220--UNKNOWN +>parentmass 404.954373005418 +>charge 1 +>rt 461.815000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +404.954373005418 29709.000000000000 +405.957605814404 4596.000000000000 +>ms1peaks +52.005496386189 2738.622558593750 +53.013522862396 13891.174804687500 +53.850363537980 1464.000000000000 +54.009260084007 336400.468750000000 +55.005903794519 5511.014648437500 +55.010643924211 6241.218261718750 +55.054192408251 1967.229614257812 +55.934141177867 4482.000000000000 +56.049452188079 2198.212646484375 +56.941833904715 1792.011962890625 +59.049520182802 50016.500000000000 +60.044372488695 9947.728515625000 +61.039230172717 1531.269287109375 +63.997723154775 4503.361328125000 +64.004640290386 4503.543945312500 +67.029231386141 1343.709472656250 +68.011491758230 27131.720703125000 +68.993563170451 10725.029296875000 +69.044343896055 13633.430664062500 +72.936417222659 1981.698974609375 +73.064445763175 1738.000000000000 +76.486394770203 1838.000000000000 +79.020585693496 15476.331054687500 +80.049006763762 13098.345703125000 +81.936977066056 6700.097167968750 +82.996241956981 7046.000000000000 +87.054126951141 1509.432250976562 +90.489226124406 1310.000000000000 +95.952458919171 1959.000000000000 +97.967820753592 5628.000000000000 +100.075023872587 1364.000000000000 +102.090717931479 1512.646362304688 +113.962912260353 1701.000000000000 +114.090473225831 9595.784179687500 +118.084972131069 5075.000000000000 +122.095259772197 3214.795898437500 +122.962712406475 8085.558593750000 +123.091005423741 1581.128295898438 +130.158069734033 1299.000000000000 +136.020125332517 1746.000000000000 +136.111770067837 1350.000000000000 +141.112230336779 1334.011352539062 +141.957521382107 12383.362304687500 +147.090293807929 2791.311035156250 +149.022412837668 4677.629882812500 +151.096077644405 2393.391845703125 +151.110831801713 2600.533691406250 +155.069364216762 1716.784790039062 +155.105050133083 2456.074218750000 +155.973083245733 3283.000000000000 +158.153038315973 9929.551757812500 +159.116421722834 1485.743652343750 +159.137129674197 2772.861083984375 +159.155141577333 2776.414794921875 +161.095320875659 1573.519287109375 +164.142473682751 1421.000000000000 +167.105463158741 2212.506103515625 +170.094814045000 2688.513916015625 +171.139657517471 1933.299194335938 +172.954638688149 6057.178710937500 +173.079774514200 5662.676757812500 +174.951964559785 3863.824218750000 +178.158707978837 1362.208984375000 +179.104674624533 1800.117431640625 +182.961013319998 2148.433837890625 +182.981707985947 1468.088867187500 +183.098317402296 1261.667114257812 +186.220433974755 1479.000000000000 +194.116224184204 2789.894531250000 +195.102887218782 1287.299560546875 +195.121447766424 1610.618530273438 +198.184723560877 1941.571533203125 +201.194876036569 2167.000000000000 +217.106462800418 22947.000000000000 +218.108801330897 2636.000000000000 +219.097893861214 1342.000000000000 +227.126933149165 5004.911621093750 +228.195484069757 1305.000000000000 +239.088370009945 3960.000000000000 +240.460237390798 1427.000000000000 +242.283564093719 1830.000000000000 +246.861247027643 1938.000000000000 +249.108853260228 1800.000000000000 +249.183558440427 1294.426879882812 +250.999684342695 2698.000000000000 +251.183554091458 1477.002685546875 +254.083019303799 6058.000000000000 +279.093247230272 1966.815429687500 +281.049869935059 1670.000000000000 +294.135274654822 1900.000000000000 +304.112614798856 1293.000000000000 +327.006716420204 2586.074218750000 +329.003944250381 3053.000000000000 +330.205270226645 1449.000000000000 +364.961495290551 3901.000000000000 +366.958492691864 3703.921142578125 +381.808124091571 1803.154785156250 +382.974810010956 492494.000000000000 +383.797344688783 1758.993530273438 +383.973947678520 67017.000000000000 +384.971945599632 472104.000000000000 +385.971269588019 67474.414062500000 +386.966647061682 144016.781250000000 +387.969459859037 22293.000000000000 +388.966113727801 20172.000000000000 +389.970234999273 3733.000000000000 +390.977642286943 3807.000000000000 +395.362814968665 3505.000000000000 +404.954373005418 29709.000000000000 +405.957605814404 4596.000000000000 +406.951351507527 29748.000000000000 +407.954360642682 5225.000000000000 +408.947993467304 9999.000000000000 +409.950364620524 1525.000000000000 +410.945267428678 1352.000000000000 +420.926691374900 1390.664306640625 +422.923874232736 1486.000000000000 +428.029208662762 3986.000000000000 +430.025947746618 3948.657226562500 +445.119162074542 2228.000000000000 +482.896752691829 3090.000000000000 +484.893432613963 3026.647216796875 +502.291152978353 2267.953857421875 +505.851682314566 3196.000000000000 +520.337904050717 1518.000000000000 +522.878625367766 1435.000000000000 +524.369325390993 2192.000000000000 +525.894221085136 1272.042236328125 +536.163484623680 5334.000000000000 +537.164113274746 2751.000000000000 +538.162435462394 1972.000000000000 +542.322553871971 1723.000000000000 +544.338869478628 2967.000000000000 +546.915820439704 2265.156250000000 +610.181290021850 2226.000000000000 +770.944784003773 2430.996093750000 +771.944730947705 1288.000000000000 +772.941688134604 4659.000000000000 +773.942987828510 2027.000000000000 +774.938540423107 4303.000000000000 +776.937402889811 1926.000000000000 +786.918769211300 6319.000000000000 +787.922182773427 2038.134521484375 +788.915957873075 13314.000000000000 +789.918553365845 4066.000000000000 +790.913325395940 10740.000000000000 +791.915649574834 3424.000000000000 +792.909829405629 4948.000000000000 +793.913410948963 1431.000000000000 +794.907848876695 1317.702636718750 +>ms2peaks +##n_id sample=1 period=1 cycle=694 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=694 experiment=6_0 +##scan 220 +##specref ms_run[1]:sample=1 period=1 cycle=694 experiment=6 +172.953591689433 135.000000000000 +174.962763081026 120.000000000000 +404.956226562260 45.000000000000 +>compound 1_0-694007--221--UNKNOWN +>parentmass 428.029208662762 +>charge 1 +>rt 461.815000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +428.029208662762 3986.000000000000 +>ms1peaks +52.005496386189 2738.622558593750 +53.013522862396 13891.174804687500 +53.850363537980 1464.000000000000 +54.009260084007 336400.468750000000 +55.005903794519 5511.014648437500 +55.010643924211 6241.218261718750 +55.054192408251 1967.229614257812 +55.934141177867 4482.000000000000 +56.049452188079 2198.212646484375 +56.941833904715 1792.011962890625 +59.049520182802 50016.500000000000 +60.044372488695 9947.728515625000 +61.039230172717 1531.269287109375 +63.997723154775 4503.361328125000 +64.004640290386 4503.543945312500 +67.029231386141 1343.709472656250 +68.011491758230 27131.720703125000 +68.993563170451 10725.029296875000 +69.044343896055 13633.430664062500 +72.936417222659 1981.698974609375 +73.064445763175 1738.000000000000 +76.486394770203 1838.000000000000 +79.020585693496 15476.331054687500 +80.049006763762 13098.345703125000 +81.936977066056 6700.097167968750 +82.996241956981 7046.000000000000 +87.054126951141 1509.432250976562 +90.489226124406 1310.000000000000 +95.952458919171 1959.000000000000 +97.967820753592 5628.000000000000 +100.075023872587 1364.000000000000 +102.090717931479 1512.646362304688 +113.962912260353 1701.000000000000 +114.090473225831 9595.784179687500 +118.084972131069 5075.000000000000 +122.095259772197 3214.795898437500 +122.962712406475 8085.558593750000 +123.091005423741 1581.128295898438 +130.158069734033 1299.000000000000 +136.020125332517 1746.000000000000 +136.111770067837 1350.000000000000 +141.112230336779 1334.011352539062 +141.957521382107 12383.362304687500 +147.090293807929 2791.311035156250 +149.022412837668 4677.629882812500 +151.096077644405 2393.391845703125 +151.110831801713 2600.533691406250 +155.069364216762 1716.784790039062 +155.105050133083 2456.074218750000 +155.973083245733 3283.000000000000 +158.153038315973 9929.551757812500 +159.116421722834 1485.743652343750 +159.137129674197 2772.861083984375 +159.155141577333 2776.414794921875 +161.095320875659 1573.519287109375 +164.142473682751 1421.000000000000 +167.105463158741 2212.506103515625 +170.094814045000 2688.513916015625 +171.139657517471 1933.299194335938 +172.954638688149 6057.178710937500 +173.079774514200 5662.676757812500 +174.951964559785 3863.824218750000 +178.158707978837 1362.208984375000 +179.104674624533 1800.117431640625 +182.961013319998 2148.433837890625 +182.981707985947 1468.088867187500 +183.098317402296 1261.667114257812 +186.220433974755 1479.000000000000 +194.116224184204 2789.894531250000 +195.102887218782 1287.299560546875 +195.121447766424 1610.618530273438 +198.184723560877 1941.571533203125 +201.194876036569 2167.000000000000 +217.106462800418 22947.000000000000 +218.108801330897 2636.000000000000 +219.097893861214 1342.000000000000 +227.126933149165 5004.911621093750 +228.195484069757 1305.000000000000 +239.088370009945 3960.000000000000 +240.460237390798 1427.000000000000 +242.283564093719 1830.000000000000 +246.861247027643 1938.000000000000 +249.108853260228 1800.000000000000 +249.183558440427 1294.426879882812 +250.999684342695 2698.000000000000 +251.183554091458 1477.002685546875 +254.083019303799 6058.000000000000 +279.093247230272 1966.815429687500 +281.049869935059 1670.000000000000 +294.135274654822 1900.000000000000 +304.112614798856 1293.000000000000 +327.006716420204 2586.074218750000 +329.003944250381 3053.000000000000 +330.205270226645 1449.000000000000 +364.961495290551 3901.000000000000 +366.958492691864 3703.921142578125 +381.808124091571 1803.154785156250 +382.974810010956 492494.000000000000 +383.797344688783 1758.993530273438 +383.973947678520 67017.000000000000 +384.971945599632 472104.000000000000 +385.971269588019 67474.414062500000 +386.966647061682 144016.781250000000 +387.969459859037 22293.000000000000 +388.966113727801 20172.000000000000 +389.970234999273 3733.000000000000 +390.977642286943 3807.000000000000 +395.362814968665 3505.000000000000 +404.954373005418 29709.000000000000 +405.957605814404 4596.000000000000 +406.951351507527 29748.000000000000 +407.954360642682 5225.000000000000 +408.947993467304 9999.000000000000 +409.950364620524 1525.000000000000 +410.945267428678 1352.000000000000 +420.926691374900 1390.664306640625 +422.923874232736 1486.000000000000 +428.029208662762 3986.000000000000 +430.025947746618 3948.657226562500 +445.119162074542 2228.000000000000 +482.896752691829 3090.000000000000 +484.893432613963 3026.647216796875 +502.291152978353 2267.953857421875 +505.851682314566 3196.000000000000 +520.337904050717 1518.000000000000 +522.878625367766 1435.000000000000 +524.369325390993 2192.000000000000 +525.894221085136 1272.042236328125 +536.163484623680 5334.000000000000 +537.164113274746 2751.000000000000 +538.162435462394 1972.000000000000 +542.322553871971 1723.000000000000 +544.338869478628 2967.000000000000 +546.915820439704 2265.156250000000 +610.181290021850 2226.000000000000 +770.944784003773 2430.996093750000 +771.944730947705 1288.000000000000 +772.941688134604 4659.000000000000 +773.942987828510 2027.000000000000 +774.938540423107 4303.000000000000 +776.937402889811 1926.000000000000 +786.918769211300 6319.000000000000 +787.922182773427 2038.134521484375 +788.915957873075 13314.000000000000 +789.918553365845 4066.000000000000 +790.913325395940 10740.000000000000 +791.915649574834 3424.000000000000 +792.909829405629 4948.000000000000 +793.913410948963 1431.000000000000 +794.907848876695 1317.702636718750 +>ms2peaks +##n_id sample=1 period=1 cycle=694 experiment=7 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=694 experiment=7_0 +##scan 221 +##specref ms_run[1]:sample=1 period=1 cycle=694 experiment=7 +144.962295711945 105.000000000000 +172.955161606059 3413.000000000000 +174.953011735033 30.000000000000 +193.997280879771 90.000000000000 +364.963878737869 240.000000000000 +382.972606675887 651.000000000000 +>compound 1_0-694008--222--UNKNOWN +>parentmass 774.938540423107 +>charge 1 +>rt 461.815000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +774.938540423107 4303.000000000000 +>ms1peaks +52.005496386189 2738.622558593750 +53.013522862396 13891.174804687500 +53.850363537980 1464.000000000000 +54.009260084007 336400.468750000000 +55.005903794519 5511.014648437500 +55.010643924211 6241.218261718750 +55.054192408251 1967.229614257812 +55.934141177867 4482.000000000000 +56.049452188079 2198.212646484375 +56.941833904715 1792.011962890625 +59.049520182802 50016.500000000000 +60.044372488695 9947.728515625000 +61.039230172717 1531.269287109375 +63.997723154775 4503.361328125000 +64.004640290386 4503.543945312500 +67.029231386141 1343.709472656250 +68.011491758230 27131.720703125000 +68.993563170451 10725.029296875000 +69.044343896055 13633.430664062500 +72.936417222659 1981.698974609375 +73.064445763175 1738.000000000000 +76.486394770203 1838.000000000000 +79.020585693496 15476.331054687500 +80.049006763762 13098.345703125000 +81.936977066056 6700.097167968750 +82.996241956981 7046.000000000000 +87.054126951141 1509.432250976562 +90.489226124406 1310.000000000000 +95.952458919171 1959.000000000000 +97.967820753592 5628.000000000000 +100.075023872587 1364.000000000000 +102.090717931479 1512.646362304688 +113.962912260353 1701.000000000000 +114.090473225831 9595.784179687500 +118.084972131069 5075.000000000000 +122.095259772197 3214.795898437500 +122.962712406475 8085.558593750000 +123.091005423741 1581.128295898438 +130.158069734033 1299.000000000000 +136.020125332517 1746.000000000000 +136.111770067837 1350.000000000000 +141.112230336779 1334.011352539062 +141.957521382107 12383.362304687500 +147.090293807929 2791.311035156250 +149.022412837668 4677.629882812500 +151.096077644405 2393.391845703125 +151.110831801713 2600.533691406250 +155.069364216762 1716.784790039062 +155.105050133083 2456.074218750000 +155.973083245733 3283.000000000000 +158.153038315973 9929.551757812500 +159.116421722834 1485.743652343750 +159.137129674197 2772.861083984375 +159.155141577333 2776.414794921875 +161.095320875659 1573.519287109375 +164.142473682751 1421.000000000000 +167.105463158741 2212.506103515625 +170.094814045000 2688.513916015625 +171.139657517471 1933.299194335938 +172.954638688149 6057.178710937500 +173.079774514200 5662.676757812500 +174.951964559785 3863.824218750000 +178.158707978837 1362.208984375000 +179.104674624533 1800.117431640625 +182.961013319998 2148.433837890625 +182.981707985947 1468.088867187500 +183.098317402296 1261.667114257812 +186.220433974755 1479.000000000000 +194.116224184204 2789.894531250000 +195.102887218782 1287.299560546875 +195.121447766424 1610.618530273438 +198.184723560877 1941.571533203125 +201.194876036569 2167.000000000000 +217.106462800418 22947.000000000000 +218.108801330897 2636.000000000000 +219.097893861214 1342.000000000000 +227.126933149165 5004.911621093750 +228.195484069757 1305.000000000000 +239.088370009945 3960.000000000000 +240.460237390798 1427.000000000000 +242.283564093719 1830.000000000000 +246.861247027643 1938.000000000000 +249.108853260228 1800.000000000000 +249.183558440427 1294.426879882812 +250.999684342695 2698.000000000000 +251.183554091458 1477.002685546875 +254.083019303799 6058.000000000000 +279.093247230272 1966.815429687500 +281.049869935059 1670.000000000000 +294.135274654822 1900.000000000000 +304.112614798856 1293.000000000000 +327.006716420204 2586.074218750000 +329.003944250381 3053.000000000000 +330.205270226645 1449.000000000000 +364.961495290551 3901.000000000000 +366.958492691864 3703.921142578125 +381.808124091571 1803.154785156250 +382.974810010956 492494.000000000000 +383.797344688783 1758.993530273438 +383.973947678520 67017.000000000000 +384.971945599632 472104.000000000000 +385.971269588019 67474.414062500000 +386.966647061682 144016.781250000000 +387.969459859037 22293.000000000000 +388.966113727801 20172.000000000000 +389.970234999273 3733.000000000000 +390.977642286943 3807.000000000000 +395.362814968665 3505.000000000000 +404.954373005418 29709.000000000000 +405.957605814404 4596.000000000000 +406.951351507527 29748.000000000000 +407.954360642682 5225.000000000000 +408.947993467304 9999.000000000000 +409.950364620524 1525.000000000000 +410.945267428678 1352.000000000000 +420.926691374900 1390.664306640625 +422.923874232736 1486.000000000000 +428.029208662762 3986.000000000000 +430.025947746618 3948.657226562500 +445.119162074542 2228.000000000000 +482.896752691829 3090.000000000000 +484.893432613963 3026.647216796875 +502.291152978353 2267.953857421875 +505.851682314566 3196.000000000000 +520.337904050717 1518.000000000000 +522.878625367766 1435.000000000000 +524.369325390993 2192.000000000000 +525.894221085136 1272.042236328125 +536.163484623680 5334.000000000000 +537.164113274746 2751.000000000000 +538.162435462394 1972.000000000000 +542.322553871971 1723.000000000000 +544.338869478628 2967.000000000000 +546.915820439704 2265.156250000000 +610.181290021850 2226.000000000000 +770.944784003773 2430.996093750000 +771.944730947705 1288.000000000000 +772.941688134604 4659.000000000000 +773.942987828510 2027.000000000000 +774.938540423107 4303.000000000000 +776.937402889811 1926.000000000000 +786.918769211300 6319.000000000000 +787.922182773427 2038.134521484375 +788.915957873075 13314.000000000000 +789.918553365845 4066.000000000000 +790.913325395940 10740.000000000000 +791.915649574834 3424.000000000000 +792.909829405629 4948.000000000000 +793.913410948963 1431.000000000000 +794.907848876695 1317.702636718750 +>ms2peaks +##n_id sample=1 period=1 cycle=694 experiment=8 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=694 experiment=8_0 +##scan 222 +##specref ms_run[1]:sample=1 period=1 cycle=694 experiment=8 +172.955539734377 30.000000000000 +326.988875976164 13.000000000000 +388.982886081521 315.000000000000 +389.977518981018 45.000000000000 +390.978059863685 601.000000000000 +392.870619900711 13.000000000000 +392.973080047546 150.000000000000 +396.453277208819 13.000000000000 +682.418944551985 13.000000000000 +>compound 1_0-694009--223--UNKNOWN +>parentmass 788.915957873075 +>charge 1 +>rt 461.815000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +788.915957873075 13314.000000000000 +789.918553365845 4066.000000000000 +>ms1peaks +52.005496386189 2738.622558593750 +53.013522862396 13891.174804687500 +53.850363537980 1464.000000000000 +54.009260084007 336400.468750000000 +55.005903794519 5511.014648437500 +55.010643924211 6241.218261718750 +55.054192408251 1967.229614257812 +55.934141177867 4482.000000000000 +56.049452188079 2198.212646484375 +56.941833904715 1792.011962890625 +59.049520182802 50016.500000000000 +60.044372488695 9947.728515625000 +61.039230172717 1531.269287109375 +63.997723154775 4503.361328125000 +64.004640290386 4503.543945312500 +67.029231386141 1343.709472656250 +68.011491758230 27131.720703125000 +68.993563170451 10725.029296875000 +69.044343896055 13633.430664062500 +72.936417222659 1981.698974609375 +73.064445763175 1738.000000000000 +76.486394770203 1838.000000000000 +79.020585693496 15476.331054687500 +80.049006763762 13098.345703125000 +81.936977066056 6700.097167968750 +82.996241956981 7046.000000000000 +87.054126951141 1509.432250976562 +90.489226124406 1310.000000000000 +95.952458919171 1959.000000000000 +97.967820753592 5628.000000000000 +100.075023872587 1364.000000000000 +102.090717931479 1512.646362304688 +113.962912260353 1701.000000000000 +114.090473225831 9595.784179687500 +118.084972131069 5075.000000000000 +122.095259772197 3214.795898437500 +122.962712406475 8085.558593750000 +123.091005423741 1581.128295898438 +130.158069734033 1299.000000000000 +136.020125332517 1746.000000000000 +136.111770067837 1350.000000000000 +141.112230336779 1334.011352539062 +141.957521382107 12383.362304687500 +147.090293807929 2791.311035156250 +149.022412837668 4677.629882812500 +151.096077644405 2393.391845703125 +151.110831801713 2600.533691406250 +155.069364216762 1716.784790039062 +155.105050133083 2456.074218750000 +155.973083245733 3283.000000000000 +158.153038315973 9929.551757812500 +159.116421722834 1485.743652343750 +159.137129674197 2772.861083984375 +159.155141577333 2776.414794921875 +161.095320875659 1573.519287109375 +164.142473682751 1421.000000000000 +167.105463158741 2212.506103515625 +170.094814045000 2688.513916015625 +171.139657517471 1933.299194335938 +172.954638688149 6057.178710937500 +173.079774514200 5662.676757812500 +174.951964559785 3863.824218750000 +178.158707978837 1362.208984375000 +179.104674624533 1800.117431640625 +182.961013319998 2148.433837890625 +182.981707985947 1468.088867187500 +183.098317402296 1261.667114257812 +186.220433974755 1479.000000000000 +194.116224184204 2789.894531250000 +195.102887218782 1287.299560546875 +195.121447766424 1610.618530273438 +198.184723560877 1941.571533203125 +201.194876036569 2167.000000000000 +217.106462800418 22947.000000000000 +218.108801330897 2636.000000000000 +219.097893861214 1342.000000000000 +227.126933149165 5004.911621093750 +228.195484069757 1305.000000000000 +239.088370009945 3960.000000000000 +240.460237390798 1427.000000000000 +242.283564093719 1830.000000000000 +246.861247027643 1938.000000000000 +249.108853260228 1800.000000000000 +249.183558440427 1294.426879882812 +250.999684342695 2698.000000000000 +251.183554091458 1477.002685546875 +254.083019303799 6058.000000000000 +279.093247230272 1966.815429687500 +281.049869935059 1670.000000000000 +294.135274654822 1900.000000000000 +304.112614798856 1293.000000000000 +327.006716420204 2586.074218750000 +329.003944250381 3053.000000000000 +330.205270226645 1449.000000000000 +364.961495290551 3901.000000000000 +366.958492691864 3703.921142578125 +381.808124091571 1803.154785156250 +382.974810010956 492494.000000000000 +383.797344688783 1758.993530273438 +383.973947678520 67017.000000000000 +384.971945599632 472104.000000000000 +385.971269588019 67474.414062500000 +386.966647061682 144016.781250000000 +387.969459859037 22293.000000000000 +388.966113727801 20172.000000000000 +389.970234999273 3733.000000000000 +390.977642286943 3807.000000000000 +395.362814968665 3505.000000000000 +404.954373005418 29709.000000000000 +405.957605814404 4596.000000000000 +406.951351507527 29748.000000000000 +407.954360642682 5225.000000000000 +408.947993467304 9999.000000000000 +409.950364620524 1525.000000000000 +410.945267428678 1352.000000000000 +420.926691374900 1390.664306640625 +422.923874232736 1486.000000000000 +428.029208662762 3986.000000000000 +430.025947746618 3948.657226562500 +445.119162074542 2228.000000000000 +482.896752691829 3090.000000000000 +484.893432613963 3026.647216796875 +502.291152978353 2267.953857421875 +505.851682314566 3196.000000000000 +520.337904050717 1518.000000000000 +522.878625367766 1435.000000000000 +524.369325390993 2192.000000000000 +525.894221085136 1272.042236328125 +536.163484623680 5334.000000000000 +537.164113274746 2751.000000000000 +538.162435462394 1972.000000000000 +542.322553871971 1723.000000000000 +544.338869478628 2967.000000000000 +546.915820439704 2265.156250000000 +610.181290021850 2226.000000000000 +770.944784003773 2430.996093750000 +771.944730947705 1288.000000000000 +772.941688134604 4659.000000000000 +773.942987828510 2027.000000000000 +774.938540423107 4303.000000000000 +776.937402889811 1926.000000000000 +786.918769211300 6319.000000000000 +787.922182773427 2038.134521484375 +788.915957873075 13314.000000000000 +789.918553365845 4066.000000000000 +790.913325395940 10740.000000000000 +791.915649574834 3424.000000000000 +792.909829405629 4948.000000000000 +793.913410948963 1431.000000000000 +794.907848876695 1317.702636718750 +>ms2peaks +##n_id sample=1 period=1 cycle=694 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=694 experiment=9_0 +##scan 223 +##specref ms_run[1]:sample=1 period=1 cycle=694 experiment=9 +404.954519975829 1117.000000000000 +406.950867538201 1041.000000000000 +>compound 1_0-695002--225--UNKNOWN +>parentmass 201.195027022045 +>charge 1 +>rt 462.742999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +201.195027022045 1910.948486328125 +>ms1peaks +52.005618708163 2539.747558593750 +53.013486822272 13870.398437500000 +53.849944651813 1321.311035156250 +54.009272542510 334364.000000000000 +55.006127578305 5684.579589843750 +55.011035183427 6294.277343750000 +55.054254765161 2061.134521484375 +55.933991415018 4820.544433593750 +56.941982259074 2008.753662109375 +59.049476031136 51717.343750000000 +60.044321443571 9808.684570312500 +61.039396177051 1522.640869140625 +63.997565592724 3448.600830078125 +64.005341669020 4543.776367187500 +68.011420900213 27038.449218750000 +68.993536452237 10856.610351562500 +69.044604668417 14629.907226562500 +72.936743492854 2022.000000000000 +73.064665682287 1682.000000000000 +76.485998117314 2566.925537109375 +79.020810153532 14499.247070312500 +80.048959505883 11243.084960937500 +81.937003271508 7052.000000000000 +82.996378584159 7415.000000000000 +87.054410274312 1276.982299804688 +89.059441384010 1290.163085937500 +89.069900666859 1198.356201171875 +89.506331602098 1457.000000000000 +90.489270349598 1320.000000000000 +91.053039144063 1241.000000000000 +95.952000045968 1806.000000000000 +97.967902527377 5447.752441406250 +102.090774354133 1766.000000000000 +113.962757196604 1650.000000000000 +114.090773310880 10151.000000000000 +118.085066210903 5345.923828125000 +122.095268802673 3377.287353515625 +122.962949998137 8914.721679687500 +123.090601278155 1865.907714843750 +136.020056745687 1324.000000000000 +136.111180768789 1288.000000000000 +141.090426683848 1398.526123046875 +141.112288162622 1510.265380859375 +141.957469631101 11917.693359375000 +147.090463314067 2860.191894531250 +149.022264703314 4634.188964843750 +149.042470498621 2606.216308593750 +151.096122028864 2944.847167968750 +151.109971768966 3170.533447265625 +153.126958731814 1398.000000000000 +155.069195494974 1574.157714843750 +155.105813585424 2084.507812500000 +155.973150721688 3335.564697265625 +158.153053636015 9405.870117187500 +159.136711694066 4417.646972656250 +159.154174408709 3926.795898437500 +161.094961933921 1811.161621093750 +164.141679671164 1521.000000000000 +167.105480994164 1805.390991210938 +170.094958849897 2666.187255859375 +171.140223157200 1508.630004882812 +171.145093012937 1470.691528320312 +172.954512501044 4039.610107421875 +173.079845098747 6225.943847656250 +174.952094962470 2464.368408203125 +178.158215609086 1219.881103515625 +179.105154195399 2200.808349609375 +182.960806462890 2404.385253906250 +186.220809140277 1734.000000000000 +194.115098301689 2881.000000000000 +195.101256156374 1617.443847656250 +195.120951058554 2047.553222656250 +198.184414106878 2305.000000000000 +201.195027022045 1910.948486328125 +217.106230153979 23078.796875000000 +218.109437360227 2564.000000000000 +227.127499881482 2837.185058593750 +228.194792431648 1277.992065429688 +239.088418710570 4302.000000000000 +241.173994352825 1414.042846679688 +242.284258423543 1867.205322265625 +246.861863276034 1955.000000000000 +249.109420159783 1233.772827148438 +249.184418840075 1420.173461914062 +250.999381059341 2838.000000000000 +251.184140008138 1355.000000000000 +252.997300828765 1406.000000000000 +254.083492116056 10290.000000000000 +255.085997599377 1547.149658203125 +267.170893163247 1592.013427734375 +279.092005618883 2032.000000000000 +281.050092553984 1706.000000000000 +294.136138366080 4881.512207031250 +295.107895790988 1620.651123046875 +295.138015559195 1578.061157226562 +296.133166224229 1908.000000000000 +304.111051104519 1351.000000000000 +327.006886551663 2984.882812500000 +329.003473926885 3156.000000000000 +330.205676685503 1841.885498046875 +364.961111347940 2324.000000000000 +366.958514632517 2456.000000000000 +382.972867455598 293054.562500000000 +383.974219609669 42764.382812500000 +384.970213408863 286227.000000000000 +385.971399341694 43010.519531250000 +386.966578716896 89321.406250000000 +387.969876681798 14031.000000000000 +388.966592927417 13596.000000000000 +389.971378934425 2357.000000000000 +390.975968244903 3498.000000000000 +395.363328076942 13631.000000000000 +396.365159355422 3743.854492187500 +404.954536714556 21725.000000000000 +405.956113141092 3276.000000000000 +406.951284005894 20871.000000000000 +407.954147589098 2949.000000000000 +408.948148070172 6628.412109375000 +417.344524456584 1350.000000000000 +422.925037344315 1234.000000000000 +428.028844106844 3004.000000000000 +430.024809248533 3165.000000000000 +445.118500074341 2256.000000000000 +482.895568175952 1929.765625000000 +484.892948210892 1641.000000000000 +502.291275651964 2548.000000000000 +503.296040019046 1207.000000000000 +505.851455058887 3627.203857421875 +506.855739800274 1203.000000000000 +520.337332473137 1339.000000000000 +522.878375464311 1844.000000000000 +523.875819347577 1259.000000000000 +524.368582213829 1764.000000000000 +526.292379236449 1346.000000000000 +536.163521405380 5045.000000000000 +537.165490183188 2639.000000000000 +538.161932737167 2125.000000000000 +542.324328555797 1713.000000000000 +544.337468198754 3056.603271484375 +546.913369606817 2292.000000000000 +610.181714915557 2143.000000000000 +770.941842794456 1288.000000000000 +772.941472668172 2798.000000000000 +774.938101153758 1918.000000000000 +786.918764971090 3273.000000000000 +788.915339889948 6349.000000000000 +789.916298046128 2026.000000000000 +790.912911377750 5269.000000000000 +791.914849195293 1739.000000000000 +792.911051784088 2347.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=695 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=695 experiment=2_0 +##scan 225 +##specref ms_run[1]:sample=1 period=1 cycle=695 experiment=2 +56.942426701495 15.000000000000 +72.043995721286 90.000000000000 +113.940649832807 15.000000000000 +113.962171297268 45.000000000000 +113.971491837612 45.000000000000 +128.966874753967 13.000000000000 +132.962463230497 13.000000000000 +141.966349141306 30.000000000000 +141.978758501062 30.000000000000 +>compound 1_0-695003--226--UNKNOWN +>parentmass 240.461009918040 +>charge 1 +>rt 462.742999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005618708163 2539.747558593750 +53.013486822272 13870.398437500000 +53.849944651813 1321.311035156250 +54.009272542510 334364.000000000000 +55.006127578305 5684.579589843750 +55.011035183427 6294.277343750000 +55.054254765161 2061.134521484375 +55.933991415018 4820.544433593750 +56.941982259074 2008.753662109375 +59.049476031136 51717.343750000000 +60.044321443571 9808.684570312500 +61.039396177051 1522.640869140625 +63.997565592724 3448.600830078125 +64.005341669020 4543.776367187500 +68.011420900213 27038.449218750000 +68.993536452237 10856.610351562500 +69.044604668417 14629.907226562500 +72.936743492854 2022.000000000000 +73.064665682287 1682.000000000000 +76.485998117314 2566.925537109375 +79.020810153532 14499.247070312500 +80.048959505883 11243.084960937500 +81.937003271508 7052.000000000000 +82.996378584159 7415.000000000000 +87.054410274312 1276.982299804688 +89.059441384010 1290.163085937500 +89.069900666859 1198.356201171875 +89.506331602098 1457.000000000000 +90.489270349598 1320.000000000000 +91.053039144063 1241.000000000000 +95.952000045968 1806.000000000000 +97.967902527377 5447.752441406250 +102.090774354133 1766.000000000000 +113.962757196604 1650.000000000000 +114.090773310880 10151.000000000000 +118.085066210903 5345.923828125000 +122.095268802673 3377.287353515625 +122.962949998137 8914.721679687500 +123.090601278155 1865.907714843750 +136.020056745687 1324.000000000000 +136.111180768789 1288.000000000000 +141.090426683848 1398.526123046875 +141.112288162622 1510.265380859375 +141.957469631101 11917.693359375000 +147.090463314067 2860.191894531250 +149.022264703314 4634.188964843750 +149.042470498621 2606.216308593750 +151.096122028864 2944.847167968750 +151.109971768966 3170.533447265625 +153.126958731814 1398.000000000000 +155.069195494974 1574.157714843750 +155.105813585424 2084.507812500000 +155.973150721688 3335.564697265625 +158.153053636015 9405.870117187500 +159.136711694066 4417.646972656250 +159.154174408709 3926.795898437500 +161.094961933921 1811.161621093750 +164.141679671164 1521.000000000000 +167.105480994164 1805.390991210938 +170.094958849897 2666.187255859375 +171.140223157200 1508.630004882812 +171.145093012937 1470.691528320312 +172.954512501044 4039.610107421875 +173.079845098747 6225.943847656250 +174.952094962470 2464.368408203125 +178.158215609086 1219.881103515625 +179.105154195399 2200.808349609375 +182.960806462890 2404.385253906250 +186.220809140277 1734.000000000000 +194.115098301689 2881.000000000000 +195.101256156374 1617.443847656250 +195.120951058554 2047.553222656250 +198.184414106878 2305.000000000000 +201.195027022045 1910.948486328125 +217.106230153979 23078.796875000000 +218.109437360227 2564.000000000000 +227.127499881482 2837.185058593750 +228.194792431648 1277.992065429688 +239.088418710570 4302.000000000000 +241.173994352825 1414.042846679688 +242.284258423543 1867.205322265625 +246.861863276034 1955.000000000000 +249.109420159783 1233.772827148438 +249.184418840075 1420.173461914062 +250.999381059341 2838.000000000000 +251.184140008138 1355.000000000000 +252.997300828765 1406.000000000000 +254.083492116056 10290.000000000000 +255.085997599377 1547.149658203125 +267.170893163247 1592.013427734375 +279.092005618883 2032.000000000000 +281.050092553984 1706.000000000000 +294.136138366080 4881.512207031250 +295.107895790988 1620.651123046875 +295.138015559195 1578.061157226562 +296.133166224229 1908.000000000000 +304.111051104519 1351.000000000000 +327.006886551663 2984.882812500000 +329.003473926885 3156.000000000000 +330.205676685503 1841.885498046875 +364.961111347940 2324.000000000000 +366.958514632517 2456.000000000000 +382.972867455598 293054.562500000000 +383.974219609669 42764.382812500000 +384.970213408863 286227.000000000000 +385.971399341694 43010.519531250000 +386.966578716896 89321.406250000000 +387.969876681798 14031.000000000000 +388.966592927417 13596.000000000000 +389.971378934425 2357.000000000000 +390.975968244903 3498.000000000000 +395.363328076942 13631.000000000000 +396.365159355422 3743.854492187500 +404.954536714556 21725.000000000000 +405.956113141092 3276.000000000000 +406.951284005894 20871.000000000000 +407.954147589098 2949.000000000000 +408.948148070172 6628.412109375000 +417.344524456584 1350.000000000000 +422.925037344315 1234.000000000000 +428.028844106844 3004.000000000000 +430.024809248533 3165.000000000000 +445.118500074341 2256.000000000000 +482.895568175952 1929.765625000000 +484.892948210892 1641.000000000000 +502.291275651964 2548.000000000000 +503.296040019046 1207.000000000000 +505.851455058887 3627.203857421875 +506.855739800274 1203.000000000000 +520.337332473137 1339.000000000000 +522.878375464311 1844.000000000000 +523.875819347577 1259.000000000000 +524.368582213829 1764.000000000000 +526.292379236449 1346.000000000000 +536.163521405380 5045.000000000000 +537.165490183188 2639.000000000000 +538.161932737167 2125.000000000000 +542.324328555797 1713.000000000000 +544.337468198754 3056.603271484375 +546.913369606817 2292.000000000000 +610.181714915557 2143.000000000000 +770.941842794456 1288.000000000000 +772.941472668172 2798.000000000000 +774.938101153758 1918.000000000000 +786.918764971090 3273.000000000000 +788.915339889948 6349.000000000000 +789.916298046128 2026.000000000000 +790.912911377750 5269.000000000000 +791.914849195293 1739.000000000000 +792.911051784088 2347.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=695 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=695 experiment=3_0 +##scan 226 +##specref ms_run[1]:sample=1 period=1 cycle=695 experiment=3 +93.070415898217 13.000000000000 +107.073224309136 13.000000000000 +>compound 1_0-695004--227--UNKNOWN +>parentmass 255.085997599377 +>charge 1 +>rt 462.742999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +255.085997599377 1547.149658203125 +>ms1peaks +52.005618708163 2539.747558593750 +53.013486822272 13870.398437500000 +53.849944651813 1321.311035156250 +54.009272542510 334364.000000000000 +55.006127578305 5684.579589843750 +55.011035183427 6294.277343750000 +55.054254765161 2061.134521484375 +55.933991415018 4820.544433593750 +56.941982259074 2008.753662109375 +59.049476031136 51717.343750000000 +60.044321443571 9808.684570312500 +61.039396177051 1522.640869140625 +63.997565592724 3448.600830078125 +64.005341669020 4543.776367187500 +68.011420900213 27038.449218750000 +68.993536452237 10856.610351562500 +69.044604668417 14629.907226562500 +72.936743492854 2022.000000000000 +73.064665682287 1682.000000000000 +76.485998117314 2566.925537109375 +79.020810153532 14499.247070312500 +80.048959505883 11243.084960937500 +81.937003271508 7052.000000000000 +82.996378584159 7415.000000000000 +87.054410274312 1276.982299804688 +89.059441384010 1290.163085937500 +89.069900666859 1198.356201171875 +89.506331602098 1457.000000000000 +90.489270349598 1320.000000000000 +91.053039144063 1241.000000000000 +95.952000045968 1806.000000000000 +97.967902527377 5447.752441406250 +102.090774354133 1766.000000000000 +113.962757196604 1650.000000000000 +114.090773310880 10151.000000000000 +118.085066210903 5345.923828125000 +122.095268802673 3377.287353515625 +122.962949998137 8914.721679687500 +123.090601278155 1865.907714843750 +136.020056745687 1324.000000000000 +136.111180768789 1288.000000000000 +141.090426683848 1398.526123046875 +141.112288162622 1510.265380859375 +141.957469631101 11917.693359375000 +147.090463314067 2860.191894531250 +149.022264703314 4634.188964843750 +149.042470498621 2606.216308593750 +151.096122028864 2944.847167968750 +151.109971768966 3170.533447265625 +153.126958731814 1398.000000000000 +155.069195494974 1574.157714843750 +155.105813585424 2084.507812500000 +155.973150721688 3335.564697265625 +158.153053636015 9405.870117187500 +159.136711694066 4417.646972656250 +159.154174408709 3926.795898437500 +161.094961933921 1811.161621093750 +164.141679671164 1521.000000000000 +167.105480994164 1805.390991210938 +170.094958849897 2666.187255859375 +171.140223157200 1508.630004882812 +171.145093012937 1470.691528320312 +172.954512501044 4039.610107421875 +173.079845098747 6225.943847656250 +174.952094962470 2464.368408203125 +178.158215609086 1219.881103515625 +179.105154195399 2200.808349609375 +182.960806462890 2404.385253906250 +186.220809140277 1734.000000000000 +194.115098301689 2881.000000000000 +195.101256156374 1617.443847656250 +195.120951058554 2047.553222656250 +198.184414106878 2305.000000000000 +201.195027022045 1910.948486328125 +217.106230153979 23078.796875000000 +218.109437360227 2564.000000000000 +227.127499881482 2837.185058593750 +228.194792431648 1277.992065429688 +239.088418710570 4302.000000000000 +241.173994352825 1414.042846679688 +242.284258423543 1867.205322265625 +246.861863276034 1955.000000000000 +249.109420159783 1233.772827148438 +249.184418840075 1420.173461914062 +250.999381059341 2838.000000000000 +251.184140008138 1355.000000000000 +252.997300828765 1406.000000000000 +254.083492116056 10290.000000000000 +255.085997599377 1547.149658203125 +267.170893163247 1592.013427734375 +279.092005618883 2032.000000000000 +281.050092553984 1706.000000000000 +294.136138366080 4881.512207031250 +295.107895790988 1620.651123046875 +295.138015559195 1578.061157226562 +296.133166224229 1908.000000000000 +304.111051104519 1351.000000000000 +327.006886551663 2984.882812500000 +329.003473926885 3156.000000000000 +330.205676685503 1841.885498046875 +364.961111347940 2324.000000000000 +366.958514632517 2456.000000000000 +382.972867455598 293054.562500000000 +383.974219609669 42764.382812500000 +384.970213408863 286227.000000000000 +385.971399341694 43010.519531250000 +386.966578716896 89321.406250000000 +387.969876681798 14031.000000000000 +388.966592927417 13596.000000000000 +389.971378934425 2357.000000000000 +390.975968244903 3498.000000000000 +395.363328076942 13631.000000000000 +396.365159355422 3743.854492187500 +404.954536714556 21725.000000000000 +405.956113141092 3276.000000000000 +406.951284005894 20871.000000000000 +407.954147589098 2949.000000000000 +408.948148070172 6628.412109375000 +417.344524456584 1350.000000000000 +422.925037344315 1234.000000000000 +428.028844106844 3004.000000000000 +430.024809248533 3165.000000000000 +445.118500074341 2256.000000000000 +482.895568175952 1929.765625000000 +484.892948210892 1641.000000000000 +502.291275651964 2548.000000000000 +503.296040019046 1207.000000000000 +505.851455058887 3627.203857421875 +506.855739800274 1203.000000000000 +520.337332473137 1339.000000000000 +522.878375464311 1844.000000000000 +523.875819347577 1259.000000000000 +524.368582213829 1764.000000000000 +526.292379236449 1346.000000000000 +536.163521405380 5045.000000000000 +537.165490183188 2639.000000000000 +538.161932737167 2125.000000000000 +542.324328555797 1713.000000000000 +544.337468198754 3056.603271484375 +546.913369606817 2292.000000000000 +610.181714915557 2143.000000000000 +770.941842794456 1288.000000000000 +772.941472668172 2798.000000000000 +774.938101153758 1918.000000000000 +786.918764971090 3273.000000000000 +788.915339889948 6349.000000000000 +789.916298046128 2026.000000000000 +790.912911377750 5269.000000000000 +791.914849195293 1739.000000000000 +792.911051784088 2347.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=695 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=695 experiment=4_0 +##scan 227 +##specref ms_run[1]:sample=1 period=1 cycle=695 experiment=4 +147.287916666884 13.000000000000 +>compound 1_0-695005--228--UNKNOWN +>parentmass 396.365159355422 +>charge 1 +>rt 462.742999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +396.365159355422 3743.854492187500 +>ms1peaks +52.005618708163 2539.747558593750 +53.013486822272 13870.398437500000 +53.849944651813 1321.311035156250 +54.009272542510 334364.000000000000 +55.006127578305 5684.579589843750 +55.011035183427 6294.277343750000 +55.054254765161 2061.134521484375 +55.933991415018 4820.544433593750 +56.941982259074 2008.753662109375 +59.049476031136 51717.343750000000 +60.044321443571 9808.684570312500 +61.039396177051 1522.640869140625 +63.997565592724 3448.600830078125 +64.005341669020 4543.776367187500 +68.011420900213 27038.449218750000 +68.993536452237 10856.610351562500 +69.044604668417 14629.907226562500 +72.936743492854 2022.000000000000 +73.064665682287 1682.000000000000 +76.485998117314 2566.925537109375 +79.020810153532 14499.247070312500 +80.048959505883 11243.084960937500 +81.937003271508 7052.000000000000 +82.996378584159 7415.000000000000 +87.054410274312 1276.982299804688 +89.059441384010 1290.163085937500 +89.069900666859 1198.356201171875 +89.506331602098 1457.000000000000 +90.489270349598 1320.000000000000 +91.053039144063 1241.000000000000 +95.952000045968 1806.000000000000 +97.967902527377 5447.752441406250 +102.090774354133 1766.000000000000 +113.962757196604 1650.000000000000 +114.090773310880 10151.000000000000 +118.085066210903 5345.923828125000 +122.095268802673 3377.287353515625 +122.962949998137 8914.721679687500 +123.090601278155 1865.907714843750 +136.020056745687 1324.000000000000 +136.111180768789 1288.000000000000 +141.090426683848 1398.526123046875 +141.112288162622 1510.265380859375 +141.957469631101 11917.693359375000 +147.090463314067 2860.191894531250 +149.022264703314 4634.188964843750 +149.042470498621 2606.216308593750 +151.096122028864 2944.847167968750 +151.109971768966 3170.533447265625 +153.126958731814 1398.000000000000 +155.069195494974 1574.157714843750 +155.105813585424 2084.507812500000 +155.973150721688 3335.564697265625 +158.153053636015 9405.870117187500 +159.136711694066 4417.646972656250 +159.154174408709 3926.795898437500 +161.094961933921 1811.161621093750 +164.141679671164 1521.000000000000 +167.105480994164 1805.390991210938 +170.094958849897 2666.187255859375 +171.140223157200 1508.630004882812 +171.145093012937 1470.691528320312 +172.954512501044 4039.610107421875 +173.079845098747 6225.943847656250 +174.952094962470 2464.368408203125 +178.158215609086 1219.881103515625 +179.105154195399 2200.808349609375 +182.960806462890 2404.385253906250 +186.220809140277 1734.000000000000 +194.115098301689 2881.000000000000 +195.101256156374 1617.443847656250 +195.120951058554 2047.553222656250 +198.184414106878 2305.000000000000 +201.195027022045 1910.948486328125 +217.106230153979 23078.796875000000 +218.109437360227 2564.000000000000 +227.127499881482 2837.185058593750 +228.194792431648 1277.992065429688 +239.088418710570 4302.000000000000 +241.173994352825 1414.042846679688 +242.284258423543 1867.205322265625 +246.861863276034 1955.000000000000 +249.109420159783 1233.772827148438 +249.184418840075 1420.173461914062 +250.999381059341 2838.000000000000 +251.184140008138 1355.000000000000 +252.997300828765 1406.000000000000 +254.083492116056 10290.000000000000 +255.085997599377 1547.149658203125 +267.170893163247 1592.013427734375 +279.092005618883 2032.000000000000 +281.050092553984 1706.000000000000 +294.136138366080 4881.512207031250 +295.107895790988 1620.651123046875 +295.138015559195 1578.061157226562 +296.133166224229 1908.000000000000 +304.111051104519 1351.000000000000 +327.006886551663 2984.882812500000 +329.003473926885 3156.000000000000 +330.205676685503 1841.885498046875 +364.961111347940 2324.000000000000 +366.958514632517 2456.000000000000 +382.972867455598 293054.562500000000 +383.974219609669 42764.382812500000 +384.970213408863 286227.000000000000 +385.971399341694 43010.519531250000 +386.966578716896 89321.406250000000 +387.969876681798 14031.000000000000 +388.966592927417 13596.000000000000 +389.971378934425 2357.000000000000 +390.975968244903 3498.000000000000 +395.363328076942 13631.000000000000 +396.365159355422 3743.854492187500 +404.954536714556 21725.000000000000 +405.956113141092 3276.000000000000 +406.951284005894 20871.000000000000 +407.954147589098 2949.000000000000 +408.948148070172 6628.412109375000 +417.344524456584 1350.000000000000 +422.925037344315 1234.000000000000 +428.028844106844 3004.000000000000 +430.024809248533 3165.000000000000 +445.118500074341 2256.000000000000 +482.895568175952 1929.765625000000 +484.892948210892 1641.000000000000 +502.291275651964 2548.000000000000 +503.296040019046 1207.000000000000 +505.851455058887 3627.203857421875 +506.855739800274 1203.000000000000 +520.337332473137 1339.000000000000 +522.878375464311 1844.000000000000 +523.875819347577 1259.000000000000 +524.368582213829 1764.000000000000 +526.292379236449 1346.000000000000 +536.163521405380 5045.000000000000 +537.165490183188 2639.000000000000 +538.161932737167 2125.000000000000 +542.324328555797 1713.000000000000 +544.337468198754 3056.603271484375 +546.913369606817 2292.000000000000 +610.181714915557 2143.000000000000 +770.941842794456 1288.000000000000 +772.941472668172 2798.000000000000 +774.938101153758 1918.000000000000 +786.918764971090 3273.000000000000 +788.915339889948 6349.000000000000 +789.916298046128 2026.000000000000 +790.912911377750 5269.000000000000 +791.914849195293 1739.000000000000 +792.911051784088 2347.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=695 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=695 experiment=5_0 +##scan 228 +##specref ms_run[1]:sample=1 period=1 cycle=695 experiment=5 +181.175005299631 30.000000000000 +197.203311127799 105.000000000000 +198.181336761569 81.849647521973 +198.205857649460 109.703544616699 +378.357049985624 165.000000000000 +396.369482288046 195.000000000000 +>compound 1_0-695006--229--UNKNOWN +>parentmass 417.344524456584 +>charge 1 +>rt 462.742999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +417.344524456584 1350.000000000000 +>ms1peaks +52.005618708163 2539.747558593750 +53.013486822272 13870.398437500000 +53.849944651813 1321.311035156250 +54.009272542510 334364.000000000000 +55.006127578305 5684.579589843750 +55.011035183427 6294.277343750000 +55.054254765161 2061.134521484375 +55.933991415018 4820.544433593750 +56.941982259074 2008.753662109375 +59.049476031136 51717.343750000000 +60.044321443571 9808.684570312500 +61.039396177051 1522.640869140625 +63.997565592724 3448.600830078125 +64.005341669020 4543.776367187500 +68.011420900213 27038.449218750000 +68.993536452237 10856.610351562500 +69.044604668417 14629.907226562500 +72.936743492854 2022.000000000000 +73.064665682287 1682.000000000000 +76.485998117314 2566.925537109375 +79.020810153532 14499.247070312500 +80.048959505883 11243.084960937500 +81.937003271508 7052.000000000000 +82.996378584159 7415.000000000000 +87.054410274312 1276.982299804688 +89.059441384010 1290.163085937500 +89.069900666859 1198.356201171875 +89.506331602098 1457.000000000000 +90.489270349598 1320.000000000000 +91.053039144063 1241.000000000000 +95.952000045968 1806.000000000000 +97.967902527377 5447.752441406250 +102.090774354133 1766.000000000000 +113.962757196604 1650.000000000000 +114.090773310880 10151.000000000000 +118.085066210903 5345.923828125000 +122.095268802673 3377.287353515625 +122.962949998137 8914.721679687500 +123.090601278155 1865.907714843750 +136.020056745687 1324.000000000000 +136.111180768789 1288.000000000000 +141.090426683848 1398.526123046875 +141.112288162622 1510.265380859375 +141.957469631101 11917.693359375000 +147.090463314067 2860.191894531250 +149.022264703314 4634.188964843750 +149.042470498621 2606.216308593750 +151.096122028864 2944.847167968750 +151.109971768966 3170.533447265625 +153.126958731814 1398.000000000000 +155.069195494974 1574.157714843750 +155.105813585424 2084.507812500000 +155.973150721688 3335.564697265625 +158.153053636015 9405.870117187500 +159.136711694066 4417.646972656250 +159.154174408709 3926.795898437500 +161.094961933921 1811.161621093750 +164.141679671164 1521.000000000000 +167.105480994164 1805.390991210938 +170.094958849897 2666.187255859375 +171.140223157200 1508.630004882812 +171.145093012937 1470.691528320312 +172.954512501044 4039.610107421875 +173.079845098747 6225.943847656250 +174.952094962470 2464.368408203125 +178.158215609086 1219.881103515625 +179.105154195399 2200.808349609375 +182.960806462890 2404.385253906250 +186.220809140277 1734.000000000000 +194.115098301689 2881.000000000000 +195.101256156374 1617.443847656250 +195.120951058554 2047.553222656250 +198.184414106878 2305.000000000000 +201.195027022045 1910.948486328125 +217.106230153979 23078.796875000000 +218.109437360227 2564.000000000000 +227.127499881482 2837.185058593750 +228.194792431648 1277.992065429688 +239.088418710570 4302.000000000000 +241.173994352825 1414.042846679688 +242.284258423543 1867.205322265625 +246.861863276034 1955.000000000000 +249.109420159783 1233.772827148438 +249.184418840075 1420.173461914062 +250.999381059341 2838.000000000000 +251.184140008138 1355.000000000000 +252.997300828765 1406.000000000000 +254.083492116056 10290.000000000000 +255.085997599377 1547.149658203125 +267.170893163247 1592.013427734375 +279.092005618883 2032.000000000000 +281.050092553984 1706.000000000000 +294.136138366080 4881.512207031250 +295.107895790988 1620.651123046875 +295.138015559195 1578.061157226562 +296.133166224229 1908.000000000000 +304.111051104519 1351.000000000000 +327.006886551663 2984.882812500000 +329.003473926885 3156.000000000000 +330.205676685503 1841.885498046875 +364.961111347940 2324.000000000000 +366.958514632517 2456.000000000000 +382.972867455598 293054.562500000000 +383.974219609669 42764.382812500000 +384.970213408863 286227.000000000000 +385.971399341694 43010.519531250000 +386.966578716896 89321.406250000000 +387.969876681798 14031.000000000000 +388.966592927417 13596.000000000000 +389.971378934425 2357.000000000000 +390.975968244903 3498.000000000000 +395.363328076942 13631.000000000000 +396.365159355422 3743.854492187500 +404.954536714556 21725.000000000000 +405.956113141092 3276.000000000000 +406.951284005894 20871.000000000000 +407.954147589098 2949.000000000000 +408.948148070172 6628.412109375000 +417.344524456584 1350.000000000000 +422.925037344315 1234.000000000000 +428.028844106844 3004.000000000000 +430.024809248533 3165.000000000000 +445.118500074341 2256.000000000000 +482.895568175952 1929.765625000000 +484.892948210892 1641.000000000000 +502.291275651964 2548.000000000000 +503.296040019046 1207.000000000000 +505.851455058887 3627.203857421875 +506.855739800274 1203.000000000000 +520.337332473137 1339.000000000000 +522.878375464311 1844.000000000000 +523.875819347577 1259.000000000000 +524.368582213829 1764.000000000000 +526.292379236449 1346.000000000000 +536.163521405380 5045.000000000000 +537.165490183188 2639.000000000000 +538.161932737167 2125.000000000000 +542.324328555797 1713.000000000000 +544.337468198754 3056.603271484375 +546.913369606817 2292.000000000000 +610.181714915557 2143.000000000000 +770.941842794456 1288.000000000000 +772.941472668172 2798.000000000000 +774.938101153758 1918.000000000000 +786.918764971090 3273.000000000000 +788.915339889948 6349.000000000000 +789.916298046128 2026.000000000000 +790.912911377750 5269.000000000000 +791.914849195293 1739.000000000000 +792.911051784088 2347.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=695 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=695 experiment=6_0 +##scan 229 +##specref ms_run[1]:sample=1 period=1 cycle=695 experiment=6 +417.341466976682 282.000000000000 +>compound 1_0-695007--230--UNKNOWN +>parentmass 422.925037344315 +>charge 1 +>rt 462.742999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +422.925037344315 1234.000000000000 +>ms1peaks +52.005618708163 2539.747558593750 +53.013486822272 13870.398437500000 +53.849944651813 1321.311035156250 +54.009272542510 334364.000000000000 +55.006127578305 5684.579589843750 +55.011035183427 6294.277343750000 +55.054254765161 2061.134521484375 +55.933991415018 4820.544433593750 +56.941982259074 2008.753662109375 +59.049476031136 51717.343750000000 +60.044321443571 9808.684570312500 +61.039396177051 1522.640869140625 +63.997565592724 3448.600830078125 +64.005341669020 4543.776367187500 +68.011420900213 27038.449218750000 +68.993536452237 10856.610351562500 +69.044604668417 14629.907226562500 +72.936743492854 2022.000000000000 +73.064665682287 1682.000000000000 +76.485998117314 2566.925537109375 +79.020810153532 14499.247070312500 +80.048959505883 11243.084960937500 +81.937003271508 7052.000000000000 +82.996378584159 7415.000000000000 +87.054410274312 1276.982299804688 +89.059441384010 1290.163085937500 +89.069900666859 1198.356201171875 +89.506331602098 1457.000000000000 +90.489270349598 1320.000000000000 +91.053039144063 1241.000000000000 +95.952000045968 1806.000000000000 +97.967902527377 5447.752441406250 +102.090774354133 1766.000000000000 +113.962757196604 1650.000000000000 +114.090773310880 10151.000000000000 +118.085066210903 5345.923828125000 +122.095268802673 3377.287353515625 +122.962949998137 8914.721679687500 +123.090601278155 1865.907714843750 +136.020056745687 1324.000000000000 +136.111180768789 1288.000000000000 +141.090426683848 1398.526123046875 +141.112288162622 1510.265380859375 +141.957469631101 11917.693359375000 +147.090463314067 2860.191894531250 +149.022264703314 4634.188964843750 +149.042470498621 2606.216308593750 +151.096122028864 2944.847167968750 +151.109971768966 3170.533447265625 +153.126958731814 1398.000000000000 +155.069195494974 1574.157714843750 +155.105813585424 2084.507812500000 +155.973150721688 3335.564697265625 +158.153053636015 9405.870117187500 +159.136711694066 4417.646972656250 +159.154174408709 3926.795898437500 +161.094961933921 1811.161621093750 +164.141679671164 1521.000000000000 +167.105480994164 1805.390991210938 +170.094958849897 2666.187255859375 +171.140223157200 1508.630004882812 +171.145093012937 1470.691528320312 +172.954512501044 4039.610107421875 +173.079845098747 6225.943847656250 +174.952094962470 2464.368408203125 +178.158215609086 1219.881103515625 +179.105154195399 2200.808349609375 +182.960806462890 2404.385253906250 +186.220809140277 1734.000000000000 +194.115098301689 2881.000000000000 +195.101256156374 1617.443847656250 +195.120951058554 2047.553222656250 +198.184414106878 2305.000000000000 +201.195027022045 1910.948486328125 +217.106230153979 23078.796875000000 +218.109437360227 2564.000000000000 +227.127499881482 2837.185058593750 +228.194792431648 1277.992065429688 +239.088418710570 4302.000000000000 +241.173994352825 1414.042846679688 +242.284258423543 1867.205322265625 +246.861863276034 1955.000000000000 +249.109420159783 1233.772827148438 +249.184418840075 1420.173461914062 +250.999381059341 2838.000000000000 +251.184140008138 1355.000000000000 +252.997300828765 1406.000000000000 +254.083492116056 10290.000000000000 +255.085997599377 1547.149658203125 +267.170893163247 1592.013427734375 +279.092005618883 2032.000000000000 +281.050092553984 1706.000000000000 +294.136138366080 4881.512207031250 +295.107895790988 1620.651123046875 +295.138015559195 1578.061157226562 +296.133166224229 1908.000000000000 +304.111051104519 1351.000000000000 +327.006886551663 2984.882812500000 +329.003473926885 3156.000000000000 +330.205676685503 1841.885498046875 +364.961111347940 2324.000000000000 +366.958514632517 2456.000000000000 +382.972867455598 293054.562500000000 +383.974219609669 42764.382812500000 +384.970213408863 286227.000000000000 +385.971399341694 43010.519531250000 +386.966578716896 89321.406250000000 +387.969876681798 14031.000000000000 +388.966592927417 13596.000000000000 +389.971378934425 2357.000000000000 +390.975968244903 3498.000000000000 +395.363328076942 13631.000000000000 +396.365159355422 3743.854492187500 +404.954536714556 21725.000000000000 +405.956113141092 3276.000000000000 +406.951284005894 20871.000000000000 +407.954147589098 2949.000000000000 +408.948148070172 6628.412109375000 +417.344524456584 1350.000000000000 +422.925037344315 1234.000000000000 +428.028844106844 3004.000000000000 +430.024809248533 3165.000000000000 +445.118500074341 2256.000000000000 +482.895568175952 1929.765625000000 +484.892948210892 1641.000000000000 +502.291275651964 2548.000000000000 +503.296040019046 1207.000000000000 +505.851455058887 3627.203857421875 +506.855739800274 1203.000000000000 +520.337332473137 1339.000000000000 +522.878375464311 1844.000000000000 +523.875819347577 1259.000000000000 +524.368582213829 1764.000000000000 +526.292379236449 1346.000000000000 +536.163521405380 5045.000000000000 +537.165490183188 2639.000000000000 +538.161932737167 2125.000000000000 +542.324328555797 1713.000000000000 +544.337468198754 3056.603271484375 +546.913369606817 2292.000000000000 +610.181714915557 2143.000000000000 +770.941842794456 1288.000000000000 +772.941472668172 2798.000000000000 +774.938101153758 1918.000000000000 +786.918764971090 3273.000000000000 +788.915339889948 6349.000000000000 +789.916298046128 2026.000000000000 +790.912911377750 5269.000000000000 +791.914849195293 1739.000000000000 +792.911051784088 2347.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=695 experiment=7 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=695 experiment=7_0 +##scan 230 +##specref ms_run[1]:sample=1 period=1 cycle=695 experiment=7 +254.080581718913 30.000000000000 +>compound 1_0-695009--231--UNKNOWN +>parentmass 664.340804393769 +>charge 1 +>rt 462.742999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005618708163 2539.747558593750 +53.013486822272 13870.398437500000 +53.849944651813 1321.311035156250 +54.009272542510 334364.000000000000 +55.006127578305 5684.579589843750 +55.011035183427 6294.277343750000 +55.054254765161 2061.134521484375 +55.933991415018 4820.544433593750 +56.941982259074 2008.753662109375 +59.049476031136 51717.343750000000 +60.044321443571 9808.684570312500 +61.039396177051 1522.640869140625 +63.997565592724 3448.600830078125 +64.005341669020 4543.776367187500 +68.011420900213 27038.449218750000 +68.993536452237 10856.610351562500 +69.044604668417 14629.907226562500 +72.936743492854 2022.000000000000 +73.064665682287 1682.000000000000 +76.485998117314 2566.925537109375 +79.020810153532 14499.247070312500 +80.048959505883 11243.084960937500 +81.937003271508 7052.000000000000 +82.996378584159 7415.000000000000 +87.054410274312 1276.982299804688 +89.059441384010 1290.163085937500 +89.069900666859 1198.356201171875 +89.506331602098 1457.000000000000 +90.489270349598 1320.000000000000 +91.053039144063 1241.000000000000 +95.952000045968 1806.000000000000 +97.967902527377 5447.752441406250 +102.090774354133 1766.000000000000 +113.962757196604 1650.000000000000 +114.090773310880 10151.000000000000 +118.085066210903 5345.923828125000 +122.095268802673 3377.287353515625 +122.962949998137 8914.721679687500 +123.090601278155 1865.907714843750 +136.020056745687 1324.000000000000 +136.111180768789 1288.000000000000 +141.090426683848 1398.526123046875 +141.112288162622 1510.265380859375 +141.957469631101 11917.693359375000 +147.090463314067 2860.191894531250 +149.022264703314 4634.188964843750 +149.042470498621 2606.216308593750 +151.096122028864 2944.847167968750 +151.109971768966 3170.533447265625 +153.126958731814 1398.000000000000 +155.069195494974 1574.157714843750 +155.105813585424 2084.507812500000 +155.973150721688 3335.564697265625 +158.153053636015 9405.870117187500 +159.136711694066 4417.646972656250 +159.154174408709 3926.795898437500 +161.094961933921 1811.161621093750 +164.141679671164 1521.000000000000 +167.105480994164 1805.390991210938 +170.094958849897 2666.187255859375 +171.140223157200 1508.630004882812 +171.145093012937 1470.691528320312 +172.954512501044 4039.610107421875 +173.079845098747 6225.943847656250 +174.952094962470 2464.368408203125 +178.158215609086 1219.881103515625 +179.105154195399 2200.808349609375 +182.960806462890 2404.385253906250 +186.220809140277 1734.000000000000 +194.115098301689 2881.000000000000 +195.101256156374 1617.443847656250 +195.120951058554 2047.553222656250 +198.184414106878 2305.000000000000 +201.195027022045 1910.948486328125 +217.106230153979 23078.796875000000 +218.109437360227 2564.000000000000 +227.127499881482 2837.185058593750 +228.194792431648 1277.992065429688 +239.088418710570 4302.000000000000 +241.173994352825 1414.042846679688 +242.284258423543 1867.205322265625 +246.861863276034 1955.000000000000 +249.109420159783 1233.772827148438 +249.184418840075 1420.173461914062 +250.999381059341 2838.000000000000 +251.184140008138 1355.000000000000 +252.997300828765 1406.000000000000 +254.083492116056 10290.000000000000 +255.085997599377 1547.149658203125 +267.170893163247 1592.013427734375 +279.092005618883 2032.000000000000 +281.050092553984 1706.000000000000 +294.136138366080 4881.512207031250 +295.107895790988 1620.651123046875 +295.138015559195 1578.061157226562 +296.133166224229 1908.000000000000 +304.111051104519 1351.000000000000 +327.006886551663 2984.882812500000 +329.003473926885 3156.000000000000 +330.205676685503 1841.885498046875 +364.961111347940 2324.000000000000 +366.958514632517 2456.000000000000 +382.972867455598 293054.562500000000 +383.974219609669 42764.382812500000 +384.970213408863 286227.000000000000 +385.971399341694 43010.519531250000 +386.966578716896 89321.406250000000 +387.969876681798 14031.000000000000 +388.966592927417 13596.000000000000 +389.971378934425 2357.000000000000 +390.975968244903 3498.000000000000 +395.363328076942 13631.000000000000 +396.365159355422 3743.854492187500 +404.954536714556 21725.000000000000 +405.956113141092 3276.000000000000 +406.951284005894 20871.000000000000 +407.954147589098 2949.000000000000 +408.948148070172 6628.412109375000 +417.344524456584 1350.000000000000 +422.925037344315 1234.000000000000 +428.028844106844 3004.000000000000 +430.024809248533 3165.000000000000 +445.118500074341 2256.000000000000 +482.895568175952 1929.765625000000 +484.892948210892 1641.000000000000 +502.291275651964 2548.000000000000 +503.296040019046 1207.000000000000 +505.851455058887 3627.203857421875 +506.855739800274 1203.000000000000 +520.337332473137 1339.000000000000 +522.878375464311 1844.000000000000 +523.875819347577 1259.000000000000 +524.368582213829 1764.000000000000 +526.292379236449 1346.000000000000 +536.163521405380 5045.000000000000 +537.165490183188 2639.000000000000 +538.161932737167 2125.000000000000 +542.324328555797 1713.000000000000 +544.337468198754 3056.603271484375 +546.913369606817 2292.000000000000 +610.181714915557 2143.000000000000 +770.941842794456 1288.000000000000 +772.941472668172 2798.000000000000 +774.938101153758 1918.000000000000 +786.918764971090 3273.000000000000 +788.915339889948 6349.000000000000 +789.916298046128 2026.000000000000 +790.912911377750 5269.000000000000 +791.914849195293 1739.000000000000 +792.911051784088 2347.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=695 experiment=9 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=695 experiment=9_0 +##scan 231 +##specref ms_run[1]:sample=1 period=1 cycle=695 experiment=9 +133.097560412381 13.000000000000 +184.070630028873 30.000000000000 +203.173636544843 13.000000000000 +361.272163535476 75.000000000000 +>compound 1_0-696002--233--UNKNOWN +>parentmass 159.137242187594 +>charge 1 +>rt 463.669000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +159.137242187594 4711.416015625000 +>ms1peaks +52.005628538960 2637.349121093750 +53.013487996772 14122.560546875000 +53.850893437957 1404.000000000000 +54.009201169358 332584.406250000000 +55.005765203691 5360.090332031250 +55.011472250266 5664.562500000000 +55.054235622033 2036.836303710938 +55.934292100307 4783.646972656250 +56.941967217108 1857.287231445312 +59.049442439883 57155.132812500000 +60.044580075053 10939.541015625000 +61.039470157590 1746.721313476562 +63.997915213248 4358.298828125000 +64.005059988989 4331.703613281250 +68.011471561598 26757.945312500000 +68.993510312729 10253.229492187500 +69.044561148862 14498.159179687500 +72.936636066754 1711.000000000000 +73.064393116430 1846.000000000000 +76.485942857588 1535.809936523438 +79.021014992201 15447.012695312500 +80.048981842878 12566.061523437500 +81.936913449159 7026.258300781250 +82.996321795117 7912.295410156250 +87.054269977722 1658.446289062500 +89.059229564481 1305.166992187500 +89.069994247057 1368.095825195312 +90.489026785535 1632.000000000000 +91.053315051479 1490.000000000000 +95.951951289492 1992.074584960938 +97.968056848485 5634.964843750000 +100.075631821427 1235.000000000000 +102.090920831540 1955.000000000000 +109.942898660505 1175.000000000000 +113.962626857788 1511.000000000000 +114.090705093443 10989.134765625000 +118.085350245267 5836.000000000000 +122.095731790096 3731.000000000000 +122.963011722526 8769.000000000000 +123.091094838500 1826.787963867188 +130.158205761320 1476.000000000000 +136.020214806507 1571.920776367188 +136.110547334425 1248.000000000000 +141.089530385591 1353.939331054688 +141.112680554458 1293.184082031250 +141.957764442033 12450.728515625000 +147.090299874100 2814.000000000000 +149.022557674814 4422.133300781250 +149.042192687749 1579.712768554688 +151.095403327982 3233.004638671875 +151.110085002989 3392.165771484375 +155.068973577671 1457.415527343750 +155.105602437599 2247.000000000000 +155.973386809277 3837.000000000000 +158.153197625133 11457.209960937500 +159.118609607204 1941.001098632812 +159.137242187594 4711.416015625000 +159.155394938209 3520.378173828125 +161.095263502669 1751.508300781250 +163.130731406915 1204.847900390625 +164.142602457948 1494.615112304688 +170.095495238726 2577.412597656250 +170.116220014920 1480.380615234375 +171.142706905603 1540.455200195312 +172.954970274582 1727.086181640625 +173.080325741387 7273.602539062500 +174.126896117245 1186.000000000000 +174.991679798353 1362.000000000000 +175.125648932918 1339.088867187500 +178.158578492469 1338.348388671875 +179.106137801891 1708.101318359375 +182.960685641984 2378.937500000000 +186.220747056556 1225.523803710938 +194.116088391200 3137.609375000000 +195.100841360950 1458.788330078125 +195.120782205363 2061.721923828125 +198.184862087240 2586.607666015625 +200.199373558529 1259.000000000000 +201.196149511331 1520.000000000000 +217.106534230976 24247.785156250000 +218.109919838623 2548.000000000000 +219.109494694251 1218.915893554688 +224.127685104511 1314.000000000000 +227.127203327275 1821.415039062500 +228.195929407925 1405.236083984375 +239.088731843267 4534.000000000000 +239.126743928250 1537.126831054688 +241.173852549054 1289.963867187500 +242.283370967783 1886.868164062500 +246.861885429812 2425.000000000000 +249.184334637681 1499.296386718750 +250.179429295706 1514.000000000000 +250.999729474504 2773.000000000000 +251.183971646461 1489.000000000000 +252.995981830428 1551.000000000000 +254.083074751473 9429.120117187500 +255.086820384220 1377.000000000000 +263.222311732307 2471.000000000000 +267.171870845764 2258.980468750000 +279.093901316594 2048.000000000000 +281.049438213658 1751.000000000000 +294.135818344908 5481.558593750000 +295.109372469252 1897.115356445312 +295.138871323712 1781.417114257812 +295.189645544086 2819.352539062500 +296.133069738097 2033.000000000000 +327.007288064241 3025.000000000000 +329.004769816867 3185.000000000000 +330.205517897635 2254.151367187500 +382.973343340575 128910.000000000000 +383.974420009478 19401.000000000000 +384.970517685034 123104.000000000000 +385.972091464734 19887.753906250000 +386.967095187750 40063.000000000000 +387.969295280357 6423.000000000000 +388.967906459311 6161.070800781250 +389.971679644558 1409.000000000000 +390.977098155446 1517.000000000000 +395.362969520157 18140.000000000000 +396.365852571670 4542.050781250000 +404.954053810599 10802.145507812500 +405.957174296560 1793.000000000000 +406.951585967555 9725.000000000000 +407.954045316121 1912.000000000000 +408.948897136319 3528.000000000000 +417.344632939875 1893.000000000000 +428.029700918640 1211.000000000000 +430.026672148293 1482.044921875000 +445.120053978151 2346.000000000000 +494.323461441053 1521.000000000000 +502.291764818600 2916.000000000000 +505.851961472306 3786.000000000000 +506.852170245549 1182.000000000000 +519.137955312660 1219.000000000000 +520.337411206304 1698.399902343750 +522.877298691702 1797.000000000000 +524.369915946327 2231.000000000000 +526.290801987448 1556.211059570312 +529.889255527270 1419.000000000000 +536.163579057835 5311.000000000000 +537.165965016465 2630.000000000000 +538.162485296433 1988.000000000000 +542.321404252303 1551.000000000000 +544.338164794243 3319.000000000000 +546.913545702099 2487.013183593750 +547.909624574493 1196.000000000000 +610.183491076142 2248.000000000000 +611.183468001329 1243.000000000000 +788.916160573117 1967.000000000000 +790.915223694521 1465.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=696 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=696 experiment=2_0 +##scan 233 +##specref ms_run[1]:sample=1 period=1 cycle=696 experiment=2 +55.053897973754 30.000000000000 +55.934768254820 75.000000000000 +56.943235358435 13.000000000000 +71.929730877775 45.000000000000 +72.937318749324 90.000000000000 +96.961314870102 13.000000000000 +97.970828900938 30.000000000000 +>compound 1_0-696003--234--UNKNOWN +>parentmass 254.083074751473 +>charge 1 +>rt 463.669000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +254.083074751473 9429.120117187500 +>ms1peaks +52.005628538960 2637.349121093750 +53.013487996772 14122.560546875000 +53.850893437957 1404.000000000000 +54.009201169358 332584.406250000000 +55.005765203691 5360.090332031250 +55.011472250266 5664.562500000000 +55.054235622033 2036.836303710938 +55.934292100307 4783.646972656250 +56.941967217108 1857.287231445312 +59.049442439883 57155.132812500000 +60.044580075053 10939.541015625000 +61.039470157590 1746.721313476562 +63.997915213248 4358.298828125000 +64.005059988989 4331.703613281250 +68.011471561598 26757.945312500000 +68.993510312729 10253.229492187500 +69.044561148862 14498.159179687500 +72.936636066754 1711.000000000000 +73.064393116430 1846.000000000000 +76.485942857588 1535.809936523438 +79.021014992201 15447.012695312500 +80.048981842878 12566.061523437500 +81.936913449159 7026.258300781250 +82.996321795117 7912.295410156250 +87.054269977722 1658.446289062500 +89.059229564481 1305.166992187500 +89.069994247057 1368.095825195312 +90.489026785535 1632.000000000000 +91.053315051479 1490.000000000000 +95.951951289492 1992.074584960938 +97.968056848485 5634.964843750000 +100.075631821427 1235.000000000000 +102.090920831540 1955.000000000000 +109.942898660505 1175.000000000000 +113.962626857788 1511.000000000000 +114.090705093443 10989.134765625000 +118.085350245267 5836.000000000000 +122.095731790096 3731.000000000000 +122.963011722526 8769.000000000000 +123.091094838500 1826.787963867188 +130.158205761320 1476.000000000000 +136.020214806507 1571.920776367188 +136.110547334425 1248.000000000000 +141.089530385591 1353.939331054688 +141.112680554458 1293.184082031250 +141.957764442033 12450.728515625000 +147.090299874100 2814.000000000000 +149.022557674814 4422.133300781250 +149.042192687749 1579.712768554688 +151.095403327982 3233.004638671875 +151.110085002989 3392.165771484375 +155.068973577671 1457.415527343750 +155.105602437599 2247.000000000000 +155.973386809277 3837.000000000000 +158.153197625133 11457.209960937500 +159.118609607204 1941.001098632812 +159.137242187594 4711.416015625000 +159.155394938209 3520.378173828125 +161.095263502669 1751.508300781250 +163.130731406915 1204.847900390625 +164.142602457948 1494.615112304688 +170.095495238726 2577.412597656250 +170.116220014920 1480.380615234375 +171.142706905603 1540.455200195312 +172.954970274582 1727.086181640625 +173.080325741387 7273.602539062500 +174.126896117245 1186.000000000000 +174.991679798353 1362.000000000000 +175.125648932918 1339.088867187500 +178.158578492469 1338.348388671875 +179.106137801891 1708.101318359375 +182.960685641984 2378.937500000000 +186.220747056556 1225.523803710938 +194.116088391200 3137.609375000000 +195.100841360950 1458.788330078125 +195.120782205363 2061.721923828125 +198.184862087240 2586.607666015625 +200.199373558529 1259.000000000000 +201.196149511331 1520.000000000000 +217.106534230976 24247.785156250000 +218.109919838623 2548.000000000000 +219.109494694251 1218.915893554688 +224.127685104511 1314.000000000000 +227.127203327275 1821.415039062500 +228.195929407925 1405.236083984375 +239.088731843267 4534.000000000000 +239.126743928250 1537.126831054688 +241.173852549054 1289.963867187500 +242.283370967783 1886.868164062500 +246.861885429812 2425.000000000000 +249.184334637681 1499.296386718750 +250.179429295706 1514.000000000000 +250.999729474504 2773.000000000000 +251.183971646461 1489.000000000000 +252.995981830428 1551.000000000000 +254.083074751473 9429.120117187500 +255.086820384220 1377.000000000000 +263.222311732307 2471.000000000000 +267.171870845764 2258.980468750000 +279.093901316594 2048.000000000000 +281.049438213658 1751.000000000000 +294.135818344908 5481.558593750000 +295.109372469252 1897.115356445312 +295.138871323712 1781.417114257812 +295.189645544086 2819.352539062500 +296.133069738097 2033.000000000000 +327.007288064241 3025.000000000000 +329.004769816867 3185.000000000000 +330.205517897635 2254.151367187500 +382.973343340575 128910.000000000000 +383.974420009478 19401.000000000000 +384.970517685034 123104.000000000000 +385.972091464734 19887.753906250000 +386.967095187750 40063.000000000000 +387.969295280357 6423.000000000000 +388.967906459311 6161.070800781250 +389.971679644558 1409.000000000000 +390.977098155446 1517.000000000000 +395.362969520157 18140.000000000000 +396.365852571670 4542.050781250000 +404.954053810599 10802.145507812500 +405.957174296560 1793.000000000000 +406.951585967555 9725.000000000000 +407.954045316121 1912.000000000000 +408.948897136319 3528.000000000000 +417.344632939875 1893.000000000000 +428.029700918640 1211.000000000000 +430.026672148293 1482.044921875000 +445.120053978151 2346.000000000000 +494.323461441053 1521.000000000000 +502.291764818600 2916.000000000000 +505.851961472306 3786.000000000000 +506.852170245549 1182.000000000000 +519.137955312660 1219.000000000000 +520.337411206304 1698.399902343750 +522.877298691702 1797.000000000000 +524.369915946327 2231.000000000000 +526.290801987448 1556.211059570312 +529.889255527270 1419.000000000000 +536.163579057835 5311.000000000000 +537.165965016465 2630.000000000000 +538.162485296433 1988.000000000000 +542.321404252303 1551.000000000000 +544.338164794243 3319.000000000000 +546.913545702099 2487.013183593750 +547.909624574493 1196.000000000000 +610.183491076142 2248.000000000000 +611.183468001329 1243.000000000000 +788.916160573117 1967.000000000000 +790.915223694521 1465.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=696 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=696 experiment=3_0 +##scan 234 +##specref ms_run[1]:sample=1 period=1 cycle=696 experiment=3 +87.044072089672 13.000000000000 +>compound 1_0-696004--235--UNKNOWN +>parentmass 329.193870373513 +>charge 1 +>rt 463.669000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005628538960 2637.349121093750 +53.013487996772 14122.560546875000 +53.850893437957 1404.000000000000 +54.009201169358 332584.406250000000 +55.005765203691 5360.090332031250 +55.011472250266 5664.562500000000 +55.054235622033 2036.836303710938 +55.934292100307 4783.646972656250 +56.941967217108 1857.287231445312 +59.049442439883 57155.132812500000 +60.044580075053 10939.541015625000 +61.039470157590 1746.721313476562 +63.997915213248 4358.298828125000 +64.005059988989 4331.703613281250 +68.011471561598 26757.945312500000 +68.993510312729 10253.229492187500 +69.044561148862 14498.159179687500 +72.936636066754 1711.000000000000 +73.064393116430 1846.000000000000 +76.485942857588 1535.809936523438 +79.021014992201 15447.012695312500 +80.048981842878 12566.061523437500 +81.936913449159 7026.258300781250 +82.996321795117 7912.295410156250 +87.054269977722 1658.446289062500 +89.059229564481 1305.166992187500 +89.069994247057 1368.095825195312 +90.489026785535 1632.000000000000 +91.053315051479 1490.000000000000 +95.951951289492 1992.074584960938 +97.968056848485 5634.964843750000 +100.075631821427 1235.000000000000 +102.090920831540 1955.000000000000 +109.942898660505 1175.000000000000 +113.962626857788 1511.000000000000 +114.090705093443 10989.134765625000 +118.085350245267 5836.000000000000 +122.095731790096 3731.000000000000 +122.963011722526 8769.000000000000 +123.091094838500 1826.787963867188 +130.158205761320 1476.000000000000 +136.020214806507 1571.920776367188 +136.110547334425 1248.000000000000 +141.089530385591 1353.939331054688 +141.112680554458 1293.184082031250 +141.957764442033 12450.728515625000 +147.090299874100 2814.000000000000 +149.022557674814 4422.133300781250 +149.042192687749 1579.712768554688 +151.095403327982 3233.004638671875 +151.110085002989 3392.165771484375 +155.068973577671 1457.415527343750 +155.105602437599 2247.000000000000 +155.973386809277 3837.000000000000 +158.153197625133 11457.209960937500 +159.118609607204 1941.001098632812 +159.137242187594 4711.416015625000 +159.155394938209 3520.378173828125 +161.095263502669 1751.508300781250 +163.130731406915 1204.847900390625 +164.142602457948 1494.615112304688 +170.095495238726 2577.412597656250 +170.116220014920 1480.380615234375 +171.142706905603 1540.455200195312 +172.954970274582 1727.086181640625 +173.080325741387 7273.602539062500 +174.126896117245 1186.000000000000 +174.991679798353 1362.000000000000 +175.125648932918 1339.088867187500 +178.158578492469 1338.348388671875 +179.106137801891 1708.101318359375 +182.960685641984 2378.937500000000 +186.220747056556 1225.523803710938 +194.116088391200 3137.609375000000 +195.100841360950 1458.788330078125 +195.120782205363 2061.721923828125 +198.184862087240 2586.607666015625 +200.199373558529 1259.000000000000 +201.196149511331 1520.000000000000 +217.106534230976 24247.785156250000 +218.109919838623 2548.000000000000 +219.109494694251 1218.915893554688 +224.127685104511 1314.000000000000 +227.127203327275 1821.415039062500 +228.195929407925 1405.236083984375 +239.088731843267 4534.000000000000 +239.126743928250 1537.126831054688 +241.173852549054 1289.963867187500 +242.283370967783 1886.868164062500 +246.861885429812 2425.000000000000 +249.184334637681 1499.296386718750 +250.179429295706 1514.000000000000 +250.999729474504 2773.000000000000 +251.183971646461 1489.000000000000 +252.995981830428 1551.000000000000 +254.083074751473 9429.120117187500 +255.086820384220 1377.000000000000 +263.222311732307 2471.000000000000 +267.171870845764 2258.980468750000 +279.093901316594 2048.000000000000 +281.049438213658 1751.000000000000 +294.135818344908 5481.558593750000 +295.109372469252 1897.115356445312 +295.138871323712 1781.417114257812 +295.189645544086 2819.352539062500 +296.133069738097 2033.000000000000 +327.007288064241 3025.000000000000 +329.004769816867 3185.000000000000 +330.205517897635 2254.151367187500 +382.973343340575 128910.000000000000 +383.974420009478 19401.000000000000 +384.970517685034 123104.000000000000 +385.972091464734 19887.753906250000 +386.967095187750 40063.000000000000 +387.969295280357 6423.000000000000 +388.967906459311 6161.070800781250 +389.971679644558 1409.000000000000 +390.977098155446 1517.000000000000 +395.362969520157 18140.000000000000 +396.365852571670 4542.050781250000 +404.954053810599 10802.145507812500 +405.957174296560 1793.000000000000 +406.951585967555 9725.000000000000 +407.954045316121 1912.000000000000 +408.948897136319 3528.000000000000 +417.344632939875 1893.000000000000 +428.029700918640 1211.000000000000 +430.026672148293 1482.044921875000 +445.120053978151 2346.000000000000 +494.323461441053 1521.000000000000 +502.291764818600 2916.000000000000 +505.851961472306 3786.000000000000 +506.852170245549 1182.000000000000 +519.137955312660 1219.000000000000 +520.337411206304 1698.399902343750 +522.877298691702 1797.000000000000 +524.369915946327 2231.000000000000 +526.290801987448 1556.211059570312 +529.889255527270 1419.000000000000 +536.163579057835 5311.000000000000 +537.165965016465 2630.000000000000 +538.162485296433 1988.000000000000 +542.321404252303 1551.000000000000 +544.338164794243 3319.000000000000 +546.913545702099 2487.013183593750 +547.909624574493 1196.000000000000 +610.183491076142 2248.000000000000 +611.183468001329 1243.000000000000 +788.916160573117 1967.000000000000 +790.915223694521 1465.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=696 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=696 experiment=4_0 +##scan 235 +##specref ms_run[1]:sample=1 period=1 cycle=696 experiment=4 +80.974310871563 13.000000000000 +98.983382481671 516.000000000000 +100.987982685447 13.000000000000 +128.872124001169 30.000000000000 +172.861472139585 181.000000000000 +174.992547618878 30.000000000000 +179.019159792885 13.000000000000 +200.868530087261 30.000000000000 +202.873204741537 60.000000000000 +246.860569116387 75.000000000000 +>compound 1_0-696005--236--UNKNOWN +>parentmass 395.362969520157 +>charge 1 +>rt 463.669000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +395.362969520157 18140.000000000000 +>ms1peaks +52.005628538960 2637.349121093750 +53.013487996772 14122.560546875000 +53.850893437957 1404.000000000000 +54.009201169358 332584.406250000000 +55.005765203691 5360.090332031250 +55.011472250266 5664.562500000000 +55.054235622033 2036.836303710938 +55.934292100307 4783.646972656250 +56.941967217108 1857.287231445312 +59.049442439883 57155.132812500000 +60.044580075053 10939.541015625000 +61.039470157590 1746.721313476562 +63.997915213248 4358.298828125000 +64.005059988989 4331.703613281250 +68.011471561598 26757.945312500000 +68.993510312729 10253.229492187500 +69.044561148862 14498.159179687500 +72.936636066754 1711.000000000000 +73.064393116430 1846.000000000000 +76.485942857588 1535.809936523438 +79.021014992201 15447.012695312500 +80.048981842878 12566.061523437500 +81.936913449159 7026.258300781250 +82.996321795117 7912.295410156250 +87.054269977722 1658.446289062500 +89.059229564481 1305.166992187500 +89.069994247057 1368.095825195312 +90.489026785535 1632.000000000000 +91.053315051479 1490.000000000000 +95.951951289492 1992.074584960938 +97.968056848485 5634.964843750000 +100.075631821427 1235.000000000000 +102.090920831540 1955.000000000000 +109.942898660505 1175.000000000000 +113.962626857788 1511.000000000000 +114.090705093443 10989.134765625000 +118.085350245267 5836.000000000000 +122.095731790096 3731.000000000000 +122.963011722526 8769.000000000000 +123.091094838500 1826.787963867188 +130.158205761320 1476.000000000000 +136.020214806507 1571.920776367188 +136.110547334425 1248.000000000000 +141.089530385591 1353.939331054688 +141.112680554458 1293.184082031250 +141.957764442033 12450.728515625000 +147.090299874100 2814.000000000000 +149.022557674814 4422.133300781250 +149.042192687749 1579.712768554688 +151.095403327982 3233.004638671875 +151.110085002989 3392.165771484375 +155.068973577671 1457.415527343750 +155.105602437599 2247.000000000000 +155.973386809277 3837.000000000000 +158.153197625133 11457.209960937500 +159.118609607204 1941.001098632812 +159.137242187594 4711.416015625000 +159.155394938209 3520.378173828125 +161.095263502669 1751.508300781250 +163.130731406915 1204.847900390625 +164.142602457948 1494.615112304688 +170.095495238726 2577.412597656250 +170.116220014920 1480.380615234375 +171.142706905603 1540.455200195312 +172.954970274582 1727.086181640625 +173.080325741387 7273.602539062500 +174.126896117245 1186.000000000000 +174.991679798353 1362.000000000000 +175.125648932918 1339.088867187500 +178.158578492469 1338.348388671875 +179.106137801891 1708.101318359375 +182.960685641984 2378.937500000000 +186.220747056556 1225.523803710938 +194.116088391200 3137.609375000000 +195.100841360950 1458.788330078125 +195.120782205363 2061.721923828125 +198.184862087240 2586.607666015625 +200.199373558529 1259.000000000000 +201.196149511331 1520.000000000000 +217.106534230976 24247.785156250000 +218.109919838623 2548.000000000000 +219.109494694251 1218.915893554688 +224.127685104511 1314.000000000000 +227.127203327275 1821.415039062500 +228.195929407925 1405.236083984375 +239.088731843267 4534.000000000000 +239.126743928250 1537.126831054688 +241.173852549054 1289.963867187500 +242.283370967783 1886.868164062500 +246.861885429812 2425.000000000000 +249.184334637681 1499.296386718750 +250.179429295706 1514.000000000000 +250.999729474504 2773.000000000000 +251.183971646461 1489.000000000000 +252.995981830428 1551.000000000000 +254.083074751473 9429.120117187500 +255.086820384220 1377.000000000000 +263.222311732307 2471.000000000000 +267.171870845764 2258.980468750000 +279.093901316594 2048.000000000000 +281.049438213658 1751.000000000000 +294.135818344908 5481.558593750000 +295.109372469252 1897.115356445312 +295.138871323712 1781.417114257812 +295.189645544086 2819.352539062500 +296.133069738097 2033.000000000000 +327.007288064241 3025.000000000000 +329.004769816867 3185.000000000000 +330.205517897635 2254.151367187500 +382.973343340575 128910.000000000000 +383.974420009478 19401.000000000000 +384.970517685034 123104.000000000000 +385.972091464734 19887.753906250000 +386.967095187750 40063.000000000000 +387.969295280357 6423.000000000000 +388.967906459311 6161.070800781250 +389.971679644558 1409.000000000000 +390.977098155446 1517.000000000000 +395.362969520157 18140.000000000000 +396.365852571670 4542.050781250000 +404.954053810599 10802.145507812500 +405.957174296560 1793.000000000000 +406.951585967555 9725.000000000000 +407.954045316121 1912.000000000000 +408.948897136319 3528.000000000000 +417.344632939875 1893.000000000000 +428.029700918640 1211.000000000000 +430.026672148293 1482.044921875000 +445.120053978151 2346.000000000000 +494.323461441053 1521.000000000000 +502.291764818600 2916.000000000000 +505.851961472306 3786.000000000000 +506.852170245549 1182.000000000000 +519.137955312660 1219.000000000000 +520.337411206304 1698.399902343750 +522.877298691702 1797.000000000000 +524.369915946327 2231.000000000000 +526.290801987448 1556.211059570312 +529.889255527270 1419.000000000000 +536.163579057835 5311.000000000000 +537.165965016465 2630.000000000000 +538.162485296433 1988.000000000000 +542.321404252303 1551.000000000000 +544.338164794243 3319.000000000000 +546.913545702099 2487.013183593750 +547.909624574493 1196.000000000000 +610.183491076142 2248.000000000000 +611.183468001329 1243.000000000000 +788.916160573117 1967.000000000000 +790.915223694521 1465.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=696 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=696 experiment=5_0 +##scan 236 +##specref ms_run[1]:sample=1 period=1 cycle=696 experiment=5 +107.084081492984 60.000000000000 +138.126990890205 45.000000000000 +180.173254632574 120.000000000000 +197.200860667371 741.000000000000 +198.184641850927 120.000000000000 +377.353477869521 580.000000000000 +395.364593284462 662.000000000000 +>compound 1_0-696006--237--UNKNOWN +>parentmass 417.344632939875 +>charge 1 +>rt 463.669000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +417.344632939875 1893.000000000000 +>ms1peaks +52.005628538960 2637.349121093750 +53.013487996772 14122.560546875000 +53.850893437957 1404.000000000000 +54.009201169358 332584.406250000000 +55.005765203691 5360.090332031250 +55.011472250266 5664.562500000000 +55.054235622033 2036.836303710938 +55.934292100307 4783.646972656250 +56.941967217108 1857.287231445312 +59.049442439883 57155.132812500000 +60.044580075053 10939.541015625000 +61.039470157590 1746.721313476562 +63.997915213248 4358.298828125000 +64.005059988989 4331.703613281250 +68.011471561598 26757.945312500000 +68.993510312729 10253.229492187500 +69.044561148862 14498.159179687500 +72.936636066754 1711.000000000000 +73.064393116430 1846.000000000000 +76.485942857588 1535.809936523438 +79.021014992201 15447.012695312500 +80.048981842878 12566.061523437500 +81.936913449159 7026.258300781250 +82.996321795117 7912.295410156250 +87.054269977722 1658.446289062500 +89.059229564481 1305.166992187500 +89.069994247057 1368.095825195312 +90.489026785535 1632.000000000000 +91.053315051479 1490.000000000000 +95.951951289492 1992.074584960938 +97.968056848485 5634.964843750000 +100.075631821427 1235.000000000000 +102.090920831540 1955.000000000000 +109.942898660505 1175.000000000000 +113.962626857788 1511.000000000000 +114.090705093443 10989.134765625000 +118.085350245267 5836.000000000000 +122.095731790096 3731.000000000000 +122.963011722526 8769.000000000000 +123.091094838500 1826.787963867188 +130.158205761320 1476.000000000000 +136.020214806507 1571.920776367188 +136.110547334425 1248.000000000000 +141.089530385591 1353.939331054688 +141.112680554458 1293.184082031250 +141.957764442033 12450.728515625000 +147.090299874100 2814.000000000000 +149.022557674814 4422.133300781250 +149.042192687749 1579.712768554688 +151.095403327982 3233.004638671875 +151.110085002989 3392.165771484375 +155.068973577671 1457.415527343750 +155.105602437599 2247.000000000000 +155.973386809277 3837.000000000000 +158.153197625133 11457.209960937500 +159.118609607204 1941.001098632812 +159.137242187594 4711.416015625000 +159.155394938209 3520.378173828125 +161.095263502669 1751.508300781250 +163.130731406915 1204.847900390625 +164.142602457948 1494.615112304688 +170.095495238726 2577.412597656250 +170.116220014920 1480.380615234375 +171.142706905603 1540.455200195312 +172.954970274582 1727.086181640625 +173.080325741387 7273.602539062500 +174.126896117245 1186.000000000000 +174.991679798353 1362.000000000000 +175.125648932918 1339.088867187500 +178.158578492469 1338.348388671875 +179.106137801891 1708.101318359375 +182.960685641984 2378.937500000000 +186.220747056556 1225.523803710938 +194.116088391200 3137.609375000000 +195.100841360950 1458.788330078125 +195.120782205363 2061.721923828125 +198.184862087240 2586.607666015625 +200.199373558529 1259.000000000000 +201.196149511331 1520.000000000000 +217.106534230976 24247.785156250000 +218.109919838623 2548.000000000000 +219.109494694251 1218.915893554688 +224.127685104511 1314.000000000000 +227.127203327275 1821.415039062500 +228.195929407925 1405.236083984375 +239.088731843267 4534.000000000000 +239.126743928250 1537.126831054688 +241.173852549054 1289.963867187500 +242.283370967783 1886.868164062500 +246.861885429812 2425.000000000000 +249.184334637681 1499.296386718750 +250.179429295706 1514.000000000000 +250.999729474504 2773.000000000000 +251.183971646461 1489.000000000000 +252.995981830428 1551.000000000000 +254.083074751473 9429.120117187500 +255.086820384220 1377.000000000000 +263.222311732307 2471.000000000000 +267.171870845764 2258.980468750000 +279.093901316594 2048.000000000000 +281.049438213658 1751.000000000000 +294.135818344908 5481.558593750000 +295.109372469252 1897.115356445312 +295.138871323712 1781.417114257812 +295.189645544086 2819.352539062500 +296.133069738097 2033.000000000000 +327.007288064241 3025.000000000000 +329.004769816867 3185.000000000000 +330.205517897635 2254.151367187500 +382.973343340575 128910.000000000000 +383.974420009478 19401.000000000000 +384.970517685034 123104.000000000000 +385.972091464734 19887.753906250000 +386.967095187750 40063.000000000000 +387.969295280357 6423.000000000000 +388.967906459311 6161.070800781250 +389.971679644558 1409.000000000000 +390.977098155446 1517.000000000000 +395.362969520157 18140.000000000000 +396.365852571670 4542.050781250000 +404.954053810599 10802.145507812500 +405.957174296560 1793.000000000000 +406.951585967555 9725.000000000000 +407.954045316121 1912.000000000000 +408.948897136319 3528.000000000000 +417.344632939875 1893.000000000000 +428.029700918640 1211.000000000000 +430.026672148293 1482.044921875000 +445.120053978151 2346.000000000000 +494.323461441053 1521.000000000000 +502.291764818600 2916.000000000000 +505.851961472306 3786.000000000000 +506.852170245549 1182.000000000000 +519.137955312660 1219.000000000000 +520.337411206304 1698.399902343750 +522.877298691702 1797.000000000000 +524.369915946327 2231.000000000000 +526.290801987448 1556.211059570312 +529.889255527270 1419.000000000000 +536.163579057835 5311.000000000000 +537.165965016465 2630.000000000000 +538.162485296433 1988.000000000000 +542.321404252303 1551.000000000000 +544.338164794243 3319.000000000000 +546.913545702099 2487.013183593750 +547.909624574493 1196.000000000000 +610.183491076142 2248.000000000000 +611.183468001329 1243.000000000000 +788.916160573117 1967.000000000000 +790.915223694521 1465.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=696 experiment=6 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=696 experiment=6_0 +##scan 237 +##specref ms_run[1]:sample=1 period=1 cycle=696 experiment=6 +417.347390201777 273.000000000000 +>compound 1_0-696007--238--UNKNOWN +>parentmass 522.877298691702 +>charge 1 +>rt 463.669000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +522.877298691702 1797.000000000000 +>ms1peaks +52.005628538960 2637.349121093750 +53.013487996772 14122.560546875000 +53.850893437957 1404.000000000000 +54.009201169358 332584.406250000000 +55.005765203691 5360.090332031250 +55.011472250266 5664.562500000000 +55.054235622033 2036.836303710938 +55.934292100307 4783.646972656250 +56.941967217108 1857.287231445312 +59.049442439883 57155.132812500000 +60.044580075053 10939.541015625000 +61.039470157590 1746.721313476562 +63.997915213248 4358.298828125000 +64.005059988989 4331.703613281250 +68.011471561598 26757.945312500000 +68.993510312729 10253.229492187500 +69.044561148862 14498.159179687500 +72.936636066754 1711.000000000000 +73.064393116430 1846.000000000000 +76.485942857588 1535.809936523438 +79.021014992201 15447.012695312500 +80.048981842878 12566.061523437500 +81.936913449159 7026.258300781250 +82.996321795117 7912.295410156250 +87.054269977722 1658.446289062500 +89.059229564481 1305.166992187500 +89.069994247057 1368.095825195312 +90.489026785535 1632.000000000000 +91.053315051479 1490.000000000000 +95.951951289492 1992.074584960938 +97.968056848485 5634.964843750000 +100.075631821427 1235.000000000000 +102.090920831540 1955.000000000000 +109.942898660505 1175.000000000000 +113.962626857788 1511.000000000000 +114.090705093443 10989.134765625000 +118.085350245267 5836.000000000000 +122.095731790096 3731.000000000000 +122.963011722526 8769.000000000000 +123.091094838500 1826.787963867188 +130.158205761320 1476.000000000000 +136.020214806507 1571.920776367188 +136.110547334425 1248.000000000000 +141.089530385591 1353.939331054688 +141.112680554458 1293.184082031250 +141.957764442033 12450.728515625000 +147.090299874100 2814.000000000000 +149.022557674814 4422.133300781250 +149.042192687749 1579.712768554688 +151.095403327982 3233.004638671875 +151.110085002989 3392.165771484375 +155.068973577671 1457.415527343750 +155.105602437599 2247.000000000000 +155.973386809277 3837.000000000000 +158.153197625133 11457.209960937500 +159.118609607204 1941.001098632812 +159.137242187594 4711.416015625000 +159.155394938209 3520.378173828125 +161.095263502669 1751.508300781250 +163.130731406915 1204.847900390625 +164.142602457948 1494.615112304688 +170.095495238726 2577.412597656250 +170.116220014920 1480.380615234375 +171.142706905603 1540.455200195312 +172.954970274582 1727.086181640625 +173.080325741387 7273.602539062500 +174.126896117245 1186.000000000000 +174.991679798353 1362.000000000000 +175.125648932918 1339.088867187500 +178.158578492469 1338.348388671875 +179.106137801891 1708.101318359375 +182.960685641984 2378.937500000000 +186.220747056556 1225.523803710938 +194.116088391200 3137.609375000000 +195.100841360950 1458.788330078125 +195.120782205363 2061.721923828125 +198.184862087240 2586.607666015625 +200.199373558529 1259.000000000000 +201.196149511331 1520.000000000000 +217.106534230976 24247.785156250000 +218.109919838623 2548.000000000000 +219.109494694251 1218.915893554688 +224.127685104511 1314.000000000000 +227.127203327275 1821.415039062500 +228.195929407925 1405.236083984375 +239.088731843267 4534.000000000000 +239.126743928250 1537.126831054688 +241.173852549054 1289.963867187500 +242.283370967783 1886.868164062500 +246.861885429812 2425.000000000000 +249.184334637681 1499.296386718750 +250.179429295706 1514.000000000000 +250.999729474504 2773.000000000000 +251.183971646461 1489.000000000000 +252.995981830428 1551.000000000000 +254.083074751473 9429.120117187500 +255.086820384220 1377.000000000000 +263.222311732307 2471.000000000000 +267.171870845764 2258.980468750000 +279.093901316594 2048.000000000000 +281.049438213658 1751.000000000000 +294.135818344908 5481.558593750000 +295.109372469252 1897.115356445312 +295.138871323712 1781.417114257812 +295.189645544086 2819.352539062500 +296.133069738097 2033.000000000000 +327.007288064241 3025.000000000000 +329.004769816867 3185.000000000000 +330.205517897635 2254.151367187500 +382.973343340575 128910.000000000000 +383.974420009478 19401.000000000000 +384.970517685034 123104.000000000000 +385.972091464734 19887.753906250000 +386.967095187750 40063.000000000000 +387.969295280357 6423.000000000000 +388.967906459311 6161.070800781250 +389.971679644558 1409.000000000000 +390.977098155446 1517.000000000000 +395.362969520157 18140.000000000000 +396.365852571670 4542.050781250000 +404.954053810599 10802.145507812500 +405.957174296560 1793.000000000000 +406.951585967555 9725.000000000000 +407.954045316121 1912.000000000000 +408.948897136319 3528.000000000000 +417.344632939875 1893.000000000000 +428.029700918640 1211.000000000000 +430.026672148293 1482.044921875000 +445.120053978151 2346.000000000000 +494.323461441053 1521.000000000000 +502.291764818600 2916.000000000000 +505.851961472306 3786.000000000000 +506.852170245549 1182.000000000000 +519.137955312660 1219.000000000000 +520.337411206304 1698.399902343750 +522.877298691702 1797.000000000000 +524.369915946327 2231.000000000000 +526.290801987448 1556.211059570312 +529.889255527270 1419.000000000000 +536.163579057835 5311.000000000000 +537.165965016465 2630.000000000000 +538.162485296433 1988.000000000000 +542.321404252303 1551.000000000000 +544.338164794243 3319.000000000000 +546.913545702099 2487.013183593750 +547.909624574493 1196.000000000000 +610.183491076142 2248.000000000000 +611.183468001329 1243.000000000000 +788.916160573117 1967.000000000000 +790.915223694521 1465.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=696 experiment=7 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=696 experiment=7_0 +##scan 238 +##specref ms_run[1]:sample=1 period=1 cycle=696 experiment=7 +184.073193059852 16.000000000000 +186.878943414828 24.000000000000 +274.892196117004 16.000000000000 +356.844064437951 148.000000000000 +357.849826696001 16.000000000000 +372.837783813609 16.000000000000 +401.841268557644 93.000000000000 +415.858238601023 78.000000000000 +446.841398216836 55.000000000000 +460.856143814515 54.000000000000 +505.857178011940 46.000000000000 +523.278831824753 16.000000000000 +523.312017459448 16.000000000000 +>compound 1_0-697002--240--UNKNOWN +>parentmass 267.191626525512 +>charge 1 +>rt 464.596999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +267.191626525512 2448.278076171875 +>ms1peaks +52.005427240284 2923.313720703125 +53.013616481231 14989.768554687500 +53.850472964397 1308.466552734375 +54.009310518894 333383.375000000000 +55.005954268156 5677.140625000000 +55.011350090709 6590.077148437500 +55.054055730323 2432.223876953125 +55.934192273330 5153.507324218750 +56.941997962024 2194.530029296875 +59.049620936632 68821.031250000000 +60.044471615888 10770.879882812500 +61.039336267621 1456.228393554688 +63.997801587333 4661.993164062500 +64.005166963107 4722.689941406250 +68.011643141684 27093.162109375000 +68.993456857479 10451.278320312500 +69.044656507552 15424.197265625000 +72.936547962144 1517.215332031250 +73.064190570387 1758.111816406250 +76.486210720813 2024.000000000000 +79.020813920038 17557.603515625000 +80.048811456017 12906.275390625000 +81.937043151106 7275.615722656250 +82.996433945296 7505.000000000000 +87.054223137822 1349.886352539062 +89.059191859030 1141.920776367188 +89.070142088088 1147.254150390625 +90.489205006552 1611.000000000000 +91.053827827406 1364.000000000000 +95.951785770532 2156.000000000000 +97.954137769975 1385.939941406250 +97.968348918090 6032.628417968750 +100.075069267539 1304.873046875000 +102.090653593364 2396.000000000000 +109.942361299198 1163.000000000000 +113.962823136479 1406.000000000000 +114.090717415521 11183.788085937500 +118.085199200251 6733.347167968750 +122.095741165234 3486.000000000000 +122.963079032375 8903.822265625000 +123.091347599456 2003.361694335938 +129.052095335934 1106.817871093750 +130.158365124098 1204.000000000000 +136.020522218220 2035.000000000000 +136.111245412379 1440.019042968750 +137.963071577039 1390.923217773438 +141.090010612505 1589.306518554688 +141.112047500506 1641.892456054688 +141.957498005159 13897.860351562500 +147.090562129050 2521.383789062500 +149.022331865109 4554.995605468750 +149.042499632055 2561.067626953125 +151.095629970654 3075.615722656250 +151.110071667005 3440.213378906250 +155.069443089983 1693.193481445312 +155.105464754412 1925.412475585938 +155.973050803638 3528.460205078125 +158.095365461629 1182.418457031250 +158.153395391582 11269.974609375000 +159.136897039458 2827.216552734375 +159.156058748204 1760.928710937500 +161.095507984757 2002.371093750000 +163.129998429243 1243.407836914062 +164.142388369546 1610.000000000000 +167.106287358921 1246.267578125000 +170.095226994886 3007.033691406250 +171.146614518976 1299.713623046875 +172.132709557758 1110.848144531250 +173.079715894846 7226.916503906250 +174.127178255488 1120.000000000000 +174.990849972350 1188.000000000000 +178.157984123961 1728.000000000000 +179.105778882816 2150.000000000000 +182.961420100006 2518.791992187500 +182.981750761571 1754.833007812500 +183.080577239146 1108.775390625000 +183.098465199981 1168.311401367188 +186.220975094919 2195.000000000000 +193.157052354530 1385.468139648438 +194.115965777249 3385.242919921875 +195.102755906708 1531.518676757812 +195.121395267372 2006.934082031250 +198.184747881335 2583.000000000000 +199.168770376665 1244.081542968750 +200.200485918845 1338.000000000000 +211.168386085952 1428.000000000000 +217.106407145977 24952.000000000000 +218.108774148422 2947.256591796875 +219.097576932087 1266.846923828125 +219.173964064296 1093.175781250000 +227.127938276529 1838.743530273438 +228.194922149263 1956.991577148438 +235.168042173395 1193.751708984375 +239.088653587696 5535.238769531250 +239.126545303394 1424.462036132812 +242.283846695579 1631.000000000000 +246.862279064465 2170.000000000000 +249.183296341533 1598.000000000000 +250.178336511394 1309.286376953125 +250.999431459865 2618.000000000000 +251.184298873617 1422.000000000000 +252.996590126069 1689.000000000000 +254.083046501779 4697.000000000000 +263.221299476934 4185.000000000000 +267.170822146401 2460.057617187500 +267.191626525512 2448.278076171875 +279.093480203217 2101.000000000000 +281.049611432109 1689.000000000000 +294.135844133695 3645.000000000000 +295.138754755779 1144.000000000000 +295.189808850807 3732.970214843750 +296.132583628406 1460.000000000000 +327.007806739012 3347.000000000000 +329.004430802626 3581.000000000000 +330.205699537092 2574.328125000000 +331.001124982932 1337.000000000000 +371.100332921841 1223.000000000000 +371.315743669974 1118.000000000000 +382.972344820498 45057.000000000000 +383.974894538183 6892.720214843750 +384.969630012898 45215.000000000000 +385.972302022157 7057.000000000000 +386.966436829396 14281.893554687500 +387.970121087256 2474.000000000000 +388.968036369514 2204.000000000000 +395.363007240073 13101.000000000000 +396.365399815672 3685.000000000000 +404.953924210193 3907.000000000000 +406.950985883891 4069.000000000000 +408.947975755388 1268.274536132812 +417.344225103353 1285.000000000000 +445.118145821068 2311.715087890625 +494.322767200081 1728.000000000000 +502.291923274965 2891.000000000000 +505.851540130884 3616.305664062500 +506.855578204607 1154.000000000000 +519.137731798453 1103.000000000000 +520.338561646825 1699.000000000000 +522.877671728326 1793.000000000000 +524.369045228357 2314.407714843750 +526.292280755429 1584.000000000000 +529.889084454853 1296.000000000000 +536.163903290276 5401.000000000000 +537.164637090465 2677.000000000000 +538.162386983866 2172.000000000000 +542.324220505297 1514.000000000000 +544.338194999500 3083.000000000000 +546.915335792881 2789.000000000000 +610.182280791237 2231.000000000000 +611.184018740044 1223.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=697 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=697 experiment=2_0 +##scan 240 +##specref ms_run[1]:sample=1 period=1 cycle=697 experiment=2 +69.070517917496 16.000000000000 +98.983022241532 133.000000000000 +133.102241352409 16.000000000000 +>compound 1_0-697003--241--UNKNOWN +>parentmass 478.287672122080 +>charge 1 +>rt 464.596999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005427240284 2923.313720703125 +53.013616481231 14989.768554687500 +53.850472964397 1308.466552734375 +54.009310518894 333383.375000000000 +55.005954268156 5677.140625000000 +55.011350090709 6590.077148437500 +55.054055730323 2432.223876953125 +55.934192273330 5153.507324218750 +56.941997962024 2194.530029296875 +59.049620936632 68821.031250000000 +60.044471615888 10770.879882812500 +61.039336267621 1456.228393554688 +63.997801587333 4661.993164062500 +64.005166963107 4722.689941406250 +68.011643141684 27093.162109375000 +68.993456857479 10451.278320312500 +69.044656507552 15424.197265625000 +72.936547962144 1517.215332031250 +73.064190570387 1758.111816406250 +76.486210720813 2024.000000000000 +79.020813920038 17557.603515625000 +80.048811456017 12906.275390625000 +81.937043151106 7275.615722656250 +82.996433945296 7505.000000000000 +87.054223137822 1349.886352539062 +89.059191859030 1141.920776367188 +89.070142088088 1147.254150390625 +90.489205006552 1611.000000000000 +91.053827827406 1364.000000000000 +95.951785770532 2156.000000000000 +97.954137769975 1385.939941406250 +97.968348918090 6032.628417968750 +100.075069267539 1304.873046875000 +102.090653593364 2396.000000000000 +109.942361299198 1163.000000000000 +113.962823136479 1406.000000000000 +114.090717415521 11183.788085937500 +118.085199200251 6733.347167968750 +122.095741165234 3486.000000000000 +122.963079032375 8903.822265625000 +123.091347599456 2003.361694335938 +129.052095335934 1106.817871093750 +130.158365124098 1204.000000000000 +136.020522218220 2035.000000000000 +136.111245412379 1440.019042968750 +137.963071577039 1390.923217773438 +141.090010612505 1589.306518554688 +141.112047500506 1641.892456054688 +141.957498005159 13897.860351562500 +147.090562129050 2521.383789062500 +149.022331865109 4554.995605468750 +149.042499632055 2561.067626953125 +151.095629970654 3075.615722656250 +151.110071667005 3440.213378906250 +155.069443089983 1693.193481445312 +155.105464754412 1925.412475585938 +155.973050803638 3528.460205078125 +158.095365461629 1182.418457031250 +158.153395391582 11269.974609375000 +159.136897039458 2827.216552734375 +159.156058748204 1760.928710937500 +161.095507984757 2002.371093750000 +163.129998429243 1243.407836914062 +164.142388369546 1610.000000000000 +167.106287358921 1246.267578125000 +170.095226994886 3007.033691406250 +171.146614518976 1299.713623046875 +172.132709557758 1110.848144531250 +173.079715894846 7226.916503906250 +174.127178255488 1120.000000000000 +174.990849972350 1188.000000000000 +178.157984123961 1728.000000000000 +179.105778882816 2150.000000000000 +182.961420100006 2518.791992187500 +182.981750761571 1754.833007812500 +183.080577239146 1108.775390625000 +183.098465199981 1168.311401367188 +186.220975094919 2195.000000000000 +193.157052354530 1385.468139648438 +194.115965777249 3385.242919921875 +195.102755906708 1531.518676757812 +195.121395267372 2006.934082031250 +198.184747881335 2583.000000000000 +199.168770376665 1244.081542968750 +200.200485918845 1338.000000000000 +211.168386085952 1428.000000000000 +217.106407145977 24952.000000000000 +218.108774148422 2947.256591796875 +219.097576932087 1266.846923828125 +219.173964064296 1093.175781250000 +227.127938276529 1838.743530273438 +228.194922149263 1956.991577148438 +235.168042173395 1193.751708984375 +239.088653587696 5535.238769531250 +239.126545303394 1424.462036132812 +242.283846695579 1631.000000000000 +246.862279064465 2170.000000000000 +249.183296341533 1598.000000000000 +250.178336511394 1309.286376953125 +250.999431459865 2618.000000000000 +251.184298873617 1422.000000000000 +252.996590126069 1689.000000000000 +254.083046501779 4697.000000000000 +263.221299476934 4185.000000000000 +267.170822146401 2460.057617187500 +267.191626525512 2448.278076171875 +279.093480203217 2101.000000000000 +281.049611432109 1689.000000000000 +294.135844133695 3645.000000000000 +295.138754755779 1144.000000000000 +295.189808850807 3732.970214843750 +296.132583628406 1460.000000000000 +327.007806739012 3347.000000000000 +329.004430802626 3581.000000000000 +330.205699537092 2574.328125000000 +331.001124982932 1337.000000000000 +371.100332921841 1223.000000000000 +371.315743669974 1118.000000000000 +382.972344820498 45057.000000000000 +383.974894538183 6892.720214843750 +384.969630012898 45215.000000000000 +385.972302022157 7057.000000000000 +386.966436829396 14281.893554687500 +387.970121087256 2474.000000000000 +388.968036369514 2204.000000000000 +395.363007240073 13101.000000000000 +396.365399815672 3685.000000000000 +404.953924210193 3907.000000000000 +406.950985883891 4069.000000000000 +408.947975755388 1268.274536132812 +417.344225103353 1285.000000000000 +445.118145821068 2311.715087890625 +494.322767200081 1728.000000000000 +502.291923274965 2891.000000000000 +505.851540130884 3616.305664062500 +506.855578204607 1154.000000000000 +519.137731798453 1103.000000000000 +520.338561646825 1699.000000000000 +522.877671728326 1793.000000000000 +524.369045228357 2314.407714843750 +526.292280755429 1584.000000000000 +529.889084454853 1296.000000000000 +536.163903290276 5401.000000000000 +537.164637090465 2677.000000000000 +538.162386983866 2172.000000000000 +542.324220505297 1514.000000000000 +544.338194999500 3083.000000000000 +546.915335792881 2789.000000000000 +610.182280791237 2231.000000000000 +611.184018740044 1223.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=697 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=697 experiment=3_0 +##scan 241 +##specref ms_run[1]:sample=1 period=1 cycle=697 experiment=3 +97.025634587463 6.000000000000 +306.281011649799 16.000000000000 +337.234761896560 16.000000000000 +337.274602002093 16.000000000000 +428.362784878476 6.000000000000 +>compound 1_0-697004--242--UNKNOWN +>parentmass 494.322767200081 +>charge 1 +>rt 464.596999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +494.322767200081 1728.000000000000 +>ms1peaks +52.005427240284 2923.313720703125 +53.013616481231 14989.768554687500 +53.850472964397 1308.466552734375 +54.009310518894 333383.375000000000 +55.005954268156 5677.140625000000 +55.011350090709 6590.077148437500 +55.054055730323 2432.223876953125 +55.934192273330 5153.507324218750 +56.941997962024 2194.530029296875 +59.049620936632 68821.031250000000 +60.044471615888 10770.879882812500 +61.039336267621 1456.228393554688 +63.997801587333 4661.993164062500 +64.005166963107 4722.689941406250 +68.011643141684 27093.162109375000 +68.993456857479 10451.278320312500 +69.044656507552 15424.197265625000 +72.936547962144 1517.215332031250 +73.064190570387 1758.111816406250 +76.486210720813 2024.000000000000 +79.020813920038 17557.603515625000 +80.048811456017 12906.275390625000 +81.937043151106 7275.615722656250 +82.996433945296 7505.000000000000 +87.054223137822 1349.886352539062 +89.059191859030 1141.920776367188 +89.070142088088 1147.254150390625 +90.489205006552 1611.000000000000 +91.053827827406 1364.000000000000 +95.951785770532 2156.000000000000 +97.954137769975 1385.939941406250 +97.968348918090 6032.628417968750 +100.075069267539 1304.873046875000 +102.090653593364 2396.000000000000 +109.942361299198 1163.000000000000 +113.962823136479 1406.000000000000 +114.090717415521 11183.788085937500 +118.085199200251 6733.347167968750 +122.095741165234 3486.000000000000 +122.963079032375 8903.822265625000 +123.091347599456 2003.361694335938 +129.052095335934 1106.817871093750 +130.158365124098 1204.000000000000 +136.020522218220 2035.000000000000 +136.111245412379 1440.019042968750 +137.963071577039 1390.923217773438 +141.090010612505 1589.306518554688 +141.112047500506 1641.892456054688 +141.957498005159 13897.860351562500 +147.090562129050 2521.383789062500 +149.022331865109 4554.995605468750 +149.042499632055 2561.067626953125 +151.095629970654 3075.615722656250 +151.110071667005 3440.213378906250 +155.069443089983 1693.193481445312 +155.105464754412 1925.412475585938 +155.973050803638 3528.460205078125 +158.095365461629 1182.418457031250 +158.153395391582 11269.974609375000 +159.136897039458 2827.216552734375 +159.156058748204 1760.928710937500 +161.095507984757 2002.371093750000 +163.129998429243 1243.407836914062 +164.142388369546 1610.000000000000 +167.106287358921 1246.267578125000 +170.095226994886 3007.033691406250 +171.146614518976 1299.713623046875 +172.132709557758 1110.848144531250 +173.079715894846 7226.916503906250 +174.127178255488 1120.000000000000 +174.990849972350 1188.000000000000 +178.157984123961 1728.000000000000 +179.105778882816 2150.000000000000 +182.961420100006 2518.791992187500 +182.981750761571 1754.833007812500 +183.080577239146 1108.775390625000 +183.098465199981 1168.311401367188 +186.220975094919 2195.000000000000 +193.157052354530 1385.468139648438 +194.115965777249 3385.242919921875 +195.102755906708 1531.518676757812 +195.121395267372 2006.934082031250 +198.184747881335 2583.000000000000 +199.168770376665 1244.081542968750 +200.200485918845 1338.000000000000 +211.168386085952 1428.000000000000 +217.106407145977 24952.000000000000 +218.108774148422 2947.256591796875 +219.097576932087 1266.846923828125 +219.173964064296 1093.175781250000 +227.127938276529 1838.743530273438 +228.194922149263 1956.991577148438 +235.168042173395 1193.751708984375 +239.088653587696 5535.238769531250 +239.126545303394 1424.462036132812 +242.283846695579 1631.000000000000 +246.862279064465 2170.000000000000 +249.183296341533 1598.000000000000 +250.178336511394 1309.286376953125 +250.999431459865 2618.000000000000 +251.184298873617 1422.000000000000 +252.996590126069 1689.000000000000 +254.083046501779 4697.000000000000 +263.221299476934 4185.000000000000 +267.170822146401 2460.057617187500 +267.191626525512 2448.278076171875 +279.093480203217 2101.000000000000 +281.049611432109 1689.000000000000 +294.135844133695 3645.000000000000 +295.138754755779 1144.000000000000 +295.189808850807 3732.970214843750 +296.132583628406 1460.000000000000 +327.007806739012 3347.000000000000 +329.004430802626 3581.000000000000 +330.205699537092 2574.328125000000 +331.001124982932 1337.000000000000 +371.100332921841 1223.000000000000 +371.315743669974 1118.000000000000 +382.972344820498 45057.000000000000 +383.974894538183 6892.720214843750 +384.969630012898 45215.000000000000 +385.972302022157 7057.000000000000 +386.966436829396 14281.893554687500 +387.970121087256 2474.000000000000 +388.968036369514 2204.000000000000 +395.363007240073 13101.000000000000 +396.365399815672 3685.000000000000 +404.953924210193 3907.000000000000 +406.950985883891 4069.000000000000 +408.947975755388 1268.274536132812 +417.344225103353 1285.000000000000 +445.118145821068 2311.715087890625 +494.322767200081 1728.000000000000 +502.291923274965 2891.000000000000 +505.851540130884 3616.305664062500 +506.855578204607 1154.000000000000 +519.137731798453 1103.000000000000 +520.338561646825 1699.000000000000 +522.877671728326 1793.000000000000 +524.369045228357 2314.407714843750 +526.292280755429 1584.000000000000 +529.889084454853 1296.000000000000 +536.163903290276 5401.000000000000 +537.164637090465 2677.000000000000 +538.162386983866 2172.000000000000 +542.324220505297 1514.000000000000 +544.338194999500 3083.000000000000 +546.915335792881 2789.000000000000 +610.182280791237 2231.000000000000 +611.184018740044 1223.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=697 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=697 experiment=4_0 +##scan 242 +##specref ms_run[1]:sample=1 period=1 cycle=697 experiment=4 +152.102703927557 6.000000000000 +184.071867370283 175.000000000000 +279.131086538316 6.000000000000 +394.949360432659 6.000000000000 +>compound 1_0-697005--243--UNKNOWN +>parentmass 544.917445148180 +>charge 1 +>rt 464.596999999980 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005427240284 2923.313720703125 +53.013616481231 14989.768554687500 +53.850472964397 1308.466552734375 +54.009310518894 333383.375000000000 +55.005954268156 5677.140625000000 +55.011350090709 6590.077148437500 +55.054055730323 2432.223876953125 +55.934192273330 5153.507324218750 +56.941997962024 2194.530029296875 +59.049620936632 68821.031250000000 +60.044471615888 10770.879882812500 +61.039336267621 1456.228393554688 +63.997801587333 4661.993164062500 +64.005166963107 4722.689941406250 +68.011643141684 27093.162109375000 +68.993456857479 10451.278320312500 +69.044656507552 15424.197265625000 +72.936547962144 1517.215332031250 +73.064190570387 1758.111816406250 +76.486210720813 2024.000000000000 +79.020813920038 17557.603515625000 +80.048811456017 12906.275390625000 +81.937043151106 7275.615722656250 +82.996433945296 7505.000000000000 +87.054223137822 1349.886352539062 +89.059191859030 1141.920776367188 +89.070142088088 1147.254150390625 +90.489205006552 1611.000000000000 +91.053827827406 1364.000000000000 +95.951785770532 2156.000000000000 +97.954137769975 1385.939941406250 +97.968348918090 6032.628417968750 +100.075069267539 1304.873046875000 +102.090653593364 2396.000000000000 +109.942361299198 1163.000000000000 +113.962823136479 1406.000000000000 +114.090717415521 11183.788085937500 +118.085199200251 6733.347167968750 +122.095741165234 3486.000000000000 +122.963079032375 8903.822265625000 +123.091347599456 2003.361694335938 +129.052095335934 1106.817871093750 +130.158365124098 1204.000000000000 +136.020522218220 2035.000000000000 +136.111245412379 1440.019042968750 +137.963071577039 1390.923217773438 +141.090010612505 1589.306518554688 +141.112047500506 1641.892456054688 +141.957498005159 13897.860351562500 +147.090562129050 2521.383789062500 +149.022331865109 4554.995605468750 +149.042499632055 2561.067626953125 +151.095629970654 3075.615722656250 +151.110071667005 3440.213378906250 +155.069443089983 1693.193481445312 +155.105464754412 1925.412475585938 +155.973050803638 3528.460205078125 +158.095365461629 1182.418457031250 +158.153395391582 11269.974609375000 +159.136897039458 2827.216552734375 +159.156058748204 1760.928710937500 +161.095507984757 2002.371093750000 +163.129998429243 1243.407836914062 +164.142388369546 1610.000000000000 +167.106287358921 1246.267578125000 +170.095226994886 3007.033691406250 +171.146614518976 1299.713623046875 +172.132709557758 1110.848144531250 +173.079715894846 7226.916503906250 +174.127178255488 1120.000000000000 +174.990849972350 1188.000000000000 +178.157984123961 1728.000000000000 +179.105778882816 2150.000000000000 +182.961420100006 2518.791992187500 +182.981750761571 1754.833007812500 +183.080577239146 1108.775390625000 +183.098465199981 1168.311401367188 +186.220975094919 2195.000000000000 +193.157052354530 1385.468139648438 +194.115965777249 3385.242919921875 +195.102755906708 1531.518676757812 +195.121395267372 2006.934082031250 +198.184747881335 2583.000000000000 +199.168770376665 1244.081542968750 +200.200485918845 1338.000000000000 +211.168386085952 1428.000000000000 +217.106407145977 24952.000000000000 +218.108774148422 2947.256591796875 +219.097576932087 1266.846923828125 +219.173964064296 1093.175781250000 +227.127938276529 1838.743530273438 +228.194922149263 1956.991577148438 +235.168042173395 1193.751708984375 +239.088653587696 5535.238769531250 +239.126545303394 1424.462036132812 +242.283846695579 1631.000000000000 +246.862279064465 2170.000000000000 +249.183296341533 1598.000000000000 +250.178336511394 1309.286376953125 +250.999431459865 2618.000000000000 +251.184298873617 1422.000000000000 +252.996590126069 1689.000000000000 +254.083046501779 4697.000000000000 +263.221299476934 4185.000000000000 +267.170822146401 2460.057617187500 +267.191626525512 2448.278076171875 +279.093480203217 2101.000000000000 +281.049611432109 1689.000000000000 +294.135844133695 3645.000000000000 +295.138754755779 1144.000000000000 +295.189808850807 3732.970214843750 +296.132583628406 1460.000000000000 +327.007806739012 3347.000000000000 +329.004430802626 3581.000000000000 +330.205699537092 2574.328125000000 +331.001124982932 1337.000000000000 +371.100332921841 1223.000000000000 +371.315743669974 1118.000000000000 +382.972344820498 45057.000000000000 +383.974894538183 6892.720214843750 +384.969630012898 45215.000000000000 +385.972302022157 7057.000000000000 +386.966436829396 14281.893554687500 +387.970121087256 2474.000000000000 +388.968036369514 2204.000000000000 +395.363007240073 13101.000000000000 +396.365399815672 3685.000000000000 +404.953924210193 3907.000000000000 +406.950985883891 4069.000000000000 +408.947975755388 1268.274536132812 +417.344225103353 1285.000000000000 +445.118145821068 2311.715087890625 +494.322767200081 1728.000000000000 +502.291923274965 2891.000000000000 +505.851540130884 3616.305664062500 +506.855578204607 1154.000000000000 +519.137731798453 1103.000000000000 +520.338561646825 1699.000000000000 +522.877671728326 1793.000000000000 +524.369045228357 2314.407714843750 +526.292280755429 1584.000000000000 +529.889084454853 1296.000000000000 +536.163903290276 5401.000000000000 +537.164637090465 2677.000000000000 +538.162386983866 2172.000000000000 +542.324220505297 1514.000000000000 +544.338194999500 3083.000000000000 +546.915335792881 2789.000000000000 +610.182280791237 2231.000000000000 +611.184018740044 1223.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=697 experiment=5 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=697 experiment=5_0 +##scan 243 +##specref ms_run[1]:sample=1 period=1 cycle=697 experiment=5 +184.075017943946 85.000000000000 +354.849036938252 32.000000000000 +413.862700690143 16.000000000000 +458.868136729480 16.000000000000 +526.911477478016 16.000000000000 +545.338023820396 16.000000000000 +>compound 1_0-698002--245--UNKNOWN +>parentmass 263.220918785934 +>charge 1 +>rt 465.526000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +263.220918785934 2823.588134765625 +>ms1peaks +52.005589131375 3130.349365234375 +53.013517739076 14697.051757812500 +53.850218968452 1202.935424804688 +54.009315378211 338490.156250000000 +55.005860832699 5894.120605468750 +55.011472744710 6465.230957031250 +55.054318107921 2020.605346679688 +55.934228385603 5009.301269531250 +56.941754336839 2130.831542968750 +59.049456228043 59177.148437500000 +60.044234257537 10917.369140625000 +61.039652331078 1777.367553710938 +63.997365450761 4192.257324218750 +64.005115881318 4444.796386718750 +68.011603027288 26823.138671875000 +68.993470221767 9964.955078125000 +69.007486586194 1095.631469726562 +69.044619311427 15983.488281250000 +72.044216409752 1139.000000000000 +72.936294899990 1648.416259765625 +73.064246201958 1716.000000000000 +76.485918443583 1984.476196289062 +79.020747652729 15663.000000000000 +80.048882140116 11802.633789062500 +81.936873787809 6842.756835937500 +82.996426393696 7681.036132812500 +87.043283393116 1213.816894531250 +87.054344444656 1330.118408203125 +89.505923988939 1278.000000000000 +90.488731006175 1482.000000000000 +91.053461651955 1241.000000000000 +95.951863618515 1860.000000000000 +97.968166428010 6253.000000000000 +100.074474984082 1099.000000000000 +102.090652367720 1813.000000000000 +109.942457249207 1008.771179199219 +113.962148757228 1693.000000000000 +114.090809402438 11290.813476562500 +118.085244445320 6882.000000000000 +122.095397054352 3393.603271484375 +122.962888065001 8194.000000000000 +123.090260852479 1992.821777343750 +130.158465705593 1181.000000000000 +136.020653739305 1724.000000000000 +136.111698267290 1289.000000000000 +137.963288114366 1242.444213867188 +141.090108488084 1520.015136718750 +141.111967815796 1417.245483398438 +141.957476510097 12472.000000000000 +147.090456475555 2851.000000000000 +149.022463530754 4820.632812500000 +149.042235264033 2356.604736328125 +151.095673986155 2529.883300781250 +151.107430224637 2920.417968750000 +155.069194551202 1446.022338867188 +155.105407267345 1942.000000000000 +155.973253498540 3634.000000000000 +158.095714764665 1320.577636718750 +158.152923535212 11099.000000000000 +159.137494733132 1660.052856445312 +159.155745123011 1658.278930664062 +161.094764207886 1681.376342773438 +164.142001743791 1341.120483398438 +170.095222794370 2839.603759765625 +171.146989546605 1531.000000000000 +172.132266313086 1244.552001953125 +173.079934079088 7202.686523437500 +174.991086633921 1255.000000000000 +175.124110498799 1291.355468750000 +177.053389902229 1149.000000000000 +178.157910318215 1375.563720703125 +179.105770006733 1768.004394531250 +182.961153502245 2714.091308593750 +183.078381234332 1206.638793945312 +183.098504612661 1216.456176757812 +186.221147915941 1294.000000000000 +193.157197259550 1404.155517578125 +194.115556745856 3793.000000000000 +195.103459935118 1813.044067382812 +195.121128317791 2123.445068359375 +198.184778281293 2222.000000000000 +200.200245934905 1123.000000000000 +211.108434487222 1168.700317382812 +211.167984060349 1195.000000000000 +217.106288114813 23775.798828125000 +218.109345247878 2906.000000000000 +219.173912266656 1809.000000000000 +224.127760861374 1358.000000000000 +225.109187446267 1008.795715332031 +227.127112071774 1496.648437500000 +228.195572718351 1321.546875000000 +235.168386372317 1254.757568359375 +239.088119692734 5305.000000000000 +239.126148617742 1153.781494140625 +242.283030268449 2040.000000000000 +246.861848402344 2412.000000000000 +249.184372758037 1654.000000000000 +250.177824288551 1192.000000000000 +250.999695645577 2632.000000000000 +251.183244725941 1155.872680664062 +252.996466822149 1585.000000000000 +254.083079276448 2597.000000000000 +263.220918785934 2823.588134765625 +267.170427695644 2109.290039062500 +267.192582365578 2074.657226562500 +279.092392934574 2006.759277343750 +281.050093512773 1341.000000000000 +294.136210904325 1884.000000000000 +295.189565558026 2458.217285156250 +307.247918419507 2395.110839843750 +309.224348364187 1104.981567382812 +327.007524262411 3370.000000000000 +329.004685783249 3558.000000000000 +330.206460240109 2362.000000000000 +331.001516987454 1058.000000000000 +371.314112464098 1048.000000000000 +382.972184316419 15623.000000000000 +383.973826791245 2707.776367187500 +384.969267531796 15234.000000000000 +385.971597867041 2479.000000000000 +386.965949968426 4942.000000000000 +395.362239031968 7598.000000000000 +396.366124248924 1716.000000000000 +404.953722486304 1515.000000000000 +406.951529112078 1328.000000000000 +430.885910175897 1110.000000000000 +432.883402826014 1099.000000000000 +445.119289543855 2367.000000000000 +494.323061872171 2321.661132812500 +502.292241962878 3033.000000000000 +503.293623375792 1158.000000000000 +505.851656317080 3530.000000000000 +506.852917706083 1112.000000000000 +519.138155588502 1196.000000000000 +520.338518138058 1825.000000000000 +522.876970148967 1547.000000000000 +524.369209499018 2144.000000000000 +526.292881243077 2044.000000000000 +529.888143664648 1222.000000000000 +536.163427530419 5367.000000000000 +537.165157901330 2856.000000000000 +538.162946926408 2152.000000000000 +542.322124516090 1481.232299804688 +544.339127176641 3047.708251953125 +545.342535198760 1103.000000000000 +546.912412180754 2302.000000000000 +547.911197303586 1144.000000000000 +610.182428535466 2237.000000000000 +611.184725308291 1285.000000000000 +612.182098985386 1057.848388671875 +>ms2peaks +##n_id sample=1 period=1 cycle=698 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=698 experiment=2_0 +##scan 245 +##specref ms_run[1]:sample=1 period=1 cycle=698 experiment=2 +51.939673314341 4.000000000000 +57.070753852921 12.000000000000 +83.646311166498 2.000000000000 +101.063002936009 2.000000000000 +128.062627694121 4.000000000000 +136.978392194616 2.000000000000 +161.117720276982 2.000000000000 +165.074991765264 2.000000000000 +191.813906306682 2.000000000000 +230.042407701820 2.000000000000 +1333.852230993652 2.000000000000 +>compound 1_0-699002--247--UNKNOWN +>parentmass 219.173254694737 +>charge 1 +>rt 466.453000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +219.173254694737 2201.000000000000 +>ms1peaks +52.005560260371 2789.028076171875 +52.017927711242 1136.972045898438 +53.013418383569 14123.403320312500 +53.850493419239 1411.939086914062 +54.009249957596 335870.000000000000 +55.005845223011 5397.640136718750 +55.011420191852 5650.468261718750 +55.054222928931 2225.691162109375 +55.934180398274 4785.148437500000 +56.049321995857 3472.600830078125 +56.941794457155 1955.514892578125 +59.049414458071 61085.878906250000 +60.044500187972 10957.461914062500 +61.039422636506 1853.249755859375 +63.997538365617 4088.351562500000 +64.004989390616 4565.185058593750 +67.028672867960 1916.769287109375 +68.011545384332 26549.513671875000 +68.993429576997 10225.795898437500 +69.007397090736 1350.108032226562 +69.013808493376 1140.018432617188 +69.033704350392 1409.946411132812 +69.044418810862 15163.557617187500 +72.936460095966 1712.280395507812 +73.063966867639 2040.000000000000 +76.486088498070 1751.000000000000 +79.020831309156 15603.345703125000 +80.048807615565 12623.536132812500 +81.936815277681 6972.759765625000 +82.996143905896 6970.887695312500 +87.043469468808 1444.273437500000 +87.054062034975 1546.210449218750 +89.059116268447 1220.354248046875 +89.070128900951 1085.624389648438 +89.505980515299 1269.470947265625 +90.489077436854 1623.000000000000 +91.053267626518 1389.000000000000 +95.951994498460 1726.000000000000 +97.967675925632 6203.887207031250 +100.074874519339 1141.321289062500 +102.090533565727 2294.000000000000 +109.942507888729 1195.000000000000 +113.962477173050 1682.511352539062 +114.090561181679 10963.030273437500 +118.085256707350 6123.310058593750 +122.095373261082 3897.798095703125 +122.962751648404 8175.708007812500 +123.091029235694 1867.800537109375 +130.157813965073 1259.000000000000 +135.115736707249 1153.641723632812 +136.020459111647 1696.000000000000 +136.110816301213 1052.279174804688 +137.962838703111 1171.000000000000 +138.970110408619 1047.000000000000 +139.962198814866 1216.864379882812 +141.089888756214 1805.885498046875 +141.111946961724 1433.385009765625 +141.934707195506 1500.319335937500 +141.957684513772 13692.408203125000 +147.090573869497 2962.000000000000 +149.022580861300 4880.522949218750 +149.040757804477 2488.785156250000 +151.094792965613 2894.415039062500 +151.110196147342 3347.784423828125 +154.965370500018 1186.000000000000 +155.069591951299 1551.036376953125 +155.105709038292 2065.334472656250 +155.972657151937 3882.386474609375 +158.152947821996 11148.000000000000 +159.137161206657 1637.422363281250 +159.155050140665 1640.355957031250 +159.968419621650 1176.000000000000 +161.095644175203 1895.000000000000 +164.141997918867 1434.000000000000 +170.094862611817 2528.811767578125 +171.146379961692 1460.000000000000 +172.132172295642 1322.774169921875 +173.079752448617 7920.437011718750 +174.127400198532 1301.290527343750 +174.991365577482 1157.000000000000 +175.121445174387 1216.249145507812 +178.158680332063 1537.747070312500 +179.105637868805 1831.811645507812 +182.961040899300 2544.829833984375 +186.221054618600 1546.000000000000 +193.158361427691 1043.000000000000 +194.115785956861 3478.489746093750 +195.121474846715 2341.739257812500 +198.184548673078 2661.000000000000 +199.169720809133 1148.616577148438 +199.185751628764 1087.372924804688 +200.200030921562 1179.000000000000 +209.152340091592 1378.000000000000 +217.106590112498 25025.003906250000 +218.109684671403 2771.257812500000 +219.095587597304 1094.099487304688 +219.173254694737 2201.000000000000 +221.152385611073 1064.278930664062 +223.062230429226 1228.484375000000 +224.126918591471 1193.000000000000 +227.126400766998 1565.330932617188 +228.195331222649 1352.637329101562 +235.168090360640 1305.823242187500 +239.088050443980 4960.000000000000 +242.283514625759 1833.000000000000 +246.861582419635 2495.000000000000 +249.183747745215 1681.633300781250 +250.178103308809 1399.044677734375 +250.999838048483 2781.292480468750 +251.184965259949 1252.000000000000 +252.995489487396 1719.000000000000 +254.082754928709 1554.530883789062 +263.221379225927 1646.295166015625 +267.171345052094 2042.807739257812 +279.093285456803 2174.885009765625 +281.049935629493 1806.000000000000 +295.189515349991 1468.222900390625 +307.246599950250 3678.000000000000 +327.007806324364 3884.565185546875 +329.004348900531 3616.000000000000 +330.206134297088 1922.000000000000 +331.000961984701 1294.607421875000 +371.100365483274 1147.000000000000 +382.972138302639 7140.100097656250 +383.974752988897 1101.000000000000 +384.969777669923 6623.000000000000 +385.971758186115 1179.149658203125 +386.966672520522 2179.000000000000 +395.361754334403 3979.000000000000 +430.886289312479 1060.000000000000 +445.118234333690 2053.000000000000 +494.323675353942 2385.000000000000 +502.292091005546 3295.728271484375 +503.295979898493 1294.000000000000 +505.851244732251 3515.000000000000 +519.137427220746 1294.000000000000 +520.338398901304 1674.296630859375 +522.877978653269 1259.000000000000 +524.370155350393 2137.000000000000 +526.292824200080 2209.000000000000 +536.164061960219 5671.268554687500 +537.165918091215 2415.000000000000 +538.161864384108 1812.000000000000 +542.322464209539 1354.360107421875 +544.337995564891 3645.781982421875 +544.397257124329 2812.174316406250 +545.341138349801 1204.000000000000 +546.913340862322 2248.224365234375 +610.184047214342 2118.000000000000 +611.182617785600 1204.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=699 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=699 experiment=2_0 +##scan 247 +##specref ms_run[1]:sample=1 period=1 cycle=699 experiment=2 +57.062891893230 16.000000000000 +57.069461635806 16.000000000000 +93.072810755075 6.000000000000 +120.079567061657 16.000000000000 +128.869775908514 16.000000000000 +150.720574262421 6.000000000000 +156.072598412511 16.000000000000 +171.093899043924 6.000000000000 +203.145170516845 31.000000000000 +204.050658734097 24.000000000000 +204.066752659351 24.000000000000 +219.090429620809 16.000000000000 +219.170037348541 24.000000000000 +219.187323767885 24.000000000000 +>compound 1_0-699003--248--UNKNOWN +>parentmass 324.274639242959 +>charge 1 +>rt 466.453000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005560260371 2789.028076171875 +52.017927711242 1136.972045898438 +53.013418383569 14123.403320312500 +53.850493419239 1411.939086914062 +54.009249957596 335870.000000000000 +55.005845223011 5397.640136718750 +55.011420191852 5650.468261718750 +55.054222928931 2225.691162109375 +55.934180398274 4785.148437500000 +56.049321995857 3472.600830078125 +56.941794457155 1955.514892578125 +59.049414458071 61085.878906250000 +60.044500187972 10957.461914062500 +61.039422636506 1853.249755859375 +63.997538365617 4088.351562500000 +64.004989390616 4565.185058593750 +67.028672867960 1916.769287109375 +68.011545384332 26549.513671875000 +68.993429576997 10225.795898437500 +69.007397090736 1350.108032226562 +69.013808493376 1140.018432617188 +69.033704350392 1409.946411132812 +69.044418810862 15163.557617187500 +72.936460095966 1712.280395507812 +73.063966867639 2040.000000000000 +76.486088498070 1751.000000000000 +79.020831309156 15603.345703125000 +80.048807615565 12623.536132812500 +81.936815277681 6972.759765625000 +82.996143905896 6970.887695312500 +87.043469468808 1444.273437500000 +87.054062034975 1546.210449218750 +89.059116268447 1220.354248046875 +89.070128900951 1085.624389648438 +89.505980515299 1269.470947265625 +90.489077436854 1623.000000000000 +91.053267626518 1389.000000000000 +95.951994498460 1726.000000000000 +97.967675925632 6203.887207031250 +100.074874519339 1141.321289062500 +102.090533565727 2294.000000000000 +109.942507888729 1195.000000000000 +113.962477173050 1682.511352539062 +114.090561181679 10963.030273437500 +118.085256707350 6123.310058593750 +122.095373261082 3897.798095703125 +122.962751648404 8175.708007812500 +123.091029235694 1867.800537109375 +130.157813965073 1259.000000000000 +135.115736707249 1153.641723632812 +136.020459111647 1696.000000000000 +136.110816301213 1052.279174804688 +137.962838703111 1171.000000000000 +138.970110408619 1047.000000000000 +139.962198814866 1216.864379882812 +141.089888756214 1805.885498046875 +141.111946961724 1433.385009765625 +141.934707195506 1500.319335937500 +141.957684513772 13692.408203125000 +147.090573869497 2962.000000000000 +149.022580861300 4880.522949218750 +149.040757804477 2488.785156250000 +151.094792965613 2894.415039062500 +151.110196147342 3347.784423828125 +154.965370500018 1186.000000000000 +155.069591951299 1551.036376953125 +155.105709038292 2065.334472656250 +155.972657151937 3882.386474609375 +158.152947821996 11148.000000000000 +159.137161206657 1637.422363281250 +159.155050140665 1640.355957031250 +159.968419621650 1176.000000000000 +161.095644175203 1895.000000000000 +164.141997918867 1434.000000000000 +170.094862611817 2528.811767578125 +171.146379961692 1460.000000000000 +172.132172295642 1322.774169921875 +173.079752448617 7920.437011718750 +174.127400198532 1301.290527343750 +174.991365577482 1157.000000000000 +175.121445174387 1216.249145507812 +178.158680332063 1537.747070312500 +179.105637868805 1831.811645507812 +182.961040899300 2544.829833984375 +186.221054618600 1546.000000000000 +193.158361427691 1043.000000000000 +194.115785956861 3478.489746093750 +195.121474846715 2341.739257812500 +198.184548673078 2661.000000000000 +199.169720809133 1148.616577148438 +199.185751628764 1087.372924804688 +200.200030921562 1179.000000000000 +209.152340091592 1378.000000000000 +217.106590112498 25025.003906250000 +218.109684671403 2771.257812500000 +219.095587597304 1094.099487304688 +219.173254694737 2201.000000000000 +221.152385611073 1064.278930664062 +223.062230429226 1228.484375000000 +224.126918591471 1193.000000000000 +227.126400766998 1565.330932617188 +228.195331222649 1352.637329101562 +235.168090360640 1305.823242187500 +239.088050443980 4960.000000000000 +242.283514625759 1833.000000000000 +246.861582419635 2495.000000000000 +249.183747745215 1681.633300781250 +250.178103308809 1399.044677734375 +250.999838048483 2781.292480468750 +251.184965259949 1252.000000000000 +252.995489487396 1719.000000000000 +254.082754928709 1554.530883789062 +263.221379225927 1646.295166015625 +267.171345052094 2042.807739257812 +279.093285456803 2174.885009765625 +281.049935629493 1806.000000000000 +295.189515349991 1468.222900390625 +307.246599950250 3678.000000000000 +327.007806324364 3884.565185546875 +329.004348900531 3616.000000000000 +330.206134297088 1922.000000000000 +331.000961984701 1294.607421875000 +371.100365483274 1147.000000000000 +382.972138302639 7140.100097656250 +383.974752988897 1101.000000000000 +384.969777669923 6623.000000000000 +385.971758186115 1179.149658203125 +386.966672520522 2179.000000000000 +395.361754334403 3979.000000000000 +430.886289312479 1060.000000000000 +445.118234333690 2053.000000000000 +494.323675353942 2385.000000000000 +502.292091005546 3295.728271484375 +503.295979898493 1294.000000000000 +505.851244732251 3515.000000000000 +519.137427220746 1294.000000000000 +520.338398901304 1674.296630859375 +522.877978653269 1259.000000000000 +524.370155350393 2137.000000000000 +526.292824200080 2209.000000000000 +536.164061960219 5671.268554687500 +537.165918091215 2415.000000000000 +538.161864384108 1812.000000000000 +542.322464209539 1354.360107421875 +544.337995564891 3645.781982421875 +544.397257124329 2812.174316406250 +545.341138349801 1204.000000000000 +546.913340862322 2248.224365234375 +610.184047214342 2118.000000000000 +611.182617785600 1204.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=699 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=699 experiment=3_0 +##scan 248 +##specref ms_run[1]:sample=1 period=1 cycle=699 experiment=3 +57.070471372980 25.000000000000 +69.069806674906 4.000000000000 +71.084784595433 25.000000000000 +89.058842978826 20.000000000000 +133.082448271185 10.000000000000 +133.094711639505 10.000000000000 +214.830019962888 4.000000000000 +237.045224123118 10.000000000000 +279.096262345654 4.000000000000 +>compound 1_0-699004--249--UNKNOWN +>parentmass 494.323675353942 +>charge 1 +>rt 466.453000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +494.323675353942 2385.000000000000 +>ms1peaks +52.005560260371 2789.028076171875 +52.017927711242 1136.972045898438 +53.013418383569 14123.403320312500 +53.850493419239 1411.939086914062 +54.009249957596 335870.000000000000 +55.005845223011 5397.640136718750 +55.011420191852 5650.468261718750 +55.054222928931 2225.691162109375 +55.934180398274 4785.148437500000 +56.049321995857 3472.600830078125 +56.941794457155 1955.514892578125 +59.049414458071 61085.878906250000 +60.044500187972 10957.461914062500 +61.039422636506 1853.249755859375 +63.997538365617 4088.351562500000 +64.004989390616 4565.185058593750 +67.028672867960 1916.769287109375 +68.011545384332 26549.513671875000 +68.993429576997 10225.795898437500 +69.007397090736 1350.108032226562 +69.013808493376 1140.018432617188 +69.033704350392 1409.946411132812 +69.044418810862 15163.557617187500 +72.936460095966 1712.280395507812 +73.063966867639 2040.000000000000 +76.486088498070 1751.000000000000 +79.020831309156 15603.345703125000 +80.048807615565 12623.536132812500 +81.936815277681 6972.759765625000 +82.996143905896 6970.887695312500 +87.043469468808 1444.273437500000 +87.054062034975 1546.210449218750 +89.059116268447 1220.354248046875 +89.070128900951 1085.624389648438 +89.505980515299 1269.470947265625 +90.489077436854 1623.000000000000 +91.053267626518 1389.000000000000 +95.951994498460 1726.000000000000 +97.967675925632 6203.887207031250 +100.074874519339 1141.321289062500 +102.090533565727 2294.000000000000 +109.942507888729 1195.000000000000 +113.962477173050 1682.511352539062 +114.090561181679 10963.030273437500 +118.085256707350 6123.310058593750 +122.095373261082 3897.798095703125 +122.962751648404 8175.708007812500 +123.091029235694 1867.800537109375 +130.157813965073 1259.000000000000 +135.115736707249 1153.641723632812 +136.020459111647 1696.000000000000 +136.110816301213 1052.279174804688 +137.962838703111 1171.000000000000 +138.970110408619 1047.000000000000 +139.962198814866 1216.864379882812 +141.089888756214 1805.885498046875 +141.111946961724 1433.385009765625 +141.934707195506 1500.319335937500 +141.957684513772 13692.408203125000 +147.090573869497 2962.000000000000 +149.022580861300 4880.522949218750 +149.040757804477 2488.785156250000 +151.094792965613 2894.415039062500 +151.110196147342 3347.784423828125 +154.965370500018 1186.000000000000 +155.069591951299 1551.036376953125 +155.105709038292 2065.334472656250 +155.972657151937 3882.386474609375 +158.152947821996 11148.000000000000 +159.137161206657 1637.422363281250 +159.155050140665 1640.355957031250 +159.968419621650 1176.000000000000 +161.095644175203 1895.000000000000 +164.141997918867 1434.000000000000 +170.094862611817 2528.811767578125 +171.146379961692 1460.000000000000 +172.132172295642 1322.774169921875 +173.079752448617 7920.437011718750 +174.127400198532 1301.290527343750 +174.991365577482 1157.000000000000 +175.121445174387 1216.249145507812 +178.158680332063 1537.747070312500 +179.105637868805 1831.811645507812 +182.961040899300 2544.829833984375 +186.221054618600 1546.000000000000 +193.158361427691 1043.000000000000 +194.115785956861 3478.489746093750 +195.121474846715 2341.739257812500 +198.184548673078 2661.000000000000 +199.169720809133 1148.616577148438 +199.185751628764 1087.372924804688 +200.200030921562 1179.000000000000 +209.152340091592 1378.000000000000 +217.106590112498 25025.003906250000 +218.109684671403 2771.257812500000 +219.095587597304 1094.099487304688 +219.173254694737 2201.000000000000 +221.152385611073 1064.278930664062 +223.062230429226 1228.484375000000 +224.126918591471 1193.000000000000 +227.126400766998 1565.330932617188 +228.195331222649 1352.637329101562 +235.168090360640 1305.823242187500 +239.088050443980 4960.000000000000 +242.283514625759 1833.000000000000 +246.861582419635 2495.000000000000 +249.183747745215 1681.633300781250 +250.178103308809 1399.044677734375 +250.999838048483 2781.292480468750 +251.184965259949 1252.000000000000 +252.995489487396 1719.000000000000 +254.082754928709 1554.530883789062 +263.221379225927 1646.295166015625 +267.171345052094 2042.807739257812 +279.093285456803 2174.885009765625 +281.049935629493 1806.000000000000 +295.189515349991 1468.222900390625 +307.246599950250 3678.000000000000 +327.007806324364 3884.565185546875 +329.004348900531 3616.000000000000 +330.206134297088 1922.000000000000 +331.000961984701 1294.607421875000 +371.100365483274 1147.000000000000 +382.972138302639 7140.100097656250 +383.974752988897 1101.000000000000 +384.969777669923 6623.000000000000 +385.971758186115 1179.149658203125 +386.966672520522 2179.000000000000 +395.361754334403 3979.000000000000 +430.886289312479 1060.000000000000 +445.118234333690 2053.000000000000 +494.323675353942 2385.000000000000 +502.292091005546 3295.728271484375 +503.295979898493 1294.000000000000 +505.851244732251 3515.000000000000 +519.137427220746 1294.000000000000 +520.338398901304 1674.296630859375 +522.877978653269 1259.000000000000 +524.370155350393 2137.000000000000 +526.292824200080 2209.000000000000 +536.164061960219 5671.268554687500 +537.165918091215 2415.000000000000 +538.161864384108 1812.000000000000 +542.322464209539 1354.360107421875 +544.337995564891 3645.781982421875 +544.397257124329 2812.174316406250 +545.341138349801 1204.000000000000 +546.913340862322 2248.224365234375 +610.184047214342 2118.000000000000 +611.182617785600 1204.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=699 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=699 experiment=4_0 +##scan 249 +##specref ms_run[1]:sample=1 period=1 cycle=699 experiment=4 +86.097112098221 15.000000000000 +124.969947579094 5.000000000000 +124.999755109147 15.000000000000 +184.072870371397 151.000000000000 +185.800465040813 4.000000000000 +257.049705956219 10.000000000000 +363.790322533870 10.000000000000 +412.474507265998 4.000000000000 +494.324364659375 15.000000000000 +>compound 1_0-700002--251--UNKNOWN +>parentmass 209.151448654146 +>charge 1 +>rt 467.377000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +209.151448654146 1393.000000000000 +>ms1peaks +52.005290748798 2648.187744140625 +53.013329751405 13518.450195312500 +53.850316954864 1180.307495117188 +54.009095282714 330958.000000000000 +55.005841514557 5667.002441406250 +55.011406645930 6470.609375000000 +55.054021565810 1861.585693359375 +55.933837882484 4394.390625000000 +56.941740380983 1964.891845703125 +59.049388249779 65843.906250000000 +60.044367628715 11519.734375000000 +61.039026975549 1879.412109375000 +63.997447687070 4320.080078125000 +64.004523641529 4932.294921875000 +68.011300844547 27473.904296875000 +68.993370076667 10758.254882812500 +69.007079041908 1236.004394531250 +69.044367260829 15377.386718750000 +72.043743554699 1191.000000000000 +72.936219245023 1745.702636718750 +73.064038318176 1815.971191406250 +76.485868560059 1973.815185546875 +79.020531191334 17836.367187500000 +80.048740226087 13224.238281250000 +81.936776032050 7048.100585937500 +82.996171956640 7190.000000000000 +87.043321009222 1227.537109375000 +87.054139598036 1576.933593750000 +89.070053550879 957.586914062500 +89.505676578079 1183.771240234375 +90.488678911312 1650.773437500000 +91.053323154674 1287.000000000000 +95.952047697743 1810.000000000000 +97.967737118669 6759.153808593750 +100.075040242340 1503.000000000000 +102.090312873514 1325.000000000000 +109.942101195745 1178.000000000000 +113.962318737158 1777.000000000000 +114.090323497457 12205.000000000000 +118.084806435992 7059.019531250000 +122.094843741487 3498.764648437500 +122.962403038846 8346.027343750000 +123.091194089358 1948.709106445312 +124.085748592892 945.327941894531 +129.050509251673 1024.732788085938 +130.157992884738 1164.000000000000 +136.019949230627 1853.000000000000 +136.111141352215 1404.000000000000 +137.962709479001 1001.000000000000 +139.962564333951 1014.230773925781 +141.089592785265 1583.923706054688 +141.111504861511 1650.115966796875 +141.934439037025 1131.574707031250 +141.956897728203 12676.678710937500 +147.090202623342 3085.812988281250 +149.022063929725 4225.639648437500 +151.094738829318 2602.103515625000 +151.110426265956 2908.480957031250 +153.125618544753 996.000000000000 +155.068818882234 1503.770874023438 +155.105040168448 1896.000000000000 +155.972638590701 3854.909667968750 +158.152547752078 11047.000000000000 +159.136189281277 1350.677490234375 +159.156049882595 1419.360961914062 +159.967850746369 1025.000000000000 +161.094775918272 1722.000000000000 +164.142270266712 1387.705078125000 +167.105285316693 1098.341064453125 +170.094594559777 2516.526611328125 +170.113525799942 2108.204833984375 +171.144827764448 1399.456054687500 +172.131818549321 1160.994140625000 +173.079140510056 7378.680175781250 +174.125735527954 967.356689453125 +174.990316816677 1331.000000000000 +175.123220892275 1240.192626953125 +177.054312729838 1134.000000000000 +178.157233470564 1366.410400390625 +179.104780444605 1894.000000000000 +182.960468984417 2694.983154296875 +183.098346000494 1032.875366210938 +186.220442600731 2223.000000000000 +193.155545316620 1053.796508789062 +194.115151923203 3796.000000000000 +195.101333289566 1729.859863281250 +195.121180415253 2410.422607421875 +198.183673229495 2607.000000000000 +199.169398299568 947.170166015625 +200.200419877548 1453.753662109375 +209.151448654146 1393.000000000000 +217.105904545721 25063.148437500000 +218.108555920873 3372.000000000000 +219.093886555341 1225.078735351562 +219.173372682917 1491.000000000000 +224.126175074396 1258.958251953125 +227.126969776429 1066.578857421875 +227.162933797459 984.519592285156 +227.198894564715 1244.031860351562 +228.194508188623 1576.432128906250 +235.166864578696 1208.880981445312 +239.087691498017 5955.957031250000 +242.282936398506 2143.000000000000 +246.861068916143 2584.000000000000 +249.182899358480 1593.000000000000 +250.176632034878 1203.582397460938 +250.998395390429 2349.000000000000 +251.182831713388 1416.993530273438 +252.996086272705 1684.000000000000 +254.082934336714 1126.000000000000 +263.221246248554 956.068420410156 +267.171742038068 1747.221801757812 +279.091801709029 2140.000000000000 +281.048072509420 1395.000000000000 +307.246653933575 3614.114013671875 +327.006849435404 3277.387939453125 +329.003015132105 3708.000000000000 +330.204260496049 2133.000000000000 +331.000930460471 1167.000000000000 +371.314773333777 1055.000000000000 +382.970870202657 4401.000000000000 +384.967831939532 3761.000000000000 +386.965870547062 1267.000000000000 +393.293261959258 978.677978515625 +395.361786909565 2167.000000000000 +430.885578405806 1163.000000000000 +432.882491491078 1041.000000000000 +445.117910608052 2269.000000000000 +446.119284821468 992.000000000000 +494.321366010298 2164.000000000000 +502.290175218847 3463.960449218750 +503.293237682247 1493.668823242188 +505.851410425796 3041.000000000000 +519.136178891838 1304.000000000000 +520.337351957959 2000.000000000000 +522.878281087400 1202.000000000000 +524.368200150276 2414.000000000000 +526.289734134842 2669.000000000000 +529.886645455728 1135.000000000000 +536.162678187608 5018.000000000000 +537.163847537209 2717.000000000000 +538.160425151235 2447.000000000000 +544.337799677250 3815.094482421875 +544.395275011718 3287.660156250000 +545.339523620272 1102.008178710938 +546.912145214594 1830.000000000000 +559.348096622267 969.000000000000 +610.180396587996 2429.000000000000 +611.182988975777 1322.524291992188 +612.180732393767 1006.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=700 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=700 experiment=2_0 +##scan 251 +##specref ms_run[1]:sample=1 period=1 cycle=700 experiment=2 +51.021127172477 6.000000000000 +77.036534919832 30.000000000000 +81.078948608905 6.000000000000 +124.276526301790 6.000000000000 +194.088834194600 8.000000000000 +>compound 1_0-700003--252--UNKNOWN +>parentmass 307.246653933575 +>charge 1 +>rt 467.377000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +307.246653933575 3614.114013671875 +>ms1peaks +52.005290748798 2648.187744140625 +53.013329751405 13518.450195312500 +53.850316954864 1180.307495117188 +54.009095282714 330958.000000000000 +55.005841514557 5667.002441406250 +55.011406645930 6470.609375000000 +55.054021565810 1861.585693359375 +55.933837882484 4394.390625000000 +56.941740380983 1964.891845703125 +59.049388249779 65843.906250000000 +60.044367628715 11519.734375000000 +61.039026975549 1879.412109375000 +63.997447687070 4320.080078125000 +64.004523641529 4932.294921875000 +68.011300844547 27473.904296875000 +68.993370076667 10758.254882812500 +69.007079041908 1236.004394531250 +69.044367260829 15377.386718750000 +72.043743554699 1191.000000000000 +72.936219245023 1745.702636718750 +73.064038318176 1815.971191406250 +76.485868560059 1973.815185546875 +79.020531191334 17836.367187500000 +80.048740226087 13224.238281250000 +81.936776032050 7048.100585937500 +82.996171956640 7190.000000000000 +87.043321009222 1227.537109375000 +87.054139598036 1576.933593750000 +89.070053550879 957.586914062500 +89.505676578079 1183.771240234375 +90.488678911312 1650.773437500000 +91.053323154674 1287.000000000000 +95.952047697743 1810.000000000000 +97.967737118669 6759.153808593750 +100.075040242340 1503.000000000000 +102.090312873514 1325.000000000000 +109.942101195745 1178.000000000000 +113.962318737158 1777.000000000000 +114.090323497457 12205.000000000000 +118.084806435992 7059.019531250000 +122.094843741487 3498.764648437500 +122.962403038846 8346.027343750000 +123.091194089358 1948.709106445312 +124.085748592892 945.327941894531 +129.050509251673 1024.732788085938 +130.157992884738 1164.000000000000 +136.019949230627 1853.000000000000 +136.111141352215 1404.000000000000 +137.962709479001 1001.000000000000 +139.962564333951 1014.230773925781 +141.089592785265 1583.923706054688 +141.111504861511 1650.115966796875 +141.934439037025 1131.574707031250 +141.956897728203 12676.678710937500 +147.090202623342 3085.812988281250 +149.022063929725 4225.639648437500 +151.094738829318 2602.103515625000 +151.110426265956 2908.480957031250 +153.125618544753 996.000000000000 +155.068818882234 1503.770874023438 +155.105040168448 1896.000000000000 +155.972638590701 3854.909667968750 +158.152547752078 11047.000000000000 +159.136189281277 1350.677490234375 +159.156049882595 1419.360961914062 +159.967850746369 1025.000000000000 +161.094775918272 1722.000000000000 +164.142270266712 1387.705078125000 +167.105285316693 1098.341064453125 +170.094594559777 2516.526611328125 +170.113525799942 2108.204833984375 +171.144827764448 1399.456054687500 +172.131818549321 1160.994140625000 +173.079140510056 7378.680175781250 +174.125735527954 967.356689453125 +174.990316816677 1331.000000000000 +175.123220892275 1240.192626953125 +177.054312729838 1134.000000000000 +178.157233470564 1366.410400390625 +179.104780444605 1894.000000000000 +182.960468984417 2694.983154296875 +183.098346000494 1032.875366210938 +186.220442600731 2223.000000000000 +193.155545316620 1053.796508789062 +194.115151923203 3796.000000000000 +195.101333289566 1729.859863281250 +195.121180415253 2410.422607421875 +198.183673229495 2607.000000000000 +199.169398299568 947.170166015625 +200.200419877548 1453.753662109375 +209.151448654146 1393.000000000000 +217.105904545721 25063.148437500000 +218.108555920873 3372.000000000000 +219.093886555341 1225.078735351562 +219.173372682917 1491.000000000000 +224.126175074396 1258.958251953125 +227.126969776429 1066.578857421875 +227.162933797459 984.519592285156 +227.198894564715 1244.031860351562 +228.194508188623 1576.432128906250 +235.166864578696 1208.880981445312 +239.087691498017 5955.957031250000 +242.282936398506 2143.000000000000 +246.861068916143 2584.000000000000 +249.182899358480 1593.000000000000 +250.176632034878 1203.582397460938 +250.998395390429 2349.000000000000 +251.182831713388 1416.993530273438 +252.996086272705 1684.000000000000 +254.082934336714 1126.000000000000 +263.221246248554 956.068420410156 +267.171742038068 1747.221801757812 +279.091801709029 2140.000000000000 +281.048072509420 1395.000000000000 +307.246653933575 3614.114013671875 +327.006849435404 3277.387939453125 +329.003015132105 3708.000000000000 +330.204260496049 2133.000000000000 +331.000930460471 1167.000000000000 +371.314773333777 1055.000000000000 +382.970870202657 4401.000000000000 +384.967831939532 3761.000000000000 +386.965870547062 1267.000000000000 +393.293261959258 978.677978515625 +395.361786909565 2167.000000000000 +430.885578405806 1163.000000000000 +432.882491491078 1041.000000000000 +445.117910608052 2269.000000000000 +446.119284821468 992.000000000000 +494.321366010298 2164.000000000000 +502.290175218847 3463.960449218750 +503.293237682247 1493.668823242188 +505.851410425796 3041.000000000000 +519.136178891838 1304.000000000000 +520.337351957959 2000.000000000000 +522.878281087400 1202.000000000000 +524.368200150276 2414.000000000000 +526.289734134842 2669.000000000000 +529.886645455728 1135.000000000000 +536.162678187608 5018.000000000000 +537.163847537209 2717.000000000000 +538.160425151235 2447.000000000000 +544.337799677250 3815.094482421875 +544.395275011718 3287.660156250000 +545.339523620272 1102.008178710938 +546.912145214594 1830.000000000000 +559.348096622267 969.000000000000 +610.180396587996 2429.000000000000 +611.182988975777 1322.524291992188 +612.180732393767 1006.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=700 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=700 experiment=3_0 +##scan 252 +##specref ms_run[1]:sample=1 period=1 cycle=700 experiment=3 +98.984298326842 4.000000000000 +121.098669418345 4.000000000000 +163.041942740378 10.000000000000 +>compound 1_0-700004--253--UNKNOWN +>parentmass 527.290253720974 +>charge 1 +>rt 467.377000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005290748798 2648.187744140625 +53.013329751405 13518.450195312500 +53.850316954864 1180.307495117188 +54.009095282714 330958.000000000000 +55.005841514557 5667.002441406250 +55.011406645930 6470.609375000000 +55.054021565810 1861.585693359375 +55.933837882484 4394.390625000000 +56.941740380983 1964.891845703125 +59.049388249779 65843.906250000000 +60.044367628715 11519.734375000000 +61.039026975549 1879.412109375000 +63.997447687070 4320.080078125000 +64.004523641529 4932.294921875000 +68.011300844547 27473.904296875000 +68.993370076667 10758.254882812500 +69.007079041908 1236.004394531250 +69.044367260829 15377.386718750000 +72.043743554699 1191.000000000000 +72.936219245023 1745.702636718750 +73.064038318176 1815.971191406250 +76.485868560059 1973.815185546875 +79.020531191334 17836.367187500000 +80.048740226087 13224.238281250000 +81.936776032050 7048.100585937500 +82.996171956640 7190.000000000000 +87.043321009222 1227.537109375000 +87.054139598036 1576.933593750000 +89.070053550879 957.586914062500 +89.505676578079 1183.771240234375 +90.488678911312 1650.773437500000 +91.053323154674 1287.000000000000 +95.952047697743 1810.000000000000 +97.967737118669 6759.153808593750 +100.075040242340 1503.000000000000 +102.090312873514 1325.000000000000 +109.942101195745 1178.000000000000 +113.962318737158 1777.000000000000 +114.090323497457 12205.000000000000 +118.084806435992 7059.019531250000 +122.094843741487 3498.764648437500 +122.962403038846 8346.027343750000 +123.091194089358 1948.709106445312 +124.085748592892 945.327941894531 +129.050509251673 1024.732788085938 +130.157992884738 1164.000000000000 +136.019949230627 1853.000000000000 +136.111141352215 1404.000000000000 +137.962709479001 1001.000000000000 +139.962564333951 1014.230773925781 +141.089592785265 1583.923706054688 +141.111504861511 1650.115966796875 +141.934439037025 1131.574707031250 +141.956897728203 12676.678710937500 +147.090202623342 3085.812988281250 +149.022063929725 4225.639648437500 +151.094738829318 2602.103515625000 +151.110426265956 2908.480957031250 +153.125618544753 996.000000000000 +155.068818882234 1503.770874023438 +155.105040168448 1896.000000000000 +155.972638590701 3854.909667968750 +158.152547752078 11047.000000000000 +159.136189281277 1350.677490234375 +159.156049882595 1419.360961914062 +159.967850746369 1025.000000000000 +161.094775918272 1722.000000000000 +164.142270266712 1387.705078125000 +167.105285316693 1098.341064453125 +170.094594559777 2516.526611328125 +170.113525799942 2108.204833984375 +171.144827764448 1399.456054687500 +172.131818549321 1160.994140625000 +173.079140510056 7378.680175781250 +174.125735527954 967.356689453125 +174.990316816677 1331.000000000000 +175.123220892275 1240.192626953125 +177.054312729838 1134.000000000000 +178.157233470564 1366.410400390625 +179.104780444605 1894.000000000000 +182.960468984417 2694.983154296875 +183.098346000494 1032.875366210938 +186.220442600731 2223.000000000000 +193.155545316620 1053.796508789062 +194.115151923203 3796.000000000000 +195.101333289566 1729.859863281250 +195.121180415253 2410.422607421875 +198.183673229495 2607.000000000000 +199.169398299568 947.170166015625 +200.200419877548 1453.753662109375 +209.151448654146 1393.000000000000 +217.105904545721 25063.148437500000 +218.108555920873 3372.000000000000 +219.093886555341 1225.078735351562 +219.173372682917 1491.000000000000 +224.126175074396 1258.958251953125 +227.126969776429 1066.578857421875 +227.162933797459 984.519592285156 +227.198894564715 1244.031860351562 +228.194508188623 1576.432128906250 +235.166864578696 1208.880981445312 +239.087691498017 5955.957031250000 +242.282936398506 2143.000000000000 +246.861068916143 2584.000000000000 +249.182899358480 1593.000000000000 +250.176632034878 1203.582397460938 +250.998395390429 2349.000000000000 +251.182831713388 1416.993530273438 +252.996086272705 1684.000000000000 +254.082934336714 1126.000000000000 +263.221246248554 956.068420410156 +267.171742038068 1747.221801757812 +279.091801709029 2140.000000000000 +281.048072509420 1395.000000000000 +307.246653933575 3614.114013671875 +327.006849435404 3277.387939453125 +329.003015132105 3708.000000000000 +330.204260496049 2133.000000000000 +331.000930460471 1167.000000000000 +371.314773333777 1055.000000000000 +382.970870202657 4401.000000000000 +384.967831939532 3761.000000000000 +386.965870547062 1267.000000000000 +393.293261959258 978.677978515625 +395.361786909565 2167.000000000000 +430.885578405806 1163.000000000000 +432.882491491078 1041.000000000000 +445.117910608052 2269.000000000000 +446.119284821468 992.000000000000 +494.321366010298 2164.000000000000 +502.290175218847 3463.960449218750 +503.293237682247 1493.668823242188 +505.851410425796 3041.000000000000 +519.136178891838 1304.000000000000 +520.337351957959 2000.000000000000 +522.878281087400 1202.000000000000 +524.368200150276 2414.000000000000 +526.289734134842 2669.000000000000 +529.886645455728 1135.000000000000 +536.162678187608 5018.000000000000 +537.163847537209 2717.000000000000 +538.160425151235 2447.000000000000 +544.337799677250 3815.094482421875 +544.395275011718 3287.660156250000 +545.339523620272 1102.008178710938 +546.912145214594 1830.000000000000 +559.348096622267 969.000000000000 +610.180396587996 2429.000000000000 +611.182988975777 1322.524291992188 +612.180732393767 1006.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=700 experiment=4 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=700 experiment=4_0 +##scan 253 +##specref ms_run[1]:sample=1 period=1 cycle=700 experiment=4 +120.089328758615 4.000000000000 +359.706635312763 4.000000000000 +386.275131087948 35.000000000000 +>compound 1_0-701002--255--UNKNOWN +>parentmass 526.291242485646 +>charge 1 +>rt 468.303000000000 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1merged +526.291242485646 2895.867187500000 +>ms1peaks +52.005454675181 2541.495361328125 +53.013412604867 14073.462890625000 +53.850268494989 1146.386718750000 +54.009229614250 337136.843750000000 +55.005820204827 5829.775390625000 +55.011425219330 6581.895996093750 +55.054258882230 1863.687011718750 +55.934006146980 4999.689453125000 +56.941886060571 2233.427246093750 +59.049495316798 72817.148437500000 +60.044379223764 12911.910156250000 +61.039166233624 1309.944824218750 +63.997690137537 5439.540039062500 +64.004566709310 5097.321289062500 +68.011503699294 27060.150390625000 +68.993484227206 10058.841796875000 +69.005042867224 1531.081420898438 +69.044537136714 15243.309570312500 +72.936618543841 1573.806884765625 +73.064307357636 1770.644531250000 +76.486145873916 1961.000000000000 +79.020693883345 16884.443359375000 +80.048868336563 12541.361328125000 +81.936914529600 7048.649902343750 +82.996162404795 6942.000000000000 +87.043592080722 1306.654418945312 +87.054412884033 1832.309814453125 +89.059041476210 1138.741821289062 +89.069160912618 1216.215942382812 +89.506070368213 1026.281005859375 +90.489120159430 1662.000000000000 +91.054088165093 1351.000000000000 +95.952176574369 1919.000000000000 +97.967920679199 6256.249023437500 +100.075069569037 1458.869262695312 +102.090664804554 2532.000000000000 +109.942272398850 1020.000000000000 +113.962687949800 1347.250488281250 +114.090615755921 12272.000000000000 +115.093896785330 1005.226989746094 +118.084999759048 7409.338867187500 +122.095478488858 4081.962158203125 +122.962761311937 8420.712890625000 +123.090884698837 1814.000000000000 +123.962279662725 1006.000000000000 +124.086599161262 1041.508544921875 +129.051071402835 1025.000000000000 +130.157696489785 1241.000000000000 +136.020142048589 1679.000000000000 +136.110512246397 1213.000000000000 +137.962278783247 1228.000000000000 +139.962160574976 1006.000000000000 +141.089422970053 1441.238525390625 +141.111450464439 1367.861572265625 +141.934574513817 1071.600708007812 +141.957403929271 13114.725585937500 +147.090241434241 2909.000000000000 +149.022393530907 4612.050781250000 +151.095944462352 2812.343505859375 +151.110036515077 3266.552490234375 +154.965379170915 1219.049438476562 +155.069588414262 1609.251708984375 +155.105347533440 2025.457275390625 +155.972899577480 4098.000000000000 +158.095668131309 1132.190551757812 +158.152948485323 11739.509765625000 +159.137924246233 1076.134887695312 +159.155770859299 1222.771240234375 +159.968173314310 1043.000000000000 +161.094857883074 1851.151611328125 +163.130245686311 1138.875976562500 +164.142081532663 1476.177490234375 +170.095414722155 2593.703857421875 +171.146179957690 1337.696655273438 +172.132347651762 1207.429199218750 +173.078986112625 6811.311035156250 +174.126137811475 1185.000000000000 +174.991166690170 1167.000000000000 +175.123727771865 1305.990722656250 +177.053466518688 1166.000000000000 +178.157938919802 1587.185424804688 +179.105507243442 2023.142822265625 +182.960635522085 2649.103515625000 +182.983220533380 1544.641845703125 +183.080080562924 1087.189697265625 +183.098334733208 1193.207641601562 +186.220773413991 1338.000000000000 +193.157917897936 1074.874023437500 +194.115312245650 3629.823242187500 +195.100668696071 1930.231933593750 +195.121476161710 2475.832031250000 +198.184224983471 2264.000000000000 +200.199366217825 1276.000000000000 +217.106083099601 23303.316406250000 +218.109093632092 2613.000000000000 +219.095119822834 1138.544189453125 +219.172923422054 1293.805297851562 +227.126743427292 1152.454345703125 +227.199415848353 1077.525024414062 +228.195054412126 1771.985717773438 +228.230090609828 1149.062011718750 +234.135817979785 1348.888671875000 +234.160883875659 1586.546630859375 +235.166804026112 1300.316040039062 +236.163696769371 1220.000000000000 +239.088095304330 5276.000000000000 +242.282921920463 2019.000000000000 +246.860835335041 3003.000000000000 +249.182970919298 1800.104125976562 +250.177497784345 1153.938720703125 +250.999097590669 2328.000000000000 +251.183749214071 1287.956909179688 +252.996239484015 1437.000000000000 +254.082411523101 1019.000000000000 +267.170102873484 1337.481689453125 +279.092106315210 1797.000000000000 +281.049823345933 1516.638427734375 +307.247225569701 1856.000000000000 +327.007062482092 3243.855712890625 +329.004022547859 3408.000000000000 +330.204852430818 2200.000000000000 +342.263823730168 1122.545898437500 +382.971103732496 3095.000000000000 +384.967998983489 2972.000000000000 +386.964780620617 1037.000000000000 +393.294419810400 1039.000000000000 +395.362466893130 1491.000000000000 +430.883777913928 1129.247436523438 +445.117830975791 1965.000000000000 +446.118321646121 1148.000000000000 +494.320947041711 2529.000000000000 +502.290242564504 3846.347656250000 +503.293670085064 1174.000000000000 +505.850631056296 2714.000000000000 +520.337454367634 1884.000000000000 +522.877289712799 1155.000000000000 +524.367970386219 2290.000000000000 +526.291242485646 2895.867187500000 +527.293242237787 1138.000000000000 +536.162850951188 5260.000000000000 +537.163512486114 2809.000000000000 +538.161445408995 2028.000000000000 +544.336016539684 4196.744140625000 +544.394903627926 3420.438964843750 +545.342489515297 1557.239868164062 +545.400407725149 1154.993652343750 +546.912516087826 1958.000000000000 +610.181762763984 2289.867187500000 +611.182527571922 1175.000000000000 +612.180682419164 1018.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=701 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=701 experiment=2_0 +##scan 255 +##specref ms_run[1]:sample=1 period=1 cycle=701 experiment=2 +67.056010453268 6.000000000000 +77.035502676981 4.000000000000 +79.053603738813 6.000000000000 +83.086544127822 2.000000000000 +87.047380068035 2.000000000000 +91.052114689124 6.000000000000 +93.070762270620 4.000000000000 +95.083486339262 4.000000000000 +105.108003097578 2.000000000000 +107.084948098327 12.000000000000 +117.067246210185 6.000000000000 +129.069697415439 4.000000000000 +131.084735899712 4.000000000000 +133.098489544271 8.000000000000 +141.067623366793 4.000000000000 +143.082746314426 2.000000000000 +145.101324357683 12.000000000000 +149.134514787887 4.000000000000 +161.130094081108 6.000000000000 +181.098745184841 4.000000000000 +184.073149788855 4.000000000000 +185.073662727457 4.000000000000 +185.133885184866 4.000000000000 +185.145626125087 4.000000000000 +261.140989396666 4.000000000000 +269.229514655787 2.000000000000 +271.795393079356 2.000000000000 +293.231387697179 2.000000000000 +314.914922434160 4.000000000000 +354.278003901367 4.000000000000 +385.272065888833 173.000000000000 +508.360906237471 4.000000000000 +508.393145797531 4.000000000000 +526.327138858012 6.000000000000 +526.392889739479 6.000000000000 +526.898368756868 4.000000000000 +706.413097888531 2.000000000000 +>compound 1_0-702002--257--UNKNOWN +>parentmass 191.177959316817 +>charge 1 +>rt 469.231000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005575687224 2731.083984375000 +52.018101234075 1613.086181640625 +53.013537497374 14159.973632812500 +53.850609011380 1251.743896484375 +54.009280693093 330311.000000000000 +55.005879615132 5368.484863281250 +55.011824979967 5277.393066406250 +55.054345571779 1923.749877929688 +55.933966448668 4565.520996093750 +56.049537243733 3226.235839843750 +56.942105547759 1874.783203125000 +59.049541597279 47455.617187500000 +60.044399662191 10219.314453125000 +61.039565376762 1819.129272460938 +63.997863938150 4512.043945312500 +64.004816486797 4533.090332031250 +67.028601317207 1895.114257812500 +68.011582799011 26863.263671875000 +68.993491036449 9675.469726562500 +69.034809861479 3266.407226562500 +69.044537391343 14480.291992187500 +72.043984624963 1128.246337890625 +72.936381958271 1977.135375976562 +73.064366672596 1676.957275390625 +74.095670451834 1019.000000000000 +76.486276287314 1762.000000000000 +79.020768035630 15489.172851562500 +80.048937707538 13151.238281250000 +81.937084166101 6668.101074218750 +82.996267754500 6686.000000000000 +87.043821063776 1215.595825195312 +87.054260947123 1722.553222656250 +89.059165984247 1116.188842773438 +89.070216238591 1086.933715820312 +89.505676355892 1230.000000000000 +90.489073910343 1413.182617187500 +91.053662328997 1270.653442382812 +95.952300867709 1782.000000000000 +97.968191583272 5062.088378906250 +100.074553990420 1252.000000000000 +102.090712506502 1682.000000000000 +113.962782336784 1700.000000000000 +114.090686657276 11124.708007812500 +118.084978051172 6338.484863281250 +122.095377206810 3839.453857421875 +122.962784802677 7947.027832031250 +123.090817806682 1992.624877929688 +124.086351358755 999.328308105469 +130.158268847067 1251.000000000000 +136.020385762119 1710.000000000000 +136.110972965587 1462.000000000000 +137.963504217612 1325.604980468750 +141.090090522055 1550.569213867188 +141.112204504245 1044.332153320312 +141.957371499786 13066.338867187500 +147.090759413732 3135.000000000000 +149.022311340674 4365.041503906250 +149.045490578806 1445.140991210938 +151.077414747979 1259.109985351562 +151.095916008826 2820.125000000000 +151.110368592811 3001.333496093750 +154.965846702164 1037.929931640625 +155.069677393386 1767.885864257812 +155.105091293538 1674.894409179688 +155.973315231103 3839.000000000000 +158.153367684690 10839.000000000000 +159.137765211957 1195.148559570312 +159.156328992829 1403.569458007812 +159.968359151007 1203.000000000000 +161.095215951061 1901.637451171875 +163.130010724732 1172.700195312500 +164.142829491383 1914.000000000000 +167.069561684323 3149.000000000000 +170.095452536099 2976.344482421875 +170.116568059072 1197.965209960938 +171.146289666269 1307.256835937500 +172.132749000471 1349.521972656250 +173.080076869418 8248.000000000000 +174.991689878545 1424.630615234375 +175.127598225961 1214.896240234375 +177.054203930765 1044.000000000000 +178.158443387695 1415.204711914062 +179.105040156988 2089.142578125000 +182.960377492825 2437.753417968750 +183.078274153633 1016.069091796875 +183.099473662253 1159.904174804688 +186.220711733986 1356.000000000000 +194.115573461930 3816.788085937500 +195.101147834998 4470.516601562500 +198.184410442749 2455.709716796875 +199.168715394529 1140.856323242188 +199.184834931191 1156.170288085938 +200.199653858640 1297.921630859375 +211.107973691291 1015.030883789062 +217.106263025625 25988.000000000000 +218.109297708915 2980.000000000000 +219.095471827741 1253.000000000000 +223.063547364660 997.179931640625 +224.127042269792 1517.971679687500 +227.126865146820 1143.832519531250 +227.198462741326 1000.373840332031 +228.195783008751 1719.245971679688 +234.161088896005 3854.582275390625 +235.166546426904 1739.161499023438 +236.161326819427 2070.574462890625 +239.088434540310 5252.000000000000 +242.283520008699 1936.000000000000 +246.861351855062 2553.000000000000 +249.183206108434 1490.825195312500 +250.178171567174 1288.183227539062 +250.999791282259 2699.000000000000 +252.996538665523 1420.000000000000 +267.171582471283 1293.803466796875 +279.093298542727 2578.000000000000 +281.051167640064 1798.000000000000 +288.252238671295 3434.000000000000 +307.248555060416 997.000000000000 +310.234308535405 1484.000000000000 +327.007153037994 3335.388427734375 +329.003757868109 3111.000000000000 +330.205255135714 2113.000000000000 +342.263710797689 1303.409667968750 +371.099468655012 1045.000000000000 +382.971180762499 2503.109130859375 +384.969689586577 2687.000000000000 +393.295118045505 1072.515991210938 +395.361832154479 1201.000000000000 +430.886651084741 1284.000000000000 +445.118143518607 2380.000000000000 +446.119145110671 1073.000000000000 +494.323135771323 2487.000000000000 +502.291976753008 4162.000000000000 +503.295507392134 1465.000000000000 +505.852689528189 2646.000000000000 +519.137350622802 1125.000000000000 +520.337697457948 1970.000000000000 +522.877664497054 1040.000000000000 +524.369454256124 2673.000000000000 +526.291034635588 3481.000000000000 +527.294145929493 1009.000000000000 +536.164248869211 5661.000000000000 +537.164247720729 2950.000000000000 +538.161786761786 2246.000000000000 +544.339339390808 4333.096191406250 +545.341838082003 1175.006225585938 +546.915110101956 1867.000000000000 +610.182667124825 2208.000000000000 +611.183415729844 1468.000000000000 +612.181494154441 1094.000000000000 +684.201322434538 983.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=702 experiment=2 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=702 experiment=2_0 +##scan 257 +##specref ms_run[1]:sample=1 period=1 cycle=702 experiment=2 +55.054742827139 8.000000000000 +57.070269488282 12.000000000000 +59.050004291210 38.000000000000 +80.945744099915 8.000000000000 +90.902088683458 12.000000000000 +105.069081745023 8.000000000000 +123.099984238062 8.000000000000 +134.095289348696 8.000000000000 +160.902008594230 8.000000000000 +>compound 1_0-702003--258--UNKNOWN +>parentmass 500.374033518391 +>charge 1 +>rt 469.231000000020 +##des UNKNOWN +##specref_format [MS, MS:1000770, WIFF nativeID format] +##source file file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff +##source format [MS, MS:1000562, ABI WIFF format,] +>ms1peaks +52.005575687224 2731.083984375000 +52.018101234075 1613.086181640625 +53.013537497374 14159.973632812500 +53.850609011380 1251.743896484375 +54.009280693093 330311.000000000000 +55.005879615132 5368.484863281250 +55.011824979967 5277.393066406250 +55.054345571779 1923.749877929688 +55.933966448668 4565.520996093750 +56.049537243733 3226.235839843750 +56.942105547759 1874.783203125000 +59.049541597279 47455.617187500000 +60.044399662191 10219.314453125000 +61.039565376762 1819.129272460938 +63.997863938150 4512.043945312500 +64.004816486797 4533.090332031250 +67.028601317207 1895.114257812500 +68.011582799011 26863.263671875000 +68.993491036449 9675.469726562500 +69.034809861479 3266.407226562500 +69.044537391343 14480.291992187500 +72.043984624963 1128.246337890625 +72.936381958271 1977.135375976562 +73.064366672596 1676.957275390625 +74.095670451834 1019.000000000000 +76.486276287314 1762.000000000000 +79.020768035630 15489.172851562500 +80.048937707538 13151.238281250000 +81.937084166101 6668.101074218750 +82.996267754500 6686.000000000000 +87.043821063776 1215.595825195312 +87.054260947123 1722.553222656250 +89.059165984247 1116.188842773438 +89.070216238591 1086.933715820312 +89.505676355892 1230.000000000000 +90.489073910343 1413.182617187500 +91.053662328997 1270.653442382812 +95.952300867709 1782.000000000000 +97.968191583272 5062.088378906250 +100.074553990420 1252.000000000000 +102.090712506502 1682.000000000000 +113.962782336784 1700.000000000000 +114.090686657276 11124.708007812500 +118.084978051172 6338.484863281250 +122.095377206810 3839.453857421875 +122.962784802677 7947.027832031250 +123.090817806682 1992.624877929688 +124.086351358755 999.328308105469 +130.158268847067 1251.000000000000 +136.020385762119 1710.000000000000 +136.110972965587 1462.000000000000 +137.963504217612 1325.604980468750 +141.090090522055 1550.569213867188 +141.112204504245 1044.332153320312 +141.957371499786 13066.338867187500 +147.090759413732 3135.000000000000 +149.022311340674 4365.041503906250 +149.045490578806 1445.140991210938 +151.077414747979 1259.109985351562 +151.095916008826 2820.125000000000 +151.110368592811 3001.333496093750 +154.965846702164 1037.929931640625 +155.069677393386 1767.885864257812 +155.105091293538 1674.894409179688 +155.973315231103 3839.000000000000 +158.153367684690 10839.000000000000 +159.137765211957 1195.148559570312 +159.156328992829 1403.569458007812 +159.968359151007 1203.000000000000 +161.095215951061 1901.637451171875 +163.130010724732 1172.700195312500 +164.142829491383 1914.000000000000 +167.069561684323 3149.000000000000 +170.095452536099 2976.344482421875 +170.116568059072 1197.965209960938 +171.146289666269 1307.256835937500 +172.132749000471 1349.521972656250 +173.080076869418 8248.000000000000 +174.991689878545 1424.630615234375 +175.127598225961 1214.896240234375 +177.054203930765 1044.000000000000 +178.158443387695 1415.204711914062 +179.105040156988 2089.142578125000 +182.960377492825 2437.753417968750 +183.078274153633 1016.069091796875 +183.099473662253 1159.904174804688 +186.220711733986 1356.000000000000 +194.115573461930 3816.788085937500 +195.101147834998 4470.516601562500 +198.184410442749 2455.709716796875 +199.168715394529 1140.856323242188 +199.184834931191 1156.170288085938 +200.199653858640 1297.921630859375 +211.107973691291 1015.030883789062 +217.106263025625 25988.000000000000 +218.109297708915 2980.000000000000 +219.095471827741 1253.000000000000 +223.063547364660 997.179931640625 +224.127042269792 1517.971679687500 +227.126865146820 1143.832519531250 +227.198462741326 1000.373840332031 +228.195783008751 1719.245971679688 +234.161088896005 3854.582275390625 +235.166546426904 1739.161499023438 +236.161326819427 2070.574462890625 +239.088434540310 5252.000000000000 +242.283520008699 1936.000000000000 +246.861351855062 2553.000000000000 +249.183206108434 1490.825195312500 +250.178171567174 1288.183227539062 +250.999791282259 2699.000000000000 +252.996538665523 1420.000000000000 +267.171582471283 1293.803466796875 +279.093298542727 2578.000000000000 +281.051167640064 1798.000000000000 +288.252238671295 3434.000000000000 +307.248555060416 997.000000000000 +310.234308535405 1484.000000000000 +327.007153037994 3335.388427734375 +329.003757868109 3111.000000000000 +330.205255135714 2113.000000000000 +342.263710797689 1303.409667968750 +371.099468655012 1045.000000000000 +382.971180762499 2503.109130859375 +384.969689586577 2687.000000000000 +393.295118045505 1072.515991210938 +395.361832154479 1201.000000000000 +430.886651084741 1284.000000000000 +445.118143518607 2380.000000000000 +446.119145110671 1073.000000000000 +494.323135771323 2487.000000000000 +502.291976753008 4162.000000000000 +503.295507392134 1465.000000000000 +505.852689528189 2646.000000000000 +519.137350622802 1125.000000000000 +520.337697457948 1970.000000000000 +522.877664497054 1040.000000000000 +524.369454256124 2673.000000000000 +526.291034635588 3481.000000000000 +527.294145929493 1009.000000000000 +536.164248869211 5661.000000000000 +537.164247720729 2950.000000000000 +538.161786761786 2246.000000000000 +544.339339390808 4333.096191406250 +545.341838082003 1175.006225585938 +546.915110101956 1867.000000000000 +610.182667124825 2208.000000000000 +611.183415729844 1468.000000000000 +612.181494154441 1094.000000000000 +684.201322434538 983.000000000000 +>ms2peaks +##n_id sample=1 period=1 cycle=702 experiment=3 +##m_id UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=702 experiment=3_0 +##scan 258 +##specref ms_run[1]:sample=1 period=1 cycle=702 experiment=3 +210.196455253972 3.000000000000 +408.778240392633 8.000000000000 +483.351847971879 3.000000000000 diff --git a/src/tests/topp/SiriusExport_3_output_compoundinfo.tsv b/src/tests/topp/SiriusExport_3_output_compoundinfo.tsv new file mode 100644 index 00000000000..1d5aa49b581 --- /dev/null +++ b/src/tests/topp/SiriusExport_3_output_compoundinfo.tsv @@ -0,0 +1,14 @@ +cmp file_index pmass pint_mono rt fmz fid formula charge ionization des specref_format source_file source_format native_ids_id m_ids_id +0_13442776035824190606-2167005--6--UNKNOWN 0 292.122 5.44664e+06 410.145 292.122 13442776035824190606 1 UNKNOWN [MS, MS:1000770, WIFF nativeID format] file://.PestMix1pos.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=2167 experiment=5|sample=1 period=1 cycle=2175 experiment=4|sample=1 period=1 cycle=2176 experiment=6 UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2167 experiment=5_0|UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2175 experiment=4_0|UNKNOWN_PestMix1pos.wiff_sample=1 period=1 cycle=2176 experiment=6_0 +1_10333458062711546021-664003--57--UNKNOWN 1 286.179 67049.2 438.351 286.179 10333458062711546021 1 UNKNOWN [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=664 experiment=3|sample=1 period=1 cycle=665 experiment=5|sample=1 period=1 cycle=666 experiment=3 UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=3_0|UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=665 experiment=5_0|UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=666 experiment=3_0 +1_5053681185761206615-676004--121--Myclobutanil 1 289.123 1.35681e+06 448.028 289.123 5053681185761206615 C15H17ClN4 1 [M+H]1+ Myclobutanil [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=676 experiment=4|sample=1 period=1 cycle=677 experiment=5|sample=1 period=1 cycle=678 experiment=3 Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=4_0|Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=677 experiment=5_0|Myclobutanil_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=678 experiment=3_0 +1_5868141785564858207-659006--23--Cyproconazole 1 292.121 1.77258e+06 436.497 292.121 5868141785564858207 C15H18ClN3O 1 [M+H]1+ Cyproconazole [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=659 experiment=6|sample=1 period=1 cycle=660 experiment=5|sample=1 period=1 cycle=661 experiment=4 Cyproconazole_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=6_0|Cyproconazole_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=660 experiment=5_0|Cyproconazole_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=661 experiment=4_0 +1_18386993698014176665-675005--113--UNKNOWN 1 304.119 3.56918e+06 446.172 304.119 18386993698014176665 1 [M+H]1+ UNKNOWN [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=675 experiment=5 UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=675 experiment=5_0 +1_11941333258820146302-663003--50--UNKNOWN 1 313.039 90349.7 436.497 313.039 11941333258820146302 1 [M+H]1+ UNKNOWN [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=663 experiment=3|sample=1 period=1 cycle=664 experiment=4|sample=1 period=1 cycle=665 experiment=6 UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=663 experiment=3_0|UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=4_0|UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=665 experiment=6_0 +1_5585685219772452827-657005--4--Guthion 1 318.013 47593.1 431.866 318.013 5585685219772452827 C10H12N3O3PS2 1 [M+H]1+ Guthion [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=657 experiment=5|sample=1 period=1 cycle=658 experiment=6|sample=1 period=1 cycle=659 experiment=7 Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=657 experiment=5_0|Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=658 experiment=6_0|Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=7_0 +1_7960809195137357048-676005--122--Fenamiphos 1 326.094 187407 447.1 326.094 7960809195137357048 C13H22NO3PS 1 [M+Na]1+ Fenamiphos [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=676 experiment=5 Fenamiphos_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=5_0 +1_1072340199693961134-657006--5--Guthion 1 339.995 202334 431.866 339.995 1072340199693961134 C10H12N3O3PS2 1 [M+Na]1+ Guthion [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=657 experiment=6|sample=1 period=1 cycle=658 experiment=7|sample=1 period=1 cycle=659 experiment=8 Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=657 experiment=6_0|Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=658 experiment=7_0|Guthion_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=8_0 +1_15110953643123771443-674006--105--UNKNOWN 1 349.17 78624.1 447.1 349.17 15110953643123771443 1 [M+Na]1+ UNKNOWN [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=674 experiment=6|sample=1 period=1 cycle=675 experiment=6|sample=1 period=1 cycle=676 experiment=6 UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=674 experiment=6_0|UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=675 experiment=6_0|UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=676 experiment=6_0 +1_3034601138604610277-657008--7--UNKNOWN 1 363.071 38114.6 431.866 363.071 3034601138604610277 1 [M+Na]1+ UNKNOWN [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=657 experiment=8|sample=1 period=1 cycle=658 experiment=9|sample=1 period=1 cycle=659 experiment=9 UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=657 experiment=8_0|UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=658 experiment=9_0|UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=659 experiment=9_0 +1_16459302675638519057-664006--60--UNKNOWN 1 372.065 23380.9 437.423 372.065 16459302675638519057 1 [M+Na]1+ UNKNOWN [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=664 experiment=6 UNKNOWN_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=664 experiment=6_0 +1_12237362536485158566-690002--189--Fluopicolide 1 382.974 1.56656e+06 461.815 382.974 12237362536485158566 C14H8Cl3F3N2O 1 [M+H]1+ Fluopicolide [MS, MS:1000770, WIFF nativeID format] file://I:\OpenSWATH_Metabolomics_data\20181121_full_data\04_PestMixes_individually_Solvent_DDA_20-50PestMix1_1ngSolventDDA20-50.wiff [MS, MS:1000562, ABI WIFF format,] sample=1 period=1 cycle=690 experiment=2|sample=1 period=1 cycle=691 experiment=5 Fluopicolide_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=690 experiment=2_0|Fluopicolide_PestMix1_1ngSolventDDA20-50.wiff_sample=1 period=1 cycle=691 experiment=5_0 diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_10_output.mzTab b/src/tests/topp/THIRDPARTY/SiriusAdapter_10_output.mzTab deleted file mode 100644 index 68e3a777ec3..00000000000 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_10_output.mzTab +++ /dev/null @@ -1,175 +0,0 @@ -MTD mzTab-version 1.0.0 -MTD mzTab-mode null -MTD mzTab-type null -MTD description Sirius-5.6.3 -MTD smallmolecule_search_engine_score[1] [, , SiriusScore, ] -MTD smallmolecule_search_engine_score[2] [, , TreeScore, ] -MTD smallmolecule_search_engine_score[3] [, , IsotopeScore, ] -MTD ms_run[1]-location /Users/builder/jenkins/ws/openms/PR/bldtst/87227eb0/source/src/tests/topp/AssayGeneratorMetabo_decoy_generation_input.mzML - -SMH identifier chemical_formula smiles inchi_key description exp_mass_to_charge calc_mass_to_charge charge retention_time taxid species database database_version spectra_ref search_engine best_search_engine_score[1] best_search_engine_score[2] best_search_engine_score[3] modifications opt_global_adduct opt_gobal_precursorFormula opt_global_rank opt_global_explainedPeaks opt_global_explainedIntensity opt_global_median_mass_error_fragment_peaks_ppm opt_global_median_absolute_mass_error_fragment_peaks_ppm opt_global_mass_error_precursor_ppm opt_global_compoundId opt_global_compoundScanNumber opt_global_featureId opt_global_native_id -SML null C9H15N6O6P null null null 373.041706160139995 null null 604.553999999999974 null null null null null null 28.670265576134039 28.670265576134039 0.0 null [M + K]+ C9H15N6O6P 1 9 0.994643154576381 -1.396009995468828 1.396009995468828 -1.396009995468828 1 847004 null sample=1 period=1 cycle=847 experiment=4 -SML null C11H18N4O4S2 null null null 373.041706160139995 null null 604.553999999999974 null null null null null null 27.358222345090461 27.358222345090461 0.0 null [M + K]+ C11H18N4O4S2 2 9 0.994643154576381 6.134305348864308 6.134305348864308 4.29175618442722 1 847004 null sample=1 period=1 cycle=847 experiment=4 -SML null C11H15N2O9P null null null 373.041706160139995 null null 604.553999999999974 null null null null null null 25.935753723709432 25.935753723709432 0.0 null [M + Na]+ C11H15N2O9P 3 10 1.0 3.198873525662133 3.198873525662133 2.59694836662739 1 847004 null sample=1 period=1 cycle=847 experiment=4 -SML null C12H19N2O4PS2 null null null 373.041706160139995 null null 604.553999999999974 null null null null null null 25.189135193999505 25.189135193999505 0.0 null [M + Na]+ C12H19N2O4PS2 4 10 1.0 0.546181139647929 1.67841775886304 0.267375062461964 1 847004 null sample=1 period=1 cycle=847 experiment=4 -SML null C11H18N4O3S3 null null null 373.041706160139995 null null 604.553999999999974 null null null null null null 23.547971975564181 23.547971975564181 0.0 null [M + Na]+ C11H18N4O3S3 5 8 0.953310126910901 -3.796513121528493 3.796513121528493 -4.337252172626831 1 847004 null sample=1 period=1 cycle=847 experiment=4 -SML null C25H49N5O3 null null null 468.391411753410011 null null 604.553999999999974 null null null null null null 9.6770601169857 9.6770601169857 0.0 null [M + H]+ C25H49N5O3 1 2 1.0 -1.445023221639928 1.445023221639928 1.27003464312998 2 847006 null sample=1 period=1 cycle=847 experiment=6 -SML null C28H51N3O null null null 468.391411753410011 null null 604.553999999999974 null null null null null null 9.445562595590651 9.445562595590651 0.0 null [M + Na]+ C28H51N3O 2 2 1.0 -5.871833302980732 5.871833302980732 -2.182359998211256 2 847006 null sample=1 period=1 cycle=847 experiment=6 -SML null C25H55N3O2 null null null 468.391411753410011 null null 604.553999999999974 null null null null null null 9.420133971376501 9.420133971376501 0.0 null [M + K]+ C25H55N3O2 3 2 1.0 -6.288345554871206 6.288345554871206 -2.507190890116459 2 847006 null sample=1 period=1 cycle=847 experiment=6 -SML null C21H45N11O null null null 468.391411753410011 null null 604.553999999999974 null null null null null null 8.957024585301269 8.957024585301269 0.0 null [M + H]+ C21H45N11O 4 2 1.0 5.906297025336516 5.906297025336516 7.003205518238989 2 847006 null sample=1 period=1 cycle=847 experiment=6 -SML null C28H53NO2S null null null 468.391411753410011 null null 604.553999999999974 null null null null null null 7.21874715384708 7.21874715384708 0.0 null [M + H]+ C28H53NO2S 5 2 1.0 9.065765347574173 9.065765347574173 9.467221661498789 2 847006 null sample=1 period=1 cycle=847 experiment=6 -SML null C12H13Br2NO7S2 null null null 505.854301068556026 null null 604.553999999999974 null null null null null null 16.95195935872173 16.95195935872173 0.0 null [M + H]+ C12H13Br2NO7S2 1 3 0.58252427184466 -6.911033729037047 6.911033729037047 -5.917394649359016 3 847007 null sample=1 period=1 cycle=847 experiment=7 -SML null C13H11Cl6N3O3 null null null 505.854301068556026 null null 604.553999999999974 null null null null null null 14.681206029050356 14.681206029050356 0.0 null [M + K]+ C13H11Cl6N3O3 2 3 0.58252427184466 1.3990591696897 3.070503376721699 -3.982023144238581 3 847007 null sample=1 period=1 cycle=847 experiment=7 -SML null C19H9Br2NO2S2 null null null 505.854301068556026 null null 604.553999999999974 null null null null null null 13.406735460386219 13.406735460386219 0.0 null [M + H]+ C19H9Br2NO2S2 3 3 0.58252427184466 3.538960371372842 3.538960371372842 5.693118471865774 3 847007 null sample=1 period=1 cycle=847 experiment=7 -SML null C12H6F5NO3S5 null null null 505.854301068556026 null null 604.553999999999974 null null null null null null 13.115238697657338 13.115238697657338 0.0 null [M + K]+ C12H6F5NO3S5 4 3 0.58252427184466 4.618679641491994 4.618679641491994 7.914959815501288 3 847007 null sample=1 period=1 cycle=847 experiment=7 -SML null C16H11Br2N3O2S null null null 505.854301068556026 null null 604.553999999999974 null null null null null null 12.282572840144438 12.282572840144438 0.0 null [M + K]+ C16H11Br2N3O2S 5 3 0.58252427184466 -0.446853090463965 2.914152425760874 -5.394485188162603 3 847007 null sample=1 period=1 cycle=847 experiment=7 -SML null C12H8N2O7 null null null 330.995763624045992 null null 605.517000000000053 null null null null null null 0.859816428765365 0.859816428765365 0.0 null [M + K]+ C12H8N2O7 1 1 0.0 -1.646764413426551 1.646764413426551 -1.646764413426551 5 848006 null sample=1 period=1 cycle=848 experiment=6 -SML null C8H4N8O5 null null null 330.995763624045992 null null 605.517000000000053 null null null null null null 0.341980031475321 0.341980031475321 0.0 null [M + K]+ C8H4N8O5 2 1 0.0 6.46623368242206 6.46623368242206 6.46623368242206 5 848006 null sample=1 period=1 cycle=848 experiment=6 -SML null C11H17IO null null null 330.995763624045992 null null 605.517000000000053 null null null null null null -0.656889541808398 -0.656889541808398 0.0 null [M + K]+ C11H17IO 3 1 0.0 0.581155339744618 0.581155339744618 0.581155339744618 5 848006 null sample=1 period=1 cycle=848 experiment=6 -SML null C12H13BrN4 null null null 330.995763624045992 null null 605.517000000000053 null null null null null null -0.67076823760943 -0.67076823760943 0.0 null [M + K]+ C12H13BrN4 4 1 0.0 0.746257150729168 0.746257150729168 0.746257150729168 5 848006 null sample=1 period=1 cycle=848 experiment=6 -SML null C7H8N4O8S null null null 330.995763624045992 null null 605.517000000000053 null null null null null null -0.673762718274275 -0.673762718274275 0.0 null [M + Na]+ C7H8N4O8S 5 1 0.0 0.781605035037382 0.781605035037382 0.781605035037382 5 848006 null sample=1 period=1 cycle=848 experiment=6 -SML null C11H19N4O4PS null null null 373.050282947750986 null null 605.517000000000053 null null null null null null 25.803396637056217 25.803396637056217 0.0 null [M + K]+ C11H19N4O4PS 1 8 0.83071499653889 0.98606604349625 1.834824189436524 1.774907273112848 6 848007 null sample=1 period=1 cycle=848 experiment=7 -SML null C12H18N2O6S2 null null null 373.050282947750986 null null 605.517000000000053 null null null null null null 21.473200748251696 21.473200748251696 0.0 null [M + Na]+ C12H18N2O6S2 2 6 0.792872349311512 0.995083324692341 0.995083324692341 1.16325246313294 6 848007 null sample=1 period=1 cycle=848 experiment=7 -SML null C10H17F3N2O4S2 null null null 373.050282947750986 null null 605.517000000000053 null null null null null null 20.138567077557664 20.138567077557664 0.0 null [M + Na]+ C10H17F3N2O4S2 3 9 0.836119938167308 2.970866954492015 2.970866954492015 7.716288640079029 6 848007 null sample=1 period=1 cycle=848 experiment=7 -SML null C10H18N6O3S2 null null null 373.050282947750986 null null 605.517000000000053 null null null null null null 19.979614856344419 19.979614856344419 0.0 null [M + K]+ C10H18N6O3S2 4 7 0.794693058831233 -2.512428411238932 2.512428411238932 -2.829614096980069 6 848007 null sample=1 period=1 cycle=848 experiment=7 -SML null C8H20N2O9P2 null null null 373.050282947750986 null null 605.517000000000053 null null null null null null 19.087649848024117 19.087649848024117 0.0 null [M + Na]+ C8H20N2O9P2 5 10 1.0 2.32835220153535 2.674064949522841 -8.956520051799396 6 848007 null sample=1 period=1 cycle=848 experiment=7 -SML null C12H8N2O7 null null null 330.996440934966017 null null 606.481000000020003 null null null null null null 0.967612741508108 0.967612741508108 0.0 null [M + K]+ C12H8N2O7 1 1 0.0 0.399517514813028 0.399517514813028 0.399517514813028 8 849004 null sample=1 period=1 cycle=849 experiment=4 -SML null C8H4N8O5 null null null 330.996440934966017 null null 606.481000000020003 null null null null null null 0.070194727487704 0.070194727487704 0.0 null [M + K]+ C8H4N8O5 2 1 0.0 8.512499009207589 8.512499009207589 8.512499009207589 8 849004 null sample=1 period=1 cycle=849 experiment=4 -SML null C13H3F7O null null null 330.996440934966017 null null 606.481000000020003 null null null null null null -0.611363113039788 -0.611363113039788 0.0 null [M + Na]+ C13H3F7O 3 1 0.0 0.024105623205151 0.024105623205151 0.024105623205151 8 849004 null sample=1 period=1 cycle=849 experiment=4 -SML null C16H11BrO3 null null null 330.996440934966017 null null 606.481000000020003 null null null null null null -0.611409485793222 -0.611409485793222 0.0 null [M + H]+ C16H11BrO3 4 1 0.0 0.024685689913252 0.024685689913252 0.024685689913252 8 849004 null sample=1 period=1 cycle=849 experiment=4 -SML null C8H12N4O3S3 null null null 330.996440934966017 null null 606.481000000020003 null null null null null null -0.625717107586851 -0.625717107586851 0.0 null [M + Na]+ C8H12N4O3S3 5 1 0.0 0.202391528330003 0.202391528330003 0.202391528330003 8 849004 null sample=1 period=1 cycle=849 experiment=4 -SML null C9H15O16P3 null null null 472.965800306751021 null null 606.481000000020003 null null null null null null 9.802237862248113 9.802237862248113 0.0 null [M + H]+ C9H15O16P3 1 2 0.697674418604651 -0.74849424888238 0.74849424888238 2.599690420943164 9 849005 null sample=1 period=1 cycle=849 experiment=5 -SML null C17H14N4O2S4 null null null 472.965800306751021 null null 606.481000000020003 null null null null null null 9.673686396034764 9.673686396034764 0.0 null [M + K]+ C17H14N4O2S4 2 2 0.697674418604651 3.489191948022111 3.489191948022111 5.671696893840119 9 849005 null sample=1 period=1 cycle=849 experiment=5 -SML null C13H14N4O7S3 null null null 472.965800306751021 null null 606.481000000020003 null null null null null null 9.657025629720902 9.657025629720902 0.0 null [M + K]+ C13H14N4O7S3 3 2 0.697674418604651 -3.80843387724835 3.80843387724835 0.381462381339687 9 849005 null sample=1 period=1 cycle=849 experiment=5 -SML null C16H18O6S4 null null null 472.965800306751021 null null 606.481000000020003 null null null null null null 9.444643391175774 9.444643391175774 0.0 null [M + K]+ C16H18O6S4 4 2 0.697674418604651 7.389829971091086 7.389829971091086 8.499368575629337 9 849005 null sample=1 period=1 cycle=849 experiment=5 -SML null C19H14O5S4 null null null 472.965800306751021 null null 606.481000000020003 null null null null null null 9.414969746574188 9.414969746574188 0.0 null [M + Na]+ C19H14O5S4 5 2 0.697674418604651 7.833584886703086 7.833584886703086 8.821057797010498 9 849005 null sample=1 period=1 cycle=849 experiment=5 -SML null C31H49N3O2 null null null 496.393559709474005 null null 608.394000000000005 null null null null null null 12.08360004509305 12.08360004509305 0.0 null [M + H]+ C31H49N3O2 1 2 0.5 7.659955549563526 7.659955549563526 7.666194109493317 12 851004 null sample=1 period=1 cycle=851 experiment=4 -SML null C23H51N7O3 null null null 496.393559709474005 null null 608.394000000000005 null null null null null null 11.40879578074424 11.40879578074424 0.0 null [M + Na]+ C23H51N7O3 2 2 0.5 -4.193693126868299 4.193693126868299 -2.013488283583159 12 851004 null sample=1 period=1 cycle=851 experiment=4 -SML null C28H53N3O2S null null null 496.393559709474005 null null 608.394000000000005 null null null null null null 9.878813012741157 9.878813012741157 0.0 null [M + H]+ C28H53N3O2S 3 2 0.5 -0.656534039873993 0.656534039873993 0.874953703509131 12 851004 null sample=1 period=1 cycle=851 experiment=4 -SML null C26H55N3O2S null null null 496.393559709474005 null null 608.394000000000005 null null null null null null 9.532842124092705 9.532842124092705 0.0 null [M + Na]+ C26H55N3O2S 4 2 0.5 5.278238893054652 5.278238893054652 5.721285717488984 12 851004 null sample=1 period=1 cycle=851 experiment=4 -SML null C25H49N7O3 null null null 496.393559709474005 null null 608.394000000000005 null null null null null null 9.303836881800034 9.303836881800034 0.0 null [M + H]+ C25H49N7O3 5 2 0.5 -6.816097764115619 6.816097764115619 -6.859820297677524 12 851004 null sample=1 period=1 cycle=851 experiment=4 -SML null C22H46O6 null null null 407.337607109571991 null null 610.321000000020035 null null null null null null 3.5 3.5 0.0 null [M + H]+ C22H46O6 1 1 0.0 nan nan 2.188517499733601 15 853003 null sample=1 period=1 cycle=853 experiment=3 -SML null C23H42N4O2 null null null 407.337607109571991 null null 610.321000000020035 null null null null null null 1.0 1.0 0.0 null [M + H]+ C23H42N4O2 2 1 0.0 nan nan -1.094734467773591 15 853003 null sample=1 period=1 cycle=853 experiment=3 -SML null C19H38N10 null null null 407.337607109571991 null null 610.321000000020035 null null null null null null 0.636657639383096 0.636657639383096 0.0 null [M + H]+ C19H38N10 3 1 0.0 nan nan 5.497752828135451 15 853003 null sample=1 period=1 cycle=853 experiment=3 -SML null C18H42N6O4 null null null 407.337607109571991 null null 610.321000000020035 null null null null null null 0.602603903755284 0.602603903755284 0.0 null [M + H]+ C18H42N6O4 4 1 0.0 nan nan 8.781004795642643 15 853003 null sample=1 period=1 cycle=853 experiment=3 -SML null C21H47N2O3P null null null 407.337607109571991 null null 610.321000000020035 null null null null null null -0.6094379124341 -0.6094379124341 0.0 null [M + H]+ C21H47N2O3P 5 1 0.0 nan nan -5.15379989939335 15 853003 null sample=1 period=1 cycle=853 experiment=3 -SML null C23H45N5O2 null null null 424.36421074658 null null 610.321000000020035 null null null null null null 16.360336009476693 13.323939090246116 3.036396919230577 null [M + H]+ C23H45N5O2 1 3 1.0 -2.02082243405874 2.02082243405874 -0.922286801423198 16 853004 null sample=1 period=1 cycle=853 experiment=4 -SML null C21H47N5O2 null null null 424.36421074658 null null 610.321000000020035 null null null null null null 15.557883110117828 12.891398392500449 2.666484717617379 null [M + Na]+ C21H47N5O2 2 3 1.0 4.676218099959367 4.676218099959367 4.746636116883184 16 853004 null sample=1 period=1 cycle=853 experiment=4 -SML null C18H45N7O4 null null null 424.36421074658 null null 610.321000000020035 null null null null null null 13.30527333003349 11.888924919330686 1.416348410702804 null [M + H]+ C18H45N7O4 3 3 1.0 9.177881129536456 9.177881129536456 8.557211936042933 16 853004 null sample=1 period=1 cycle=853 experiment=4 -SML null C23H51N3O null null null 424.36421074658 null null 610.321000000020035 null null null null null null 12.771514754587351 12.771514754587351 0.0 null [M + K]+ C23H51N3O 4 3 1.0 -6.946040522841118 6.946040522841118 -5.091394268942456 16 853004 null sample=1 period=1 cycle=853 experiment=4 -SML null C26H49NOS null null null 424.36421074658 null null 610.321000000020035 null null null null null null 10.132608405464048 10.132608405464048 0.0 null [M + H]+ C26H49NOS 5 3 1.0 8.667693098170556 8.667693098170556 8.125347053567902 16 853004 null sample=1 period=1 cycle=853 experiment=4 -SML null C29H48O5 null null null 477.359824108717987 null null 610.321000000020035 null null null null null null 3.5 3.5 0.0 null [M + H]+ C29H48O5 1 1 0.0 nan nan 4.971136043797487 17 853006 null sample=1 period=1 cycle=853 experiment=6 -SML null C30H44N4O null null null 477.359824108717987 null null 610.321000000020035 null null null null null null 1.0 1.0 0.0 null [M + H]+ C30H44N4O 2 1 0.0 nan nan 2.169492645174178 17 853006 null sample=1 period=1 cycle=853 experiment=6 -SML null C22H46N8O2 null null null 477.359824108717987 null null 610.321000000020035 null null null null null null 1.0 1.0 0.0 null [M + Na]+ C22H46N8O2 3 1 0.0 nan nan -7.896147061695832 17 853006 null sample=1 period=1 cycle=853 experiment=6 -SML null C30H50N2 null null null 477.359824108717987 null null 610.321000000020035 null null null null null null 1.0 1.0 0.0 null [M + K]+ C30H50N2 4 1 0.0 nan nan -1.536768147366649 17 853006 null sample=1 period=1 cycle=853 experiment=6 -SML null C28H46N4O null null null 477.359824108717987 null null 610.321000000020035 null null null null null null 1.0 1.0 0.0 null [M + Na]+ C28H46N4O 5 1 0.0 nan nan 7.209062124030016 17 853006 null sample=1 period=1 cycle=853 experiment=6 -SML null C28H55N5O4 null null null 526.433168385886006 null null 610.321000000020035 null null null null null null 4.664451024197501 4.664451024197501 0.0 null [M + H]+ C28H55N5O4 1 2 1.0 -0.185106640567048 0.185106640567048 0.924512026720884 18 853007 null sample=1 period=1 cycle=853 experiment=7 -SML null C31H57N3O2 null null null 526.433168385886006 null null 610.321000000020035 null null null null null null 4.465054326527998 4.465054326527998 0.0 null [M + Na]+ C31H57N3O2 2 2 1.0 -4.382324994082867 4.382324994082867 -2.147239711496391 18 853007 null sample=1 period=1 cycle=853 experiment=7 -SML null C28H61N3O3 null null null 526.433168385886006 null null 610.321000000020035 null null null null null null 4.443127059637575 4.443127059637575 0.0 null [M + K]+ C28H61N3O3 3 2 1.0 -4.777235287494281 4.777235287494281 -2.436256454970705 18 853007 null sample=1 period=1 cycle=853 experiment=7 -SML null C24H51N11O2 null null null 526.433168385886006 null null 610.321000000020035 null null null null null null 4.031430063553028 4.031430063553028 0.0 null [M + H]+ C24H51N11O2 4 2 1.0 6.784945314878405 6.784945314878405 6.025573588342346 18 853007 null sample=1 period=1 cycle=853 experiment=7 -SML null C33H55N3O2 null null null 526.433168385886006 null null 610.321000000020035 null null null null null null 3.410773190818925 3.410773190818925 0.0 null [M + H]+ C33H55N3O2 5 2 1.0 -0.185106640567048 0.185106640567048 -6.717027757583233 18 853007 null sample=1 period=1 cycle=853 experiment=7 -SML null C39H58N2O null null null 571.461957504937004 null null 610.321000000020035 null null null null null null 5.6964974310191 5.6964974310191 0.0 null [M + H]+ C39H58N2O 1 2 1.0 3.656826308124427 3.656826308124427 -0.408466653955956 19 853008 null sample=1 period=1 cycle=853 experiment=8 -SML null C28H58N8O4 null null null 571.461957504937004 null null 610.321000000020035 null null null null null null 5.62840242494866 5.62840242494866 0.0 null [M + H]+ C28H58N8O4 2 2 1.0 -4.907313010428966 4.907313010428966 -5.986895730548056 19 853008 null sample=1 period=1 cycle=853 experiment=8 -SML null C30H64N2O6 null null null 571.461957504937004 null null 610.321000000020035 null null null null null null 5.584753082732667 5.584753082732667 0.0 null [M + Na]+ C30H64N2O6 3 2 1.0 -5.658669244440071 5.658669244440071 -6.476307136286811 19 853008 null sample=1 period=1 cycle=853 experiment=8 -SML null C31H60N6O2 null null null 571.461957504937004 null null 610.321000000020035 null null null null null null 5.346531681460649 5.346531681460649 0.0 null [M + Na]+ C31H60N6O2 4 2 1.0 -9.251553314556515 9.251553314556515 -8.816606402788064 19 853008 null sample=1 period=1 cycle=853 experiment=8 -SML null C34H64N2O2 null null null 571.461957504937004 null null 610.321000000020035 null null null null null null 5.312451603507744 5.312451603507744 0.0 null [M + K]+ C34H64N2O2 5 2 1.0 9.710928596028868 9.710928596028868 3.534997946771918 19 853008 null sample=1 period=1 cycle=853 experiment=8 -SML null C14H20N10O7 null null null 463.137250632743985 null null 611.281000000019958 null null null null null null 4.433299582513639 4.433299582513639 0.0 null [M + Na]+ C14H20N10O7 1 2 1.0 -0.095698217001917 0.095698217001917 -7.801245401067781 21 854008 null sample=1 period=1 cycle=854 experiment=8 -SML null C23H20N8O null null null 463.137250632743985 null null 611.281000000019958 null null null null null null 4.203144319892965 4.203144319892965 0.0 null [M + K]+ C23H20N8O 2 2 1.0 4.869849748235222 4.869849748235222 -4.134254681277326 21 854008 null sample=1 period=1 cycle=854 experiment=8 -SML null C17H21FN6O7 null null null 463.137250632743985 null null 611.281000000019958 null null null null null null 4.10008145003479 4.10008145003479 0.0 null [M + Na]+ C17H21FN6O7 3 2 1.0 -0.095698217001917 0.095698217001917 5.300158106706689 21 854008 null sample=1 period=1 cycle=854 experiment=8 -SML null C26H18F2N4O null null null 463.137250632743985 null null 611.281000000019958 null null null null null null 4.018863224707272 4.018863224707272 0.0 null [M + Na]+ C26H18F2N4O 4 2 1.0 1.973170946666671 1.973170946666671 6.827990297000041 21 854008 null sample=1 period=1 cycle=854 experiment=8 -SML null C27H18N4O4 null null null 463.137250632743985 null null 611.281000000019958 null null null null null null 3.978205630617731 3.978205630617731 0.0 null [M + H]+ C27H18N4O4 5 2 1.0 -1.719050436694018 1.719050436694018 -6.112389669971726 21 854008 null sample=1 period=1 cycle=854 experiment=8 -SML null C21H41N3O12 null null null 566.228477510303037 null null 612.240000000000009 null null null null null null 4.757722501877893 4.757722501877893 0.0 null [M + K]+ C21H41N3O12 1 2 0.436619718309859 -2.2396451687519 2.2396451687519 -6.542132610342606 23 855004 null sample=1 period=1 cycle=855 experiment=4 -SML null C25H41N3O7S null null null 566.228477510303037 null null 612.240000000000009 null null null null null null 2.818482604517081 2.818482604517081 0.0 null [M + K]+ C25H41N3O7S 2 2 0.436619718309859 -2.806574118444672 2.806574118444672 -2.12324500664853 23 855004 null sample=1 period=1 cycle=855 experiment=4 -SML null C23H39N5O6P2 null null null 566.228477510303037 null null 612.240000000000009 null null null null null null 2.714244195568615 2.714244195568615 0.0 null [M + Na]+ C23H39N5O6P2 3 2 0.436619718309859 2.159947224077912 2.159947224077912 3.001583777574164 23 855004 null sample=1 period=1 cycle=855 experiment=4 -SML null C26H39N5O3S3 null null null 566.228477510303037 null null 612.240000000000009 null null null null null null 2.610241809429429 2.610241809429429 0.0 null [M + H]+ C26H39N5O3S3 4 2 0.436619718309859 -4.216098575435073 4.216098575435073 -0.533441533719245 23 855004 null sample=1 period=1 cycle=855 experiment=4 -SML null C26H37N7O3S null null null 566.228477510303037 null null 612.240000000000009 null null null null null null 2.536127191759609 2.536127191759609 0.0 null [M + K]+ C26H37N7O3S 5 2 0.436619718309859 -2.806574118444672 2.806574118444672 -4.485174957569314 23 855004 null sample=1 period=1 cycle=855 experiment=4 -SML null C33H53F null null null 507.377802577316004 null null 613.204999999980032 null null null null null null 7.417801407987388 7.417801407987388 0.0 null [M + K]+ C33H53F 1 2 1.0 1.785705379151822 1.785705379151822 2.985075850321597 26 856004 null sample=1 period=1 cycle=856 experiment=4 -SML null C30H54F2O null null null 507.377802577316004 null null 613.204999999980032 null null null null null null 6.89251885074948 6.89251885074948 0.0 null [M + K]+ C30H54F2O 2 2 1.0 -0.786499536769732 0.786499536769732 0.732568952817685 26 856004 null sample=1 period=1 cycle=856 experiment=4 -SML null C30H51F3O null null null 507.377802577316004 null null 613.204999999980032 null null null null null null 6.789598477570672 6.789598477570672 0.0 null [M + Na]+ C30H51F3O 3 2 1.0 -3.016272550100096 3.016272550100096 -1.220066726130651 26 856004 null sample=1 period=1 cycle=856 experiment=4 -SML null C33H47FN2O null null null 507.377802577316004 null null 613.204999999980032 null null null null null null 6.638628410173594 6.638628410173594 0.0 null [M + H]+ C33H47FN2O 4 2 1.0 5.767600448446966 5.767600448446966 6.472063241258406 26 856004 null sample=1 period=1 cycle=856 experiment=4 -SML null C32H52O3 null null null 507.377802577316004 null null 613.204999999980032 null null null null null null 3.5 3.5 0.0 null [M + Na]+ C32H52O3 5 1 0.0 nan nan -6.038196308384239 26 856004 null sample=1 period=1 cycle=856 experiment=4 -SML null C10H12O5 null null null 213.074829537142989 null null 614.173999999979969 null null null null null null 3.5 3.5 0.0 null [M + H]+ C10H12O5 1 1 0.0 nan nan -4.319604288913501 28 857003 null sample=1 period=1 cycle=857 experiment=3 -SML null C8H14O5 null null null 213.074829537142989 null null 614.173999999979969 null null null null null null 3.5 3.5 0.0 null [M + Na]+ C8H14O5 2 1 0.0 nan nan 6.970739132860442 28 857003 null sample=1 period=1 cycle=857 experiment=3 -SML null C6H8N6O3 null null null 213.074829537142989 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + H]+ C6H8N6O3 3 1 0.0 nan nan 8.28332964678035 28 857003 null sample=1 period=1 cycle=857 experiment=3 -SML null C9H10N4O null null null 213.074829537142989 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + Na]+ C9H10N4O 4 1 0.0 nan nan 0.694108509974577 28 857003 null sample=1 period=1 cycle=857 experiment=3 -SML null C6H14N4O2 null null null 213.074829537142989 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + K]+ C6H14N4O2 5 1 0.0 nan nan -0.019950491336188 28 857003 null sample=1 period=1 cycle=857 experiment=3 -SML null C11H15N2O9P null null null 373.040157682534982 null null 614.173999999979969 null null null null null null 23.830222282750416 23.830222282750416 0.0 null [M + Na]+ C11H15N2O9P 1 6 0.889909025895723 1.305298961381369 3.823427075478538 -1.554008445412062 29 857004 null sample=1 period=1 cycle=857 experiment=4 -SML null C12H19N2O4PS2 null null null 373.040157682534982 null null 614.173999999979969 null null null null null null 23.720375409778153 23.720375409778153 0.0 null [M + Na]+ C12H19N2O4PS2 2 9 0.940559246410657 5.456786647266265 6.842002799677939 -3.883591419560776 29 857004 null sample=1 period=1 cycle=857 experiment=4 -SML null C10H16N4O6P2 null null null 373.040157682534982 null null 614.173999999979969 null null null null null null 22.520973985256017 22.520973985256017 0.0 null [M + Na]+ C10H16N4O6P2 3 9 0.926745549906584 -4.234678553446738 4.234678553446738 -9.571381209189909 29 857004 null sample=1 period=1 cycle=857 experiment=4 -SML null C15H14N2O7 null null null 373.040157682534982 null null 614.173999999979969 null null null null null null 21.347779179714465 21.347779179714465 0.0 null [M + K]+ C15H14N2O7 4 5 0.5973656310428 0.101135136223425 1.746036431220398 -8.313328985286178 29 857004 null sample=1 period=1 cycle=857 experiment=4 -SML null C9H15N6O6P null null null 373.040157682534982 null null 614.173999999979969 null null null null null null 20.840561892315421 20.840561892315421 0.0 null [M + K]+ C9H15N6O6P 5 6 0.871490763890292 2.930105624214754 4.192444264217398 -5.546983382149036 29 857004 null sample=1 period=1 cycle=857 experiment=4 -SML null C20H37NO6 null null null 388.269335994209996 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + H]+ C20H37NO6 1 1 0.0 nan nan -0.073046923786965 30 857005 null sample=1 period=1 cycle=857 experiment=5 -SML null C19H35N5O2 null null null 388.269335994209996 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + Na]+ C19H35N5O2 2 1 0.0 nan nan 2.67838333606761 30 857005 null sample=1 period=1 cycle=857 experiment=5 -SML null C24H35N3 null null null 388.269335994209996 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + Na]+ C24H35N3 3 1 0.0 nan nan -7.682362741644806 30 857005 null sample=1 period=1 cycle=857 experiment=5 -SML null C21H33N5O2 null null null 388.269335994209996 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + H]+ C21H33N5O2 4 1 0.0 nan nan -3.517542473654744 30 857005 null sample=1 period=1 cycle=857 experiment=5 -SML null C16H33N7O4 null null null 388.269335994209996 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + H]+ C16H33N7O4 5 1 0.0 nan nan 6.843203604057673 30 857005 null sample=1 period=1 cycle=857 experiment=5 -SML null C26H51N5O3 null null null 482.403087306262989 null null 614.173999999979969 null null null null null null 6.5874834862548 6.5874834862548 0.0 null [M + H]+ C26H51N5O3 1 2 1.0 -6.616351530168046 6.616351530168046 -7.005837890510965 31 857007 null sample=1 period=1 cycle=857 experiment=7 -SML null C27H47BN6O null null null 482.403087306262989 null null 614.173999999979969 null null null null null null 4.765887509073973 4.765887509073973 0.0 null [M + H]+ C27H47BN6O 2 2 1.0 2.29709022075677 2.29709022075677 3.604309794474105 31 857007 null sample=1 period=1 cycle=857 experiment=7 -SML null C29H52FNO3 null null null 482.403087306262989 null null 614.173999999979969 null null null null null null 3.068738849958652 3.068738849958652 0.0 null [M + H]+ C29H52FNO3 3 2 1.0 -6.616351530168046 6.616351530168046 5.572332025239653 31 857007 null sample=1 period=1 cycle=857 experiment=7 -SML null C26H51BN2O5 null null null 482.403087306262989 null null 614.173999999979969 null null null null null null 2.747610168438948 2.747610168438948 0.0 null [M + H]+ C26H51BN2O5 4 2 1.0 -6.616351530168046 6.616351530168046 6.376663527635651 31 857007 null sample=1 period=1 cycle=857 experiment=7 -SML null C32H51NO2 null null null 482.403087306262989 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + H]+ C32H51NO2 5 1 0.0 nan nan 7.941454508115075 31 857007 null sample=1 period=1 cycle=857 experiment=7 -SML null C34H55NO3 null null null 526.429648899930044 null null 614.173999999979969 null null null null null null 9.809958490774431 9.809958490774431 0.0 null [M + H]+ C34H55NO3 1 3 0.8 6.462990336347634 6.462990336347634 7.936156043317339 32 857008 null sample=1 period=1 cycle=857 experiment=8 -SML null C30H57N5 null null null 526.429648899930044 null null 614.173999999979969 null null null null null null 9.033932158913366 9.033932158913366 0.0 null [M + K]+ C30H57N5 2 3 0.8 7.019507994789919 7.019507994789919 9.676460758110611 32 857008 null sample=1 period=1 cycle=857 experiment=8 -SML null C24H51N11O2 null null null 526.429648899930044 null null 614.173999999979969 null null null null null null 8.538047571343183 8.538047571343183 0.0 null [M + H]+ C24H51N11O2 3 3 0.8 -6.119422254982977 6.119422254982977 -0.659963133222153 32 857008 null sample=1 period=1 cycle=857 experiment=8 -SML null C27H53N9 null null null 526.429648899930044 null null 614.173999999979969 null null null null null null 8.197651351338704 8.197651351338704 0.0 null [M + Na]+ C27H53N9 4 2 0.6 -9.999476041150038 9.999476041150038 -3.731735407872217 32 857008 null sample=1 period=1 cycle=857 experiment=8 -SML null C31H59NO3S null null null 526.429648899930044 null null 614.173999999979969 null null null null null null 6.85711312302807 6.85711312302807 0.0 null [M + H]+ C31H59NO3S 5 3 0.8 -2.910393376606797 2.910393376606797 1.532398186838836 32 857008 null sample=1 period=1 cycle=857 experiment=8 -SML null C18H20O11 null null null 413.109579675280997 null null 616.093999999980042 null null null null null null 14.292209193029343 14.292209193029343 0.0 null [M + H]+ C18H20O11 1 6 0.775725593667546 3.924054898021201 3.924054898021201 4.216225612186144 35 859003 null sample=1 period=1 cycle=859 experiment=3 -SML null C19H22N2O6 null null null 413.109579675280997 null null 616.093999999980042 null null null null null null 12.819162190706074 12.819162190706074 0.0 null [M + K]+ C19H22N2O6 2 6 0.815303430079156 -0.131482556141338 2.714312399532566 -3.303842071539723 35 859003 null sample=1 period=1 cycle=859 experiment=3 -SML null C15H24O11S null null null 413.109579675280997 null null 616.093999999980042 null null null null null null 12.660029038223566 12.660029038223566 0.0 null [M + H]+ C15H24O11S 3 7 0.973614775725594 1.195942585932246 1.195942585932246 -3.944146758447272 35 859003 null sample=1 period=1 cycle=859 experiment=3 -SML null C13H23N6O5P null null null 413.109579675280997 null null 616.093999999980042 null null null null null null 12.324032812961905 12.324032812961905 0.0 null [M + K]+ C13H23N6O5P 4 7 0.973614775725594 0.274940520665822 5.923487618807297 -0.80581721151837 35 859003 null sample=1 period=1 cycle=859 experiment=3 -SML null C16H28O6S3 null null null 413.109579675280997 null null 616.093999999980042 null null null null null null 12.072418633913491 12.072418633913491 0.0 null [M + H]+ C16H28O6S3 5 7 0.973614775725594 -1.345352660301492 2.798781926730509 -6.047772630740976 35 859003 null sample=1 period=1 cycle=859 experiment=3 -SML null C28H53N5O5 null null null 540.409335498831979 null null 616.093999999980042 null null null null null null 8.562201213966528 8.562201213966528 0.0 null [M + H]+ C28H53N5O5 1 3 1.0 0.193050989235034 2.159177666783332 -4.831058767989835 36 859005 null sample=1 period=1 cycle=859 experiment=5 -SML null C26H55N5O5 null null null 540.409335498831979 null null 616.093999999980042 null null null null null null 7.983537782900839 7.983537782900839 0.0 null [M + Na]+ C26H55N5O5 2 3 1.0 7.137682449104624 7.137682449104624 -0.379455433393772 36 859005 null sample=1 period=1 cycle=859 experiment=5 -SML null C24H55N9O2 null null null 540.409335498831979 null null 616.093999999980042 null null null null null null 7.693823911659977 7.693823911659977 0.0 null [M + K]+ C24H55N9O2 3 3 1.0 2.837745655618497 2.837745655618497 -3.135773472553824 36 859005 null sample=1 period=1 cycle=859 experiment=5 -SML null C31H55N3O3 null null null 540.409335498831979 null null 616.093999999980042 null null null null null null 6.275805859763853 6.275805859763853 0.0 null [M + Na]+ C31H55N3O3 4 3 1.0 1.689763660980973 3.717451743960798 -7.82336828934907 36 859005 null sample=1 period=1 cycle=859 experiment=5 -SML null C27H57NO9 null null null 540.409335498831979 null null 616.093999999980042 null null null null null null 5.860735133057289 5.860735133057289 0.0 null [M + H]+ C27H57NO9 5 3 1.0 6.111411465722526 6.111411465722526 -2.356282867333573 36 859005 null sample=1 period=1 cycle=859 experiment=5 -SML null C21H41N3O12 null null null 566.23013795246402 null null 616.093999999980042 null null null null null null 4.365315043688498 4.365315043688498 0.0 null [M + K]+ C21H41N3O12 1 2 0.451127819548872 -6.763028731463948 6.763028731463948 -3.609662378680514 37 859006 null sample=1 period=1 cycle=859 experiment=6 -SML null C25H41N3O7S null null null 566.23013795246402 null null 616.093999999980042 null null null null null null 2.632316674128045 2.632316674128045 0.0 null [M + K]+ C25H41N3O7S 2 2 0.451127819548872 1.552130240029961 1.552130240029961 0.809212266841981 37 859006 null sample=1 period=1 cycle=859 experiment=6 -SML null C26H39N5O3S3 null null null 566.23013795246402 null null 616.093999999980042 null null null null null null 2.453266835792515 2.453266835792515 0.0 null [M + H]+ C26H39N5O3S3 3 2 0.451127819548872 0.081608948509376 0.081608948509376 2.399011077750407 37 859006 null sample=1 period=1 cycle=859 experiment=6 -SML null C25H41N3O6S2 null null null 566.23013795246402 null null 616.093999999980042 null null null null null null 2.187912946765366 2.187912946765366 0.0 null [M + Na]+ C25H41N3O6S2 4 2 0.451127819548872 -9.14541599163535 9.14541599163535 -4.875720032185424 37 859006 null sample=1 period=1 cycle=859 experiment=6 -SML null C29H41N3O2S2 null null null 566.23013795246402 null null 616.093999999980042 null null null null null null 2.134286094595516 2.134286094595516 0.0 null [M + K]+ C29H41N3O2S2 5 2 0.451127819548872 9.867289211334963 9.867289211334963 5.228086911962921 37 859006 null sample=1 period=1 cycle=859 experiment=6 -SML null C9H12O12 null null null 313.040294397041976 null null 617.057999999999993 null null null null null null 3.463116399707183 3.463116399707183 0.0 null [M + H]+ C9H12O12 1 1 0.0 0.45400210135818 0.45400210135818 0.45400210135818 39 860003 null sample=1 period=1 cycle=860 experiment=3 -SML null C7H14O12 null null null 313.040294397041976 null null 617.057999999999993 null null null null null null 2.538551146245938 2.538551146245938 0.0 null [M + Na]+ C7H14O12 2 1 0.0 8.138916928837395 8.138916928837395 8.138916928837395 39 860003 null sample=1 period=1 cycle=860 experiment=3 -SML null C22H10 null null null 313.040294397041976 null null 617.057999999999993 null null null null null null 2.282501290889216 2.282501290889216 0.0 null [M + K]+ C22H10 3 1 0.0 -3.558720933047197 3.558720933047197 -3.558720933047197 39 860003 null sample=1 period=1 cycle=860 experiment=3 -SML null C9H6N8O4 null null null 313.040294397041976 null null 617.057999999999993 null null null null null null 0.96711018055271 0.96711018055271 0.0 null [M + Na]+ C9H6N8O4 4 1 0.0 -0.405618863825295 0.405618863825295 -0.405618863825295 39 860003 null sample=1 period=1 cycle=860 experiment=3 -SML null C10H8N4O8 null null null 313.040294397041976 null null 617.057999999999993 null null null null null null 0.647018231053797 0.647018231053797 0.0 null [M + H]+ C10H8N4O8 5 1 0.0 -3.818265795063957 3.818265795063957 -3.818265795063957 39 860003 null sample=1 period=1 cycle=860 experiment=3 -SML null C15H22O13 null null null 411.113304946066023 null null 617.057999999999993 null null null null null null 13.861516721729579 11.917311273161568 1.944205448568011 null [M + H]+ C15H22O13 1 2 1.0 -1.569905079035442 1.569905079035442 -0.029845846303812 40 860005 null sample=1 period=1 cycle=860 experiment=5 -SML null C28H20O null null null 411.113304946066023 null null 617.057999999999993 null null null null null null 11.708685380310492 11.708685380310492 0.0 null [M + K]+ C28H20O 2 2 1.0 -5.582636234823469 5.582636234823469 -3.085314946560738 40 860005 null sample=1 period=1 cycle=860 experiment=5 -SML null C13H24O13 null null null 411.113304946066023 null null 617.057999999999993 null null null null null null 11.676641814621039 11.676641814621039 0.0 null [M + Na]+ C13H24O13 3 2 1.0 6.115025302005134 6.115025302005134 5.821796440930682 40 860005 null sample=1 period=1 cycle=860 experiment=5 -SML null C15H16N8O5 null null null 411.113304946066023 null null 617.057999999999993 null null null null null null 11.66973628859957 8.808034253650018 2.861702034949551 null [M + Na]+ C15H16N8O5 4 2 1.0 -2.429527784012751 2.429527784012751 -0.684400191095362 40 860005 null sample=1 period=1 cycle=860 experiment=5 -SML null C16H18N4O9 null null null 411.113304946066023 null null 617.057999999999993 null null null null null null 11.325828324853822 8.623867761703926 2.701960563149896 null [M + H]+ C16H18N4O9 5 2 1.0 -5.842181622135178 5.842181622135178 -3.282944162247701 40 860005 null sample=1 period=1 cycle=860 experiment=5 -SML null C23H25N3O7 null null null 456.172639883827003 null null 617.057999999999993 null null null null null null 6.422696285145079 6.422696285145079 0.0 null [M + H]+ C23H25N3O7 1 2 1.0 -1.295755987703123 1.295755987703123 -8.520257296786948 41 860007 null sample=1 period=1 cycle=860 experiment=7 -SML null C19H27N7O4 null null null 456.172639883827003 null null 617.057999999999993 null null null null null null 6.407730581647435 6.407730581647435 0.0 null [M + K]+ C19H27N7O4 2 2 1.0 1.630812676522861 1.630812676522861 -6.511921153966824 41 860007 null sample=1 period=1 cycle=860 experiment=7 -SML null C22H23N7O3 null null null 456.172639883827003 null null 617.057999999999993 null null null null null null 6.385351595915552 6.385351595915552 0.0 null [M + Na]+ C22H23N7O3 3 2 1.0 2.116838481366128 2.116838481366128 -6.178389533082018 41 860007 null sample=1 period=1 cycle=860 experiment=7 -SML null C18H31N3O8 null null null 456.172639883827003 null null 617.057999999999993 null null null null null null 6.182696599929702 6.182696599929702 0.0 null [M + K]+ C18H31N3O8 4 2 1.0 5.903014895754728 5.903014895754728 -3.580153917065536 41 860007 null sample=1 period=1 cycle=860 experiment=7 -SML null C21H27N3O7 null null null 456.172639883827003 null null 617.057999999999993 null null null null null null 6.15290396912128 6.15290396912128 0.0 null [M + Na]+ C21H27N3O7 5 2 1.0 6.389040700779578 6.389040700779578 -3.24662229618073 41 860007 null sample=1 period=1 cycle=860 experiment=7 -SML null C26H51N5O3 null null null 482.407140340066974 null null 617.057999999999993 null null null null null null 10.722442608007905 10.722442608007905 0.0 null [M + H]+ C26H51N5O3 1 2 1.0 1.546558632641359 1.546558632641359 1.395907979222642 42 860008 null sample=1 period=1 cycle=860 experiment=8 -SML null C29H53N3O null null null 482.407140340066974 null null 617.057999999999993 null null null null null null 10.67492997195748 10.67492997195748 0.0 null [M + Na]+ C29H53N3O 2 2 1.0 -2.56474925847262 2.56474925847262 -1.956181707608681 42 860008 null sample=1 period=1 cycle=860 experiment=8 -SML null C26H57N3O2 null null null 482.407140340066974 null null 617.057999999999993 null null null null null null 10.655948784217028 10.655948784217028 0.0 null [M + K]+ C26H57N3O2 3 2 1.0 -2.951576358907952 2.951576358907952 -2.271575049285469 42 860008 null sample=1 period=1 cycle=860 experiment=8 -SML null C31H51N3O null null null 482.407140340066974 null null 617.057999999999993 null null null null null null 10.311194139199582 10.311194139199582 0.0 null [M + H]+ C31H51N3O 4 2 1.0 -8.68106569835628 8.68106569835628 -6.943023316782265 42 860008 null sample=1 period=1 cycle=860 experiment=8 -SML null C27H58NO2P null null null 482.407140340066974 null null 617.057999999999993 null null null null null null 8.425039657384723 8.425039657384723 0.0 null [M + Na]+ C27H58NO2P 5 2 1.0 -6.768444319897811 6.768444319897811 -5.383597808681453 42 860008 null sample=1 period=1 cycle=860 experiment=8 -SML null C9H12O12 null null null 313.039590353460994 null null 618.022000000019943 null null null null null null 3.346313668843342 3.346313668843342 0.0 null [M + H]+ C9H12O12 1 1 0.0 -1.795052916088935 1.795052916088935 -1.795052916088935 44 861002 null sample=1 period=1 cycle=861 experiment=2 -SML null C7H14O12 null null null 313.039590353460994 null null 618.022000000019943 null null null null null null 2.829103795040653 2.829103795040653 0.0 null [M + Na]+ C7H14O12 2 1 0.0 5.889879195194379 5.889879195194379 5.889879195194379 44 861002 null sample=1 period=1 cycle=861 experiment=2 -SML null C22H10 null null null 313.039590353460994 null null 618.022000000019943 null null null null null null 2.030979709561981 2.030979709561981 0.0 null [M + K]+ C22H10 3 1 0.0 -5.807784975333283 5.807784975333283 -5.807784975333283 44 861002 null sample=1 period=1 cycle=861 experiment=2 -SML null C8H10N4O8 null null null 313.039590353460994 null null 618.022000000019943 null null null null null null 0.862454527863333 0.862454527863333 0.0 null [M + Na]+ C8H10N4O8 4 1 0.0 1.617601690383916 1.617601690383916 1.617601690383916 44 861002 null sample=1 period=1 cycle=861 experiment=2 -SML null C9H6N8O4 null null null 313.039590353460994 null null 618.022000000019943 null null null null null null 0.765099202893499 0.765099202893499 0.0 null [M + Na]+ C9H6N8O4 5 1 0.0 -2.654675814608132 2.654675814608132 -2.654675814608132 44 861002 null sample=1 period=1 cycle=861 experiment=2 -SML null C17H29NO13 null null null 456.171915734524987 null null 618.022000000019943 null null null null null null 8.35428234420319 8.35428234420319 0.0 null [M + H]+ C17H29NO13 1 2 1.0 -2.737109915480619 2.737109915480619 1.642570286795827 45 861003 null sample=1 period=1 cycle=861 experiment=3 -SML null C30H27NO null null null 456.171915734524987 null null 618.022000000019943 null null null null null null 8.128871768552493 8.128871768552493 0.0 null [M + K]+ C30H27NO 2 2 1.0 -6.749845754940504 6.749845754940504 -1.111093313913604 45 861003 null sample=1 period=1 cycle=861 experiment=3 -SML null C16H27N5O9 null null null 456.171915734524987 null null 618.022000000019943 null null null null null null 7.878749637401727 7.878749637401727 0.0 null [M + Na]+ C16H27N5O9 3 2 1.0 0.675547905901619 0.675547905901619 3.984441768094603 45 861003 null sample=1 period=1 cycle=861 experiment=3 -SML null C30H21N3O2 null null null 456.171915734524987 null null 618.022000000019943 null null null null null null 7.860681497085573 7.860681497085573 0.0 null [M + H]+ C30H21N3O2 4 2 1.0 -1.098095237589822 1.098095237589822 2.767312916164582 45 861003 null sample=1 period=1 cycle=861 experiment=3 -SML null C17H23N9O5 null null null 456.171915734524987 null null 618.022000000019943 null null null null null null 7.741548584132127 7.741548584132127 0.0 null [M + Na]+ C17H23N9O5 5 2 1.0 -3.596733623812131 3.596733623812131 1.052669877164592 45 861003 null sample=1 period=1 cycle=861 experiment=3 -SML null C36H52O6 null null null 603.36131248038896 null null 618.022000000019943 null null null null null null 3.852665756920889 3.852665756920889 0.0 null [M + Na]+ C36H52O6 1 2 0.714285714285714 0.014735963563312 0.014735963563312 -7.122769744442348 46 861005 null sample=1 period=1 cycle=861 experiment=5 -SML null C33H56O7 null null null 603.36131248038896 null null 618.022000000019943 null null null null null null 3.833773864756204 3.833773864756204 0.0 null [M + K]+ C33H56O7 2 2 0.714285714285714 -0.479087656043326 0.479087656043326 -7.37493705586356 46 861005 null sample=1 period=1 cycle=861 experiment=5 -SML null C40H52O2 null null null 603.36131248038896 null null 618.022000000019943 null null null null null null 3.5 3.5 0.0 null [M + K]+ C40H52O2 3 1 0.0 nan nan 2.35924357262763 46 861005 null sample=1 period=1 cycle=861 experiment=5 -SML null C45H46O null null null 603.36131248038896 null null 618.022000000019943 null null null null null null 3.5 3.5 0.0 null [M + H]+ C45H46O 4 1 0.0 nan nan -1.37573239197173 46 861005 null sample=1 period=1 cycle=861 experiment=5 -SML null C43H48O null null null 603.36131248038896 null null 618.022000000019943 null null null null null null 3.5 3.5 0.0 null [M + Na]+ C43H48O 5 1 0.0 nan nan 2.611410884048842 46 861005 null sample=1 period=1 cycle=861 experiment=5 -SML null C29H51N3O5 null null null 522.38651805643201 null null 618.982999999980052 null null null null null null 1.0 1.0 0.0 null [M + H]+ C29H51N3O5 1 1 0.0 nan nan -6.949122025670161 48 862004 null sample=1 period=1 cycle=862 experiment=4 -SML null C36H47N3 null null null 522.38651805643201 null null 618.982999999980052 null null null null null null 1.0 1.0 0.0 null [M + H]+ C36H47N3 2 1 0.0 nan nan 4.293947611526791 48 862004 null sample=1 period=1 cycle=862 experiment=4 -SML null C30H47N7O null null null 522.38651805643201 null null 618.982999999980052 null null null null null null 1.0 1.0 0.0 null [M + H]+ C30H47N7O 3 1 0.0 nan nan -9.509279981043925 48 862004 null sample=1 period=1 cycle=862 experiment=4 -SML null C31H53N3O null null null 522.38651805643201 null null 618.982999999980052 null null null null null null 1.0 1.0 0.0 null [M + K]+ C31H53N3O 4 1 0.0 nan nan 8.607879771097275 48 862004 null sample=1 period=1 cycle=862 experiment=4 -SML null C25H47N9O3 null null null 522.38651805643201 null null 618.982999999980052 null null null null null null 1.0 1.0 0.0 null [M + H]+ C25H47N9O3 5 1 0.0 nan nan -1.808545255031244 48 862004 null sample=1 period=1 cycle=862 experiment=4 -SML null C32H43N9O3 null null null 602.355320245104963 null null 618.982999999980052 null null null null null null 6.955514843428635 6.955514843428635 0.0 null [M + H]+ C32H43N9O3 1 2 0.552501381197249 -1.918108645384416 1.918108645384416 -1.398581463893163 49 862006 null sample=1 period=1 cycle=862 experiment=6 -SML null C27H49N9O4 null null null 602.355320245104963 null null 618.982999999980052 null null null null null null 6.773744877209534 6.773744877209534 0.0 null [M + K]+ C27H49N9O4 2 2 0.552501381197249 5.396148465222392 5.396148465222392 2.34263227547646 49 862006 null sample=1 period=1 cycle=862 experiment=6 -SML null C30H45N9O3 null null null 602.355320245104963 null null 618.982999999980052 null null null null null null 6.744400283004429 6.744400283004429 0.0 null [M + Na]+ C30H45N9O3 3 2 0.552501381197249 5.88997133554043 5.88997133554043 2.595220730944644 49 862006 null sample=1 period=1 cycle=862 experiment=6 -SML null C35H45N7O null null null 602.355320245104963 null null 618.982999999980052 null null null null null null 6.664303873031611 6.664303873031611 0.0 null [M + Na]+ C35H45N7O 4 2 0.552501381197249 -7.166597855441706 7.166597855441706 -4.083163048374841 49 862006 null sample=1 period=1 cycle=862 experiment=6 -SML null C32H49N7O2 null null null 602.355320245104963 null null 618.982999999980052 null null null null null null 6.631658587354478 6.631658587354478 0.0 null [M + K]+ C32H49N7O2 5 2 0.552501381197249 -7.660420725759744 7.660420725759744 -4.335751503654287 49 862006 null sample=1 period=1 cycle=862 experiment=6 diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_1_ann_out.mzML b/src/tests/topp/THIRDPARTY/SiriusAdapter_1_ann_out.mzML deleted file mode 100644 index 28874e4b7cc..00000000000 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_1_ann_out.mzML +++ /dev/null @@ -1,2555 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - wD46deVBckA= - - - - - - AACTQw== - - - - - - GQ+SQw== - - - - - - QzE1SDE3Tk81AA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - wD46deVBckA= - - - - - - AACTQw== - - - - - - RQ+SQw== - - - - - - QzE2SDEzTjVPAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - wD46deVBckA= - - - - - - AACTQw== - - - - - - +w6SQw== - - - - - - QzExSDE5TjVPMgA= - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - wD46deVBckA= - - - - - - AACTQw== - - - - - - 9g6SQw== - - - - - - QzE0SDE1TjVPAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - wD46deVBckA= - - - - - - AACTQw== - - - - - - fw+SQw== - - - - - - QzE2SDE5TjMA - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - pWd6ifFBckA= - - - - - - AIBHRA== - - - - - - fw+SQw== - - - - - - QzE2SDE5TjMA - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - pWd6ifFBckA= - - - - - - AIBHRA== - - - - - - RQ+SQw== - - - - - - QzE2SDEzTjVPAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - pWd6ifFBckA= - - - - - - AIBHRA== - - - - - - 4g+SQw== - - - - - - QzhIMTVOOU8yAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - pWd6ifFBckA= - - - - - - AIBHRA== - - - - - - kA+SQw== - - - - - - QzEwSDE1RjJONU8zAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - pWd6ifFBckA= - - - - - - AIBHRA== - - - - - - hw+SQw== - - - - - - QzEySDIxTk81UwA= - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - CK9d2vBBckA= - - - - - - ANAGRQ== - - - - - - fw+SQw== - - - - - - QzE2SDE5TjMA - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - CK9d2vBBckA= - - - - - - ANAGRQ== - - - - - - RQ+SQw== - - - - - - QzE2SDEzTjVPAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - CK9d2vBBckA= - - - - - - ANAGRQ== - - - - - - hw+SQw== - - - - - - QzEySDIxTk81UwA= - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - CK9d2vBBckA= - - - - - - ANAGRQ== - - - - - - 4g+SQw== - - - - - - QzhIMTVOOU8yAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - CK9d2vBBckA= - - - - - - ANAGRQ== - - - - - - gQ+SQw== - - - - - - QzE1SDE4Q2xOM08A - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - ujKoNviBckA= - - - - - - AACoQg== - - - - - - wA+UQw== - - - - - - QzEySDE1TjdPAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - ujKoNviBckA= - - - - - - AACoQg== - - - - - - xA+UQw== - - - - - - QzlIMTlON08yAA== - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - ujKoNviBckA= - - - - - - AACoQg== - - - - - - 4g+UQw== - - - - - - QzEzSDE3TjNPNQA= - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - ujKoNviBckA= - - - - - - AACoQg== - - - - - - lA+UQw== - - - - - - QzExSDE5TjNPNQA= - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - ujKoNviBckA= - - - - - - AACoQg== - - - - - - ig+UQw== - - - - - - QzlIMTNOOU8zAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - aAjHLPuBckA= - - - - - - AAB8Qw== - - - - - - 4g+UQw== - - - - - - QzEzSDE3TjNPNQA= - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - aAjHLPuBckA= - - - - - - AAB8Qw== - - - - - - xA+UQw== - - - - - - QzlIMTlON08yAA== - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - aAjHLPuBckA= - - - - - - AAB8Qw== - - - - - - wA+UQw== - - - - - - QzEySDE1TjdPAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - aAjHLPuBckA= - - - - - - AAB8Qw== - - - - - - DhCUQw== - - - - - - QzE0SDEzTjdPAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - aAjHLPuBckA= - - - - - - AAB8Qw== - - - - - - GBCUQw== - - - - - - QzE2SDE5Tk8zAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - 0HtjCACCckA= - - - - - - zbwWRA== - - - - - - DhCUQw== - - - - - - QzE0SDEzTjdPAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - 0HtjCACCckA= - - - - - - zbwWRA== - - - - - - GBCUQw== - - - - - - QzE2SDE5Tk8zAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - 0HtjCACCckA= - - - - - - zbwWRA== - - - - - - HBCUQw== - - - - - - QzEzSDIzTk80AA== - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - 0HtjCACCckA= - - - - - - zbwWRA== - - - - - - 4g+UQw== - - - - - - QzEzSDE3TjNPNQA= - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - 0HtjCACCckA= - - - - - - zbwWRA== - - - - - - xA+UQw== - - - - - - QzlIMTlON08yAA== - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - 9wDdl/NBckA= - - - - - - gEvaRw== - - - - - - fw+SQw== - - - - - - QzE2SDE5TjMA - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - 9wDdl/NBckA= - - - - - - gEvaRw== - - - - - - RQ+SQw== - - - - - - QzE2SDEzTjVPAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - 9wDdl/NBckA= - - - - - - gEvaRw== - - - - - - 4g+SQw== - - - - - - QzhIMTVOOU8yAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - 9wDdl/NBckA= - - - - - - gEvaRw== - - - - - - nw+SQw== - - - - - - QzE2SDE2Rk4zAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - 9wDdl/NBckA= - - - - - - gEvaRw== - - - - - - mA+SQw== - - - - - - QzEwSDE5Qk40TzMA - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - QPuRIvJBckA= - - - - - - gFQJSA== - - - - - - fw+SQw== - - - - - - QzE2SDE5TjMA - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - QPuRIvJBckA= - - - - - - gFQJSA== - - - - - - RQ+SQw== - - - - - - QzE2SDEzTjVPAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - QPuRIvJBckA= - - - - - - gFQJSA== - - - - - - 4g+SQw== - - - - - - QzhIMTVOOU8yAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - QPuRIvJBckA= - - - - - - gFQJSA== - - - - - - kA+SQw== - - - - - - QzEwSDE1RjJONU8zAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - QPuRIvJBckA= - - - - - - gFQJSA== - - - - - - kw+SQw== - - - - - - QzEzSDE1Qk40TzIA - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - 9Z81P/5yckA= - - - - - - AAAAAA== - - - - - - D5iTQw== - - - - - - QzE1SDI4TzQA - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - 9Z81P/5yckA= - - - - - - AAAAAA== - - - - - - QZiTQw== - - - - - - QzEzSDI4TjRPAA== - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - 9Z81P/5yckA= - - - - - - AAAAAA== - - - - - - 25eTQw== - - - - - - QzEySDI2TjJPNgA= - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - 9Z81P/5yckA= - - - - - - AAAAAA== - - - - - - O5iTQw== - - - - - - QzE2SDI0TjQA - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - 9Z81P/5yckA= - - - - - - AAAAAA== - - - - - - t5eTQw== - - - - - - QzExSDI0TjZPMgA= - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - 9Z81P/5yckA= - - - - - - AAAAAA== - - - - - - B5iTQw== - - - - - - QzEzSDIyTjZPMgA= - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - stmR6vshckA= - - - - - - AACoQg== - - - - - - zA+RQw== - - - - - - QzEySDE5Tk83AA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - stmR6vshckA= - - - - - - AACoQg== - - - - - - +A+RQw== - - - - - - QzEzSDE1TjVPMwA= - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - stmR6vshckA= - - - - - - AACoQg== - - - - - - qg+RQw== - - - - - - QzExSDE3TjVPMwA= - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - stmR6vshckA= - - - - - - AACoQg== - - - - - - 2g+RQw== - - - - - - QzlIMTdOOQA= - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - stmR6vshckA= - - - - - - AACoQg== - - - - - - LRCRQw== - - - - - - QzE2SDE3TjNPAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - 3030 - 5983 - 8910 - 11838 - 14770 - 17692 - 20612 - 23539 - 26471 - 29405 - 32333 - 35254 - 38182 - 41111 - 44044 - 46974 - 49905 - 52833 - 55762 - 58696 - 61624 - 64551 - 67479 - 70412 - 73340 - 76273 - 79199 - 82132 - 85060 - 87989 - 90917 - 93838 - 96766 - 99699 - 102632 - 105562 - 108483 - 111411 - 114344 - 117279 - 120214 - 123140 - 126068 - 128997 - 131925 - 134859 - 137788 - 140714 - 143643 - 146577 - 149499 - - -152462 -0 - \ No newline at end of file diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_1_input.mzML b/src/tests/topp/THIRDPARTY/SiriusAdapter_1_input.mzML deleted file mode 100644 index df3b66a009a..00000000000 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_1_input.mzML +++ /dev/null @@ -1,2241 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - sSFyd+xBckA= - - - - - - AKCARA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - yJ1gdeVBckBhfVIe4WFyQA== - - - - - - AGDvRAAAQ0Q= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uldW5/BBckA= - - - - - - AACTQw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lBJlifFBckBRvpkb+FFyQD/ATxjfYXJA - - - - - - ACi2RQCAikQA4LNE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - sdNZ+/BBckA= - - - - - - AIBHRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DM7E2vBBckCa1rHJAVJyQGblgjvmYXJA3o1KAu9xckA= - - - - - - AIAPRgBguUQAEF1FAEARRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Yivx8exBckDQ7jihsENyQA== - - - - - - ANAGRQAAKEI= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - d15CWu1BckCqePJpAVJyQOYNhgDmYXJANcgg7upxckA= - - - - - - AHTfRgDIjUUAcAhGAICyRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3dBD2/FBckDfWgRJ/VFyQI/Emz/mYXJAlYG07u5xckA= - - - - - - C5xoRwDgGEYAzItGAJA/RQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - XvBWupQzckCxQ+tT8kFyQGHeDEH8UXJAxmt0wOVhckC4+XMh7XFyQMKCVlr4gXJA - - - - - - AGCTRIBIDUhPkahGudQrRwCwAUYAwG5E - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - k5Em75YzckA7oBbc80FyQMlFsB0AUnJAhMaSyuZhckAK0FAb7nFyQN7kuTb4gXJA - - - - - - AKCCRICvL0hL2+RGAANSRwCoA0YAQJVE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5dqGTPuBckD1Gsp2uYJyQA== - - - - - - AACoQgAA4EE= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CbFmI6czckCzSxYx8kFyQEUdRqr4TXJAl6+8sy1PckDkimVL/1FyQIDLhy7oYXJA/r/jQfNxckAyI04s+4FyQA== - - - - - - AJAORVKBrEhvhz5E0JLURADRVUd2c9tHALCGRgCA5EQ= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Ea2P2P6BckBWvaMh54JyQKP+fBE0g3JA - - - - - - AAB8QwAAKEIAAChC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tnB84JozckB2nncN8kFyQHqkZAyDTXJAHlMTPcxOckDusmrKIU9yQPoyKBT7UHJALDnmdTNRckCaiznlAFJyQNbWFOnoYXJAJsbumhFvckBYN9QQ9XFyQNXLfwgAgnJA64Ob7tSCckA= - - - - - - k7ZcRSBWE0nb/V9ECvxTRQZRUEXziDVET/PBRACxmEdA4zJIAMAXRP637EYAsENFO8wdRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FNwfoQOCckAr7qWaWoJyQA== - - - - - - hLwWRACAMkQ= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Dq0RD6QzckD58UZu80FyQG2WR1fqSXJAOjbUI15OckDHSWOaVU9yQGpx/buhUHJAUaqFqu9QckCvqNBwAVJyQFSnhCMiWnJAI2Ko3JdcckAiOqGMEF1yQGf3U36YXnJArsejU0RfckBVCI166WFyQIZsNSOganJAJqbTVPNqckD186n/CWxyQGQeIu10bnJARfYZlhZvckCUikuK8XFyQB1F1aqEdXJACNUIEy12ckDIEz5IzHZyQBfbAfi6e3JApBApFsp8ckBBaphvx35yQH0Y5kpGf3JAWpRDD7d/ckBPuqaM+oFyQJLeYuoWg3JA4HlUuWCDckA0oWV1t4lyQA== - - - - - - hdmvRXC7T0kAwKpEyxFjRVRCh0WNxAZFc8/NRI1ukkd9X/BDx9IBRAAW7EPpCgxEAEAfRMALf0gAgBNE9QUxRA5V9EMyjaNEn73yRPnqJEcAQAFEAAABRKXS+EOSlAhEAAD6Q/w55kNBA/xD2OwGRB7cYEUAgPhDB1D2QwAA60M= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TsE1TKQzckCFMtGX80FyQGZjxc+cSXJAm/ijmgFKckD0tegJ7k1yQECNoZqiTnJANAQqwEtPckCi/NphwE9yQDolnQoAUXJAsu+jaf9RckABJh3WWFxyQIAiZPW1XHJAexx5FPtdckC0BW75tF5yQDxYObIYX3JAuDpqZ+dhckDyyF57CmtyQFq8fX2ya3JAUNQYY0FsckBRJpe4P21yQL0e19M+bnJA2a0fpitvckBKVUvc8W9yQFX4UcvHcHJASwlEcPJxckDXSiF8aXZyQD88O/qednJAU85suDN4ckD071z+yXtyQO4lVMa1fXJAOmcrUj9+ckChtbSwqH5yQAhhXitIgXJAqIvs1f6BckB00KnGG4NyQD9NBDLGh3JAm8t7TGqIckDgd1nVB41yQA== - - - - - - 22m5RbBxaEn2q+JELt/yRFVoSEV0Un5FgVCrRSlSnUWvxepE7RCWRwAA40MNefBDhk8WRADARUTJTF5EyDuKSCyi5EMAgPtDF9/0Q/GHCURIiYtEX4ytRDTnGkQAgB1EO9k3R/XdBUTyueJDAAABRHBmAUQAAD5Eqhc6RJsU90PAt4lEDDqWRaDJAURSH+hDW8XrQwAA8kM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - B+A6ZXkzckBQynx190FyQB9dFcYNSHJAuPDzjmpIckB7x48Ock1yQA== - - - - - - AIAyRIBL2kcAAFJDAABSQwAAk0M= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - iF+qaJYzckDDsVIi8kFyQAoXRW6jSXJAYEcTgJpOckDKBwF+ME9yQKMdLCYfUXJAzEXiev5RckAMTBFYsFdyQAITkbo3XHJA6cCsfmleckAXKtyudV9yQJLzyB7mYXJA8FxAgBBmckBhk4jilWZyQGr2J6C3aHJAjBgavDBpckBnpwvYu2pyQDasltc/a3JA1ppLFXNsckB5q3nYr21yQCjnn2L1bXJAr+ZLRlhuckCjW4u3Xm9yQDyLeB0zcHJAt12QlNBwckCMLkdE8nFyQMjqbWFsc3JAT5AFqdh1ckCVIs7SYXZyQGoESIfgdnJAddA0wa96ckBYi88f83pyQP2C3pKDfHJA1IXoRu18ckCBejApWH1yQCgcJ5TLfXJAhMN5DPiBckD7DKOr5oJyQAO9CD7hhHJAW8iwwpGHckDkJdRYzIpyQM4jzo8Qi3JA - - - - - - AADHRVDcbUkAgNpDtNByRe/GYUXT1PhDHaoMSACAyENGb+hDMAIQRADACER2+I5I5WS3QwCAyEMAwBFEAAAkRACAtkP0A9tDAADtQwAA7UMF1h1EAADtQwAAmkQQIy1Eca4lRDgkN0cAgNpDAIDaQ9J9FkSLefRDAAD/QwAA/0MAAO1DAAAkRABANkQAAO1DVnqfRQCA2UMAgNpDAIC2QwAA/0MAwBFE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uFamwo4zckDTelU49kFyQIVn/PckSnJAp7IQ3tNMckAKEy8jJE1yQA1KyywWTnJAoa3mzo1OckB8Qw9SQE9yQPMJCXKlT3JA834piyRTckA= - - - - - - AMBmRIBUCUgAAFJDAABSQwAAfEMAAJNDAACoQwCACEQAANJDAABSQw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - KlTs5ZYzckB6T6Ae80FyQJ5XNm7SSHJAIqQA/pRJckAK2UbLLEpyQNr7nzhKTHJAgn9jxclMckA/R9VytE1yQNi3h+O6TnJANBHeEStPckAaPGXE/1FyQP+gZ0x6VnJAMOPQAO1WckCEleETMlpyQNojJGOJXXJAmojAcBJeckAdupIFgl5yQMAAlCgXX3JAmERiq+dhckAqGCBwKmlyQKildErAaXJA/wYs3ANqckAd7H7tgWpyQJMODaIna3JACrasIa1rckAOEEPdoW1yQJ5/KJwFbnJATkN2K5tuckBLPi2lMW9yQBTOkBy0b3JA/EFVRCpwckCwn34f3HByQK2sKZrxcXJAjZf1BB9zckBi+2+24HVyQHgXu17idnJAGpkEylh3ckC9wFfMDHhyQLbmO+s/e3JAj0fpSAJ8ckB3rRsUW3xyQGl8fkvpgHJAFwF9df2BckAokjUvzoJyQLS3SiE1g3JA8vyFbS6FckDKFeLBvIVyQM5xJ6Y7hnJAGAj4DCWJckBOWBDOsolyQFvK+Clej3JA - - - - - - ACDlRaAqlklnir1DAIAyRLNYAURXHfhDAIBHREhLFEVbAKRFaRSYRcBXN0gAAL1DAAC9QwAA0kOkm+9DPKLzQwAAvUMAgAhEVrW8SACAHUQ+sC5E5rNTRBs8SURWXVNEB3Y5RADAjUQAgJ1EJUGRRAAAk0QAQINEAAAoRAAAKETNcmVHfxnfQwAA/EMAgB1EgRsjRACACES6U75DLZRjRCPWW0QAQB1Eq3i8Rcu+2kMAANJDoXkFRI8PHUQAAPxDAADnQwCAHUTBSfJD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OAWobJ8zckBIW8WI8UFyQMDHoxuXSXJA2nq0Jd5KckBYUZ46WktyQISUWDEhTHJAzp5iYZpMckDaaUdiok1yQAH8o8WuTnJA9KhcxTlPckADhAvIG1ByQKaphHyUUHJADMwltP5RckC91kecRlhyQIGy1HCoWHJAkBz8zmtZckAaLHqcA1pyQP7R9andWnJAxdw0pvlcckDjnBMPIl1yQBKklmlPXnJAD7Pa0tteckAGaGcrPl9yQNkR/TEYYXJAA8Fl0OhhckDyxNG0rmpyQGaNs6BEa3JAlgDM2uprckAkZGywtGxyQP/fEmWDbXJAbhGa+GluckAQg20YGG9yQPFFS/e2b3JAMJq+4TVwckCwEmeS+3ByQF2ujGXwcXJAzqb5ahl1ckCgcnsHzHhyQCiHQnKXeXJAOiP+Akh8ckCcVzmg4HxyQPZlkRw5fnJAsj6p999+ckDKsiWRSX9yQAic6iDogHJAYy5RaPSBckAv4w3GXYNyQOy8ufpOhnJAjLvZirOGckC6tcb0LYhyQKJjUHCViHJAdKuKkR6JckC4wcyW+olyQATlfq+ninJAqx5Tb9iKckChlDMj54tyQHi1om/PjXJAla2S5UCOckA= - - - - - - AEQARt8Oo0kAwBhEAEABROXo3UPLFv1DAIDTQ+aZzETmVMBFcfDGRTcMykQAwEZEwI9BSABAAUS3K+xDAMAYRGvXJkQAgCREAEABRABAAUQAAGtESfiZRACAU0RtMMFEIFLLSAAA60MAgNNDAIAkRExZGUQAQF9EAEDNRBJ75EQAALBEEP1oRJPkZUSU5XVHAADrQ9i830MAAA1EAAANRACAJEQzwkBEAAA8RMODFUQAQAFEAJixRQCAJEQAAA1EAAANRB/uB0QAQDBEAIDTQwAADUQAgFNEAIBTRAAA60MAAA1EAAANRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - XtuoPgMgckBMU+G8nDNyQJmC7GvyQXJA1GcbgI1JckAaYwb++U1yQEAID2SoTnJAP+NX0CBPckADKwxDfFByQHEbfYohUXJAGZfGx/9RckAcbcoE+FZyQMlTiFV+V3JA2h+0mQVYckA04zTDf1hyQISukGf0WXJAQpbx4nJackBLlOGLIFtyQJxiF7NhXHJAtxcIVDhdckBABo0k8l5yQOCDnORpX3JAr6FrB/RfckAQc4tK52FyQGH6nqG4ZnJAkV1o0i9pckD1u26op2lyQJT4QGSpanJAoAvPABtrckAASYiHtGxyQPSwQSFSbXJAgtlEwT9uckAaDj4XJW9yQMbrPfoAcHJAAsPJNfNxckDo7Ly5unVyQGhCgY8Fd3JAoqpdtVN3ckDOwVJD2ndyQPwba8cAeXJAtdiGXzd6ckBYWoeXF3xyQHcpRf27fHJA36N5aSaAckB9S+tdOYFyQJNkvS77gXJAsImqpeiFckC+yvYfUopyQA== - - - - - - AICyQwBo30WLIJtJAMAlRKbBIEXZJ6lFLH+4RQAAzEMqXMZE7qg1SAAAzEMAAP9DprrnQwAA/0MAQAxEe4o6RACA5UMAABlEAEAMRABAP0QBTEpEzKcuRGgyvEgAAMxDAEAMRADAJUQAAMxDAADMQwAAGUQAQD9EGY3BRADghUSoRidE9ABtRwBAckQAABlEAMBYRPjhP0QAQD9EAEAMRACA5UN4pftDAADMQ2I22UMA0JpFAADMQwCA5UM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 7RPPsxcgckDUuz0InTNyQGG1o//xQXJArvQap5RJckA94FUMHU1yQAgHZEQKTnJAsEcsnxlPckA6GIk5g1ByQAEP0LonUXJAkGu2ef5RckBshRk6UVNyQCmfyiowWXJASSYOJV5bckAIOkZM3V1yQJG9jqHWXnJA+3zLOE5fckA2J9Kl5F9yQBEPtM3nYXJAtbZKMHtnckA2qxaZ9GdyQBAd9+V1aHJAhI1y5uxqckBX20YCDGxyQMGhyNZRbnJAKKad3zdvckA8/nDxmHByQFjzOB7xcXJACJAbKzh7ckC/3kB7yXtyQCbOqDeEfXJA02TXmeN+ckD+Ubf3Mn9yQDQHwy6ff3JABxIsGBuAckBmmLvff4ByQOZGi2EpgXJA5r4vUveBckAIfQ5gx4JyQFM/Z9LuiHJAgPtLCnWJckAcc2aAjItyQPS+LKDoi3JAhvbPOFiMckA= - - - - - - AIBORN6zEEYPk55JAIByRACA8kMAMCZFIPLWRQBAHUSo2olEAMg1SACA8kMAgBFEAIDyQ88NbEQAwClEZQpbRAVZF0QgvsFIUGIaRAAANkQAwB1Ev1UdRKBUUkQ66yREAAC5RACA2kMAh19HAIAFRCmrD0QAgPJDB0sURADAHUTJXTtEM3w/RM5+IkQs7VBEAHAWRsRLaEQAgAVEAIAFRAAA80MAQEJEqDYFRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N4EMWQ4gckB7kuuSmjNyQFxKVf7yQXJAWsAu8xZNckDsCSInmE5yQK6zH6I8T3JArdPj5nJQckDWS2XBLlFyQA44xOYAUnJA5t6/xEBTckDYnmrInlNyQJIArkN4W3JAEVZL1xReckBe7SgHH19yQPPjikqMX3JAGLdLHulhckBXQEkiumlyQHo1is2fanJAVPiJNhhrckDquL3wlWtyQKK0hP8BbHJAx7YETnNsckA1cqbMwW1yQEGPlEljbnJA1dRQRUhvckAg4T1alXByQF559xK9cHJARhshv/JxckBsNB/+e3ZyQMpBkQeSenJAtDrmm1d8ckC31tu7bn1yQOGxEwlmgHJAS1HGDO6AckB2zf5D+4FyQOr8x9amg3JArs5szdCMckClu1ZODI5yQA== - - - - - - AEBrRABw4EVI6pZJAEAIRHbYkUWQi51FAID3Q09gp0SABCxIAADfQwAA30MAgC1EAAAhRADAFEQ1CztE3PezSBRHBkSl6SdEAABGRABARkROhVJEAEAhRLHFB0Tdpn5EAGDMRAAAIUQAgFBEACNURwAAIUQAQAhEAMAURACA90MAwF5EjY5GRACIlkUjmghEZV0eRDXF40M= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +S9EsxwgckB9NZkKozNyQOVZoL31QXJAiMd4HvhNckCHpqYArE5yQCG7aUstT3JADneXHwFSckCpJBN7e1NyQDK7LG74VXJAKyKY4m1fckBkXPuIul9yQNGhJdrpYXJATdLb3YpockCf1e1kC2lyQIZvWOQLbnJAmMLM/KJuckAyz59OR29yQKXwB4bzcXJAUCz4s/p9ckC+yEA7b35yQLLU9u3cfnJAskytP/mBckBhpynXuoNyQJ9yZZ1KhXJAgAl+2a2FckA= - - - - - - AACfRADQxUXgsV5Jup6pROG9S0VicWdFJ78GSAAA7EMAgAFEb1LnQwAA60P4o4pIAADUQwCAAUQAgLxDqnYsRABAa0QA3TJHUn3PQwCAJEQAAOtDAKBaRQAAJUQAgLxDAIC8Qw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0lYkESUgckA5HvfhqzNyQL+sxBTxQXJAGDHo06VJckDnFUhAD0pyQJyW0SapTXJA8i/FvNNNckDhqlOrq05yQLnZmRxaT3JAcWSHMppPckB6GQdgb1ByQCCDVazMUHJAPtZoYv1RckBiK9O8xV1yQAjSMlRuXnJA8qzCZThfckCK9TlH5WFyQKACfUWtaXJANDtk+ZxsckC4SQHhP21yQG+Ft3LHbXJArJJ1d1puckA6EdtUKG9yQNze97LOb3JAjG0Ur+ZwckCi2G9h8nFyQK+drTu9cnJAwokAeQp4ckDMUbrHF3lyQCxhCd+heXJAeux0oCp+ckDObOzTq35yQLbfHoT0gXJA - - - - - - AOD2RABg2EVwMmFJ4IGXRNYhkUSIegtFkjIdRQXWWkXzWpZF+waURdvaI0VzqA9Fk8+ORwBANkTQ4j1EAEBFRGCIiEjlWRxEAIAPRPf+TkQAAIdEOu2hRPtpsETT21NEQ6YXRABjJkcmjrhEAMAiRMF3PkRVHDNEAMAmRADAG0S3bIlF - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +jHKewMDckAoU7hUGiByQCuDpkekM3JAQ78b8w1BckDYhowP8kFyQJiCbWOoSXJARm5Fm49NckAOeUD6QU5yQMoHztybTnJAEiAW3lBPckC4e2oJ2FByQGfArrT9UXJAFmfCg9ZdckAePGw+6WFyQFPGkWKGbXJAL2orKIBuckBQyBTYG29yQN8qADqqb3JApiEvtfNxckDVrKErxnJyQL1r1LdhfXJA1rHIlPmBckA= - - - - - - AMAVRACgAkUAYI5FafBBRMAYLUkAQE5EDzWaRHiBMEUZkDlFPotQRW6bj0QZpaNHbIj+QzqyU0h8LCREYSVlRL4TqkRi6YtEkg8CR78JYEQ+KfZDuXlgRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - pm8Z6fYCckBPViPwFyByQAYKhT+lM3JA7eMxsPVBckAsTNfhk0lyQMhx+KvmSXJAEtW1ocdNckBGBbVNqk5yQABUGpc3T3JA872VmNhQckAiDkCAAVJyQBaghSMkX3JAli1faOphckCa1Lg4uG1yQHY22nkgb3JAPvlw+vRxckBabvtR+4FyQA== - - - - - - AABGRABAjUSc4JBFhu8QSXb6/0MAgAREwGnRREXiI0W4/ypFAEARRACVjUdARvRDtEouSCoNI0QPbU9EYzvNRgDgMkU= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 4Mn1zvcCckD32jfXGCByQBjqRkOWM3JAGR0BE/NBckDCUaN9fk5yQBgMVuJDT3JAZer/4f9RckAMdbAm6WFyQBnrvLnycXJAeeBr//mBckA= - - - - - - AEBfRADghUQAgC5FwCmySBzvk0QB3rpEo1xRR2ui3UdV3YJGAIDbRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xVnXxfYCckB8rQeMegNyQMjzPRgTIHJAtn75Z5MzckCOWe3j8UFyQHxY4hYFTnJAxA02uiZPckDZnG3g/FFyQJOYc/HmYXJAR9csve5xckD2Ewv694FyQA== - - - - - - AICPRF0ESUQAgFhE87EBRQAIgkjO7u9DTSSfRKmeHUcAqJtHvh9HRgCAnEQ= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CI2Jm/sCckCCP7fOFSByQA3tQYOpM3JAakeJQPRBckCW2eRjVE5yQMCiQJ7YTnJAd/SVlDhPckBcVEK5/lFyQN9FSH7oYXJAdr96e/NxckCdqRi+A4JyQA== - - - - - - AMCCRACAHUQAYJJEXrckSHuptENotw9EAIDVQwCOyEYAR01HAEDoRQBAdEQ= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - y4eNKPYCckBxirNuHiByQAhyz6GXM3JAjuuv8vFBckCAcvw2+1FyQKBUQa/kYXJALZ4cxe9xckACiUsJ9YFyQA== - - - - - - AACeRABAGEQAwBdE3BPWR8gqe0b1HABHAMCNRQCA1UM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 9zCbSvQCckCH3KaGFyByQCFQ+ByNM3JAaD4+MPJBckBM+brMAFJyQEX4ek7kYXJAvujqS/FxckAD6tco+IFyQA== - - - - - - AMA9RACAzUMAQD5Elj2cRwCYREYAVLFGAIBtRQCA3UM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cDauSvsCckCeCBz/sjNyQLumXtLyQXJAGGvBbv9RckDPAvZw6GFyQBkUxQotcXJA6I7dQPJxckA= - - - - - - AEBoRACA4UMA0mpHAJgQRgCuiEbzmcBDAFAiRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - zvzm1O8CckDIir485hFyQMl1gkrwQXJALD4J+vlRckCUAIkQ5GFyQORLDefrcXJA - - - - - - AIBzRAAA/EMAyTRHACDZRQCgZUaPdMxE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 7NPTdPICckBUFZyI8UFyQOrzFQYBUnJAsXDo1udhckCYHq+y8XFyQJdu3XD5cnJA - - - - - - AEAjRAC2BEcAqKhFyr0pRnzgB0UAgMVD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ezBPx/YCckALQQgI3hFyQCPzORHvQXJAthSKWvJRckDKbyMu5WFyQMZt+/3mcXJATq10XQhzckA= - - - - - - AADUQwCAT0QAXrlGAKBgRQDAAEYAIK5EAIDnQw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UhP/I+5BckCkd1D8+VFyQMaNcczlYXJAtHbQUOZxckAQRQNv8nJyQA== - - - - - - 062NRgAAJkUAKKtFAOCORACAqkM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LP4VxetBckAw1M0i/FFyQBL9dibgYXJA9slFf+9xckCTSjmN/HJyQA== - - - - - - AOSHRgCAH0UAWKJFAIA7RADAXEQ= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - yhjaN+kRckBkfTWJ8kFyQPiB1CQAUnJA1kX2/ulhckDA8VPN9HFyQKDLMOcJc3JA - - - - - - AIDDQwC4YkYAkCZFACCNRQAAVUQAgDdE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Em5uMugRckDgtZdQgRJyQA9AmVbyQXJAJ3nSyPlRckDuchBL52FyQDT7uTzrcXJATQS4P/5yckA= - - - - - - AIC/Q/pgnUMAtElGAAD2RADwZUUAwBdEAMAXRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cmcLtldxckAP4c9k6nFyQA== - - - - - - AAAoQgAAKEI= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hWQGmeoRckDPBnD18EFyQNb94i72UXJA9vuDrpRSckBitucn52FyQHRPM3rjcXJAHWCPCwNzckA= - - - - - - AEBIRAD4GkYAINlEoOj4QwBwS0UAwBhEAMAVRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - grpgbPARckDwD8fs6DFyQKsC/KnzQXJAdP0ltPZRckD5coeN6GFyQLonvI7xcXJAGkeQmhpzckA= - - - - - - AMCCRNEvu0Onj/ZFAGCbRAAwGkUAgJxDAIDqQw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 4v7N7ugRckCmWvXP6jFyQGPltknsQXJA4PCcBPRRckDBzHcL4GFyQOZ0OrpccHJA1qB+QutxckBU9m/rBnNyQA== - - - - - - vZPbRABABkQAsL1FAEBvRAAgAkUAALhDAICuQ8vV20M= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - qvg+rfIRckDSp+QA/iFyQCf9fVPpMXJAT6oRr/BBckACJMckAVJyQGnkfqnoYXJAt3B9VnNwckA8Thq18HFyQO1hGJsIc3JA - - - - - - AMBlRQAAP0QAIJpEAGivRQCgyUQAgPtEAIAYRACA60MAgMJD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0B0GTTsRckC4D6vU7hFyQD0DMer7IXJAKhWm2OIxckB8crFw8UFyQP5t3UP2UXJAvqVUUqBSckDGLGKT42FyQOUh0hedYnJAm9VZo2twckDp0dqv+XJyQA== - - - - - - m8WCRABA7kUAAJREABAkRQDItUUAQKFENbGyQwCA1kQCRa9Db3OeRMqaqEM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6sWZD7YhckAIN4BrASJyQA== - - - - - - AACoQgAAqEI= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - n6D3COsRckAsjGSS+CFyQE2KK+PmMXJAzCowBfBBckBQJ42y8lFyQPROFU7dYXJAJjmrs3NwckA= - - - - - - AKxwRgDQIEUAsIlFADCkRQAASEQAYKREKDWcRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_1_output.mzTab b/src/tests/topp/THIRDPARTY/SiriusAdapter_1_output.mzTab deleted file mode 100644 index a345eb7b252..00000000000 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_1_output.mzTab +++ /dev/null @@ -1,60 +0,0 @@ -MTD mzTab-version 1.0.0 -MTD mzTab-mode null -MTD mzTab-type null -MTD description Sirius-5.6.3 -MTD smallmolecule_search_engine_score[1] [, , SiriusScore, ] -MTD smallmolecule_search_engine_score[2] [, , TreeScore, ] -MTD smallmolecule_search_engine_score[3] [, , IsotopeScore, ] -MTD ms_run[1]-location /Users/builder/jenkins/ws/openms/PR/bldtst/87227eb0/source/src/tests/topp/THIRDPARTY/SiriusAdapter_1_input.mzML - -SMH identifier chemical_formula smiles inchi_key description exp_mass_to_charge calc_mass_to_charge charge retention_time taxid species database database_version spectra_ref search_engine best_search_engine_score[1] best_search_engine_score[2] best_search_engine_score[3] modifications opt_global_adduct opt_gobal_precursorFormula opt_global_rank opt_global_explainedPeaks opt_global_explainedIntensity opt_global_median_mass_error_fragment_peaks_ppm opt_global_median_absolute_mass_error_fragment_peaks_ppm opt_global_mass_error_precursor_ppm opt_global_compoundId opt_global_compoundScanNumber opt_global_featureId opt_global_native_id -SML null C15H17NO5 null null null 292.118520142944021 null null 404.455000000019993 null null null null null null 0.831597391947591 0.831597391947591 0.0 null [M + H]+ C15H17NO5 1 1 0.0 1.954846454887804 1.954846454887804 1.954846454887804 2 2165004 null sample=1 period=1 cycle=2165 experiment=4 -SML null C16H13N5O null null null 292.118520142944021 null null 404.455000000019993 null null null null null null 0.768142279254161 0.768142279254161 0.0 null [M + H]+ C16H13N5O 2 1 0.0 -2.623404863541922 2.623404863541922 -2.623404863541922 2 2165004 null sample=1 period=1 cycle=2165 experiment=4 -SML null C11H19N5O2 null null null 292.118520142944021 null null 404.455000000019993 null null null null null null 0.506813653466669 0.506813653466669 0.0 null [M + K]+ C11H19N5O2 3 1 0.0 5.091066642293969 5.091066642293969 5.091066642293969 2 2165004 null sample=1 period=1 cycle=2165 experiment=4 -SML null C14H15N5O null null null 292.118520142944021 null null 404.455000000019993 null null null null null null 0.446036047493384 0.446036047493384 0.0 null [M + Na]+ C14H15N5O 4 1 0.0 5.611910031361344 5.611910031361344 5.611910031361344 2 2165004 null sample=1 period=1 cycle=2165 experiment=4 -SML null C16H19N3 null null null 292.118520142944021 null null 404.455000000019993 null null null null null null 0.046523251610599 0.046523251610599 0.0 null [M + K]+ C16H19N3 5 1 0.0 -8.679919182327954 8.679919182327954 -8.679919182327954 2 2165004 null sample=1 period=1 cycle=2165 experiment=4 -SML null C16H19N3 null null null 292.121468920531015 null null 404.875000000020009 null null null null null null 0.880667513965956 0.880667513965956 0.0 null [M + K]+ C16H19N3 1 1 0.0 1.414522671061441 1.414522671061441 1.414522671061441 4 2166006 null sample=1 period=1 cycle=2166 experiment=6 -SML null C16H13N5O null null null 292.121468920531015 null null 404.875000000020009 null null null null null null 0.212552376554384 0.212552376554384 0.0 null [M + H]+ C16H13N5O 2 1 0.0 7.470975853246509 7.470975853246509 7.470975853246509 4 2166006 null sample=1 period=1 cycle=2166 experiment=6 -SML null C8H15N9O2 null null null 292.121468920531015 null null 404.875000000020009 null null null null null null -0.557337795983029 -0.557337795983029 0.0 null [M + Na]+ C8H15N9O2 3 1 0.0 -8.977428359455617 8.977428359455617 -8.977428359455617 4 2166006 null sample=1 period=1 cycle=2166 experiment=6 -SML null C10H15F2N5O3 null null null 292.121468920531015 null null 404.875000000020009 null null null null null null -0.638055591467511 -0.638055591467511 0.0 null [M + H]+ C10H15F2N5O3 4 1 0.0 -0.353659591904795 0.353659591904795 -0.353659591904795 4 2166006 null sample=1 period=1 cycle=2166 experiment=6 -SML null C12H21NO5S null null null 292.121468920531015 null null 404.875000000020009 null null null null null null -0.650881556751561 -0.650881556751561 0.0 null [M + H]+ C12H21NO5S 5 1 0.0 0.50902263733827 0.50902263733827 0.50902263733827 4 2166006 null sample=1 period=1 cycle=2166 experiment=6 -SML null C16H19N3 null null null 292.121302384156024 null null 405.295000000020025 null null null null null null 0.930332829923682 0.930332829923682 0.0 null [M + K]+ C16H19N3 1 1 0.0 0.844430253760518 0.844430253760518 0.844430253760518 6 2167005 null sample=1 period=1 cycle=2167 experiment=5 -SML null C16H13N5O null null null 292.121302384156024 null null 405.295000000020025 null null null null null null 0.286932553618304 0.286932553618304 0.0 null [M + H]+ C16H13N5O 2 1 0.0 6.900886888688504 6.900886888688504 6.900886888688504 6 2167005 null sample=1 period=1 cycle=2167 experiment=5 -SML null C12H21NO5S null null null 292.121302384156024 null null 405.295000000020025 null null null null null null -0.614322496973498 -0.614322496973498 0.0 null [M + H]+ C12H21NO5S 3 1 0.0 -0.061070296182087 0.061070296182087 -0.061070296182087 6 2167005 null sample=1 period=1 cycle=2167 experiment=5 -SML null C8H15N9O2 null null null 292.121302384156024 null null 405.295000000020025 null null null null null null -0.640937412736325 -0.640937412736325 0.0 null [M + Na]+ C8H15N9O2 4 1 0.0 -9.547526701137404 9.547526701137404 -9.547526701137404 6 2167005 null sample=1 period=1 cycle=2167 experiment=5 -SML null C15H18ClN3O null null null 292.121302384156024 null null 405.295000000020025 null null null null null null -0.661556837122595 -0.661556837122595 0.0 null [M + H]+ C15H18ClN3O 5 1 0.0 0.636913720373401 0.636913720373401 0.636913720373401 6 2167005 null sample=1 period=1 cycle=2167 experiment=5 -SML null C12H15N7O null null null 296.12309906592202 null null 406.816999999979998 null null null null null null 0.980887618593451 0.980887618593451 0.0 null [M + Na]+ C12H15N7O 1 1 0.0 0.237285884690055 0.237285884690055 0.237285884690055 11 2171003 null sample=1 period=1 cycle=2171 experiment=3 -SML null C9H19N7O2 null null null 296.12309906592202 null null 406.816999999979998 null null null null null null 0.977693233607875 0.977693233607875 0.0 null [M + K]+ C9H19N7O2 2 1 0.0 -0.276513952338959 0.276513952338959 -0.276513952338959 11 2171003 null sample=1 period=1 cycle=2171 experiment=3 -SML null C13H17N3O5 null null null 296.12309906592202 null null 406.816999999979998 null null null null null null 0.69360069253042 0.69360069253042 0.0 null [M + H]+ C13H17N3O5 3 1 0.0 -3.370321908818455 3.370321908818455 -3.370321908818455 11 2171003 null sample=1 period=1 cycle=2171 experiment=3 -SML null C11H19N3O5 null null null 296.12309906592202 null null 406.816999999979998 null null null null null null 0.545127238032372 0.545127238032372 0.0 null [M + Na]+ C11H19N3O5 4 1 0.0 4.753623867781498 4.753623867781498 4.753623867781498 11 2171003 null sample=1 period=1 cycle=2171 experiment=3 -SML null C9H13N9O3 null null null 296.12309906592202 null null 406.816999999979998 null null null null null null 0.271384417425164 0.271384417425164 0.0 null [M + H]+ C9H13N9O3 5 1 0.0 5.698095950127542 5.698095950127542 5.698095950127542 11 2171003 null sample=1 period=1 cycle=2171 experiment=3 -SML null C13H17N3O5 null null null 296.123821549630009 null null 407.245000000020013 null null null null null null 0.922970962849822 0.922970962849822 0.0 null [M + H]+ C13H17N3O5 1 1 0.0 -0.930510956728375 0.930510956728375 -0.930510956728375 13 2172004 null sample=1 period=1 cycle=2172 experiment=4 -SML null C9H19N7O2 null null null 296.123821549630009 null null 407.245000000020013 null null null null null null 0.812140756363484 0.812140756363484 0.0 null [M + K]+ C9H19N7O2 2 1 0.0 2.163289451470025 2.163289451470025 2.163289451470025 13 2172004 null sample=1 period=1 cycle=2172 experiment=4 -SML null C12H15N7O null null null 296.123821549630009 null null 407.245000000020013 null null null null null null 0.762914044613723 0.762914044613723 0.0 null [M + Na]+ C12H15N7O 3 1 0.0 2.677088034928794 2.677088034928794 2.677088034928794 13 2172004 null sample=1 period=1 cycle=2172 experiment=4 -SML null C14H13N7O null null null 296.123821549630009 null null 407.245000000020013 null null null null null null 0.465515045211605 0.465515045211605 0.0 null [M + H]+ C14H13N7O 4 1 0.0 -5.446837920846081 5.446837920846081 -5.446837920846081 13 2172004 null sample=1 period=1 cycle=2172 experiment=4 -SML null C16H19NO3 null null null 296.123821549630009 null null 407.245000000020013 null null null null null null 0.351324844036157 0.351324844036157 0.0 null [M + Na]+ C16H19NO3 5 1 0.0 -6.391307698866561 6.391307698866561 -6.391307698866561 13 2172004 null sample=1 period=1 cycle=2172 experiment=4 -SML null C14H13N7O null null null 296.125008105473 null null 407.654999999999973 null null null null null null 0.878408969563052 0.878408969563052 0.0 null [M + H]+ C14H13N7O 1 1 0.0 -1.43987372163701 1.43987372163701 -1.43987372163701 15 2173002 null sample=1 period=1 cycle=2173 experiment=2 -SML null C16H19NO3 null null null 296.125008105473 null null 407.654999999999973 null null null null null null 0.791183969804865 0.791183969804865 0.0 null [M + Na]+ C16H19NO3 2 1 0.0 -2.384339715221516 2.384339715221516 -2.384339715221516 15 2173002 null sample=1 period=1 cycle=2173 experiment=2 -SML null C13H23NO4 null null null 296.125008105473 null null 407.654999999999973 null null null null null null 0.741175933521995 0.741175933521995 0.0 null [M + K]+ C13H23NO4 3 1 0.0 -2.89813623991897 2.89813623991897 -2.89813623991897 15 2173002 null sample=1 period=1 cycle=2173 experiment=2 -SML null C13H17N3O5 null null null 296.125008105473 null null 407.654999999999973 null null null null null null 0.723394495394527 0.723394495394527 0.0 null [M + H]+ C13H17N3O5 4 1 0.0 3.076435145818808 3.076435145818808 3.076435145818808 15 2173002 null sample=1 period=1 cycle=2173 experiment=2 -SML null C9H19N7O2 null null null 296.125008105473 null null 407.654999999999973 null null null null null null 0.37865242729204 0.37865242729204 0.0 null [M + K]+ C9H19N7O2 5 1 0.0 6.170223157337256 6.170223157337256 6.170223157337256 15 2173002 null sample=1 period=1 cycle=2173 experiment=2 -SML null C16H19N3 null null null 292.121970956018004 null null 408.495000000000005 null null null null null null 0.717696772302601 0.717696772302601 0.0 null [M + K]+ C16H19N3 1 1 0.0 3.133101986423756 3.133101986423756 3.133101986423756 18 2175004 null sample=1 period=1 cycle=2175 experiment=4 -SML null C16H13N5O null null null 292.121970956018004 null null 408.495000000000005 null null null null null null -0.026888872825931 -0.026888872825931 0.0 null [M + H]+ C16H13N5O 2 1 0.0 9.189544760098936 9.189544760098936 9.189544760098936 18 2175004 null sample=1 period=1 cycle=2175 experiment=4 -SML null C8H15N9O2 null null null 292.121970956018004 null null 408.495000000000005 null null null null null null -0.320731612548226 -0.320731612548226 0.0 null [M + Na]+ C8H15N9O2 3 1 0.0 -7.258831184675953 7.258831184675953 -7.258831184675953 18 2175004 null sample=1 period=1 cycle=2175 experiment=4 -SML null C16H16FN3 null null null 292.121970956018004 null null 408.495000000000005 null null null null null null -0.630266113008879 -0.630266113008879 0.0 null [M + Na]+ C16H16FN3 4 1 0.0 -0.258371776321861 0.258371776321861 -0.258371776321861 18 2175004 null sample=1 period=1 cycle=2175 experiment=4 -SML null C10H19BN4O3 null null null 292.121970956018004 null null 408.495000000000005 null null null null null null -0.654210830848952 -0.654210830848952 0.0 null [M + K]+ C10H19BN4O3 5 1 0.0 0.549044383697529 0.549044383697529 0.549044383697529 18 2175004 null sample=1 period=1 cycle=2175 experiment=4 -SML null C16H19N3 null null null 292.121614764236995 null null 408.915000000000021 null null null null null null 0.835396016896746 0.835396016896746 0.0 null [M + K]+ C16H19N3 1 1 0.0 1.913778776427231 1.913778776427231 1.913778776427231 20 2176006 null sample=1 period=1 cycle=2176 experiment=6 -SML null C16H13N5O null null null 292.121614764236995 null null 408.915000000000021 null null null null null null 0.145363325841255 0.145363325841255 0.0 null [M + H]+ C16H13N5O 2 1 0.0 7.970228934886793 7.970228934886793 7.970228934886793 20 2176006 null sample=1 period=1 cycle=2176 experiment=6 -SML null C8H15N9O2 null null null 292.121614764236995 null null 408.915000000000021 null null null null null null -0.486231429862359 -0.486231429862359 0.0 null [M + Na]+ C8H15N9O2 3 1 0.0 -8.478167065837491 8.478167065837491 -8.478167065837491 20 2176006 null sample=1 period=1 cycle=2176 experiment=6 -SML null C10H15F2N5O3 null null null 292.121614764236995 null null 408.915000000000021 null null null null null null -0.621122493067984 -0.621122493067984 0.0 null [M + H]+ C10H15F2N5O3 4 1 0.0 0.145597396238033 0.145597396238033 0.145597396238033 20 2176006 null sample=1 period=1 cycle=2176 experiment=6 -SML null C13H15BN4O2 null null null 292.121614764236995 null null 408.915000000000021 null null null null null null -0.621433037813895 -0.621433037813895 0.0 null [M + Na]+ C13H15BN4O2 5 1 0.0 -0.149444105847147 0.149444105847147 -0.149444105847147 20 2176006 null sample=1 period=1 cycle=2176 experiment=6 -SML null C15H28O4 null null null 295.18707248574799 null null 418.393999999979997 null null null null null null 3.5 3.5 0.0 null [M + Na]+ C15H28O4 1 1 0.0 nan nan -3.074627675571169 43 2199003 null sample=1 period=1 cycle=2199 experiment=3 -SML null C13H28N4O null null null 295.18707248574799 null null 418.393999999979997 null null null null null null 1.0 1.0 0.0 null [M + K]+ C13H28N4O 2 1 0.0 nan nan -8.12071586440215 43 2199003 null sample=1 period=1 cycle=2199 experiment=3 -SML null C12H26N2O6 null null null 295.18707248574799 null null 418.393999999979997 null null null null null null 1.0 1.0 0.0 null [M + H]+ C12H26N2O6 3 1 0.0 nan nan 2.403498403688778 43 2199003 null sample=1 period=1 cycle=2199 experiment=3 -SML null C16H24N4 null null null 295.18707248574799 null null 418.393999999979997 null null null null null null 1.0 1.0 0.0 null [M + Na]+ C16H24N4 4 1 0.0 nan nan -7.605286788519772 43 2199003 null sample=1 period=1 cycle=2199 experiment=3 -SML null C11H24N6O2 null null null 295.18707248574799 null null 418.393999999979997 null null null null null null 1.0 1.0 0.0 null [M + Na]+ C11H24N6O2 5 1 0.0 nan nan 6.022545779223315 43 2199003 null sample=1 period=1 cycle=2199 experiment=3 -SML null C12H19NO7 null null null 290.124002639250989 null null 420.444000000000017 null null null null null null 0.829331145050649 0.829331145050649 0.0 null [M + H]+ C12H19NO7 1 1 0.0 1.979288701546372 1.979288701546372 1.979288701546372 49 2204006 null sample=1 period=1 cycle=2204 experiment=6 -SML null C13H15N5O3 null null null 290.124002639250989 null null 420.444000000000017 null null null null null null 0.767458571705934 0.767458571705934 0.0 null [M + H]+ C13H15N5O3 2 1 0.0 -2.6304367531418 2.6304367531418 -2.6304367531418 49 2204006 null sample=1 period=1 cycle=2204 experiment=6 -SML null C11H17N5O3 null null null 290.124002639250989 null null 420.444000000000017 null null null null null null 0.440145632853194 0.440145632853194 0.0 null [M + Na]+ C11H17N5O3 3 1 0.0 5.661493518486198 5.661493518486198 5.661493518486198 49 2204006 null sample=1 period=1 cycle=2204 experiment=6 -SML null C9H17N9 null null null 290.124002639250989 null null 420.444000000000017 null null null null null null 0.29900758475931 0.29900758475931 0.0 null [M + K]+ C9H17N9 4 1 0.0 0.527344029052501 0.527344029052501 0.527344029052501 49 2204006 null sample=1 period=1 cycle=2204 experiment=6 -SML null C16H17N3O null null null 290.124002639250989 null null 420.444000000000017 null null null null null null 0.11321656639466 0.11321656639466 0.0 null [M + Na]+ C16H17N3O 5 1 0.0 -8.204163798395776 8.204163798395776 -8.204163798395776 49 2204006 null sample=1 period=1 cycle=2204 experiment=6 diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_2_feat_ann_out.mzML b/src/tests/topp/THIRDPARTY/SiriusAdapter_2_feat_ann_out.mzML deleted file mode 100644 index 6ea54fcc035..00000000000 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_2_feat_ann_out.mzML +++ /dev/null @@ -1,1156 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ChNGs/JBckA= - - - - - - IyMZSA== - - - - - - tw+SQw== - - - - - - QzEzSDIzQ2xOTzJQAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - - ChNGs/JBckA= - - - - - - IyMZSA== - - - - - - gQ+SQw== - - - - - - QzE1SDE4Q2xOM08A - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - - ChNGs/JBckA= - - - - - - IyMZSA== - - - - - - 4g+SQw== - - - - - - QzhIMTVOOU8yAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - - ChNGs/JBckA= - - - - - - IyMZSA== - - - - - - fw+SQw== - - - - - - QzE2SDE5TjMA - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - - ChNGs/JBckA= - - - - - - IyMZSA== - - - - - - ew+SQw== - - - - - - QzE0SDE4TjNPMlAA - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - - 4EvhQfMRckA= - - - - - - QIwySA== - - - - - - i4+QQw== - - - - - - QzE1SDE3Q2xONAA= - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - - 4EvhQfMRckA= - - - - - - QIwySA== - - - - - - YI+QQw== - - - - - - QzE0SDIxQ2xPNAA= - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - - 4EvhQfMRckA= - - - - - - QIwySA== - - - - - - qI+QQw== - - - - - - QzIwSDE2TzIA - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - - 4EvhQfMRckA= - - - - - - QIwySA== - - - - - - wo+QQw== - - - - - - QzEzSDIyQ2xOMk9QAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - - 4EvhQfMRckA= - - - - - - QIwySA== - - - - - - Xo+QQw== - - - - - - QzE1SDIyTzMA - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - - 4EvhQfMRckA= - - - - - - QIwySA== - - - - - - WY+QQw== - - - - - - QzE4SDE4TzIA - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - - kQvO4C9ickA= - - - - - - AOAuRQ== - - - - - - exGTQw== - - - - - - QzE0SDIwTjNPMlAA - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - - kQvO4C9ickA= - - - - - - AOAuRQ== - - - - - - ghGTQw== - - - - - - QzE1SDIwQ2xOM08A - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - - kQvO4C9ickA= - - - - - - AOAuRQ== - - - - - - RhGTQw== - - - - - - QzE2SDE1TjVPAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - - kQvO4C9ickA= - - - - - - AOAuRQ== - - - - - - gBGTQw== - - - - - - QzE2SDIxTjMA - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - - kQvO4C9ickA= - - - - - - AOAuRQ== - - - - - - MxGTQw== - - - - - - QzEzSDIyQ2xOM08A - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - - 5SZqaS5ickA= - - - - - - pIjfRA== - - - - - - ghGTQw== - - - - - - QzE1SDIwQ2xOM08A - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - - 5SZqaS5ickA= - - - - - - pIjfRA== - - - - - - RhGTQw== - - - - - - QzE2SDE1TjVPAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - - 5SZqaS5ickA= - - - - - - pIjfRA== - - - - - - exGTQw== - - - - - - QzE0SDIwTjNPMlAA - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - - 5SZqaS5ickA= - - - - - - pIjfRA== - - - - - - GhGTQw== - - - - - - QzE1SDE5Tk81AA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - - 5SZqaS5ickA= - - - - - - pIjfRA== - - - - - - MxGTQw== - - - - - - QzEzSDIyQ2xOM08A - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - - 5SZqaS5ickA= - - - - - - pIjfRA== - - - - - - gBGTQw== - - - - - - QzE2SDIxTjMA - - - - - - W00gKyBLXSsA - - - - - - - - - 3030 - 6195 - 9329 - 12466 - 15593 - 18727 - 21815 - 24905 - 27989 - 31085 - 34169 - 37259 - 40349 - 43441 - 46531 - 49616 - 52713 - 55762 - 58811 - 61862 - 64911 - 67967 - - -71041 -0 - \ No newline at end of file diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_2_input.featureXML b/src/tests/topp/THIRDPARTY/SiriusAdapter_2_input.featureXML deleted file mode 100644 index ba9b2292646..00000000000 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_2_input.featureXML +++ /dev/null @@ -1,1798 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 414.69499999998 - 288.185393170519 - 3710.71 - 0 - 0 - 0.000266955 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 425.02399999998 - 288.235941440369 - 25991 - 0 - 0 - 0.00186984 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 425.02399999998 - 289.121888629217 - 3.56041e+06 - 0 - 0 - 0.310668 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 425.02399999998 - 289.946965266596 - 16195.8 - 0 - 0 - 0.00116516 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 410.145 - 291.226394349173 - 38506.6 - 0 - 0 - 0.00277023 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 424.614 - 291.944663308388 - 4681.53 - 0 - 0 - 0.000336797 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - 410.145 - 292.121752827683 - 5.44664e+06 - 0 - 0 - 0.458864 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 410.55499999998 - 292.866216068584 - 11546.5 - 0 - 0 - 0.00101473 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 410.145 - 292.91676229323 - 23148 - 0 - 0 - 0.00166531 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 410.145 - 292.950969868088 - 28297.9 - 0 - 0 - 0.0020358 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 410.55499999998 - 293.061501031199 - 6656.73 - 0 - 0 - 0.000478897 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 435.543 - 294.136331255356 - 60548.5 - 0 - 0 - 0.00530553 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 428.724 - 294.136688932569 - 89740.6 - 0 - 0 - 0.00772195 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 411.375 - 294.785330236958 - 2104.37 - 0 - 0 - 0.000151392 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - 410.55499999998 - 294.947884044299 - 7095.5 - 0 - 0 - 0.000528411 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 422.094 - 295.027220567533 - 5880.55 - 0 - 0 - 0.000423057 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 410.145 - 295.053118558984 - 2814.07 - 0 - 0 - 0.000202449 - 0 - - - - - - - - - - - - - - - - - - - - - - - 432.81100000002 - 295.188523029083 - 6676.01 - 0 - 0 - 0.000480283 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 410.55499999998 - 295.500679835427 - 2354.55 - 0 - 0 - 0.00016939 - 0 - - - - - - - - - - - - - - - - - - - - - 409.73500000002 - 295.753736042058 - 1962.87 - 0 - 0 - 0.000141212 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_2_input.mzML b/src/tests/topp/THIRDPARTY/SiriusAdapter_2_input.mzML deleted file mode 100644 index d4073835dc1..00000000000 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_2_input.mzML +++ /dev/null @@ -1,7465 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1vEv9HkickCxWuP821xyQA== - - - - - - AAAQQQAAEEE= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - iFICMA0tckB5skFkqFhyQA== - - - - - - AACQQQAAkEE= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - sSFyd+xBckA= - - - - - - AKCARA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - yJ1gdeVBckBhfVIe4WFyQA== - - - - - - AGDvRAAAQ0Q= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uldW5/BBckA= - - - - - - AACTQw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lBJlifFBckBRvpkb+FFyQD/ATxjfYXJA - - - - - - ACi2RQCAikQA4LNE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - sdNZ+/BBckA= - - - - - - AIBHRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DM7E2vBBckCa1rHJAVJyQGblgjvmYXJA3o1KAu9xckA= - - - - - - AIAPRgBguUQAEF1FAEARRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Yivx8exBckDQ7jihsENyQA== - - - - - - ANAGRQAAKEI= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - d15CWu1BckCqePJpAVJyQOYNhgDmYXJANcgg7upxckA= - - - - - - AHTfRgDIjUUAcAhGAICyRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3dBD2/FBckDfWgRJ/VFyQI/Emz/mYXJAlYG07u5xckA= - - - - - - C5xoRwDgGEYAzItGAJA/RQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - XvBWupQzckCxQ+tT8kFyQGHeDEH8UXJAxmt0wOVhckC4+XMh7XFyQMKCVlr4gXJA - - - - - - AGCTRIBIDUhPkahGudQrRwCwAUYAwG5E - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - k5Em75YzckA7oBbc80FyQMlFsB0AUnJAhMaSyuZhckAK0FAb7nFyQN7kuTb4gXJA - - - - - - AKCCRICvL0hL2+RGAANSRwCoA0YAQJVE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5dqGTPuBckD1Gsp2uYJyQA== - - - - - - AACoQgAA4EE= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CbFmI6czckCzSxYx8kFyQEUdRqr4TXJAl6+8sy1PckDkimVL/1FyQIDLhy7oYXJA/r/jQfNxckAyI04s+4FyQA== - - - - - - AJAORVKBrEhvhz5E0JLURADRVUd2c9tHALCGRgCA5EQ= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Ea2P2P6BckBWvaMh54JyQKP+fBE0g3JA - - - - - - AAB8QwAAKEIAAChC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tnB84JozckB2nncN8kFyQHqkZAyDTXJAHlMTPcxOckDusmrKIU9yQPoyKBT7UHJALDnmdTNRckCaiznlAFJyQNbWFOnoYXJAJsbumhFvckBYN9QQ9XFyQNXLfwgAgnJA64Ob7tSCckA= - - - - - - k7ZcRSBWE0nb/V9ECvxTRQZRUEXziDVET/PBRACxmEdA4zJIAMAXRP637EYAsENFO8wdRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FNwfoQOCckAr7qWaWoJyQA== - - - - - - hLwWRACAMkQ= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Dq0RD6QzckD58UZu80FyQG2WR1fqSXJAOjbUI15OckDHSWOaVU9yQGpx/buhUHJAUaqFqu9QckCvqNBwAVJyQFSnhCMiWnJAI2Ko3JdcckAiOqGMEF1yQGf3U36YXnJArsejU0RfckBVCI166WFyQIZsNSOganJAJqbTVPNqckD186n/CWxyQGQeIu10bnJARfYZlhZvckCUikuK8XFyQB1F1aqEdXJACNUIEy12ckDIEz5IzHZyQBfbAfi6e3JApBApFsp8ckBBaphvx35yQH0Y5kpGf3JAWpRDD7d/ckBPuqaM+oFyQJLeYuoWg3JA4HlUuWCDckA0oWV1t4lyQA== - - - - - - hdmvRXC7T0kAwKpEyxFjRVRCh0WNxAZFc8/NRI1ukkd9X/BDx9IBRAAW7EPpCgxEAEAfRMALf0gAgBNE9QUxRA5V9EMyjaNEn73yRPnqJEcAQAFEAAABRKXS+EOSlAhEAAD6Q/w55kNBA/xD2OwGRB7cYEUAgPhDB1D2QwAA60M= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OJFcr/BBckBe0cO9+1FyQLKoG4/hYXJA - - - - - - AMA8RAAALEIAAIxD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TsE1TKQzckCFMtGX80FyQGZjxc+cSXJAm/ijmgFKckD0tegJ7k1yQECNoZqiTnJANAQqwEtPckCi/NphwE9yQDolnQoAUXJAsu+jaf9RckABJh3WWFxyQIAiZPW1XHJAexx5FPtdckC0BW75tF5yQDxYObIYX3JAuDpqZ+dhckDyyF57CmtyQFq8fX2ya3JAUNQYY0FsckBRJpe4P21yQL0e19M+bnJA2a0fpitvckBKVUvc8W9yQFX4UcvHcHJASwlEcPJxckDXSiF8aXZyQD88O/qednJAU85suDN4ckD071z+yXtyQO4lVMa1fXJAOmcrUj9+ckChtbSwqH5yQAhhXitIgXJAqIvs1f6BckB00KnGG4NyQD9NBDLGh3JAm8t7TGqIckDgd1nVB41yQA== - - - - - - 22m5RbBxaEn2q+JELt/yRFVoSEV0Un5FgVCrRSlSnUWvxepE7RCWRwAA40MNefBDhk8WRADARUTJTF5EyDuKSCyi5EMAgPtDF9/0Q/GHCURIiYtEX4ytRDTnGkQAgB1EO9k3R/XdBUTyueJDAAABRHBmAUQAAD5Eqhc6RJsU90PAt4lEDDqWRaDJAURSH+hDW8XrQwAA8kM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - B+A6ZXkzckBQynx190FyQB9dFcYNSHJAuPDzjmpIckB7x48Ock1yQA== - - - - - - AIAyRIBL2kcAAFJDAABSQwAAk0M= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - nqdZj64fckCOrLZd6UFyQA== - - - - - - AAAQQgAAKEQ= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TAg3WfJBckAqXsBG/FFyQJAT4gDuYXJA - - - - - - AEB6RAAAKEIAAHxC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - vW6gRPlBckA= - - - - - - AAAoQg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - iF+qaJYzckDDsVIi8kFyQAoXRW6jSXJAYEcTgJpOckDKBwF+ME9yQKMdLCYfUXJAzEXiev5RckAMTBFYsFdyQAITkbo3XHJA6cCsfmleckAXKtyudV9yQJLzyB7mYXJA8FxAgBBmckBhk4jilWZyQGr2J6C3aHJAjBgavDBpckBnpwvYu2pyQDasltc/a3JA1ppLFXNsckB5q3nYr21yQCjnn2L1bXJAr+ZLRlhuckCjW4u3Xm9yQDyLeB0zcHJAt12QlNBwckCMLkdE8nFyQMjqbWFsc3JAT5AFqdh1ckCVIs7SYXZyQGoESIfgdnJAddA0wa96ckBYi88f83pyQP2C3pKDfHJA1IXoRu18ckCBejApWH1yQCgcJ5TLfXJAhMN5DPiBckD7DKOr5oJyQAO9CD7hhHJAW8iwwpGHckDkJdRYzIpyQM4jzo8Qi3JA - - - - - - AADHRVDcbUkAgNpDtNByRe/GYUXT1PhDHaoMSACAyENGb+hDMAIQRADACER2+I5I5WS3QwCAyEMAwBFEAAAkRACAtkP0A9tDAADtQwAA7UMF1h1EAADtQwAAmkQQIy1Eca4lRDgkN0cAgNpDAIDaQ9J9FkSLefRDAAD/QwAA/0MAAO1DAAAkRABANkQAAO1DVnqfRQCA2UMAgNpDAIC2QwAA/0MAwBFE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uFamwo4zckDTelU49kFyQIVn/PckSnJAp7IQ3tNMckAKEy8jJE1yQA1KyywWTnJAoa3mzo1OckB8Qw9SQE9yQPMJCXKlT3JA834piyRTckA= - - - - - - AMBmRIBUCUgAAFJDAABSQwAAfEMAAJNDAACoQwCACEQAANJDAABSQw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - jnz9gPpBckA= - - - - - - AACARA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Dk36gftBckCOJ7mW12FyQA== - - - - - - ACD3RAAAvUM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - K0i1jaQzckDNoLE+8kFyQLpkfGOOSXJA3pNfouBJckD9QHdvtU5yQMiglA3mUHJA9/XnMgBSckBTucCilltyQIwc9KwsXHJA6FPUyXdeckCv2fTmNF9yQA33Kb3oYXJAUlarbWlmckAAiRgMR2tyQNHiwGPfa3JAZLz6Xb1sckBeKGBNSG1yQIaFNt1xbnJA19MF9TpvckDj3GASPnByQIqp/5rxcXJAzRxSq3B2ckCLL0Z22HZyQHehxwCbd3JAy3XNA/p3ckA3LQvYvHhyQAFybsHteHJAsdEpbth8ckAUzxWIx31yQJfLze0dfnJAyj5LrLx/ckDxv6nT+4FyQLMFtjKVg3JA8q6LzEiFckD8enIh3YlyQPtGaWPIinJAOnb/TjWLckCdGxteY45yQA== - - - - - - rbTxRYi3hkkAwBREAMAURPirmkXhW+1DQDkcSAAAAkQ9QcZDAAALRAAAukPgd6NIAAACRABAHUQC1T1E1EzpQwAAC0QAgF5EAECURACAy0MAR1FHAIALRAAA8kMAAN9D2L8DRACAHUQAgB1EAIABRAAA3kMVzgVEAADeQwAArEVeIspDAIAwRAAA8UMAAMxDAADMQ8k0v0M= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UKow5YUzckCZNkGP90FyQPVGia5pT3JA - - - - - - AAAoRCMjGUgAAPxD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - sMoire1BckA= - - - - - - AGCWRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - pI1wg+MfckAR91nXNDNyQDLx566rM3JACokpSOxBckBhrQxN0mFyQAcKCEhYb3JA - - - - - - AAB8QgAAKEIAAChCAKDqRAAAKEIAAPxC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - KlTs5ZYzckB6T6Ae80FyQJ5XNm7SSHJAIqQA/pRJckAK2UbLLEpyQNr7nzhKTHJAgn9jxclMckA/R9VytE1yQNi3h+O6TnJANBHeEStPckAaPGXE/1FyQP+gZ0x6VnJAMOPQAO1WckCEleETMlpyQNojJGOJXXJAmojAcBJeckAdupIFgl5yQMAAlCgXX3JAmERiq+dhckAqGCBwKmlyQKildErAaXJA/wYs3ANqckAd7H7tgWpyQJMODaIna3JACrasIa1rckAOEEPdoW1yQJ5/KJwFbnJATkN2K5tuckBLPi2lMW9yQBTOkBy0b3JA/EFVRCpwckCwn34f3HByQK2sKZrxcXJAjZf1BB9zckBi+2+24HVyQHgXu17idnJAGpkEylh3ckC9wFfMDHhyQLbmO+s/e3JAj0fpSAJ8ckB3rRsUW3xyQGl8fkvpgHJAFwF9df2BckAokjUvzoJyQLS3SiE1g3JA8vyFbS6FckDKFeLBvIVyQM5xJ6Y7hnJAGAj4DCWJckBOWBDOsolyQFvK+Clej3JA - - - - - - ACDlRaAqlklnir1DAIAyRLNYAURXHfhDAIBHREhLFEVbAKRFaRSYRcBXN0gAAL1DAAC9QwAA0kOkm+9DPKLzQwAAvUMAgAhEVrW8SACAHUQ+sC5E5rNTRBs8SURWXVNEB3Y5RADAjUQAgJ1EJUGRRAAAk0QAQINEAAAoRAAAKETNcmVHfxnfQwAA/EMAgB1EgRsjRACACES6U75DLZRjRCPWW0QAQB1Eq3i8Rcu+2kMAANJDoXkFRI8PHUQAAPxDAADnQwCAHUTBSfJD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - B3TRXqNfckBRmO7u/39yQNAsSa1xgHJA - - - - - - AAD8QgAA/EIAAPxC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0r2VcBcgckCSmzGm50FyQJeCGc73YXJA - - - - - - AAAQQgCgrEQAABNE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JLheT7lBckDNQVTEM0JyQA== - - - - - - AAB8QgAAfEI= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OAWobJ8zckBIW8WI8UFyQMDHoxuXSXJA2nq0Jd5KckBYUZ46WktyQISUWDEhTHJAzp5iYZpMckDaaUdiok1yQAH8o8WuTnJA9KhcxTlPckADhAvIG1ByQKaphHyUUHJADMwltP5RckC91kecRlhyQIGy1HCoWHJAkBz8zmtZckAaLHqcA1pyQP7R9andWnJAxdw0pvlcckDjnBMPIl1yQBKklmlPXnJAD7Pa0tteckAGaGcrPl9yQNkR/TEYYXJAA8Fl0OhhckDyxNG0rmpyQGaNs6BEa3JAlgDM2uprckAkZGywtGxyQP/fEmWDbXJAbhGa+GluckAQg20YGG9yQPFFS/e2b3JAMJq+4TVwckCwEmeS+3ByQF2ujGXwcXJAzqb5ahl1ckCgcnsHzHhyQCiHQnKXeXJAOiP+Akh8ckCcVzmg4HxyQPZlkRw5fnJAsj6p999+ckDKsiWRSX9yQAic6iDogHJAYy5RaPSBckAv4w3GXYNyQOy8ufpOhnJAjLvZirOGckC6tcb0LYhyQKJjUHCViHJAdKuKkR6JckC4wcyW+olyQATlfq+ninJAqx5Tb9iKckChlDMj54tyQHi1om/PjXJAla2S5UCOckA= - - - - - - AEQARt8Oo0kAwBhEAEABROXo3UPLFv1DAIDTQ+aZzETmVMBFcfDGRTcMykQAwEZEwI9BSABAAUS3K+xDAMAYRGvXJkQAgCREAEABRABAAUQAAGtESfiZRACAU0RtMMFEIFLLSAAA60MAgNNDAIAkRExZGUQAQF9EAEDNRBJ75EQAALBEEP1oRJPkZUSU5XVHAADrQ9i830MAAA1EAAANRACAJEQzwkBEAAA8RMODFUQAQAFEAJixRQCAJEQAAA1EAAANRB/uB0QAQDBEAIDTQwAADUQAgFNEAIBTRAAA60MAAA1EAAANRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - XtuoPgMgckBMU+G8nDNyQJmC7GvyQXJA1GcbgI1JckAaYwb++U1yQEAID2SoTnJAP+NX0CBPckADKwxDfFByQHEbfYohUXJAGZfGx/9RckAcbcoE+FZyQMlTiFV+V3JA2h+0mQVYckA04zTDf1hyQISukGf0WXJAQpbx4nJackBLlOGLIFtyQJxiF7NhXHJAtxcIVDhdckBABo0k8l5yQOCDnORpX3JAr6FrB/RfckAQc4tK52FyQGH6nqG4ZnJAkV1o0i9pckD1u26op2lyQJT4QGSpanJAoAvPABtrckAASYiHtGxyQPSwQSFSbXJAgtlEwT9uckAaDj4XJW9yQMbrPfoAcHJAAsPJNfNxckDo7Ly5unVyQGhCgY8Fd3JAoqpdtVN3ckDOwVJD2ndyQPwba8cAeXJAtdiGXzd6ckBYWoeXF3xyQHcpRf27fHJA36N5aSaAckB9S+tdOYFyQJNkvS77gXJAsImqpeiFckC+yvYfUopyQA== - - - - - - AICyQwBo30WLIJtJAMAlRKbBIEXZJ6lFLH+4RQAAzEMqXMZE7qg1SAAAzEMAAP9DprrnQwAA/0MAQAxEe4o6RACA5UMAABlEAEAMRABAP0QBTEpEzKcuRGgyvEgAAMxDAEAMRADAJUQAAMxDAADMQwAAGUQAQD9EGY3BRADghUSoRidE9ABtRwBAckQAABlEAMBYRPjhP0QAQD9EAEAMRACA5UN4pftDAADMQ2I22UMA0JpFAADMQwCA5UM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TApEUuI2ckA= - - - - - - AAAQQg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 7RPPsxcgckDUuz0InTNyQGG1o//xQXJArvQap5RJckA94FUMHU1yQAgHZEQKTnJAsEcsnxlPckA6GIk5g1ByQAEP0LonUXJAkGu2ef5RckBshRk6UVNyQCmfyiowWXJASSYOJV5bckAIOkZM3V1yQJG9jqHWXnJA+3zLOE5fckA2J9Kl5F9yQBEPtM3nYXJAtbZKMHtnckA2qxaZ9GdyQBAd9+V1aHJAhI1y5uxqckBX20YCDGxyQMGhyNZRbnJAKKad3zdvckA8/nDxmHByQFjzOB7xcXJACJAbKzh7ckC/3kB7yXtyQCbOqDeEfXJA02TXmeN+ckD+Ubf3Mn9yQDQHwy6ff3JABxIsGBuAckBmmLvff4ByQOZGi2EpgXJA5r4vUveBckAIfQ5gx4JyQFM/Z9LuiHJAgPtLCnWJckAcc2aAjItyQPS+LKDoi3JAhvbPOFiMckA= - - - - - - AIBORN6zEEYPk55JAIByRACA8kMAMCZFIPLWRQBAHUSo2olEAMg1SACA8kMAgBFEAIDyQ88NbEQAwClEZQpbRAVZF0QgvsFIUGIaRAAANkQAwB1Ev1UdRKBUUkQ66yREAAC5RACA2kMAh19HAIAFRCmrD0QAgPJDB0sURADAHUTJXTtEM3w/RM5+IkQs7VBEAHAWRsRLaEQAgAVEAIAFRAAA80MAQEJEqDYFRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N4EMWQ4gckB7kuuSmjNyQFxKVf7yQXJAWsAu8xZNckDsCSInmE5yQK6zH6I8T3JArdPj5nJQckDWS2XBLlFyQA44xOYAUnJA5t6/xEBTckDYnmrInlNyQJIArkN4W3JAEVZL1xReckBe7SgHH19yQPPjikqMX3JAGLdLHulhckBXQEkiumlyQHo1is2fanJAVPiJNhhrckDquL3wlWtyQKK0hP8BbHJAx7YETnNsckA1cqbMwW1yQEGPlEljbnJA1dRQRUhvckAg4T1alXByQF559xK9cHJARhshv/JxckBsNB/+e3ZyQMpBkQeSenJAtDrmm1d8ckC31tu7bn1yQOGxEwlmgHJAS1HGDO6AckB2zf5D+4FyQOr8x9amg3JArs5szdCMckClu1ZODI5yQA== - - - - - - AEBrRABw4EVI6pZJAEAIRHbYkUWQi51FAID3Q09gp0SABCxIAADfQwAA30MAgC1EAAAhRADAFEQ1CztE3PezSBRHBkSl6SdEAABGRABARkROhVJEAEAhRLHFB0Tdpn5EAGDMRAAAIUQAgFBEACNURwAAIUQAQAhEAMAURACA90MAwF5EjY5GRACIlkUjmghEZV0eRDXF40M= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +S9EsxwgckB9NZkKozNyQOVZoL31QXJAiMd4HvhNckCHpqYArE5yQCG7aUstT3JADneXHwFSckCpJBN7e1NyQDK7LG74VXJAKyKY4m1fckBkXPuIul9yQNGhJdrpYXJATdLb3YpockCf1e1kC2lyQIZvWOQLbnJAmMLM/KJuckAyz59OR29yQKXwB4bzcXJAUCz4s/p9ckC+yEA7b35yQLLU9u3cfnJAskytP/mBckBhpynXuoNyQJ9yZZ1KhXJAgAl+2a2FckA= - - - - - - AACfRADQxUXgsV5Jup6pROG9S0VicWdFJ78GSAAA7EMAgAFEb1LnQwAA60P4o4pIAADUQwCAAUQAgLxDqnYsRABAa0QA3TJHUn3PQwCAJEQAAOtDAKBaRQAAJUQAgLxDAIC8Qw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0lYkESUgckA5HvfhqzNyQL+sxBTxQXJAGDHo06VJckDnFUhAD0pyQJyW0SapTXJA8i/FvNNNckDhqlOrq05yQLnZmRxaT3JAcWSHMppPckB6GQdgb1ByQCCDVazMUHJAPtZoYv1RckBiK9O8xV1yQAjSMlRuXnJA8qzCZThfckCK9TlH5WFyQKACfUWtaXJANDtk+ZxsckC4SQHhP21yQG+Ft3LHbXJArJJ1d1puckA6EdtUKG9yQNze97LOb3JAjG0Ur+ZwckCi2G9h8nFyQK+drTu9cnJAwokAeQp4ckDMUbrHF3lyQCxhCd+heXJAeux0oCp+ckDObOzTq35yQLbfHoT0gXJA - - - - - - AOD2RABg2EVwMmFJ4IGXRNYhkUSIegtFkjIdRQXWWkXzWpZF+waURdvaI0VzqA9Fk8+ORwBANkTQ4j1EAEBFRGCIiEjlWRxEAIAPRPf+TkQAAIdEOu2hRPtpsETT21NEQ6YXRABjJkcmjrhEAMAiRMF3PkRVHDNEAMAmRADAG0S3bIlF - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Ht3kEe5BckA= - - - - - - AAB8Qw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +jHKewMDckAoU7hUGiByQCuDpkekM3JAQ78b8w1BckDYhowP8kFyQJiCbWOoSXJARm5Fm49NckAOeUD6QU5yQMoHztybTnJAEiAW3lBPckC4e2oJ2FByQGfArrT9UXJAFmfCg9ZdckAePGw+6WFyQFPGkWKGbXJAL2orKIBuckBQyBTYG29yQN8qADqqb3JApiEvtfNxckDVrKErxnJyQL1r1LdhfXJA1rHIlPmBckA= - - - - - - AMAVRACgAkUAYI5FafBBRMAYLUkAQE5EDzWaRHiBMEUZkDlFPotQRW6bj0QZpaNHbIj+QzqyU0h8LCREYSVlRL4TqkRi6YtEkg8CR78JYEQ+KfZDuXlgRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 7GuUNelxckA= - - - - - - AEDJRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - pm8Z6fYCckBPViPwFyByQAYKhT+lM3JA7eMxsPVBckAsTNfhk0lyQMhx+KvmSXJAEtW1ocdNckBGBbVNqk5yQABUGpc3T3JA872VmNhQckAiDkCAAVJyQBaghSMkX3JAli1faOphckCa1Lg4uG1yQHY22nkgb3JAPvlw+vRxckBabvtR+4FyQA== - - - - - - AABGRABAjUSc4JBFhu8QSXb6/0MAgAREwGnRREXiI0W4/ypFAEARRACVjUdARvRDtEouSCoNI0QPbU9EYzvNRgDgMkU= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 4Mn1zvcCckD32jfXGCByQBjqRkOWM3JAGR0BE/NBckDCUaN9fk5yQBgMVuJDT3JAZer/4f9RckAMdbAm6WFyQBnrvLnycXJAeeBr//mBckA= - - - - - - AEBfRADghUQAgC5FwCmySBzvk0QB3rpEo1xRR2ui3UdV3YJGAIDbRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xVnXxfYCckB8rQeMegNyQMjzPRgTIHJAtn75Z5MzckCOWe3j8UFyQHxY4hYFTnJAxA02uiZPckDZnG3g/FFyQJOYc/HmYXJAR9csve5xckD2Ewv694FyQA== - - - - - - AICPRF0ESUQAgFhE87EBRQAIgkjO7u9DTSSfRKmeHUcAqJtHvh9HRgCAnEQ= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CI2Jm/sCckCCP7fOFSByQA3tQYOpM3JAakeJQPRBckCW2eRjVE5yQMCiQJ7YTnJAd/SVlDhPckBcVEK5/lFyQN9FSH7oYXJAdr96e/NxckCdqRi+A4JyQA== - - - - - - AMCCRACAHUQAYJJEXrckSHuptENotw9EAIDVQwCOyEYAR01HAEDoRQBAdEQ= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xEzYWtt5ckA= - - - - - - AACQQQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - y4eNKPYCckBxirNuHiByQAhyz6GXM3JAjuuv8vFBckCAcvw2+1FyQKBUQa/kYXJALZ4cxe9xckACiUsJ9YFyQA== - - - - - - AACeRABAGEQAwBdE3BPWR8gqe0b1HABHAMCNRQCA1UM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - fOABD0BOckA= - - - - - - AADgQQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 9zCbSvQCckCH3KaGFyByQCFQ+ByNM3JAaD4+MPJBckBM+brMAFJyQEX4ek7kYXJAvujqS/FxckAD6tco+IFyQA== - - - - - - AMA9RACAzUMAQD5Elj2cRwCYREYAVLFGAIBtRQCA3UM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cDauSvsCckCeCBz/sjNyQLumXtLyQXJAGGvBbv9RckDPAvZw6GFyQBkUxQotcXJA6I7dQPJxckA= - - - - - - AEBoRACA4UMA0mpHAJgQRgCuiEbzmcBDAFAiRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - zvzm1O8CckDIir485hFyQMl1gkrwQXJALD4J+vlRckCUAIkQ5GFyQORLDefrcXJA - - - - - - AIBzRAAA/EMAyTRHACDZRQCgZUaPdMxE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 7NPTdPICckBUFZyI8UFyQOrzFQYBUnJAsXDo1udhckCYHq+y8XFyQJdu3XD5cnJA - - - - - - AEAjRAC2BEcAqKhFyr0pRnzgB0UAgMVD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ezBPx/YCckALQQgI3hFyQCPzORHvQXJAthSKWvJRckDKbyMu5WFyQMZt+/3mcXJATq10XQhzckA= - - - - - - AADUQwCAT0QAXrlGAKBgRQDAAEYAIK5EAIDnQw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UhP/I+5BckCkd1D8+VFyQMaNcczlYXJAtHbQUOZxckAQRQNv8nJyQA== - - - - - - 062NRgAAJkUAKKtFAOCORACAqkM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LP4VxetBckAw1M0i/FFyQBL9dibgYXJA9slFf+9xckCTSjmN/HJyQA== - - - - - - AOSHRgCAH0UAWKJFAIA7RADAXEQ= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - yhjaN+kRckBkfTWJ8kFyQPiB1CQAUnJA1kX2/ulhckDA8VPN9HFyQKDLMOcJc3JA - - - - - - AIDDQwC4YkYAkCZFACCNRQAAVUQAgDdE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gVqbFnFwckA= - - - - - - AAATQw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Em5uMugRckDgtZdQgRJyQA9AmVbyQXJAJ3nSyPlRckDuchBL52FyQDT7uTzrcXJATQS4P/5yckA= - - - - - - AIC/Q/pgnUMAtElGAAD2RADwZUUAwBdEAMAXRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cmcLtldxckAP4c9k6nFyQA== - - - - - - AAAoQgAAKEI= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hWQGmeoRckDPBnD18EFyQNb94i72UXJA9vuDrpRSckBitucn52FyQHRPM3rjcXJAHWCPCwNzckA= - - - - - - AEBIRAD4GkYAINlEoOj4QwBwS0UAwBhEAMAVRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MgZL43ZwckA= - - - - - - AIAIRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rpKdM3VwckA= - - - - - - AAAoQg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - grpgbPARckDwD8fs6DFyQKsC/KnzQXJAdP0ltPZRckD5coeN6GFyQLonvI7xcXJAGkeQmhpzckA= - - - - - - AMCCRNEvu0Onj/ZFAGCbRAAwGkUAgJxDAIDqQw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 4v7N7ugRckCmWvXP6jFyQGPltknsQXJA4PCcBPRRckDBzHcL4GFyQOZ0OrpccHJA1qB+QutxckBU9m/rBnNyQA== - - - - - - vZPbRABABkQAsL1FAEBvRAAgAkUAALhDAICuQ8vV20M= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NNsOaHtwckA= - - - - - - APAgRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - qvg+rfIRckDSp+QA/iFyQCf9fVPpMXJAT6oRr/BBckACJMckAVJyQGnkfqnoYXJAt3B9VnNwckA8Thq18HFyQO1hGJsIc3JA - - - - - - AMBlRQAAP0QAIJpEAGivRQCgyUQAgPtEAIAYRACA60MAgMJD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0B0GTTsRckC4D6vU7hFyQD0DMer7IXJAKhWm2OIxckB8crFw8UFyQP5t3UP2UXJAvqVUUqBSckDGLGKT42FyQOUh0hedYnJAm9VZo2twckDp0dqv+XJyQA== - - - - - - m8WCRABA7kUAAJREABAkRQDItUUAQKFENbGyQwCA1kQCRa9Db3OeRMqaqEM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6sWZD7YhckAIN4BrASJyQA== - - - - - - AACoQgAAqEI= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - n6D3COsRckAsjGSS+CFyQE2KK+PmMXJAzCowBfBBckBQJ42y8lFyQPROFU7dYXJAJjmrs3NwckA= - - - - - - AKxwRgDQIEUAsIlFADCkRQAASEQAYKREKDWcRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TzjI0/ARckAz0mJW/SFyQPnXD5viMXJA9qE6JetBckD9PFiD71FyQKfnaffeYXJAVtOP3HNwckA= - - - - - - AFcNRwBIoEUAVDlGADiYRQDAXEQAwIZEAGDTRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ymssiUBBckAOV6iEs0pyQMTj9/v4SnJA - - - - - - AAAoQwAAqEIAAKhC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - fJIpJMkDckCJr7Iq8hFyQBCLjFoBInJApgtnXugxckBrY3AQ7EFyQIDRPk/1UXJAVuMMb+ZhckAEPFRpbXByQA== - - - - - - AEAORICtjEfpKjtGAAa6RtWqz0UAQCxEAIBkRAAwAUU= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - nxngOVBwckA= - - - - - - AACoQg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - YYH4cUoBckCmgXdvMUFyQA== - - - - - - AACoQgAA0kM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2KtFvEJBckA= - - - - - - AAAQQg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Nwz7WtADckBGz15x8xFyQDb2Bqj+IXJAV+sdD+0xckCw+VCA9EFyQJDX6HH/UXJAgGycwJhSckA0jU966WFyQDoLEj50cHJA - - - - - - AABkRECBAUgAwJFGADYdR/63DkYAoIxEEkBARABAeET4rgFF - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SyShDe4xckA= - - - - - - AKirRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - D1nOXQMyckDhgcACxWFyQPQWsxSDYnJAPSbWW6RsckCkwkBCf3ByQMaQWRiqfnJA - - - - - - AACoQgAAUkMTLrdCAAAQQgBwfEYAAChC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0rR7S0NBckALbErPVHByQA== - - - - - - AOCmRAAAfEM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - R8Rl58ADckAzEchU8hFyQFqi0g2LHnJAYGHliSMfckA6G4yg/iFyQIAo5l3pMXJAiGrDw/BBckBcCzNQ9lFyQH7at2bbYXJAdAkDPW9wckA= - - - - - - AOAXRYvzhUh5+2lEU3CVRABXMkcAW6hHrKNwRgBgtEQAQEtEADABRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - I4k9B/oRckA= - - - - - - AACTQw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - yTxdZvIRckA= - - - - - - AABeRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 8k7COTdBckA= - - - - - - AACTQw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NdchfD4BckAo1EbwwANyQBaTBh/yEXJAVxfXSP4hckDlFJvy5zFyQH4q3K7vQXJAd0XRrvdRckCgrrXYZXByQA== - - - - - - AEAmRABQLUXgxqVIGtNcRwCp1UcAWpdGAOARRQAArUQ= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - RMA8IPERckA= - - - - - - AKBSRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - J5ItQkRBckA= - - - - - - AADSQw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ArTa0vgOckA= - - - - - - AACoQg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tdw0F8YDckAxo+6v8xFyQB8e/XOMHXJAXFzoTpYeckCuK39Tjh9yQKOcIdR0IHJAENVMYwAickD0pt+G6jFyQGlhQA00P3JAplpcJPNBckA6A8rh+1FyQK5padrqYXJA5O02qHJwckA= - - - - - - AMC9RYDFWEnUTOdEh7tlRYI0qkXlTwJFAG2QR2Acgkj0W5xEWXE1RwiQgkXO3MREPIuhRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - WFOBAyZBckA= - - - - - - AACoQg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OglatfcRckAs7nwu7CFyQA== - - - - - - AIjLRQAAKEM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - O61dTA4SckCLd+HXMEFyQA== - - - - - - AABSQwAA50M= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DoN2Qb8DckAsA+1y8hFyQPpvZvbGHXJAWVKM/pseckC6O7HRKx9yQIjhoUz/IXJANwx3oegxckDxHSBy5kByQPctkvHvQXJAUgM0a9RCckDcTxTp9FFyQC5gr0NwcHJA - - - - - - ALC8ReAoX0nfdhNFn8NURaNXWEWAdQZIB86HSFrLbkQpazlHS96ARABog0XO961E - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - E3azfJsDckDZ729j9RFyQH00z+evGHJAyUnKmDIZckAulu6+whlyQJxFtg8aH3JAzJQgucUfckBGeW7x6DFyQA== - - - - - - AIAdRFTHG0gAAHxDnby5QwAAk0MAgAhEAACoQwAAfEM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - WGe7i+IRckBdoecG+1FyQA== - - - - - - AAAoRAAAqEM= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 53NZmcYDckBCD2688hFyQGntvZkdHXJAp8Gi3LkdckDoRu49jx5yQDyP6wIjH3JAE5Ktm/4hckAYn7H06DFyQJa8AcBfPnJAgZ34DAw/ckDl6Ndk7kFyQJZe9mz9UXJA65PsZghickA= - - - - - - AOC9RSh1hElPUmNEGeAARbcDi0XGUItFz7ISSOAXnkgAgHlE8KKhRABATEciJ41FAMBIRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /O8paKgDckBHbLsTFhJyQC/R/W9aGHJAr5qMoIwZckCGlYPC1hlyQNm1e63gHnJAzueoFCYfckDyBaeowB9yQA== - - - - - - rhmHRFVWGEhlaaVDAACoQwAAvUMAgB1EAAAoRAFYBEQ= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5kj8wGcRckCbNOa7/RFyQA== - - - - - - 8R8mRACAHUQ= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - j2GjNMURckCBge6yjmByQLDZF93oYHJAJIg37TBhckA= - - - - - - AAAQQlUErUIAAPxCAACoQg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FoC4I04PckA= - - - - - - AACoQg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gRSRyGIRckA= - - - - - - AAAQQg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - n2Yh2EEBckCdNFRPygNyQKU+6eLwEXJAQiPAi5cZckCwp+bhvh1yQMG5DwWZHnJA3hKPyikfckAIJbQlbiByQKNzh17VIHJAZEkGffwhckB/oAcgri5yQGjYzOUdL3JAnpZILOUxckDiXRh2NDxyQHNQQZ4TP3JAzJ3WEZE/ckDTY0Xx8EFyQNEVnnH0UXJAwT5SX5JSckBDYgki42FyQPZqajlQYnJA - - - - - - AIBZRAA8F0YQEZhJAABPRPWiOkWhaahFNhTARdlsiUSLzFlEM3MoSADAeEQAwHhE4DG9SACAeEQAQN5E5J6wRCtiakcBiq5Fpy0yRQAAeEQAQGNE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gK6U/6YDckDUkAxM9hFyQNY1r8MkH3JA9hBVJnofckDbgepGEiByQMVw7NPjIXJA - - - - - - AMCSRECMMkgAAFJEAABnRKan70MAAJND - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 7NZx6O8RckBiicSRdBJyQA== - - - - - - AIBxRCQGQ0Q= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FlB3bcIDckBcMeiW8RFyQLDfoAKYHXJA4ppz3RwfckAMr2EaHCByQHAk/yf8IXJAenuPBc4uckD+R8pnTi9yQCj8vPXmMXJAr6Nm1/M7ckBthFEFxD1yQNSX7PkLP3JAqV+5Z/FBckDG1/qFBEtyQA6x2ZGGS3JAxz1VLvJRckA4KRr5WGByQLQemDgaYnJA - - - - - - YU25RVAOg0kAQG1EDASNRQDAYUTAiCRIAIAyRAtpHkSLQqJIAEBKRCyaJUTvMM9EAPc9RwCAGkSz2EZELUWYRQBAMkQAQLJE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GNBIhMUDckC7Tl+p8xFyQBqlOVsKHnJAa+yuUsweckAEF+WRMh9yQERA8h//IXJAFVqVm+kxckBlwoj2aDpyQIR2V1QzPnJAkjmlZrA+ckC9tN6GJD9yQG+fFDOgP3JADw7PFfJAckC2svSg8EFyQP5InC39UXJARROeuBJickCBZE9ign5yQA== - - - - - - AJjeRbCie0kaZThF57uTRcrXnkUAJw9IXZSdSAAAJES9johEAKCURAAApEQAgGFEAABdRMXSPkcAoIlFAPAPRQDAGUQ= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Z6HJOV9RckA= - - - - - - AADnQw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - vzm/vE0BckB6o676xgNyQB/4JBv2EXJAbr1TiIUeckBjGozfGR9yQEkk0c2tH3JA1rz/NWsgckB/VSccKiFyQATfxdoAInJAhAQZGIkjckCwAa05Uy5yQGC1+J2+LnJAYlfQCUcvckAQiPvU6jFyQMOdNkn2QXJA6VR7Bx1LckDvEs7h1UtyQNye46YCUnJAIOpvMihickA= - - - - - - AEAlRADQsUVc+kNJrcwmRXvCP0VTkwVFl/ExRKD6PUQAne5HAMATRABAO0QAAEVEAABFRKr8eEgAixpHAAAURC5kB0QAIElFAOAIRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - f1Njb0BBckDqn2OfdEVyQOIcw3fVRXJA - - - - - - EqTzRAAAKEIAAChC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - M9BZA0IBckCAT17YjAFyQGw/Thl2cHJA - - - - - - AADgQQAA4EEAAOBB - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bovWLzoBckA= - - - - - - AADgQQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hsedBtMDckAFoHo/+BFyQAdo5zfSHXJAIGNtOBkfckCXjUSXAiJyQMjA+ZfsMXJAYmCgv/w9ckDlqc/Baz5yQKIOJpU4P3JAAirFG/dBckAWdvVwLFFyQEtnTjADUnJA0AUPjBFTckCwOM8SLmJyQI7HVxI9cnJAJPS0kZ6BckDaaDY3J4JyQA== - - - - - - ABCsRc1FQkloBgVFUkdtRYCS6UeR6XFIyK1FRA70RkTmrXlEHKILRy1VMERZxIRFYGMeRNCseUUAwD5EE6+ARF/zwkQ= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bDtWzccDckBM61ov8xFyQCdC7t3vHXJAh+GmJ40eckCjSPisQR9yQHcsRfD+IXJAL/rmz7wuckBsWRWlUC9yQCtdzCzoMXJAFpWvJzE/ckAtOcTA7T9yQA4rhkSAQHJAf5kDXO9AckCB978s9EFyQMLutTTmQnJAVJVYjfNRckAo4fZLtVJyQH4/84wwYnJA3AzC5vVickAy+E1/KHJyQGClRq4fgnJA - - - - - - ALBiRTa4EUlbF4dEuaT/RIGPDkWAEqlHVTkSRMj3A0SANj5IdVlyRDcg+UMAAAlEgsZ2RFWU6UZMUAVEAFBlRWi+EUQAQMJFRuLaQwAAWESacfRE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - K889C+kRckA= - - - - - - AABQRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 78Sf2DpBckA= - - - - - - AAD8Qg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 8GjSXkRBckA= - - - - - - AACoQg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - pFPQH8QDckDdBjRxFQRyQEGQsinzEXJAiNFUYdceckCGublQLB9yQCfuLs0PIXJAo6GrLf8hckBuAm9d5TFyQMi7ecN0PXJAawPiDtI9ckCCYhYlaD5yQO4bv5j+PnJADk3gSPFBckAN5egtP1FyQAbMjDb9UXJA2qvI081SckCbQo/tS2FyQCj/EqsvYnJAwRamDjhyckClsmUmGoJyQA== - - - - - - XBCORVXojUWgC/1Ic2AaRSPtDUUJseFDgEqZR6YNJEgAAO5DAIDWQ0He5UPCqwBE3PXBRkyHJEQAYChFkRUFRAXs9UMA5FVGAIAXReK+WkU= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1Z9xREcBckA= - - - - - - AACwQQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - RVfxF8kDckC7YF6Y9BFyQA2fFM3cHXJAxxMz6pYeckA6JuVMNh9yQMy4JFYBInJAXZZ2LukxckC2GLB48EFyQHhrh8z6UXJA105Ezy9ickCKr/hhO3JyQDQiHhvlcnJACmHtmSWCckA= - - - - - - AIARRS3vp0gRT7tDYw9xRFMlm0QVUltHegHORwACi0bPH+NEq8CIRgBALEW4l0NEADikRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - zZFVnzRickA= - - - - - - AOD1RA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - KKV4+A1ickA= - - - - - - AAAoQg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - sEhDzMYDckCKpVLh8xFyQG5G1xY2HnJAWDllTAQfckAtBLA0ASJyQJ2UxKzlMXJARd6qJ/FBckBb+8g8Z1FyQIIXfZL9UXJAEbuIN7tSckCLFJBLMWJyQD4xv74GY3JAh3fLdnZxckDWyyLSPnJyQG/OT7ckgnJA - - - - - - AADMREBob0h8NdJDAEBfRACTD0dbXp5HRtxSRqRLVkQAQK1E4XLhQwByz0YLBv5DQwgWRAAIhkUAGOlF - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - npLQ77FTckBc907uLmJyQA== - - - - - - AAAoQgDgLkU= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Y0Sy1L4DckCeeLJv8hFyQHTsVt8iH3JA0KEaH/8hckCAYJH04jFyQFx/mVfvQXJAA/wv2GNRckAm7j7++1FyQMwflYwwYnJAMs285EByckBh3xgqBXNyQNlslYkkgnJA - - - - - - 85eZRDOrJEgNCAtE20nTRlFYVEcA4BxGiRUYRFIDhkR9IQBHACi3RSF2B0QAcBdG - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2CL1GTFickC/6ZuWcm9yQA== - - - - - - AMDTRAAAEEI= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3Kir+cUDckAqhdc09BFyQNbr3vn+IXJA6bAHpOUxckDj7UFN8UFyQE5Kds36UXJAGOKjpjBickBG3Pa1NHJyQAp16xkmgnJA - - - - - - AIAORAAz3EfetodG4qMTR+9hy0UA4JVEAAbiRgDoqkWCAP9F - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uK4VqjRickA= - - - - - - AAC9Qw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6+Y057YDckBKTNYh8xFyQADVfLz7IXJA/gaT6uQxckA+w3OY8kFyQMj4dSMHUnJAMAbhNzBickDaUJNsPXJyQCAUFx0kgnJA - - - - - - AIAkRAA7l0cAiEVGQmrQRlIwokWIRhdEAF7URp7pg0UAlApG - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MNwJwsYDckAK8Zwv8hFyQKN5Y//8IXJATOFVxeExckA4Sy24ZUFyQEzESkTuQXJAsQtpI/BRckByRPF8MmJyQITd/Hs2cnJAKqfD+BVzckBU2VrjIIJyQA== - - - - - - AICwQwBNTEcAFABG94aGRkvfNEU1gXFFAEABRAByv0baHWBFToC4QwCA9UU= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - KTvIpfARckD0csMk+iFyQK0io0/hMXJAiUZKHVVBckCMk8zc6kFyQL/O4Nn9UXJAJqeV5i9ickC9P4rfPHJyQJAm+C38cnJA1CBaDCiCckA= - - - - - - APASRwBQmkXGYi5GsFP+RNbFK0UAAN1DADiURjFxSUUzDsFDkxuiRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ahyCTPQRckBAEI2H+SFyQOzxSTjnMXJAHzud2W1BckDgyLjW80FyQNZ3gqwDUnJA4xSmazJickCDSFZtP3JyQLeUsq0Bc3JAY/NNxSOCckA= - - - - - - AGAERwCglEVs0StG1coWRYvFR0XIjdJDAHiJRgBAH0V8yhdEAEiXRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GmUH/fERckAnyrs3+SFyQIwmjmycInJAtRSIGucxckA6lfGI5UFyQD3Yxb9RYXJAZxM9XjBickCvpig1OnJyQAxR74sIc3JAL5Zu1yWCckA= - - - - - - AJalRgDATUUwOUJEIHvmRQAg80SywZJDABQpRq/67kQUVA5ElwNhRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - fijzg/ARckAezRKe/CFyQGEVR6PlMXJAJF9HFuxBckDIK4nF9lFyQBESWzssYnJAif75ODxyckCSjJ0LA3NyQJHQDsAjgnJA - - - - - - AKxuRgDg/ER5p5FF5LMCRQCArkMA0ARGAGCHRACAG0QAUBBF - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5CaFp/ERckCUzoP68iFyQLgLdcY6MXJAtMLAP98xckCutcLfYkFyQDF5EN/sQXJA+LrMbC1ickDoGEILOHJyQP2LRVMFc3JA91E6VCGCckA= - - - - - - AKAvRgAA6kTQAL5EAMCGRS9NTEQAIKFEAAirRQBAQUTvk0lEAGDORA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EzGeEO8RckCyaHzURCFyQNSROEf7IXJAOnl3GuQxckDIvf06oDJyQHTGakJTQXJAnYOHiepBckBvTnM3LWJyQM15+Xo5cnJAyZxiVgFzckA4DmYhJIJyQA== - - - - - - Vxo7Rqm8okMAAOtEADB/RSAezUP5Ri9EAADCRADgp0UK3J9EHF6RRACADkU= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DesBl/IRckD0bjE0+CFyQAb436bpMXJAuO0XOlJBckB8s9yS+UFyQNaSQLQEUnJA6TgMCCpickARStTINnJyQFg7MnQPc3JAMI5uQC+CckA= - - - - - - AJhHRgAg50S7NXhFWO/3Q27pukQAgJlD8nCjRbjSTkQAoNhEAGDRRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TUco0OwRckCDScCd+SFyQDdzkXPhMXJAQhopGetBckAjlErAKGJyQJ49g4E0cnJAgpvelwRzckAa/tDVIYJyQA== - - - - - - AEAbRgAgqUQAsD9FAGDARABgjUWw9kVEAKDGRACAgEQ= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DCW4u2pwckDaaLopVXFyQMNXsIExcnJACulkaQtzckA= - - - - - - AACwQQAAsEEAAOpCAACAQg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1hW3lvARckCYdVPn8iFyQDYICvrdMXJAJeUvQO1BckBQYNGMLmJyQMLqnvZCcnJA01bxPgdzckBiUc5jH4JyQMGRyYoRg3JA - - - - - - AAjiRQBAnUQAECxFAMCnRABwcEV5IT5EyuPqRADAhEQAgPJD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - b0g1o+8RckC17sXp+CFyQAF6JDKkInJAonrzu+gxckAIqnov60FyQCgvIpYoYnJAdR0S/y9yckDi5KSNAHNyQJwKH8YignJAa/nr7hyDckA= - - - - - - lrzDRQBglER9mN5DABATRaialkQAIFBFAEAfRBjJ9kQAwIZEAADIQw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IEkyPE9xckA+WwexJXJyQCkqJ0L/cnJA - - - - - - AAAoQgAAjEIAAKhC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - nNIWPe8RckAvHjt8+CFyQJSPXYZSMXJAXvcmp+IxckAIvUd66kFyQJaMfrcrYnJAc9EW+i5yckAKu0cjCnNyQMLtgMMfgnJAWk8MeBGDckA= - - - - - - AKCrRQCAUkRLcy9E/1QBRQAAb0RA4HlFAEBTRAAg5EQAAJlEAADGQw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - yYOgB/QRckAOh20d+yFyQJyjQqPfMXJAHEJwXfRBckCD8zooL2JyQPo9/pg1cnJAhglMGAZzckDdSyjOIYJyQJ/d7h0Tg3JA - - - - - - ANC8RQBAT0QAYL1EACCLRAAQj0UAADdEzZv3RACAs0QAgJhD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gfFMF/IRckAMJKiM8iFyQBrUYHzjMXJAxKW2RepBckCdLWzFKmJyQOLlTUOHcXJAPpjb7jxyckCL6rInBHNyQLMu+TAognJAqXaSswuDckA= - - - - - - APCYRQDAUkQA4KREAEBVRAAQoEWmSp9DbsuFRBix0UQAwNtEAADcQw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - n6+xbj4NckA= - - - - - - AAAwQQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - QnvfJPIRckCT52sa/yFyQPJq2yPgMXJA7oyCa+1BckAV6tQSL2JyQN3PSiY6cnJAM2wsYAVzckB8H9HcJYJyQA== - - - - - - AJCXRQCAI0QAoPlEAEBIRAA4+UVurbVEqIK+RABwF0U= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LMIBMOsRckC01qzl+CFyQNHYrUjhMXJAsA0SKelBckBuRZ8/K2JyQH/yrQ44cnJAer3nFfxyckBTxp5FI4JyQA== - - - - - - eRGbRQCAVUQAYKxEAEBmRJWHSUYAEDZFTZKJRABQe0U= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - XsH/evARckBb6bAZ+iFyQMCyAcHdMXJAf807le5BckAmfRdoL2JyQIVoNoA6cnJAEeLQrwVzckCeA9NiIIJyQHTAKsQcg3JA - - - - - - AJBgRQAAN0QA4KJEAABJRABWj0bUdB5Fwk+sRACgkkUAgJhD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - qdyI4jFickA= - - - - - - tojfRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /dzbKipickA= - - - - - - AAAEQg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - E4wvCu4RckCggwD79iFyQAxlWlvcMXJAsEEPwepBckBIAgqDLmJyQMn3sQM7cnJANLNXsfRyckCm6VOPJIJyQA== - - - - - - ALBQRQCAHkQAgIVEAMAURAcpp0b3I35F0z+xRGJu1UU= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NUKrW/IRckAxotJl+SFyQAwLTvLeMXJAUOHz2+RBckASzrxpMWJyQLOKMJo9cnJANmTbyAdzckDm6WdjJYJyQA== - - - - - - AEAyRQCAAEQAAHtEAEAyRABao0YAIF5FqelJRDv0v0U= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HXxIxzpickA= - - - - - - AICkRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - fLPdo/ERckAkkwLI9SFyQO1R/CdIMXJAGgeGEegxckCtgNZ+50FyQA4l7pcuYnJAEAVsJj9yckC4I2qpA3NyQO2NVU2dc3JAKkAVQyOCckA= - - - - - - APAwRQCAAUTWtApEAIBrRADACEQApptGAGA+RQBbSkQe/LRDAIi9RQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0yTgRO4RckDOP1U3/iFyQOpD0lXdMXJAvfLsr+xBckBsvnfXLmJyQON49fE3cnJArBHNM/9yckC/gZXCinNyQKLir4wkgnJA - - - - - - AFAQRQAA0kObY2tEAEA5RABIiUZJ3kJFbrlhRCkRvkMAiKdF - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TTsvd/IRckDoWIxC4DFyQHolC4HiQXJAWp5HiS5ickAmnYwhO3JyQG8BXdkKc3JAuO236SeCckA= - - - - - - AKDpRABAJUQAQANEAIRQRgBA+ETuPd1DAFB8RQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BYC+ynJOckA= - - - - - - AACQQQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ckC3x+8RckALJ/Z/8SFyQFR+cAnjMXJAfIVdA+dBckDJ+OxrL2JyQEQ9eVU6cnJAWVsYyfdyckAE7xbuJYJyQA== - - - - - - ACDBRAAAt0MAgAREAIDSQwDUCUYAAN9ErxYWRAAwFUU= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - G7wEo+4RckC9CILK4jFyQAxlYmroQXJAmVP61ixickBI5KbsNXJyQLLIXMgAc3JAeq4eNSKCckA= - - - - - - AMC1RADAHUQAAN1DAFjeRQBgnkT+W+ZDAGAjRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uaz3JfERckAPlQMh4TFyQIEKuATmQXJAa385Qi9ickBbrrrVMnJyQInGrBUmgnJA - - - - - - AICoRACAB0QAAAZEAICgRQDAcEQAgMNE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - u0QiMCEgckA= - - - - - - AAAQQg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rZiyosF+ckA= - - - - - - AACoQg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OADfqe0RckDisq0KKGJyQMcelH06cnJAzUVZvymCckA= - - - - - - AEC3RABgKUUAAAVEAMBsRA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - nQE7LMdeckDW/dj92X5yQA== - - - - - - AAB8QgAAfEI= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +vQT0+sRckCsM0EMKWJyQGnCaL0ignJA - - - - - - AAB1RAAg9kQAQChE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uOGgugwEckD5rdEm7RFyQBFgETgqYnJA - - - - - - AAAYRABAakQAwINE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 7ucQ/blOckA= - - - - - - AACoQg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - j7cehAcEckB1P3gv7hFyQNIZS9AqYnJA - - - - - - AMAhRACAZkQAYI5E - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1KmHmtxeckAqp0QZ2X5yQA== - - - - - - AAD8QgAAfEI= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_2_output.mzTab b/src/tests/topp/THIRDPARTY/SiriusAdapter_2_output.mzTab deleted file mode 100644 index 6dcaa0623dd..00000000000 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_2_output.mzTab +++ /dev/null @@ -1,30 +0,0 @@ -MTD mzTab-version 1.0.0 -MTD mzTab-mode null -MTD mzTab-type null -MTD description Sirius-5.6.3 -MTD smallmolecule_search_engine_score[1] [, , SiriusScore, ] -MTD smallmolecule_search_engine_score[2] [, , TreeScore, ] -MTD smallmolecule_search_engine_score[3] [, , IsotopeScore, ] -MTD ms_run[1]-location /home/axel/dev/OpenMS/src/tests/topp/THIRDPARTY/SiriusAdapter_2_input.mzML - -SMH identifier chemical_formula smiles inchi_key description exp_mass_to_charge calc_mass_to_charge charge retention_time taxid species database database_version spectra_ref search_engine best_search_engine_score[1] best_search_engine_score[2] best_search_engine_score[3] modifications opt_global_adduct opt_gobal_precursorFormula opt_global_rank opt_global_explainedPeaks opt_global_explainedIntensity opt_global_median_mass_error_fragment_peaks_ppm opt_global_median_absolute_mass_error_fragment_peaks_ppm opt_global_mass_error_precursor_ppm opt_global_compoundId opt_global_compoundScanNumber opt_global_featureId opt_global_native_id -SML null C13H23ClNO2P null null null 292.121752827682997 null null 410.144999999999982 null null null null null null 5.467021788559013 -2.536665011350316 8.003686799909328 null [M + H]+ C13H23ClNO2P 1 1 0.0 -3.481118395667346 3.481118395667346 -3.481118395667346 8 2167005 id_12648171926825749403 sample=1 period=1 cycle=2167 experiment=5|sample=1 period=1 cycle=2175 experiment=4|sample=1 period=1 cycle=2176 experiment=6|sample=1 period=1 cycle=2177 experiment=5 -SML null C15H18ClN3O null null null 292.121752827682997 null null 410.144999999999982 null null null null null null 5.355405053845244 -0.798764727632604 6.154169781477848 null [M + H]+ C15H18ClN3O 2 1 0.0 2.178884613394733 2.178884613394733 2.178884613394733 8 2167005 id_12648171926825749403 sample=1 period=1 cycle=2167 experiment=5|sample=1 period=1 cycle=2175 experiment=4|sample=1 period=1 cycle=2176 experiment=6|sample=1 period=1 cycle=2177 experiment=5 -SML null C8H15N9O2 null null null 292.121752827682997 null null 410.144999999999982 null null null null null null 1.611812076455744 -0.42071502723714 2.032527103692884 null [M + Na]+ C8H15N9O2 3 1 0.0 -8.005540103995379 8.005540103995379 -8.005540103995379 8 2167005 id_12648171926825749403 sample=1 period=1 cycle=2167 experiment=5|sample=1 period=1 cycle=2175 experiment=4|sample=1 period=1 cycle=2176 experiment=6|sample=1 period=1 cycle=2177 experiment=5 -SML null C16H19N3 null null null 292.121752827682997 null null 410.144999999999982 null null null null null null 0.790986992438735 0.790986992438735 0.0 null [M + K]+ C16H19N3 4 1 0.0 2.386400826797191 2.386400826797191 2.386400826797191 8 2167005 id_12648171926825749403 sample=1 period=1 cycle=2167 experiment=5|sample=1 period=1 cycle=2175 experiment=4|sample=1 period=1 cycle=2176 experiment=6|sample=1 period=1 cycle=2177 experiment=5 -SML null C14H18N3O2P null null null 292.121752827682997 null null 410.144999999999982 null null null null null null 0.432395400029174 -0.856881885792921 1.289277285822095 null [M + H]+ C14H18N3O2P 5 1 0.0 2.782845113777305 2.782845113777305 2.782845113777305 8 2167005 id_12648171926825749403 sample=1 period=1 cycle=2167 experiment=5|sample=1 period=1 cycle=2175 experiment=4|sample=1 period=1 cycle=2176 experiment=6|sample=1 period=1 cycle=2177 experiment=5 -SML null C15H17ClN4 null null null 289.121888629216983 null null 425.023999999979992 null null null null null null 7.898218281484493 -0.737726543422143 8.635944824906636 null [M + H]+ C15H17ClN4 1 1 0.0 1.514769872905526 1.514769872905526 1.514769872905526 98 2212004 id_2821980206323995609 sample=1 period=1 cycle=2212 experiment=4|sample=1 period=1 cycle=2213 experiment=2|sample=1 period=1 cycle=2214 experiment=4 -SML null C14H21ClO4 null null null 289.121888629216983 null null 425.023999999979992 null null null null null null 6.892946409971803 -1.227136163175483 8.120082573147286 null [M + H]+ C14H21ClO4 2 1 0.0 6.140472915739844 6.140472915739844 6.140472915739844 98 2212004 id_2821980206323995609 sample=1 period=1 cycle=2212 experiment=4|sample=1 period=1 cycle=2213 experiment=2|sample=1 period=1 cycle=2214 experiment=4 -SML null C20H16O2 null null null 289.121888629216983 null null 425.023999999979992 null null null null null null 3.378015383798279 3.378015383798279 0.0 null [M + H]+ C20H16O2 3 1 0.0 -1.444286613966823 1.444286613966823 -1.444286613966823 98 2212004 id_2821980206323995609 sample=1 period=1 cycle=2212 experiment=4|sample=1 period=1 cycle=2213 experiment=2|sample=1 period=1 cycle=2214 experiment=4 -SML null C13H22ClN2OP null null null 289.121888629216983 null null 425.023999999979992 null null null null null null 3.128608557915764 -5.608842233143506 8.737450791059271 null [M + H]+ C13H22ClN2OP 4 1 0.0 -4.203960064341054 4.203960064341054 -4.203960064341054 98 2212004 id_2821980206323995609 sample=1 period=1 cycle=2212 experiment=4|sample=1 period=1 cycle=2213 experiment=2|sample=1 period=1 cycle=2214 experiment=4 -SML null C15H22O3 null null null 289.121888629216983 null null 425.023999999979992 null null null null null null 2.85644101960783 2.85644101960783 0.0 null [M + K]+ C15H22O3 5 1 0.0 6.350142271065035 6.350142271065035 6.350142271065035 98 2212004 id_2821980206323995609 sample=1 period=1 cycle=2212 experiment=4|sample=1 period=1 cycle=2213 experiment=2|sample=1 period=1 cycle=2214 experiment=4 -SML null C14H20N3O2P null null null 294.136688932568973 null null 428.72399999999999 null null null null null null 2.915145897300415 -0.636646720043438 3.551792617343853 null [M + H]+ C14H20N3O2P 1 1 0.0 0.336477842395966 0.336477842395966 0.336477842395966 124 2221005 id_7252753945467102808 sample=1 period=1 cycle=2221 experiment=5|sample=1 period=1 cycle=2222 experiment=4|sample=1 period=1 cycle=2223 experiment=9 -SML null C15H20ClN3O null null null 294.136688932568973 null null 428.72399999999999 null null null null null null 2.670209620168296 -0.630671240852914 3.30088086102121 null [M + H]+ C15H20ClN3O 2 1 0.0 -0.263345323665742 0.263345323665742 -0.263345323665742 124 2221005 id_7252753945467102808 sample=1 period=1 cycle=2221 experiment=5|sample=1 period=1 cycle=2222 experiment=4|sample=1 period=1 cycle=2223 experiment=9 -SML null C16H15N5O null null null 294.136688932568973 null null 428.72399999999999 null null null null null null 2.002618558166048 0.404575285733768 1.59804327243228 null [M + H]+ C16H15N5O 3 1 0.0 5.957707910693294 5.957707910693294 5.957707910693294 124 2221005 id_7252753945467102808 sample=1 period=1 cycle=2221 experiment=5|sample=1 period=1 cycle=2222 experiment=4|sample=1 period=1 cycle=2223 experiment=9 -SML null C16H21N3 null null null 294.136688932568973 null null 428.72399999999999 null null null null null null 0.995421617830866 0.995421617830866 0.0 null [M + K]+ C16H21N3 4 1 0.0 -0.057250666724844 0.057250666724844 -0.057250666724844 124 2221005 id_7252753945467102808 sample=1 period=1 cycle=2221 experiment=5|sample=1 period=1 cycle=2222 experiment=4|sample=1 period=1 cycle=2223 experiment=9 -SML null C13H22ClN3O null null null 294.136688932568973 null null 428.72399999999999 null null null null null null 0.910386792309813 -1.456610337892332 2.366997130202145 null [M + Na]+ C13H22ClN3O 5 1 0.0 7.915464360840471 7.915464360840471 7.915464360840471 124 2221005 id_7252753945467102808 sample=1 period=1 cycle=2221 experiment=5|sample=1 period=1 cycle=2222 experiment=4|sample=1 period=1 cycle=2223 experiment=9 -SML null C15H20ClN3O null null null 294.136331255356026 null null 435.543000000000006 null null null null null null 3.656073922214721 -0.734556319155398 4.390630241370118 null [M + H]+ C15H20ClN3O 1 1 0.0 -1.47937091837009 1.47937091837009 -1.47937091837009 153 2242002 id_10085776333486374908 sample=1 period=1 cycle=2242 experiment=2|sample=1 period=1 cycle=2244 experiment=2 -SML null C16H15N5O null null null 294.136331255356026 null null 435.543000000000006 null null null null null null 3.44994338479623 0.546467031449547 2.903476353346684 null [M + H]+ C16H15N5O 2 1 0.0 4.741689880946914 4.741689880946914 4.741689880946914 153 2242002 id_10085776333486374908 sample=1 period=1 cycle=2242 experiment=2|sample=1 period=1 cycle=2244 experiment=2 -SML null C14H20N3O2P null null null 294.136331255356026 null null 435.543000000000006 null null null null null null 2.784737861133953 -0.682102503348654 3.466840364482608 null [M + H]+ C14H20N3O2P 3 1 0.0 -0.879547022908252 0.879547022908252 -0.879547022908252 153 2242002 id_10085776333486374908 sample=1 period=1 cycle=2242 experiment=2|sample=1 period=1 cycle=2244 experiment=2 -SML null C15H19NO5 null null null 294.136331255356026 null null 435.543000000000006 null null null null null null 1.81613956795775 -0.041386166540798 1.857525734498548 null [M + H]+ C15H19NO5 4 1 0.0 9.288533836857647 9.288533836857647 9.288533836857647 153 2242002 id_10085776333486374908 sample=1 period=1 cycle=2242 experiment=2|sample=1 period=1 cycle=2244 experiment=2 -SML null C13H22ClN3O null null null 294.136331255356026 null null 435.543000000000006 null null null null null null 1.287811846251765 -1.296815898752862 2.584627745004626 null [M + Na]+ C13H22ClN3O 5 1 0.0 6.699448711775414 6.699448711775414 6.699448711775414 153 2242002 id_10085776333486374908 sample=1 period=1 cycle=2242 experiment=2|sample=1 period=1 cycle=2244 experiment=2 diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_3_feat_only_ann_out.mzML b/src/tests/topp/THIRDPARTY/SiriusAdapter_3_feat_only_ann_out.mzML deleted file mode 100644 index 46794484f1c..00000000000 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_3_feat_only_ann_out.mzML +++ /dev/null @@ -1,2070 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - wD46deVBckA= - - - - - - AACTQw== - - - - - - GQ+SQw== - - - - - - QzE1SDE3Tk81AA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - wD46deVBckA= - - - - - - AACTQw== - - - - - - RQ+SQw== - - - - - - QzE2SDEzTjVPAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - wD46deVBckA= - - - - - - AACTQw== - - - - - - +w6SQw== - - - - - - QzExSDE5TjVPMgA= - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - wD46deVBckA= - - - - - - AACTQw== - - - - - - 9g6SQw== - - - - - - QzE0SDE1TjVPAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - wD46deVBckA= - - - - - - AACTQw== - - - - - - fw+SQw== - - - - - - QzE2SDE5TjMA - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - pWd6ifFBckA= - - - - - - AIBHRA== - - - - - - fw+SQw== - - - - - - QzE2SDE5TjMA - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - pWd6ifFBckA= - - - - - - AIBHRA== - - - - - - RQ+SQw== - - - - - - QzE2SDEzTjVPAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - pWd6ifFBckA= - - - - - - AIBHRA== - - - - - - 4g+SQw== - - - - - - QzhIMTVOOU8yAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - pWd6ifFBckA= - - - - - - AIBHRA== - - - - - - kA+SQw== - - - - - - QzEwSDE1RjJONU8zAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - pWd6ifFBckA= - - - - - - AIBHRA== - - - - - - hw+SQw== - - - - - - QzEySDIxTk81UwA= - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - - ChNGs/JBckA= - - - - - - gFQJSA== - - - - - - tw+SQw== - - - - - - QzEzSDIzQ2xOTzJQAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - - ChNGs/JBckA= - - - - - - gFQJSA== - - - - - - gQ+SQw== - - - - - - QzE1SDE4Q2xOM08A - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - - ChNGs/JBckA= - - - - - - gFQJSA== - - - - - - 4g+SQw== - - - - - - QzhIMTVOOU8yAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - - ChNGs/JBckA= - - - - - - gFQJSA== - - - - - - fw+SQw== - - - - - - QzE2SDE5TjMA - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - - ChNGs/JBckA= - - - - - - gFQJSA== - - - - - - ew+SQw== - - - - - - QzE0SDE4TjNPMlAA - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - ujKoNviBckA= - - - - - - AACoQg== - - - - - - wA+UQw== - - - - - - QzEySDE1TjdPAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - ujKoNviBckA= - - - - - - AACoQg== - - - - - - xA+UQw== - - - - - - QzlIMTlON08yAA== - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - ujKoNviBckA= - - - - - - AACoQg== - - - - - - 4g+UQw== - - - - - - QzEzSDE3TjNPNQA= - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - ujKoNviBckA= - - - - - - AACoQg== - - - - - - lA+UQw== - - - - - - QzExSDE5TjNPNQA= - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - ujKoNviBckA= - - - - - - AACoQg== - - - - - - ig+UQw== - - - - - - QzlIMTNOOU8zAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - aAjHLPuBckA= - - - - - - AAB8Qw== - - - - - - 4g+UQw== - - - - - - QzEzSDE3TjNPNQA= - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - aAjHLPuBckA= - - - - - - AAB8Qw== - - - - - - xA+UQw== - - - - - - QzlIMTlON08yAA== - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - aAjHLPuBckA= - - - - - - AAB8Qw== - - - - - - wA+UQw== - - - - - - QzEySDE1TjdPAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - aAjHLPuBckA= - - - - - - AAB8Qw== - - - - - - DhCUQw== - - - - - - QzE0SDEzTjdPAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - aAjHLPuBckA= - - - - - - AAB8Qw== - - - - - - GBCUQw== - - - - - - QzE2SDE5Tk8zAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - 0HtjCACCckA= - - - - - - zbwWRA== - - - - - - DhCUQw== - - - - - - QzE0SDEzTjdPAA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - 0HtjCACCckA= - - - - - - zbwWRA== - - - - - - GBCUQw== - - - - - - QzE2SDE5Tk8zAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - 0HtjCACCckA= - - - - - - zbwWRA== - - - - - - HBCUQw== - - - - - - QzEzSDIzTk80AA== - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - 0HtjCACCckA= - - - - - - zbwWRA== - - - - - - 4g+UQw== - - - - - - QzEzSDE3TjNPNQA= - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - 0HtjCACCckA= - - - - - - zbwWRA== - - - - - - xA+UQw== - - - - - - QzlIMTlON08yAA== - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - 9Z81P/5yckA= - - - - - - AAAAAA== - - - - - - D5iTQw== - - - - - - QzE1SDI4TzQA - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - 9Z81P/5yckA= - - - - - - AAAAAA== - - - - - - QZiTQw== - - - - - - QzEzSDI4TjRPAA== - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - 9Z81P/5yckA= - - - - - - AAAAAA== - - - - - - 25eTQw== - - - - - - QzEySDI2TjJPNgA= - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - 9Z81P/5yckA= - - - - - - AAAAAA== - - - - - - O5iTQw== - - - - - - QzE2SDI0TjQA - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - 9Z81P/5yckA= - - - - - - AAAAAA== - - - - - - t5eTQw== - - - - - - QzExSDI0TjZPMgA= - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - 9Z81P/5yckA= - - - - - - AAAAAA== - - - - - - B5iTQw== - - - - - - QzEzSDIyTjZPMgA= - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - stmR6vshckA= - - - - - - AACoQg== - - - - - - zA+RQw== - - - - - - QzEySDE5Tk83AA== - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - stmR6vshckA= - - - - - - AACoQg== - - - - - - +A+RQw== - - - - - - QzEzSDE1TjVPMwA= - - - - - - W00gKyBIXSsA - - - - - - - - - - - - - - - - - - - - - - - - stmR6vshckA= - - - - - - AACoQg== - - - - - - qg+RQw== - - - - - - QzExSDE3TjVPMwA= - - - - - - W00gKyBOYV0rAA== - - - - - - - - - - - - - - - - - - - - - - - - stmR6vshckA= - - - - - - AACoQg== - - - - - - 2g+RQw== - - - - - - QzlIMTdOOQA= - - - - - - W00gKyBLXSsA - - - - - - - - - - - - - - - - - - - - - - - - stmR6vshckA= - - - - - - AACoQg== - - - - - - LRCRQw== - - - - - - QzE2SDE3TjNPAA== - - - - - - W00gKyBOYV0rAA== - - - - - - - - - 3030 - 5983 - 8910 - 11838 - 14770 - 17692 - 20612 - 23539 - 26471 - 29405 - 32333 - 35429 - 38522 - 41618 - 44704 - 47797 - 50728 - 53656 - 56585 - 59519 - 62447 - 65374 - 68302 - 71235 - 74163 - 77096 - 80022 - 82955 - 85883 - 88812 - 91740 - 94666 - 97594 - 100523 - 103451 - 106385 - 109314 - 112240 - 115169 - 118103 - 121025 - - -123988 -0 - \ No newline at end of file diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_3_output.mzTab b/src/tests/topp/THIRDPARTY/SiriusAdapter_3_output.mzTab deleted file mode 100644 index 68b24f78ad5..00000000000 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_3_output.mzTab +++ /dev/null @@ -1,50 +0,0 @@ -MTD mzTab-version 1.0.0 -MTD mzTab-mode null -MTD mzTab-type null -MTD description Sirius-5.6.3 -MTD smallmolecule_search_engine_score[1] [, , SiriusScore, ] -MTD smallmolecule_search_engine_score[2] [, , TreeScore, ] -MTD smallmolecule_search_engine_score[3] [, , IsotopeScore, ] -MTD ms_run[1]-location /Users/builder/jenkins/ws/openms/PR/bldtst/87227eb0/source/src/tests/topp/THIRDPARTY/SiriusAdapter_3_input.mzML - -SMH identifier chemical_formula smiles inchi_key description exp_mass_to_charge calc_mass_to_charge charge retention_time taxid species database database_version spectra_ref search_engine best_search_engine_score[1] best_search_engine_score[2] best_search_engine_score[3] modifications opt_global_adduct opt_gobal_precursorFormula opt_global_rank opt_global_explainedPeaks opt_global_explainedIntensity opt_global_median_mass_error_fragment_peaks_ppm opt_global_median_absolute_mass_error_fragment_peaks_ppm opt_global_mass_error_precursor_ppm opt_global_compoundId opt_global_compoundScanNumber opt_global_featureId opt_global_native_id -SML null C15H17NO5 null null null 292.118520142944021 null null 404.455000000019993 null null null null null null 0.831597391947591 0.831597391947591 0.0 null [M + H]+ C15H17NO5 1 1 0.0 1.954846454887804 1.954846454887804 1.954846454887804 2 2165004 null sample=1 period=1 cycle=2165 experiment=4 -SML null C16H13N5O null null null 292.118520142944021 null null 404.455000000019993 null null null null null null 0.768142279254161 0.768142279254161 0.0 null [M + H]+ C16H13N5O 2 1 0.0 -2.623404863541922 2.623404863541922 -2.623404863541922 2 2165004 null sample=1 period=1 cycle=2165 experiment=4 -SML null C11H19N5O2 null null null 292.118520142944021 null null 404.455000000019993 null null null null null null 0.506813653466669 0.506813653466669 0.0 null [M + K]+ C11H19N5O2 3 1 0.0 5.091066642293969 5.091066642293969 5.091066642293969 2 2165004 null sample=1 period=1 cycle=2165 experiment=4 -SML null C14H15N5O null null null 292.118520142944021 null null 404.455000000019993 null null null null null null 0.446036047493384 0.446036047493384 0.0 null [M + Na]+ C14H15N5O 4 1 0.0 5.611910031361344 5.611910031361344 5.611910031361344 2 2165004 null sample=1 period=1 cycle=2165 experiment=4 -SML null C16H19N3 null null null 292.118520142944021 null null 404.455000000019993 null null null null null null 0.046523251610599 0.046523251610599 0.0 null [M + K]+ C16H19N3 5 1 0.0 -8.679919182327954 8.679919182327954 -8.679919182327954 2 2165004 null sample=1 period=1 cycle=2165 experiment=4 -SML null C16H19N3 null null null 292.121468920531015 null null 404.875000000020009 null null null null null null 0.880667513965956 0.880667513965956 0.0 null [M + K]+ C16H19N3 1 1 0.0 1.414522671061441 1.414522671061441 1.414522671061441 4 2166006 null sample=1 period=1 cycle=2166 experiment=6 -SML null C16H13N5O null null null 292.121468920531015 null null 404.875000000020009 null null null null null null 0.212552376554384 0.212552376554384 0.0 null [M + H]+ C16H13N5O 2 1 0.0 7.470975853246509 7.470975853246509 7.470975853246509 4 2166006 null sample=1 period=1 cycle=2166 experiment=6 -SML null C8H15N9O2 null null null 292.121468920531015 null null 404.875000000020009 null null null null null null -0.557337795983029 -0.557337795983029 0.0 null [M + Na]+ C8H15N9O2 3 1 0.0 -8.977428359455617 8.977428359455617 -8.977428359455617 4 2166006 null sample=1 period=1 cycle=2166 experiment=6 -SML null C10H15F2N5O3 null null null 292.121468920531015 null null 404.875000000020009 null null null null null null -0.638055591467511 -0.638055591467511 0.0 null [M + H]+ C10H15F2N5O3 4 1 0.0 -0.353659591904795 0.353659591904795 -0.353659591904795 4 2166006 null sample=1 period=1 cycle=2166 experiment=6 -SML null C12H21NO5S null null null 292.121468920531015 null null 404.875000000020009 null null null null null null -0.650881556751561 -0.650881556751561 0.0 null [M + H]+ C12H21NO5S 5 1 0.0 0.50902263733827 0.50902263733827 0.50902263733827 4 2166006 null sample=1 period=1 cycle=2166 experiment=6 -SML null C13H23ClNO2P null null null 292.121752827682997 null null 410.144999999999982 null null null null null null 5.467021788559013 -2.536665011350316 8.003686799909328 null [M + H]+ C13H23ClNO2P 1 1 0.0 -3.481118395667346 3.481118395667346 -3.481118395667346 6 2167005 id_13442776035824190606 sample=1 period=1 cycle=2167 experiment=5|sample=1 period=1 cycle=2175 experiment=4|sample=1 period=1 cycle=2176 experiment=6 -SML null C15H18ClN3O null null null 292.121752827682997 null null 410.144999999999982 null null null null null null 5.355405053845244 -0.798764727632604 6.154169781477848 null [M + H]+ C15H18ClN3O 2 1 0.0 2.178884613394733 2.178884613394733 2.178884613394733 6 2167005 id_13442776035824190606 sample=1 period=1 cycle=2167 experiment=5|sample=1 period=1 cycle=2175 experiment=4|sample=1 period=1 cycle=2176 experiment=6 -SML null C8H15N9O2 null null null 292.121752827682997 null null 410.144999999999982 null null null null null null 1.611812076455744 -0.42071502723714 2.032527103692884 null [M + Na]+ C8H15N9O2 3 1 0.0 -8.005540103995379 8.005540103995379 -8.005540103995379 6 2167005 id_13442776035824190606 sample=1 period=1 cycle=2167 experiment=5|sample=1 period=1 cycle=2175 experiment=4|sample=1 period=1 cycle=2176 experiment=6 -SML null C16H19N3 null null null 292.121752827682997 null null 410.144999999999982 null null null null null null 0.790986992438735 0.790986992438735 0.0 null [M + K]+ C16H19N3 4 1 0.0 2.386400826797191 2.386400826797191 2.386400826797191 6 2167005 id_13442776035824190606 sample=1 period=1 cycle=2167 experiment=5|sample=1 period=1 cycle=2175 experiment=4|sample=1 period=1 cycle=2176 experiment=6 -SML null C14H18N3O2P null null null 292.121752827682997 null null 410.144999999999982 null null null null null null 0.432395400029174 -0.856881885792921 1.289277285822095 null [M + H]+ C14H18N3O2P 5 1 0.0 2.782845113777305 2.782845113777305 2.782845113777305 6 2167005 id_13442776035824190606 sample=1 period=1 cycle=2167 experiment=5|sample=1 period=1 cycle=2175 experiment=4|sample=1 period=1 cycle=2176 experiment=6 -SML null C12H15N7O null null null 296.12309906592202 null null 406.816999999979998 null null null null null null 0.980887618593451 0.980887618593451 0.0 null [M + Na]+ C12H15N7O 1 1 0.0 0.237285884690055 0.237285884690055 0.237285884690055 11 2171003 null sample=1 period=1 cycle=2171 experiment=3 -SML null C9H19N7O2 null null null 296.12309906592202 null null 406.816999999979998 null null null null null null 0.977693233607875 0.977693233607875 0.0 null [M + K]+ C9H19N7O2 2 1 0.0 -0.276513952338959 0.276513952338959 -0.276513952338959 11 2171003 null sample=1 period=1 cycle=2171 experiment=3 -SML null C13H17N3O5 null null null 296.12309906592202 null null 406.816999999979998 null null null null null null 0.69360069253042 0.69360069253042 0.0 null [M + H]+ C13H17N3O5 3 1 0.0 -3.370321908818455 3.370321908818455 -3.370321908818455 11 2171003 null sample=1 period=1 cycle=2171 experiment=3 -SML null C11H19N3O5 null null null 296.12309906592202 null null 406.816999999979998 null null null null null null 0.545127238032372 0.545127238032372 0.0 null [M + Na]+ C11H19N3O5 4 1 0.0 4.753623867781498 4.753623867781498 4.753623867781498 11 2171003 null sample=1 period=1 cycle=2171 experiment=3 -SML null C9H13N9O3 null null null 296.12309906592202 null null 406.816999999979998 null null null null null null 0.271384417425164 0.271384417425164 0.0 null [M + H]+ C9H13N9O3 5 1 0.0 5.698095950127542 5.698095950127542 5.698095950127542 11 2171003 null sample=1 period=1 cycle=2171 experiment=3 -SML null C13H17N3O5 null null null 296.123821549630009 null null 407.245000000020013 null null null null null null 0.922970962849822 0.922970962849822 0.0 null [M + H]+ C13H17N3O5 1 1 0.0 -0.930510956728375 0.930510956728375 -0.930510956728375 13 2172004 null sample=1 period=1 cycle=2172 experiment=4 -SML null C9H19N7O2 null null null 296.123821549630009 null null 407.245000000020013 null null null null null null 0.812140756363484 0.812140756363484 0.0 null [M + K]+ C9H19N7O2 2 1 0.0 2.163289451470025 2.163289451470025 2.163289451470025 13 2172004 null sample=1 period=1 cycle=2172 experiment=4 -SML null C12H15N7O null null null 296.123821549630009 null null 407.245000000020013 null null null null null null 0.762914044613723 0.762914044613723 0.0 null [M + Na]+ C12H15N7O 3 1 0.0 2.677088034928794 2.677088034928794 2.677088034928794 13 2172004 null sample=1 period=1 cycle=2172 experiment=4 -SML null C14H13N7O null null null 296.123821549630009 null null 407.245000000020013 null null null null null null 0.465515045211605 0.465515045211605 0.0 null [M + H]+ C14H13N7O 4 1 0.0 -5.446837920846081 5.446837920846081 -5.446837920846081 13 2172004 null sample=1 period=1 cycle=2172 experiment=4 -SML null C16H19NO3 null null null 296.123821549630009 null null 407.245000000020013 null null null null null null 0.351324844036157 0.351324844036157 0.0 null [M + Na]+ C16H19NO3 5 1 0.0 -6.391307698866561 6.391307698866561 -6.391307698866561 13 2172004 null sample=1 period=1 cycle=2172 experiment=4 -SML null C14H13N7O null null null 296.125008105473 null null 407.654999999999973 null null null null null null 0.878408969563052 0.878408969563052 0.0 null [M + H]+ C14H13N7O 1 1 0.0 -1.43987372163701 1.43987372163701 -1.43987372163701 15 2173002 null sample=1 period=1 cycle=2173 experiment=2 -SML null C16H19NO3 null null null 296.125008105473 null null 407.654999999999973 null null null null null null 0.791183969804865 0.791183969804865 0.0 null [M + Na]+ C16H19NO3 2 1 0.0 -2.384339715221516 2.384339715221516 -2.384339715221516 15 2173002 null sample=1 period=1 cycle=2173 experiment=2 -SML null C13H23NO4 null null null 296.125008105473 null null 407.654999999999973 null null null null null null 0.741175933521995 0.741175933521995 0.0 null [M + K]+ C13H23NO4 3 1 0.0 -2.89813623991897 2.89813623991897 -2.89813623991897 15 2173002 null sample=1 period=1 cycle=2173 experiment=2 -SML null C13H17N3O5 null null null 296.125008105473 null null 407.654999999999973 null null null null null null 0.723394495394527 0.723394495394527 0.0 null [M + H]+ C13H17N3O5 4 1 0.0 3.076435145818808 3.076435145818808 3.076435145818808 15 2173002 null sample=1 period=1 cycle=2173 experiment=2 -SML null C9H19N7O2 null null null 296.125008105473 null null 407.654999999999973 null null null null null null 0.37865242729204 0.37865242729204 0.0 null [M + K]+ C9H19N7O2 5 1 0.0 6.170223157337256 6.170223157337256 6.170223157337256 15 2173002 null sample=1 period=1 cycle=2173 experiment=2 -SML null C15H28O4 null null null 295.18707248574799 null null 418.393999999979997 null null null null null null 3.5 3.5 0.0 null [M + Na]+ C15H28O4 1 1 0.0 nan nan -3.074627675571169 43 2199003 null sample=1 period=1 cycle=2199 experiment=3 -SML null C13H28N4O null null null 295.18707248574799 null null 418.393999999979997 null null null null null null 1.0 1.0 0.0 null [M + K]+ C13H28N4O 2 1 0.0 nan nan -8.12071586440215 43 2199003 null sample=1 period=1 cycle=2199 experiment=3 -SML null C12H26N2O6 null null null 295.18707248574799 null null 418.393999999979997 null null null null null null 1.0 1.0 0.0 null [M + H]+ C12H26N2O6 3 1 0.0 nan nan 2.403498403688778 43 2199003 null sample=1 period=1 cycle=2199 experiment=3 -SML null C16H24N4 null null null 295.18707248574799 null null 418.393999999979997 null null null null null null 1.0 1.0 0.0 null [M + Na]+ C16H24N4 4 1 0.0 nan nan -7.605286788519772 43 2199003 null sample=1 period=1 cycle=2199 experiment=3 -SML null C11H24N6O2 null null null 295.18707248574799 null null 418.393999999979997 null null null null null null 1.0 1.0 0.0 null [M + Na]+ C11H24N6O2 5 1 0.0 nan nan 6.022545779223315 43 2199003 null sample=1 period=1 cycle=2199 experiment=3 -SML null C12H19NO7 null null null 290.124002639250989 null null 420.444000000000017 null null null null null null 0.829331145050649 0.829331145050649 0.0 null [M + H]+ C12H19NO7 1 1 0.0 1.979288701546372 1.979288701546372 1.979288701546372 49 2204006 null sample=1 period=1 cycle=2204 experiment=6 -SML null C13H15N5O3 null null null 290.124002639250989 null null 420.444000000000017 null null null null null null 0.767458571705934 0.767458571705934 0.0 null [M + H]+ C13H15N5O3 2 1 0.0 -2.6304367531418 2.6304367531418 -2.6304367531418 49 2204006 null sample=1 period=1 cycle=2204 experiment=6 -SML null C11H17N5O3 null null null 290.124002639250989 null null 420.444000000000017 null null null null null null 0.440145632853194 0.440145632853194 0.0 null [M + Na]+ C11H17N5O3 3 1 0.0 5.661493518486198 5.661493518486198 5.661493518486198 49 2204006 null sample=1 period=1 cycle=2204 experiment=6 -SML null C9H17N9 null null null 290.124002639250989 null null 420.444000000000017 null null null null null null 0.29900758475931 0.29900758475931 0.0 null [M + K]+ C9H17N9 4 1 0.0 0.527344029052501 0.527344029052501 0.527344029052501 49 2204006 null sample=1 period=1 cycle=2204 experiment=6 -SML null C16H17N3O null null null 290.124002639250989 null null 420.444000000000017 null null null null null null 0.11321656639466 0.11321656639466 0.0 null [M + Na]+ C16H17N3O 5 1 0.0 -8.204163798395776 8.204163798395776 -8.204163798395776 49 2204006 null sample=1 period=1 cycle=2204 experiment=6 diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_4_foutput.mzTab b/src/tests/topp/THIRDPARTY/SiriusAdapter_4_foutput.mzTab deleted file mode 100644 index 992a12b234c..00000000000 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_4_foutput.mzTab +++ /dev/null @@ -1,19 +0,0 @@ -MTD mzTab-version 1.0.0 -MTD mzTab-mode null -MTD mzTab-type null -MTD description CSI:FingerID-5.5.5 -MTD smallmolecule_search_engine_score[1] [, , CSI:FingerIDScore, ] -MTD ms_run[1]-location /home/axel/dev/OpenMS/src/tests/topp/THIRDPARTY/SiriusAdapter_2_input.mzML - -SMH identifier chemical_formula smiles inchi_key description exp_mass_to_charge calc_mass_to_charge charge retention_time taxid species database database_version spectra_ref search_engine best_search_engine_score[1] modifications opt_global_rank opt_global_compoundId opt_global_compoundScanNumber opt_global_featureId opt_global_native_id opt_global_adduct opt_global_dblinks opt_global_dbflags -SML "" C11H8F6N2O3 CC(C(=O)NC1=CC=CC=C1[N+](=O)[O-])(C(F)(F)F)C(F)(F)F DWKUXRAXBIEJRS null 313.039841135792983 null null 422.093999999999994 null null null null null null -318.966123922931672 null 1 83 2208006 null sample=1 period=1 cycle=2208 experiment=6 [M - H2O + H]+ COCONUT:(CNP0050271)|SuperNatural:(SN00137926) 3145728 -SML "" C11H8F6N2O3 CC(C(=O)NC1=CC=C(C=C1)[N+](=O)[O-])(C(F)(F)F)C(F)(F)F QGLHLQGHXAZOGK null 313.039841135792983 null null 422.093999999999994 null null null null null null -335.138899743406569 null 2 83 2208006 null sample=1 period=1 cycle=2208 experiment=6 [M - H2O + H]+ COCONUT:(CNP0409895)|SuperNatural:(SN00137924) 3145728 -SML 1905726 C11H8F6N2O3 CC(C(=O)NC1=CC(=CC=C1)[N+](=O)[O-])(C(F)(F)F)C(F)(F)F AFJAOHMCWANYRF 3,3,3-trifluoro-2-methyl-N-(3-nitrophenyl)-2-(trifluoromethyl)propanamide 313.039841135792983 null null 422.093999999999994 null null null null null null -340.50155756112207 null 3 83 2208006 null sample=1 period=1 cycle=2208 experiment=6 [M - H2O + H]+ COCONUT:(CNP0156466)|PubChem:(1905726)|SuperNatural:(SN00120570)|ZINC bio:(ZINC02282151) 3153922 -SML "" C11H8F6N2O3 COC1=C(C=C(C=C1)C(F)(F)F)NC(=O)NC(=O)C(F)(F)F TYCWNBGQUQVVAQ null 313.039841135792983 null null 422.093999999999994 null null null null null null -403.10967734002287 null 4 83 2208006 null sample=1 period=1 cycle=2208 experiment=6 [M - H2O + H]+ COCONUT:(CNP0048249)|SuperNatural:(SN00137854) 3145728 -SML 41029 C15H16Cl2O4 CC(C)C1(CC2=CC(=C(C(=C2C1=O)Cl)Cl)OCC(=O)O)C ICVHCELCKWOSFJ 6,7-Dichloro-2-isopropyl-2-methyl-1-oxo-5-indanyloxyacetic acid 313.039841135792983 null null 422.093999999999994 null null null null null null -292.539272270680556 null 1 83 2208006 null sample=1 period=1 cycle=2208 experiment=6 [M - H2O + H]+ PubChem class - safety and toxic|PubChem:(41029)|PubMed 67108930 -SML 137348182 C15H15BN2O5 B1(C2=CC(=C(C(=C2C(O1)CC(=O)O)C)C)OC3=NC=CN=C3)O MTHDAYXINWUJNY null 336.099729771336001 null null 424.194000000000017 null null null null null null -545.416096069490436 null 1 103 2213005 null sample=1 period=1 cycle=2213 experiment=5 [M + Na]+ PubChem:(137348182)|PubChem class - bio and metabolites 16777218 -SML 86414 C12H13ClN6O7S CN1C(=C(C(=N1)Cl)C(=O)O)S(=O)(=O)NC(=O)NC2=NC(=CC(=N2)OC)OC LXKOADMMGWXPJQ ACMC-20mvqz 421.031173711469023 null null 425.843999999999994 null null null null null null -209.047400041579692 null 1 114 2217003 null sample=1 period=1 cycle=2217 experiment=3 [M + H]+ PubChem class - safety and toxic|PubChem:(86414)|KEGG Mine 8657043458 -SML 337221 C10H18Cl2N6O4S2 C(CCl)NC(=O)N(CCSSCCN(C(=O)NCCCl)N=O)N=O MCJTWBSHHKUHDE 1,1''-Dithiodiethylenebis(3-(2-chloroethyl)-1-nitrosourea) 421.031173711469023 null null 425.843999999999994 null null null null null null -186.540839130530316 null 1 114 2217003 null sample=1 period=1 cycle=2217 experiment=3 [M + H]+ PubChem:(337221)|PubChem class - safety and toxic 67108866 -SML 127547 C10H18Cl2N6O4S2 C(CSSCCNC(=O)N(CCCl)N=O)NC(=O)N(CCCl)N=O XWPCYYOZOJKYKQ Ditiomustine 421.031173711469023 null null 425.843999999999994 null null null null null null -186.540839130530316 null 2 114 2217003 null sample=1 period=1 cycle=2217 experiment=3 [M + H]+ MeSH:(127547)|PubChem class - safety and toxic|PubChem:(127547)|PubMed|PubChem class - drug 100663366 -SML 13273158 C10H18Cl2N6O4S2 C(CSSCCN(C(=O)NCCCl)N=O)NC(=O)N(CCCl)N=O AUZCVFKDFVJWRO 5,6-Dithia-2,9,11-triazatridecanamide, 13-chloro-N-(2-chloroethyl)-N,9-dinitroso-10-oxo- 421.031173711469023 null null 425.843999999999994 null null null null null null -186.540839130530316 null 3 114 2217003 null sample=1 period=1 cycle=2217 experiment=3 [M + H]+ PubChem:(13273158)|PubChem class - safety and toxic 67108866 -SML 3025603 C15H19BrN4O2S CCN(CC)CCNC(=O)C(=O)NC1=NC2=C(S1)C=C(C=C2)Br IEBKTXLHFAXMMB N''-(6-bromo-1,3-benzothiazol-2-yl)-N-(2-diethylaminoethyl)oxamide 421.031173711469023 null null 425.843999999999994 null null null null null null -491.959939048929584 null 1 114 2217003 null sample=1 period=1 cycle=2217 experiment=3 [M + Na]+ PubChem:(3025603)|PubChem class - safety and toxic 67108866 diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_4_input.featureXML b/src/tests/topp/THIRDPARTY/SiriusAdapter_4_input.featureXML deleted file mode 100644 index 7ce6df266e6..00000000000 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_4_input.featureXML +++ /dev/null @@ -1,1455 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 634.46076 - 344.002118729327 - 239547 - 0 - 0 - 3.19691e-06 - 0 - - - - - - - - - - - 604.0839 - 348.071343673474 - 177280 - 0 - 0 - 2.36593e-06 - 0 - - - - - - - - - - - 624.33216 - 348.071393528876 - 331003 - 0 - 0 - 4.41746e-06 - 0 - - - - - - - - - - - 693.8838 - 348.895774105045 - 298509 - 0 - 0 - 3.98381e-06 - 0 - - - - - - - - - - - 640.6548 - 348.895783025523 - 83943.8 - 0 - 0 - 1.12029e-06 - 0 - - - - - - - - - - - 657.09588 - 348.895790896649 - 313180 - 0 - 0 - 4.1796e-06 - 0 - - - - - - - - - - - 666.48702 - 348.895880246189 - 983261 - 0 - 0 - 1.31223e-05 - 0 - - - - - - - - - - - 683.75478 - 348.895944214889 - 171900 - 0 - 0 - 2.29412e-06 - 0 - - - - - - - - - - - 688.41828 - 348.895982465771 - 235540 - 0 - 0 - 3.14344e-06 - 0 - - - - - - - - - - - 625.91526 - 348.95417117046 - 1.44643e+07 - 0 - 0 - 0.000193036 - 0 - - - - - - - - - - - 638.3229 - 348.954175485328 - 2.50992e+06 - 0 - 0 - 3.34966e-05 - 0 - - - - - - - - - - - 620.42304 - 349.075080065829 - 157875 - 0 - 0 - 2.10695e-06 - 0 - - - - - - - - - - - 677.45682 - 349.957635385909 - 214163 - 0 - 0 - 2.85815e-06 - 0 - - - - - - - - - - - 690.78366 - 349.957656662928 - 832371 - 0 - 0 - 1.11086e-05 - 0 - - - - - - - - - - - 639.06978 - 349.957966220138 - 90386.9 - 0 - 0 - 1.20627e-06 - 0 - - - - - - - - - - - 628.23816 - 350.070127979755 - 135379 - 0 - 0 - 1.80673e-06 - 0 - - - - - - - - - - - 632.12088 - 351.987086715854 - 560515 - 0 - 0 - 7.48045e-06 - 0 - - - - - - - - - - - 657.8499 - 352.086932515712 - 4.19375e+07 - 0 - 0 - 0.000606919 - 1 - - - - - - - - - - - 618.89364 - 352.087048302429 - 445119 - 0 - 0 - 5.94042e-06 - 0 - - - - - - - - - - - 602.50938 - 352.087055724631 - 416217 - 0 - 0 - 5.55469e-06 - 0 - - - - - - - - - - - 633.6708 - 352.987804216691 - 3.33168e+06 - 0 - 0 - 4.44635e-05 - 0 - - - - - - - - - - - 602.50938 - 354.065501038579 - 639343 - 0 - 0 - 8.53247e-06 - 0 - - - - - - - - - - - 628.99464 - 354.065839670089 - 614952 - 0 - 0 - 8.20695e-06 - 0 - - - - - - - - - - - 660.2484 - 354.082971075827 - 1.08686e+06 - 0 - 0 - 1.45049e-05 - 0 - - - - - - - - - - - 604.0839 - 354.089443188232 - 504322 - 0 - 0 - 6.73052e-06 - 0 - - - - - - - - - - - 628.99464 - 354.089570900871 - 245225 - 0 - 0 - 3.2727e-06 - 0 - - - - - - - - - - - 690.78366 - 356.144117434001 - 325874 - 0 - 0 - 4.34901e-06 - 0 - - - - - - - - - - - 627.48726 - 356.144273865204 - 220821 - 0 - 0 - 2.94701e-06 - 0 - - - - - - - - - - - 605.67948 - 356.144409845365 - 310621 - 0 - 0 - 4.14544e-06 - 0 - - - - - - - - - - - 609.57138 - 356.187056525475 - 335383 - 0 - 0 - 4.47591e-06 - 0 - - - - - - - - - - - 638.3229 - 356.187095368601 - 118206 - 0 - 0 - 1.57753e-06 - 0 - - - - - - - - - - - 600.15828 - 358.099793734311 - 2.04797e+06 - 0 - 0 - 2.73316e-05 - 0 - - - - - - - - - - - 618.10224 - 358.099835329879 - 3.3335e+06 - 0 - 0 - 4.44878e-05 - 0 - - - - - - - - - - - 694.6518 - 358.099842771326 - 3.64085e+06 - 0 - 0 - 4.85896e-05 - 0 - - - - - - - - - - - 638.3229 - 359.975858137015 - 247318 - 0 - 0 - 3.30062e-06 - 0 - - - - - - - - - - - 669.5958 - 360.995881694972 - 2.57933e+06 - 0 - 0 - 3.58402e-05 - 1 - - - - - - - - - - - 619.68474 - 362.077126488713 - 1.36645e+06 - 0 - 0 - 1.82362e-05 - 0 - - - - - - - - - - - 670.37556 - 362.993559381714 - 1.81145e+06 - 0 - 0 - 2.4175e-05 - 0 - - - - - - - - - - - 670.37556 - 363.997266741143 - 229536 - 0 - 0 - 3.06332e-06 - 0 - - - - - - - - - - - 634.46076 - 364.009791279786 - 185352 - 0 - 0 - 2.47365e-06 - 0 - - - - - - - - - - - 627.48726 - 364.928000861901 - 1.08914e+07 - 0 - 0 - 0.000145353 - 0 - - - - - - - - - - - 671.17044 - 364.990623951706 - 428956 - 0 - 0 - 5.7247e-06 - 0 - - - - - - - - - - - 610.33776 - 367.08576868006 - 896410 - 0 - 0 - 1.19632e-05 - 0 - - - - - - - - - - - 668.8437 - 367.263993371217 - 44249.4 - 0 - 0 - 5.90538e-07 - 0 - - - - - - - - - - - 690.78366 - 367.264117819165 - 197794 - 0 - 0 - 2.6397e-06 - 0 - - - - - - - - - - - 679.0473 - 368.060430087803 - 99504.4 - 0 - 0 - 1.32795e-06 - 0 - - - - - - - - - - - 623.53842 - 368.060687862807 - 451187 - 0 - 0 - 6.0214e-06 - 0 - - - - - - - - - - - 687.64818 - 368.060691236178 - 342219 - 0 - 0 - 4.56715e-06 - 0 - - - - - - - - - - - 683.75478 - 368.060894063385 - 82148.1 - 0 - 0 - 1.09632e-06 - 0 - - - - - - - - - - - 633.6708 - 372.089793471492 - 161406 - 0 - 0 - 2.15407e-06 - 0 - - - - - - - - - - - 650.05716 - 374.906424070808 - 5.37929e+06 - 0 - 0 - 7.17903e-05 - 0 - - - - - - - - - - - 636.77088 - 375.950365457361 - 206998 - 0 - 0 - 2.76253e-06 - 0 - - - - - - - - - - - 605.67948 - 376.067926295726 - 303350 - 0 - 0 - 4.04842e-06 - 0 - - - - - - - - - - - 620.42304 - 376.068267748219 - 103974 - 0 - 0 - 1.3876e-06 - 0 - - - - - - - - - - - 654.01554 - 376.903750436728 - 1.42413e+06 - 0 - 0 - 1.9006e-05 - 0 - - - - - - - - - - - 679.8102 - 380.081750193561 - 324220 - 0 - 0 - 4.32694e-06 - 0 - - - - - - - - - - - 641.42766 - 380.081796892197 - 398800 - 0 - 0 - 5.32226e-06 - 0 - - - - - - - - - - - 662.59344 - 380.081923350804 - 1.07784e+06 - 0 - 0 - 1.43845e-05 - 0 - - - - - - - - - - - 633.6708 - 382.118734559548 - 1.2144e+06 - 0 - 0 - 1.6207e-05 - 0 - - - - - - - - - - - 653.2128 - 384.9354114254 - 1.26317e+08 - 0 - 0 - 0.0017724 - 1 - - - - - - - - - - - 600.9495 - 387.031854468656 - 68437.8 - 0 - 0 - 9.13349e-07 - 0 - - - - - - - - - - - 639.85104 - 388.063449924563 - 1.20099e+06 - 0 - 0 - 1.60281e-05 - 0 - - - - - - - - - - - 668.8437 - 388.063503257371 - 8.86945e+06 - 0 - 0 - 0.000118369 - 0 - - - - - - - - - - - 628.23816 - 388.063563709748 - 509407 - 0 - 0 - 6.79838e-06 - 0 - - - - - - - - - - - 633.6708 - 388.126861436641 - 679244 - 0 - 0 - 9.06497e-06 - 0 - - - - - - - - - - - 654.01554 - 388.515923136251 - 634632 - 0 - 0 - 8.4696e-06 - 0 - - - - - - - - - - - 679.0473 - 389.065835674718 - 849911 - 0 - 0 - 1.13426e-05 - 0 - - - - - - - - - - - 671.97168 - 390.06075645569 - 2.24881e+06 - 0 - 0 - 3.00119e-05 - 0 - - - - - - - - - - - 695.41518 - 390.06082584139 - 841999 - 0 - 0 - 1.1237e-05 - 0 - - - - - - - - - - - 640.6548 - 390.060866163539 - 593918 - 0 - 0 - 7.92625e-06 - 0 - - - - - - - - - - - 615.78192 - 390.084324624584 - 271271 - 0 - 0 - 3.6203e-06 - 0 - - - - - - - - - - - 621.96804 - 390.08448325239 - 88004.8 - 0 - 0 - 1.17448e-06 - 0 - - - - - - - - - - - 664.91814 - 390.881060849754 - 306906 - 0 - 0 - 4.09587e-06 - 0 - - - - - - - - - - - 623.53842 - 394.098069361941 - 2.29535e+06 - 0 - 0 - 3.16832e-05 - 1 - - - - - - - - - - - 650.85702 - 395.957238239339 - 523179 - 0 - 0 - 6.98218e-06 - 0 - - - - - - - - - - - 621.21426 - 396.005771065527 - 708659 - 0 - 0 - 9.45754e-06 - 0 - - - - - - - - - - - 657.8499 - 398.092212485532 - 1.96533e+08 - 0 - 0 - 0.00289126 - 1 - - - - - - - - - - - 625.91526 - 399.095061200346 - 2.19786e+06 - 0 - 0 - 2.93319e-05 - 0 - - - - - - - - - - - diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_4_input.mzML b/src/tests/topp/THIRDPARTY/SiriusAdapter_4_input.mzML deleted file mode 100644 index e289d4bccf5..00000000000 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_4_input.mzML +++ /dev/null @@ -1,5094 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAoDJIeEA= - - - - - - AdkqRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - vIdktObhd0Ak9VTT8PF3QLQL5yUHQnhAWX3YQBlIeEA= - - - - - - 4ooLSJhuH0dNy+tG6RFoRw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /ow0jOThd0BybPL/C0J4QNMnY1cHSHhA - - - - - - zkKlR8jqokbYpxVH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LLaubufhd0B2El5QWyJ4QK2nfjhHSHhA - - - - - - vX4RR12akEa3qw5H - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAAHpIeEA= - - - - - - ogUDRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - eNRv+Fvmd0DUpDJRBEF4QMZ9tZYrSHhA - - - - - - s8NzRs8aJUe1UbtG - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ixMY+uXhd0AOiGgHBEF4QN89MrAxSHhA - - - - - - lRLKRp6owUdKrI1H - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - yia0yU/Bd0B2rWAT9w54QPUYDfYDQXhABmzrYSpIeEBPLcoLWEh4QA== - - - - - - 7gGFRqn+E0dqW2NINP6gRnsR+EY= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LoctJk/Bd0AQ+cMR9w54QGAIKdADQXhAvaVSxhNIeEC2r8zkP0h4QOQmmKQHUXhA - - - - - - t0myR/FGm0hV5ItIiCm3RuT2AkfxdJ1G - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAA4DxIeEA= - - - - - - DWGvRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAYD5IeEA= - - - - - - LMIvRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAYFJIeEA= - - - - - - RXNGRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z+pjPk7Bd0DCMcoL9w54QOrot2oGH3hAJzUU2ANBeECokLc/Jkh4QLZAptZOSHhAYkQfig5ReEA= - - - - - - HHdiR80yVUnpU1VHbthzSHqkrkZkjopG0LdfRw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAYDZIeEA= - - - - - - Xk8PRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gRen1k/Bd0COq91Q9w54QBabLusFH3hATONREQNBeEASZLM83Ud4QGjgIRMoSHhA - - - - - - 9JmfR2/WsEkxNclHiS8eSM87WEZv2zVH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6snR2k/Bd0As1IOx9w54QLseijEDH3hAhGQ8UIEyeEBYo+CBBUF4QKMo+agfSHhA - - - - - - 2XCRR9hOCkqInSRIYvOKRu+cBEhNcB5H - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAwF9IeEA= - - - - - - raAtRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAA4ElIeEA= - - - - - - LapIRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 4Ej5h0/Bd0D35jRh9w54QK5e5UoFH3hAKrHOXQsveEA4JccEhDJ4QDIW9B4DQXhAAoI1YTZIeEA= - - - - - - 9zyMRyfROEpDRiVIeaJzR+abk0abXQxIe0AyRw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Np3cUk7Bd0BfD+5P9w54QA3DvNUEH3hANDwl8ggveECMI9xLBEF4QLTAHXb6R3hA - - - - - - EXulRyfhdUpUnoVIMjF2RwusCEitlhJH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAIBJIeEA= - - - - - - Or6JRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uH+A8U7Bd0CBC7FX9w54QIaEa2IFH3hAUnNxIgoveED4dr1/A0F4QGIsGkdNSHhA - - - - - - 0s3eRgXchkqt9Y9IbrmnR5fl0Uex+/pG - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAID9IeEA= - - - - - - PjRIRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAgDNIeEA= - - - - - - E9YVRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - oFZADErBd0AA+v3B9w54QDzokW4FH3hAFsKHAggveECQHBLtAUF4QGKhSY88SHhAwj+EWmhIeEA= - - - - - - sH0eR7u4nEp0gZ9I/s0CSGkl50fm9qZG/17MRg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAIBpIeEA= - - - - - - M9W5RQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAgPDNd0AAAABgWkh4QA== - - - - - - tFcXRcyGlEU= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAIEVIeEA= - - - - - - bItvRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - nPJ/vVDBd0A3Tla09w54QCN/RhMFH3hAzjGeWAoveEDEJOvNBEF4QCU0Ib9FSHhA - - - - - - Z0z9Rpwsr0qqRbRIJUISSGhFjkdRejVH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAICtIeEA= - - - - - - V/EZRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAQFdIeEA= - - - - - - dx0JRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2MEQJk7Bd0CTFS+a9w54QNEDtXkFH3hAZP4OIggveEB2DTbRVkB4QLTLkYsDQXhA0Evz6FxIeEA= - - - - - - Ekq1RkPcyUr0jAVJysoRSEUlqkZwWJFH9SkYRw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAwIZIeEA= - - - - - - GIESRg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1M0iIlDBd0BFYSeM9w54QFUiQ/gFH3hAppnC4QgveEDWycMYBEF4QJZ6ooxBSHhA - - - - - - pTx5Rxmg3Ur27QtJEsENSPyu2UckUgpH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAQBJIeEA= - - - - - - V5ZIRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HiFRPk/Bd0CYB0mz9g54QDOCTi4FH3hAYpR1aAkveEBk2GR5Gj94QK45LrUFQXhA7r1l7C9IeEA= - - - - - - +NXARmOL+kp5lABJzwhWSIRhy0ZvSqNHXLv0Rg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAoPVHeEA= - - - - - - hQ4rRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /XDuSPcOeEB4d4v1BR94QMzgpUwKL3hA+6hocQRBeEA1e2/dXEh4QA== - - - - - - eC/9SicO9EjFYVRIeg2kR6Rjf0c= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAYEVIeEA= - - - - - - 3mhsRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAAEFIeEA= - - - - - - FI20RQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gkys0E7Bd0C469li9w54QAutGrgFH3hAZuW8QAkveEDY4hqmA0F4QJbdaChYSHhA - - - - - - giXHRuw6/konlA1Jttx+SIeaD0fnZApH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAA4DFIeEA= - - - - - - k1d2RQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gXlaeFHBd0Cb94eL9w54QKYWFbAFH3hAToQN7AgveEAX8YQsAkF4QLVzb+xcSHhA - - - - - - eM7XRg19/0oKZRFJ9Ul2SEb7DUew0UNH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAgHxIeEA= - - - - - - pnCqRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAwKD1d0AAAADgA0h4QA== - - - - - - 04YQRaaOGEU= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TFvxGU7Bd0CWIaZM9w54QJ9bimkFH3hAjg53ywkveEAU6RCeBUF4QFVm5YJaSHhA - - - - - - yEn2RvoDB0tvCh9JiuV7SAPwhkfwuv5G - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - E+jvPfcOeECa651oBR94QK40VJAKL3hAMNNH1QJBeEC2MoxbUkh4QA== - - - - - - hXsESxD5JEnLjmFIkDx9Ry6nKkc= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAoFhIeEAAAACAilh4QA== - - - - - - +okqRaIABkU= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gz/fzE3Bd0A4H5599w54QIJbBTAFH3hAFozt8AkveEAC2keKA0F4QMiqC9FLSHhA - - - - - - p+fvRk9jCUtCJhRJ1u1nSMveEUdwpIlH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAIAJIeEA= - - - - - - GfMFRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAIBdIeEA= - - - - - - SR1gRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAQIBIeEA= - - - - - - cpgLRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - VfOTwPcOeEDSmGaCBh94QBxd0YAJL3hAiNE+oARBeEBx5ECoWEh4QA== - - - - - - cYwFS3/4E0lk3FFIATfkRolGeUc= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAoNRHeEAAAADgk0h4QA== - - - - - - 6aPPRexotUU= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAAPQOeEAAAAAg60d4QA== - - - - - - JK9rRYBngkU= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 7iGkrE/Bd0DKIOuI9w54QLsTFHMFH3hA7uNZGgoveEBeWGbeA0F4QAPj6XsdSHhA - - - - - - vUccR1ZxBUsnFBFJlMAvSC9OwkcM54JH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - RfXvVlDBd0Ck/yRN9w54QF5ZjiEFH3hAyr6y4wkveECqIg7RAUF4QH3v+V4GSHhA - - - - - - YzwfR3HRAEuMSQFJRwRHSGjv9UcBkCBH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 7of0x07Bd0Dj9hRV9w54QAiE0mcFH3hATr6PnAkveECezmYeBEF4QMD4GRQSSHhA - - - - - - PKfPRsdM90q3z/ZI84M/SFjn7Ue5iQZH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAAL5HeEA= - - - - - - nn7QRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - yJHsTlDBd0ArjuGH9w54QLjhEnkFH3hARqr4JgoveEBIcDLDAkF4QDJ7WoIbSHhA - - - - - - ep7VRzYy+UroqSdJdMw+SNi38UfvLiBH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - m2NE903Bd0CALh509w54QNjQz50FH3hAG3zTKAoveEA5pV+XA0F4QDziMrsmSHhA - - - - - - tx6cR+Bx50rVSgNJ3043SITN8UfqjYFH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AwP3K1LBd0Cjsvmt9w54QApV9UIGH3hADuEzOwoveEAI90e1BUF4QENUH+QvSHhA - - - - - - 546DR/hh10oJVfxI+WceSIF5wUd7H79G - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAgGVIeEA= - - - - - - 28snRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAAE5IeEA= - - - - - - W4hERQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAYE1IeEA= - - - - - - xJAdRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /3/o9FDBd0AXEe579w54QLr6E7QFH3hAUlu/FgoveEARmJNDBEF4QOhEZ+kcSHhA - - - - - - g7N9R2UZwErrk85I1RchSJ3IB0hKzPpG - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAIPJHeEA= - - - - - - FFM1RQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NZgbiE/Bd0Cqq2qv9w54QPDEUFMFH3hAtFjL4wgveEDUdyWGAkF4QDLtkJ3yR3hA - - - - - - jg2ER4r7pEppJ6pI7dYQSB8230cJ1K1G - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAIA5IeEA= - - - - - - ThggRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Fg47yE/Bd0BwLH9b9w54QKTUScMFH3hAi9JorgoveEBkdfDABEF4QAydSGARSHhALvN0BkFIeEA= - - - - - - G4GjR2B4gEpk26hIV/O5R4OND0iP4fVGSXi+Rg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAwC5IeEA= - - - - - - uw1KRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CMut7U7Bd0CZTFZ39w54QIC/6HQGH3hAPKZwUAsveEDuyT1sA0F4QFTfSpAWSHhAVk1YuxFReEA= - - - - - - bzNSRzdkMko0gmZI/DPwRtL5EUhRFgNH30HbRg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAQAtIeEA= - - - - - - rrwWRg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAA4CtIeEA= - - - - - - 0ksYRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAYBRIeEA= - - - - - - RMopRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAoAJIeEA= - - - - - - IlQeRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 48Y7Pk7Bd0DjGdrL9w54QNZddRMFH3hATgNqPwsveECSm75rA0F4QCg4IAQUSHhA - - - - - - OlbcRyN9CkrCgytI7NnFRsRZKUjV5fNG - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAwBdIeEA= - - - - - - 30lARQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - aoiMLk7Bd0CMJuPm9w54QFpWZbIDH3hAIQjJrwwveEDZf2RpBEF4QObP6Mk8SHhAtdoZOw5ReEA= - - - - - - 3HmkR+mQ2Uke3LZHjdzaRhXaAkhqlj5HzMJ7Rg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FPDb4k/Bd0DWaNKe9w54QKulp9IFH3hA3vr9UwsveEBcWh95BEF4QCCXldclSHhA - - - - - - l06gR3jLr0nRj2hH047SRvf+SEhezVlH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ZpZ+6kzBd0A1YMmp9w54QIRZMl0GH3hA5PC+XAoveECkvgirA0F4QAT7P4hWSHhA/Jze+BBReEA= - - - - - - zRiaRsaek0kAyo1HIPD8RsmoZ0jgZlRHxr2/Rg== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAwG9IeEA= - - - - - - juAeRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UYZldFHBd0BHOSWt9w54QFhDQIUFH3hA3s7HCANBeEA= - - - - - - b1ZXR8ztaUndZGhHHPxESA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAIFxIeEA= - - - - - - C8RFRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /ks/e07Bd0BjU/079w54QLd6REAGH3hA7o3XcARBeEDMep2UUUh4QA== - - - - - - he1qR56nXUnm0JdHzD0mSCVRYkc= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAANdHeEAAAAAAlUh4QA== - - - - - - 6dgnRULmREU= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - iMspKE/Bd0AWEJeP9w54QP9f4BoFH3hA0oiogARBeEDq41WLRkh4QA== - - - - - - AzmURxrzK0neBfNGhTZsSDD530Y= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAoFVIeEA= - - - - - - PI+BRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - yBeFs1DBd0DToY3M9w54QOqmagsGH3hA0IkEoQRBeEAwP+mlC1F4QA== - - - - - - iOxjR+GXHknnz4hHJVxnSJym1UY= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAAQHNIeEA= - - - - - - bMMYRQ== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - VE/1m07Bd0Ajx7Lx9g54QBlDRIsFH3hApDyD9ANBeECGOcjQUEh4QECH+NR/SHhA - - - - - - wMKPR7UaDEm5OGFHwMJqSBAks0Y8e9JG - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cdKbdE7Bd0A+o8UB9w54QBBe3F8EQXhA87NUl2dIeEBoloOfEVF4QA== - - - - - - LP3xRppl8khULX9IOCdrR5pqekY= - - - - - - - - - - - - - - - - - - - - - - - 1SHX9w3zg0A= - - - - - - ymTTTQ== - - - - - - - - - 16464 - 21237 - 24446 - 27634 - 30823 - 35567 - 38753 - 41941 - 45166 - 48402 - 53142 - 57885 - 62630 - 65886 - 70635 - 73872 - 77111 - 81824 - 86572 - 89829 - 93068 - 97815 - 101054 - 105769 - 110513 - 113772 - 118513 - 123276 - 127991 - 131229 - 135974 - 140685 - 143944 - 148687 - 151925 - 156568 - 159825 - 164540 - 167767 - 172509 - 177220 - 180458 - 185172 - 188411 - 193155 - 197883 - 201122 - 204348 - 209108 - 212346 - 217089 - 221837 - 226586 - 229812 - 234539 - 239267 - 242506 - 245744 - 248983 - 253725 - 256964 - 260202 - 263439 - 268183 - 272928 - 277643 - 280881 - 285624 - 288862 - 293610 - 296866 - 301579 - 304838 - 309582 - 314326 - 319037 - 323779 - 327017 - 331764 - 335022 - 338260 - 341519 - 346258 - 349468 - 354216 - 357441 - 362206 - 365432 - 370181 - 373408 - 378121 - 381358 - - - 384667 - - -386094 -0 - \ No newline at end of file diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_6_output.ms b/src/tests/topp/THIRDPARTY/SiriusAdapter_6_output.ms deleted file mode 100644 index f57366d5476..00000000000 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_6_output.ms +++ /dev/null @@ -1,1118 +0,0 @@ ->compound _7231120865591443173-5228--58--UNKNOWN ->parentmass 398.092212485532 ->charge -1 ->rt 657.849900000000 -##fmz 398.092212485532002 -##fid 7231120865591443173 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -398.092212485532 196533184.351695001125 -399.095098696873 26599570.664368100464 -400.087176047083 12251713.203938400373 ->ms1peaks -380.081733660888 26579.617187500000 -384.935383874790 8103523.500000000000 -385.938819715812 505469.718750000000 -386.939846574304 196111.796875000000 -388.063505555716 121806.687500000000 -388.504413701488 34441.722656250000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5228 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5228_0 -##scan 58 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5228 -388.483886718750 6671.827148437500 ->ms1peaks -380.081769636993 53811.433593750000 -384.935416543108 2922765.750000000000 -385.939076337025 236040.812500000000 -386.940262260472 30745.992187500000 -388.063335648882 149479.281250000000 -388.505508701773 33558.316406250000 -389.066829056673 28064.935546875000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5270 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5270_0 -##scan 72 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5270 -388.502746582031 9647.169921875000 ->compound _0-5064--0--UNKNOWN ->parentmass 409.114078518168 ->charge -1 ->rt 635.158860000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -409.114078518168 657895.812500000000 - ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5064 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5064_0 -##scan 0 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5064 -388.512359619141 2733.562744140625 ->compound _0-5078--4--UNKNOWN ->parentmass 414.066417938389 ->charge -1 ->rt 636.770880000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -414.066417938389 892802.562500000000 - ->ms1peaks -382.119002039401 37246.738281250000 -386.147293441266 18509.181640625000 -388.517387861963 36523.714843750000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5078 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5078_0 -##scan 4 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5078 -388.529785156250 2096.352050781250 ->compound _0-5102--9--UNKNOWN ->parentmass 398.092218003740 ->charge -1 ->rt 639.851040000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -398.092218003740 5505568.500000000000 - ->ms1peaks -380.081823518604 91283.429687500000 -384.935319676894 318007.531250000000 -388.063430938992 286498.656250000000 -388.504827807275 23444.765625000000 -388.515599059635 33526.890625000000 -389.064365953773 20154.470703125000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5102 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5102_0 -##scan 9 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5102 -388.514862060547 5612.131347656250 ->compound _0-5104--10--UNKNOWN ->parentmass 466.079766775402 ->charge -1 ->rt 639.851040000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -466.079766775402 737734.500000000000 - ->ms1peaks -380.081823518604 91283.429687500000 -384.935319676894 318007.531250000000 -388.063430938992 286498.656250000000 -388.504827807275 23444.765625000000 -388.515599059635 33526.890625000000 -389.064365953773 20154.470703125000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5104 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5104_0 -##scan 10 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5104 -388.515228271484 2812.135742187500 ->compound _0-5106--11--UNKNOWN ->parentmass 420.074165192656 ->charge -1 ->rt 639.851040000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -420.074165192656 731321.062500000000 - ->ms1peaks -380.081823518604 91283.429687500000 -384.935319676894 318007.531250000000 -388.063430938992 286498.656250000000 -388.504827807275 23444.765625000000 -388.515599059635 33526.890625000000 -389.064365953773 20154.470703125000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5106 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5106_0 -##scan 11 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5106 -388.520111083984 3175.204345703125 ->compound _0-5112--13--UNKNOWN ->parentmass 408.082377334138 ->charge -1 ->rt 640.654800000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -408.082377334138 100355.289062500000 - ->ms1peaks -380.081602468778 57975.109375000000 -384.935313978025 873260.812500000000 -385.939066618345 54611.910156250000 -388.063438490807 249697.718750000000 -388.509338109065 22354.238281250000 -388.519247674394 17735.195312500000 -389.066049692285 57271.812500000000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5112 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5112_0 -##scan 13 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5112 -388.513275146484 2292.960449218750 ->compound _0-5120--16--UNKNOWN ->parentmass 452.922900000000 ->charge -1 ->rt 642.224160000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -452.922900000000 1431123.250000000000 - ->ms1peaks -380.081995791900 74465.695312500000 -384.935472025830 2266038.000000000000 -385.938279666454 168566.125000000000 -387.156570659550 17785.691406250000 -388.063844563954 135795.734375000000 -388.507729504849 40560.300781250000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5120 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5120_0 -##scan 16 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5120 -388.523376464844 2778.042236328125 ->compound _0-5123--17--UNKNOWN ->parentmass 482.054139526986 ->charge -1 ->rt 642.224160000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -482.054139526986 130792.101562500000 - ->ms1peaks -380.081995791900 74465.695312500000 -384.935472025830 2266038.000000000000 -385.938279666454 168566.125000000000 -387.156570659550 17785.691406250000 -388.063844563954 135795.734375000000 -388.507729504849 40560.300781250000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5123 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5123_0 -##scan 17 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5123 -388.518035888672 3210.635986328125 ->compound _0-5134--20--UNKNOWN ->parentmass 602.055005965531 ->charge -1 ->rt 643.816680000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -602.055005965531 192931.609375000000 - ->ms1peaks -380.081621991896 84726.132812500000 -384.935378961489 4028489.750000000000 -385.938680398322 273650.625000000000 -386.939684052896 63025.195312500000 -388.063548908155 139952.171875000000 -388.498647800657 37526.675781250000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5134 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5134_0 -##scan 20 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5134 -388.504425048828 4407.778320312500 ->compound _0-5140--22--UNKNOWN ->parentmass 588.897900000000 ->charge -1 ->rt 644.614260000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -588.897900000000 1233694.375000000000 - ->ms1peaks -380.081773282956 28518.910156250000 -384.935386363584 4419074.500000000000 -385.938814563743 294829.406250000000 -386.939974253813 85874.859375000000 -388.063354244324 107467.179687500000 -388.518866636505 32125.845703125000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5140 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5140_0 -##scan 22 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5140 -388.515411376953 3203.265136718750 ->compound _0-5142--23--UNKNOWN ->parentmass 400.909359872837 ->charge -1 ->rt 644.614260000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -400.909359872837 569672.750000000000 - ->ms1peaks -380.081773282956 28518.910156250000 -384.935386363584 4419074.500000000000 -385.938814563743 294829.406250000000 -386.939974253813 85874.859375000000 -388.063354244324 107467.179687500000 -388.518866636505 32125.845703125000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5142 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5142_0 -##scan 23 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5142 -388.512573242188 2397.379638671875 ->compound _0-5144--25--UNKNOWN ->parentmass 398.092177220084 ->charge -1 ->rt 645.366780000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -398.092177220084 4337261.000000000000 - ->ms1peaks -380.080578090021 40573.687500000000 -384.935487739654 5135453.500000000000 -385.938826150846 326667.625000000000 -386.939455538087 133943.968750000000 -388.062970228909 118346.820312500000 -388.514785087222 21371.449218750000 -388.525476948355 26159.498046875000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5144 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5144_0 -##scan 25 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5144 -388.506378173828 5946.649902343750 ->compound _0-5146--26--UNKNOWN ->parentmass 670.042786026349 ->charge -1 ->rt 645.366780000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -670.042786026349 109127.148437500000 - ->ms1peaks -380.080578090021 40573.687500000000 -384.935487739654 5135453.500000000000 -385.938826150846 326667.625000000000 -386.939455538087 133943.968750000000 -388.062970228909 118346.820312500000 -388.514785087222 21371.449218750000 -388.525476948355 26159.498046875000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5146 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5146_0 -##scan 26 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5146 -380.871215820312 2421.481445312500 -388.522064208984 4752.849609375000 ->compound _0-5147--27--UNKNOWN ->parentmass 656.885600000000 ->charge -1 ->rt 645.366780000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -656.885600000000 627614.187500000000 - ->ms1peaks -380.080578090021 40573.687500000000 -384.935487739654 5135453.500000000000 -385.938826150846 326667.625000000000 -386.939455538087 133943.968750000000 -388.062970228909 118346.820312500000 -388.514785087222 21371.449218750000 -388.525476948355 26159.498046875000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5147 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5147_0 -##scan 27 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5147 -388.516876220703 3832.713867187500 ->compound _0-5152--29--UNKNOWN ->parentmass 420.074362248786 ->charge -1 ->rt 646.171020000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -420.074362248786 1106828.250000000000 - ->ms1peaks -380.082211971088 32422.201171875000 -384.935474717265 5740110.000000000000 -385.938739085557 369197.312500000000 -386.940025918910 149768.578125000000 -388.063672941713 72842.812500000000 -388.517027978613 46458.316406250000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5152 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5152_0 -##scan 29 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5152 -388.510528564453 2463.083740234375 ->compound _0-5154--30--UNKNOWN ->parentmass 468.896600000000 ->charge -1 ->rt 646.171020000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -468.896600000000 649306.625000000000 - ->ms1peaks -380.082211971088 32422.201171875000 -384.935474717265 5740110.000000000000 -385.938739085557 369197.312500000000 -386.940025918910 149768.578125000000 -388.063672941713 72842.812500000000 -388.517027978613 46458.316406250000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5154 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5154_0 -##scan 30 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5154 -388.521301269531 2193.841552734375 ->compound _0-5156--32--UNKNOWN ->parentmass 384.935449775622 ->charge -1 ->rt 646.970280000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -384.935449775622 6614561.500000000000 -385.938836772050 547023.250000000000 ->ms1peaks -380.081579270799 23205.035156250000 -384.935449775622 6614561.500000000000 -385.938836772050 547023.250000000000 -386.939485605783 149291.156250000000 -388.021195613044 21778.634765625000 -388.063365525736 74416.875000000000 -388.522683096290 38953.957031250000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5156 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5156_0 -##scan 32 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5156 -388.532897949219 9376.273437500000 ->compound _0-5166--34--UNKNOWN ->parentmass 724.873200000000 ->charge -1 ->rt 647.725560000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -724.873200000000 574929.437500000000 - ->ms1peaks -380.082063804582 63804.644531250000 -384.935436395481 7262220.500000000000 -385.938957464450 573151.375000000000 -386.939668426663 145156.281250000000 -388.063500180052 111453.968750000000 -388.516003260310 35410.140625000000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5166 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5166_0 -##scan 34 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5166 -388.504455566406 3209.396240234375 ->compound _0-5170--36--UNKNOWN ->parentmass 536.884400000000 ->charge -1 ->rt 648.491760000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -536.884400000000 483935.093750000000 - ->ms1peaks -380.081846539413 24682.984375000000 -384.935229573509 8209841.500000000000 -385.938764864611 526663.562500000000 -386.939796885772 219171.234375000000 -387.943963426520 26032.757812500000 -388.063893490379 83604.867187500000 -388.511700055532 31325.679687500000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5170 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5170_0 -##scan 36 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5170 -388.497467041016 2736.907470703125 ->compound _0-5175--38--UNKNOWN ->parentmass 624.036046217308 ->charge -1 ->rt 649.284420000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -624.036046217308 266142.500000000000 - ->ms1peaks -384.935372287189 8296380.000000000000 -385.938954872886 499825.218750000000 -386.940014503442 217479.078125000000 -388.063584717587 83994.953125000000 -388.522672114824 65379.640625000000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5175 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5175_0 -##scan 38 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5175 -388.516937255859 3782.554199218750 ->compound _0-5176--39--UNKNOWN ->parentmass 520.910100000000 ->charge -1 ->rt 649.284420000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -520.910100000000 3411542.000000000000 - ->ms1peaks -384.935372287189 8296380.000000000000 -385.938954872886 499825.218750000000 -386.940014503442 217479.078125000000 -388.063584717587 83994.953125000000 -388.522672114824 65379.640625000000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5176 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5176_0 -##scan 39 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5176 -388.515869140625 5777.634765625000 ->compound _0-5182--41--UNKNOWN ->parentmass 792.860800000000 ->charge -1 ->rt 650.057160000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -792.860800000000 523014.406250000000 - ->ms1peaks -380.081741974865 25490.753906250000 -384.935397006276 8330614.000000000000 -385.938896278575 579906.437500000000 -386.939759004474 260978.843750000000 -388.063390831970 36762.527343750000 -388.521522912627 35428.902343750000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5182 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5182_0 -##scan 41 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5182 -388.512176513672 3941.473388671875 ->compound _0-5186--43--UNKNOWN ->parentmass 398.092122358423 ->charge -1 ->rt 650.857020000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -398.092122358423 4008986.500000000000 - ->ms1peaks -380.082390168587 27623.234375000000 -384.935435801622 8371846.500000000000 -385.938888628365 595536.625000000000 -386.939678242493 252199.828125000000 -388.063030738167 36347.273437500000 -388.522686419830 50129.687500000000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5186 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5186_0 -##scan 43 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5186 -388.530395507812 5454.081054687500 ->compound _0-5190--44--UNKNOWN ->parentmass 588.897900000000 ->charge -1 ->rt 650.857020000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -588.897900000000 2328566.500000000000 - ->ms1peaks -380.082390168587 27623.234375000000 -384.935435801622 8371846.500000000000 -385.938888628365 595536.625000000000 -386.939678242493 252199.828125000000 -388.063030738167 36347.273437500000 -388.522686419830 50129.687500000000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5190 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5190_0 -##scan 44 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5190 -383.351745605469 2312.426513671875 -388.500946044922 2440.915527343750 ->compound _0-5200--47--UNKNOWN ->parentmass 420.074449702016 ->charge -1 ->rt 652.412040000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -420.074449702016 1177527.750000000000 - ->ms1peaks -384.935361802230 8682373.000000000000 -385.938820473553 675729.000000000000 -386.940079049043 230971.171875000000 -388.063191681448 64828.562500000000 -388.520106837891 43687.179687500000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5200 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5200_0 -##scan 47 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5200 -388.521636962891 2728.623535156250 -389.533813476562 2144.039550781250 ->compound _0-5204--49--UNKNOWN ->parentmass 488.061833722764 ->charge -1 ->rt 653.212800000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -488.061833722764 944744.250000000000 - ->ms1peaks -380.081494209350 30707.826171875000 -384.935422532715 9003855.000000000000 -385.938766499450 606820.125000000000 -386.939927032393 237495.343750000000 -388.063364296599 37342.792968750000 -388.518509908271 70472.875000000000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5204 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5204_0 -##scan 49 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5204 -388.500518798828 2143.193603515625 ->compound _0-5205--50--UNKNOWN ->parentmass 602.055113103032 ->charge -1 ->rt 653.212800000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -602.055113103032 226390.109375000000 - ->ms1peaks -380.081494209350 30707.826171875000 -384.935422532715 9003855.000000000000 -385.938766499450 606820.125000000000 -386.939927032393 237495.343750000000 -388.063364296599 37342.792968750000 -388.518509908271 70472.875000000000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5205 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5205_0 -##scan 50 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5205 -388.505645751953 3585.830322265625 ->compound _0-5208--51--UNKNOWN ->parentmass 414.066411324583 ->charge -1 ->rt 653.212800000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -414.066411324583 130545.601562500000 - ->ms1peaks -380.081494209350 30707.826171875000 -384.935422532715 9003855.000000000000 -385.938766499450 606820.125000000000 -386.939927032393 237495.343750000000 -388.063364296599 37342.792968750000 -388.518509908271 70472.875000000000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5208 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5208_0 -##scan 51 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5208 -388.531311035156 2233.527832031250 ->compound _0-5211--53--UNKNOWN ->parentmass 452.922900000000 ->charge -1 ->rt 654.015540000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -452.922900000000 5641118.000000000000 - ->ms1peaks -384.935486391002 8752241.000000000000 -385.939089203615 606087.937500000000 -386.939820115878 214897.562500000000 -388.063629384408 29211.501953125000 -388.521644834028 63814.535156250000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5211 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5211_0 -##scan 53 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5211 -388.489410400391 6644.488769531250 -388.536102294922 5805.115234375000 ->compound _0-5213--54--UNKNOWN ->parentmass 656.885500000000 ->charge -1 ->rt 654.015540000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -656.885500000000 1206969.000000000000 - ->ms1peaks -384.935486391002 8752241.000000000000 -385.939089203615 606087.937500000000 -386.939820115878 214897.562500000000 -388.063629384408 29211.501953125000 -388.521644834028 63814.535156250000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5213 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5213_0 -##scan 54 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5213 -384.934570312500 3770.946289062500 -388.494903564453 4172.937500000000 ->compound _0-5246--62--UNKNOWN ->parentmass 420.074370494077 ->charge -1 ->rt 658.645140000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -420.074370494077 1717486.875000000000 - ->ms1peaks -380.082561459436 67357.804687500000 -384.935468650229 7057660.000000000000 -385.939028700188 516776.281250000000 -386.939997866299 162207.890625000000 -388.063893586267 99059.007812500000 -388.511692163829 24463.740234375000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5246 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5246_0 -##scan 62 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5246 -388.524780273438 2684.740966796875 ->compound _0-5247--63--UNKNOWN ->parentmass 488.061780273438 ->charge -1 ->rt 658.645140000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -488.061780273438 1188660.750000000000 - ->ms1peaks -380.082561459436 67357.804687500000 -384.935468650229 7057660.000000000000 -385.939028700188 516776.281250000000 -386.939997866299 162207.890625000000 -388.063893586267 99059.007812500000 -388.511692163829 24463.740234375000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5247 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5247_0 -##scan 63 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5247 -388.519042968750 3144.522216796875 ->compound _0-5249--64--UNKNOWN ->parentmass 468.896800000000 ->charge -1 ->rt 658.645140000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -468.896800000000 1005724.875000000000 - ->ms1peaks -380.082561459436 67357.804687500000 -384.935468650229 7057660.000000000000 -385.939028700188 516776.281250000000 -386.939997866299 162207.890625000000 -388.063893586267 99059.007812500000 -388.511692163829 24463.740234375000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5249 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5249_0 -##scan 64 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5249 -388.518890380859 2521.047851562500 ->compound _0-5256--66--UNKNOWN ->parentmass 414.066073286381 ->charge -1 ->rt 659.445660000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -414.066073286381 235501.500000000000 - ->ms1peaks -380.082264812663 64947.511718750000 -384.935420923184 6294706.500000000000 -385.938892438931 423071.343750000000 -386.939963099944 164959.328125000000 -388.063541008510 139042.453125000000 -388.507058528323 32102.144531250000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5256 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5256_0 -##scan 66 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5256 -388.496612548828 2901.192382812500 ->compound _0-5262--68--UNKNOWN ->parentmass 482.053282362254 ->charge -1 ->rt 660.248400000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -482.053282362254 160178.765625000000 - ->ms1peaks -380.081916911880 67611.109375000000 -384.935470024759 5406149.000000000000 -385.938800158982 348475.281250000000 -386.939670366595 148315.703125000000 -388.063116213188 114284.242187500000 -388.496732298011 22250.017578125000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5262 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5262_0 -##scan 68 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5262 -388.503448486328 2561.519042968750 ->compound _0-5266--70--UNKNOWN ->parentmass 452.922900000000 ->charge -1 ->rt 661.045800000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -452.922900000000 2462594.500000000000 - ->ms1peaks -380.081978064235 83714.210937500000 -384.935389992496 4209712.000000000000 -385.938906944657 345819.125000000000 -386.940107736075 95206.679687500000 -388.063660563747 146998.046875000000 -388.504242213866 31472.779296875000 -388.515875298343 24380.142578125000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5266 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5266_0 -##scan 70 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5266 -388.511413574219 3232.858154296875 ->compound _0-5271--73--UNKNOWN ->parentmass 534.067167545687 ->charge -1 ->rt 661.787040000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -534.067167545687 423175.687500000000 - ->ms1peaks -380.081769636993 53811.433593750000 -384.935416543108 2922765.750000000000 -385.939076337025 236040.812500000000 -386.940262260472 30745.992187500000 -388.063335648882 149479.281250000000 -388.505508701773 33558.316406250000 -389.066829056673 28064.935546875000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5271 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5271_0 -##scan 73 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5271 -388.510711669922 2436.738769531250 ->compound _0-5272--74--UNKNOWN ->parentmass 520.910300000000 ->charge -1 ->rt 661.787040000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -520.910300000000 1065204.250000000000 - ->ms1peaks -380.081769636993 53811.433593750000 -384.935416543108 2922765.750000000000 -385.939076337025 236040.812500000000 -386.940262260472 30745.992187500000 -388.063335648882 149479.281250000000 -388.505508701773 33558.316406250000 -389.066829056673 28064.935546875000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5272 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5272_0 -##scan 74 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5272 -388.504974365234 2716.641601562500 ->compound _0-5274--75--UNKNOWN ->parentmass 504.036135944250 ->charge -1 ->rt 661.787040000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -504.036135944250 118912.375000000000 - ->ms1peaks -380.081769636993 53811.433593750000 -384.935416543108 2922765.750000000000 -385.939076337025 236040.812500000000 -386.940262260472 30745.992187500000 -388.063335648882 149479.281250000000 -388.505508701773 33558.316406250000 -389.066829056673 28064.935546875000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5274 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5274_0 -##scan 75 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5274 -388.500640869141 2533.258300781250 ->compound _0-5277--77--UNKNOWN ->parentmass 615.212274781312 ->charge -1 ->rt 662.593440000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -615.212274781312 84719.304687500000 - ->ms1peaks -380.081602319244 112812.453125000000 -384.935497142751 2269000.750000000000 -385.938739260161 175631.031250000000 -386.940246023286 25324.960937500000 -388.063335175096 173415.062500000000 -388.504886747224 31218.916015625000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5277 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5277_0 -##scan 77 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5277 -388.505798339844 3076.616943359375 ->compound _0-5295--81--UNKNOWN ->parentmass 466.079703118647 ->charge -1 ->rt 664.918140000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -466.079703118647 1140998.625000000000 - ->ms1peaks -380.081278318865 19724.400390625000 -384.935464655518 1209304.750000000000 -385.939053723029 72596.000000000000 -386.940029855598 32376.062500000000 -388.063395532760 237219.140625000000 -388.521126031803 54374.875000000000 -389.066643590529 24542.886718750000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5295 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5295_0 -##scan 81 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5295 -388.527282714844 2542.034667968750 ->compound _0-5303--83--UNKNOWN ->parentmass 602.054595799514 ->charge -1 ->rt 665.714280000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -602.054595799514 122526.851562500000 - ->ms1peaks -380.082386395055 55126.433593750000 -384.935467858701 958172.750000000000 -385.938847781208 59492.863281250000 -388.063240795613 201712.437500000000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5303 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5303_0 -##scan 83 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5303 -388.522491455078 3164.252685546875 ->compound _0-5309--85--UNKNOWN ->parentmass 556.049835868136 ->charge -1 ->rt 666.487020000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -556.049835868136 145157.984375000000 - ->ms1peaks -380.081660506490 60141.519531250000 -384.935359944872 907897.875000000000 -385.939026134012 77729.796875000000 -388.063584177026 170231.187500000000 -388.519917121081 57937.144531250000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5309 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5309_0 -##scan 85 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5309 -388.489990234375 2685.556884765625 -388.536376953125 3150.391113281250 ->compound _0-5316--87--UNKNOWN ->parentmass 550.041153388311 ->charge -1 ->rt 667.285020000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -550.041153388311 102207.851562500000 - ->ms1peaks -380.081825412046 75890.023437500000 -384.935439672555 704305.625000000000 -385.938746334519 31106.933593750000 -388.063599260652 241882.078125000000 -388.517222724446 28668.593750000000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5316 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5316_0 -##scan 87 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5316 -388.520904541016 4145.904296875000 ->compound _0-5320--89--UNKNOWN ->parentmass 452.923000000000 ->charge -1 ->rt 668.053260000000 -##des UNKNOWN -##specref_format [MS, MS:1000768, Thermo nativeID format] -##source file file:///Y:\AG backups\licha\20160714 Ketone bodies Barbara Kofler\Neuroblastom Sepideh Aminzadeh\Plasmaproben\201801 2nd study C vs MCT Realproben\HILIC\neg016_DaLi_H9M9_Pool_05_neg_20.raw -##source format [MS, MS:1000563, Thermo RAW format,] ->ms1merged -452.923000000000 391322.406250000000 - ->ms1peaks -380.082202453512 58348.531250000000 -384.935497811556 649598.062500000000 -385.938975731477 70047.804687500000 -388.063630120972 236912.578125000000 -389.065343772049 27347.304687500000 ->ms2peaks -##n_id controllerType=0 controllerNumber=1 scan=5320 -##m_id UNKNOWN_016_DaLi_H9M9_Pool_05_neg_20.raw_controllerType=0 controllerNumber=1 scan=5320_0 -##scan 89 -##specref ms_run[1]:controllerType=0 controllerNumber=1 scan=5320 -388.528137207031 2444.213867187500 diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_7_output.mzTab b/src/tests/topp/THIRDPARTY/SiriusAdapter_7_output.mzTab deleted file mode 100644 index 75e967c3ca0..00000000000 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_7_output.mzTab +++ /dev/null @@ -1,15 +0,0 @@ -MTD mzTab-version 1.0.0 -MTD mzTab-mode null -MTD mzTab-type null -MTD description Sirius-4.9.0 -MTD smallmolecule_search_engine_score[1] [, , SiriusScore, ] -MTD smallmolecule_search_engine_score[2] [, , TreeScore, ] -MTD smallmolecule_search_engine_score[3] [, , IsotopeScore, ] -MTD ms_run[1]-location /home/axel/dev/OpenMS/src/tests/topp/THIRDPARTY/SiriusAdapter_4_input.mzML - -SMH identifier chemical_formula smiles inchi_key description exp_mass_to_charge calc_mass_to_charge charge retention_time taxid species database database_version spectra_ref search_engine best_search_engine_score[1] best_search_engine_score[2] best_search_engine_score[3] modifications opt_global_adduct opt_gobal_precursorFormula opt_global_rank opt_global_explainedPeaks opt_global_explainedIntensity opt_global_median_mass_error_fragment_peaks_ppm opt_global_median_absolute_mass_error_fragment_peaks_ppm opt_global_mass_error_precursor_ppm opt_global_compoundId opt_global_compoundScanNumber opt_global_featureId opt_global_native_id -SML null C13H21NO13 null null null 398.092212485532002 null null 657.849900000000048 null null null null null null 3.586267852501222 1.0 2.586267852501222 null [M - H]- C13H21NO13 1 1 0.0 nan nan -4.523560926145404 58 5228 id_7231120865591443173 controllerType=0 controllerNumber=1 scan=5228|controllerType=0 controllerNumber=1 scan=5270 -SML null C14H17N5O9 null null null 398.092212485532002 null null 657.849900000000048 null null null null null null 1.822034569006425 1.0 0.822034569006425 null [M - H]- C14H17N5O9 2 1 0.0 nan nan -7.883063971153154 58 5228 id_7231120865591443173 controllerType=0 controllerNumber=1 scan=5228|controllerType=0 controllerNumber=1 scan=5270 -SML null C12H23N3O8P2 null null null 398.092212485532002 null null 657.849900000000048 null null null null null null 1.475756600181588 -0.6094379124341 2.085194512615688 null [M - H]- C12H23N3O8P2 3 1 0.0 nan nan 8.668799625494327 58 5228 id_7231120865591443173 controllerType=0 controllerNumber=1 scan=5228|controllerType=0 controllerNumber=1 scan=5270 -SML null C13H17N7O6S null null null 398.092212485532002 null null 657.849900000000048 null null null null null null 1.395181537711145 -0.6094379124341 2.004619450145245 null [M - H]- C13H17N7O6S 4 1 0.0 nan nan 8.507259163322804 58 5228 id_7231120865591443173 controllerType=0 controllerNumber=1 scan=5228|controllerType=0 controllerNumber=1 scan=5270 -SML null C21H13N5O4 null null null 398.092212485532002 null null 657.849900000000048 null null null null null null 1.0 1.0 0.0 null [M - H]- C21H13N5O4 5 1 0.0 nan nan 6.870372081407342 58 5228 id_7231120865591443173 controllerType=0 controllerNumber=1 scan=5228|controllerType=0 controllerNumber=1 scan=5270 diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_8_output.mzTab b/src/tests/topp/THIRDPARTY/SiriusAdapter_8_output.mzTab deleted file mode 100644 index 27e0c58e6cf..00000000000 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_8_output.mzTab +++ /dev/null @@ -1,32 +0,0 @@ -MTD mzTab-version 1.0.0 -MTD mzTab-mode null -MTD mzTab-type null -MTD description Sirius-5.6.3 -MTD smallmolecule_search_engine_score[1] [, , SiriusScore, ] -MTD smallmolecule_search_engine_score[2] [, , TreeScore, ] -MTD smallmolecule_search_engine_score[3] [, , IsotopeScore, ] -MTD ms_run[1]-location /Users/builder/jenkins/ws/openms/PR/bldtst/87227eb0/source/src/tests/topp/AssayGeneratorMetabo_decoy_generation_input.mzML - -SMH identifier chemical_formula smiles inchi_key description exp_mass_to_charge calc_mass_to_charge charge retention_time taxid species database database_version spectra_ref search_engine best_search_engine_score[1] best_search_engine_score[2] best_search_engine_score[3] modifications opt_global_adduct opt_gobal_precursorFormula opt_global_rank opt_global_explainedPeaks opt_global_explainedIntensity opt_global_median_mass_error_fragment_peaks_ppm opt_global_median_absolute_mass_error_fragment_peaks_ppm opt_global_mass_error_precursor_ppm opt_global_compoundId opt_global_compoundScanNumber opt_global_featureId opt_global_native_id -SML null C14H17IN2O2 null null null 373.041532365868022 null null 608.394000000000005 null null null null null null 23.200648370640732 23.200648370640732 0.0 null [M + H]+ C14H17IN2O2 1 10 1.0 2.918635803820394 2.918635803820394 2.091267887993178 1 847004 id_13564286333504458830 sample=1 period=1 cycle=847 experiment=4 -SML null C10H7N2O9P null null null 330.995669248795025 null null 606.481000000020003 null null null null null null 1.526870259864886 -0.74377112047702 2.270641380341906 null [M + H]+ C10H7N2O9P 1 1 0.0 -1.582006485689947 1.582006485689947 -1.582006485689947 5 848006 id_10363315384511872265 sample=1 period=1 cycle=848 experiment=6|sample=1 period=1 cycle=849 experiment=4 -SML null C12H8N2O7 null null null 330.995669248795025 null null 606.481000000020003 null null null null null null 0.833722174873901 0.833722174873901 0.0 null [M + K]+ C12H8N2O7 2 1 0.0 -1.93189021762513 1.93189021762513 -1.93189021762513 5 848006 id_10363315384511872265 sample=1 period=1 cycle=848 experiment=6|sample=1 period=1 cycle=849 experiment=4 -SML null C8H4N8O5 null null null 330.995669248795025 null null 606.481000000020003 null null null null null null 0.377315307572828 0.377315307572828 0.0 null [M + K]+ C8H4N8O5 3 1 0.0 6.181110191444778 6.181110191444778 6.181110191444778 5 848006 id_10363315384511872265 sample=1 period=1 cycle=848 experiment=6|sample=1 period=1 cycle=849 experiment=4 -SML null C7H10N4O6P2 null null null 330.995669248795025 null null 606.481000000020003 null null null null null null 0.049395480163874 -0.913731495401201 0.963126975565074 null [M + Na]+ C7H10N4O6P2 4 1 0.0 -3.349745626558456 3.349745626558456 -3.349745626558456 5 848006 id_10363315384511872265 sample=1 period=1 cycle=848 experiment=6|sample=1 period=1 cycle=849 experiment=4 -SML null C13H9O7P null null null 330.995669248795025 null null 606.481000000020003 null null null null null null -0.025829015163908 -1.267614218323655 1.241785203159747 null [M + Na]+ C13H9O7P 5 1 0.0 -6.467484303918107 6.467484303918107 -6.467484303918107 5 848006 id_10363315384511872265 sample=1 period=1 cycle=848 experiment=6|sample=1 period=1 cycle=849 experiment=4 -SML null C11H19N4O4PS null null null 373.050229958369982 null null 606.481000000020003 null null null null null null 25.784045137235857 25.784045137235857 0.0 null [M + K]+ C11H19N4O4PS 1 8 0.83071499653889 0.98606604349625 1.834824189436524 1.632863969832672 6 848007 id_10810367786410780691 sample=1 period=1 cycle=848 experiment=7 -SML null C12H18N2O6S2 null null null 373.050229958369982 null null 606.481000000020003 null null null null null null 21.440048232932529 21.440048232932529 0.0 null [M + Na]+ C12H18N2O6S2 2 6 0.792872349311512 0.995083324692341 0.995083324692341 1.02120907297114 6 848007 id_10810367786410780691 sample=1 period=1 cycle=848 experiment=7 -SML null C10H17F3N2O4S2 null null null 373.050229958369982 null null 606.481000000020003 null null null null null null 20.212827607281849 20.212827607281849 0.0 null [M + Na]+ C10H17F3N2O4S2 3 9 0.836119938167308 2.970866954492015 2.970866954492015 7.574246180733786 6 848007 id_10810367786410780691 sample=1 period=1 cycle=848 experiment=7 -SML null C10H18N6O3S2 null null null 373.050229958369982 null null 606.481000000020003 null null null null null null 19.933295178332092 19.933295178332092 0.0 null [M + K]+ C10H18N6O3S2 4 7 0.794693058831233 -2.512428411238932 2.512428411238932 -2.971658054302831 6 848007 id_10810367786410780691 sample=1 period=1 cycle=848 experiment=7 -SML null C8H20N2O9P2 null null null 373.050229958369982 null null 606.481000000020003 null null null null null null 18.952903131552411 18.952903131552411 0.0 null [M + Na]+ C8H20N2O9P2 5 10 1.0 2.32835220153535 2.674064949522841 -9.098564879409665 6 848007 id_10810367786410780691 sample=1 period=1 cycle=848 experiment=7 -SML null C22H46O6 null null null 407.336909566928 null null 610.321000000020035 null null null null null null 3.5 3.5 0.0 null [M + H]+ C22H46O6 1 1 0.0 nan nan 0.476074799296441 15 853003 id_11314361845815354347 sample=1 period=1 cycle=853 experiment=3 -SML null C23H42N4O2 null null null 407.336909566928 null null 610.321000000020035 null null null null null null 1.0 1.0 0.0 null [M + H]+ C23H42N4O2 2 1 0.0 nan nan -2.807182790603921 15 853003 id_11314361845815354347 sample=1 period=1 cycle=853 experiment=3 -SML null C19H38N10 null null null 407.336909566928 null null 610.321000000020035 null null null null null null 0.636657639383096 0.636657639383096 0.0 null [M + H]+ C19H38N10 3 1 0.0 nan nan 3.785315794586575 15 853003 id_11314361845815354347 sample=1 period=1 cycle=853 experiment=3 -SML null C18H42N6O4 null null null 407.336909566928 null null 610.321000000020035 null null null null null null 0.602603903755284 0.602603903755284 0.0 null [M + H]+ C18H42N6O4 4 1 0.0 nan nan 7.068573384486937 15 853003 id_11314361845815354347 sample=1 period=1 cycle=853 experiment=3 -SML null C21H47N2O3P null null null 407.336909566928 null null 610.321000000020035 null null null null null null -0.6094379124341 -0.6094379124341 0.0 null [M + H]+ C21H47N2O3P 5 1 0.0 nan nan -6.866255173155861 15 853003 id_11314361845815354347 sample=1 period=1 cycle=853 experiment=3 -SML null C9H12O12 null null null 313.039838679245008 null null 617.057999999999993 null null null null null null 3.416839087745155 3.416839087745155 0.0 null [M + H]+ C9H12O12 1 1 0.0 -1.001779348035562 1.001779348035562 -1.001779348035562 39 860003 id_13016335405471045766 sample=1 period=1 cycle=860 experiment=3|sample=1 period=1 cycle=861 experiment=2 -SML null C10H8N4O8 null null null 313.039838679245008 null null 617.057999999999993 null null null null null null 0.485688527015936 0.485688527015936 0.0 null [M + H]+ C10H8N4O8 2 1 0.0 -5.274053463948874 5.274053463948874 -5.274053463948874 39 860003 id_13016335405471045766 sample=1 period=1 cycle=860 experiment=3|sample=1 period=1 cycle=861 experiment=2 -SML null C6H4N10O6 null null null 313.039838679245008 null null 617.057999999999993 null null null null null null -0.550207731913414 -0.550207731913414 0.0 null [M + H]+ C6H4N10O6 3 1 0.0 3.304305160773628 3.304305160773628 3.304305160773628 39 860003 id_13016335405471045766 sample=1 period=1 cycle=860 experiment=3|sample=1 period=1 cycle=861 experiment=2 -SML null C14H5F5N2O null null null 313.039838679245008 null null 617.057999999999993 null null null null null null -0.704999285604162 -0.704999285604162 0.0 null [M + H]+ C14H5F5N2O 4 1 0.0 1.144733385968608 1.144733385968608 1.144733385968608 39 860003 id_13016335405471045766 sample=1 period=1 cycle=860 experiment=3|sample=1 period=1 cycle=861 experiment=2 -SML null C9H17BrN2O5 null null null 313.039838679245008 null null 617.057999999999993 null null null null null null -0.738958931047442 -0.738958931047442 0.0 null [M + H]+ C9H17BrN2O5 5 1 0.0 1.528505625537048 1.528505625537048 1.528505625537048 39 860003 id_13016335405471045766 sample=1 period=1 cycle=860 experiment=3|sample=1 period=1 cycle=861 experiment=2 -SML null C21H24Cl2O4 null null null 411.113111072311028 null null 618.022000000019943 null null null null null null 7.356107435210711 7.356107435210711 0.0 null [M + H]+ C21H24Cl2O4 1 2 1.0 1.228960718579289 1.228960718579289 1.629751526893702 40 860005 id_2653120127184275567 sample=1 period=1 cycle=860 experiment=5 diff --git a/src/tests/topp/THIRDPARTY/SiriusAdapter_9_output.mzTab b/src/tests/topp/THIRDPARTY/SiriusAdapter_9_output.mzTab deleted file mode 100644 index e6f0e3e88ca..00000000000 --- a/src/tests/topp/THIRDPARTY/SiriusAdapter_9_output.mzTab +++ /dev/null @@ -1,157 +0,0 @@ -MTD mzTab-version 1.0.0 -MTD mzTab-mode null -MTD mzTab-type null -MTD description Sirius-5.6.3 -MTD smallmolecule_search_engine_score[1] [, , SiriusScore, ] -MTD smallmolecule_search_engine_score[2] [, , TreeScore, ] -MTD smallmolecule_search_engine_score[3] [, , IsotopeScore, ] -MTD ms_run[1]-location /Users/builder/jenkins/ws/openms/PR/bldtst/87227eb0/source/src/tests/topp/AssayGeneratorMetabo_decoy_generation_input.mzML - -SMH identifier chemical_formula smiles inchi_key description exp_mass_to_charge calc_mass_to_charge charge retention_time taxid species database database_version spectra_ref search_engine best_search_engine_score[1] best_search_engine_score[2] best_search_engine_score[3] modifications opt_global_adduct opt_gobal_precursorFormula opt_global_rank opt_global_explainedPeaks opt_global_explainedIntensity opt_global_median_mass_error_fragment_peaks_ppm opt_global_median_absolute_mass_error_fragment_peaks_ppm opt_global_mass_error_precursor_ppm opt_global_compoundId opt_global_compoundScanNumber opt_global_featureId opt_global_native_id -SML null C14H17IN2O2 null null null 373.041532365868022 null null 608.394000000000005 null null null null null null 23.200648370640732 23.200648370640732 0.0 null [M + H]+ C14H17IN2O2 1 10 1.0 2.918635803820394 2.918635803820394 2.091267887993178 1 847004 id_13564286333504458830 sample=1 period=1 cycle=847 experiment=4 -SML null C25H49N5O3 null null null 468.391411753410011 null null 604.553999999999974 null null null null null null 9.6770601169857 9.6770601169857 0.0 null [M + H]+ C25H49N5O3 1 2 1.0 -1.445023221639928 1.445023221639928 1.27003464312998 2 847006 null sample=1 period=1 cycle=847 experiment=6 -SML null C28H51N3O null null null 468.391411753410011 null null 604.553999999999974 null null null null null null 9.445562595590651 9.445562595590651 0.0 null [M + Na]+ C28H51N3O 2 2 1.0 -5.871833302980732 5.871833302980732 -2.182359998211256 2 847006 null sample=1 period=1 cycle=847 experiment=6 -SML null C25H55N3O2 null null null 468.391411753410011 null null 604.553999999999974 null null null null null null 9.420133971376501 9.420133971376501 0.0 null [M + K]+ C25H55N3O2 3 2 1.0 -6.288345554871206 6.288345554871206 -2.507190890116459 2 847006 null sample=1 period=1 cycle=847 experiment=6 -SML null C21H45N11O null null null 468.391411753410011 null null 604.553999999999974 null null null null null null 8.957024585301269 8.957024585301269 0.0 null [M + H]+ C21H45N11O 4 2 1.0 5.906297025336516 5.906297025336516 7.003205518238989 2 847006 null sample=1 period=1 cycle=847 experiment=6 -SML null C28H53NO2S null null null 468.391411753410011 null null 604.553999999999974 null null null null null null 7.21874715384708 7.21874715384708 0.0 null [M + H]+ C28H53NO2S 5 2 1.0 9.065765347574173 9.065765347574173 9.467221661498789 2 847006 null sample=1 period=1 cycle=847 experiment=6 -SML null C12H13Br2NO7S2 null null null 505.854301068556026 null null 604.553999999999974 null null null null null null 16.95195935872173 16.95195935872173 0.0 null [M + H]+ C12H13Br2NO7S2 1 3 0.58252427184466 -6.911033729037047 6.911033729037047 -5.917394649359016 3 847007 null sample=1 period=1 cycle=847 experiment=7 -SML null C13H11Cl6N3O3 null null null 505.854301068556026 null null 604.553999999999974 null null null null null null 14.681206029050356 14.681206029050356 0.0 null [M + K]+ C13H11Cl6N3O3 2 3 0.58252427184466 1.3990591696897 3.070503376721699 -3.982023144238581 3 847007 null sample=1 period=1 cycle=847 experiment=7 -SML null C19H9Br2NO2S2 null null null 505.854301068556026 null null 604.553999999999974 null null null null null null 13.406735460386219 13.406735460386219 0.0 null [M + H]+ C19H9Br2NO2S2 3 3 0.58252427184466 3.538960371372842 3.538960371372842 5.693118471865774 3 847007 null sample=1 period=1 cycle=847 experiment=7 -SML null C12H6F5NO3S5 null null null 505.854301068556026 null null 604.553999999999974 null null null null null null 13.115238697657338 13.115238697657338 0.0 null [M + K]+ C12H6F5NO3S5 4 3 0.58252427184466 4.618679641491994 4.618679641491994 7.914959815501288 3 847007 null sample=1 period=1 cycle=847 experiment=7 -SML null C16H11Br2N3O2S null null null 505.854301068556026 null null 604.553999999999974 null null null null null null 12.282572840144438 12.282572840144438 0.0 null [M + K]+ C16H11Br2N3O2S 5 3 0.58252427184466 -0.446853090463965 2.914152425760874 -5.394485188162603 3 847007 null sample=1 period=1 cycle=847 experiment=7 -SML null C10H7N2O9P null null null 330.995669248795025 null null 606.481000000020003 null null null null null null 1.526870259864886 -0.74377112047702 2.270641380341906 null [M + H]+ C10H7N2O9P 1 1 0.0 -1.582006485689947 1.582006485689947 -1.582006485689947 5 848006 id_10363315384511872265 sample=1 period=1 cycle=848 experiment=6|sample=1 period=1 cycle=849 experiment=4 -SML null C12H8N2O7 null null null 330.995669248795025 null null 606.481000000020003 null null null null null null 0.833722174873901 0.833722174873901 0.0 null [M + K]+ C12H8N2O7 2 1 0.0 -1.93189021762513 1.93189021762513 -1.93189021762513 5 848006 id_10363315384511872265 sample=1 period=1 cycle=848 experiment=6|sample=1 period=1 cycle=849 experiment=4 -SML null C8H4N8O5 null null null 330.995669248795025 null null 606.481000000020003 null null null null null null 0.377315307572828 0.377315307572828 0.0 null [M + K]+ C8H4N8O5 3 1 0.0 6.181110191444778 6.181110191444778 6.181110191444778 5 848006 id_10363315384511872265 sample=1 period=1 cycle=848 experiment=6|sample=1 period=1 cycle=849 experiment=4 -SML null C7H10N4O6P2 null null null 330.995669248795025 null null 606.481000000020003 null null null null null null 0.049395480163874 -0.913731495401201 0.963126975565074 null [M + Na]+ C7H10N4O6P2 4 1 0.0 -3.349745626558456 3.349745626558456 -3.349745626558456 5 848006 id_10363315384511872265 sample=1 period=1 cycle=848 experiment=6|sample=1 period=1 cycle=849 experiment=4 -SML null C13H9O7P null null null 330.995669248795025 null null 606.481000000020003 null null null null null null -0.025829015163908 -1.267614218323655 1.241785203159747 null [M + Na]+ C13H9O7P 5 1 0.0 -6.467484303918107 6.467484303918107 -6.467484303918107 5 848006 id_10363315384511872265 sample=1 period=1 cycle=848 experiment=6|sample=1 period=1 cycle=849 experiment=4 -SML null C11H19N4O4PS null null null 373.050229958369982 null null 606.481000000020003 null null null null null null 25.784045137235857 25.784045137235857 0.0 null [M + K]+ C11H19N4O4PS 1 8 0.83071499653889 0.98606604349625 1.834824189436524 1.632863969832672 6 848007 id_10810367786410780691 sample=1 period=1 cycle=848 experiment=7 -SML null C12H18N2O6S2 null null null 373.050229958369982 null null 606.481000000020003 null null null null null null 21.440048232932529 21.440048232932529 0.0 null [M + Na]+ C12H18N2O6S2 2 6 0.792872349311512 0.995083324692341 0.995083324692341 1.02120907297114 6 848007 id_10810367786410780691 sample=1 period=1 cycle=848 experiment=7 -SML null C10H17F3N2O4S2 null null null 373.050229958369982 null null 606.481000000020003 null null null null null null 20.212827607281849 20.212827607281849 0.0 null [M + Na]+ C10H17F3N2O4S2 3 9 0.836119938167308 2.970866954492015 2.970866954492015 7.574246180733786 6 848007 id_10810367786410780691 sample=1 period=1 cycle=848 experiment=7 -SML null C10H18N6O3S2 null null null 373.050229958369982 null null 606.481000000020003 null null null null null null 19.933295178332092 19.933295178332092 0.0 null [M + K]+ C10H18N6O3S2 4 7 0.794693058831233 -2.512428411238932 2.512428411238932 -2.971658054302831 6 848007 id_10810367786410780691 sample=1 period=1 cycle=848 experiment=7 -SML null C8H20N2O9P2 null null null 373.050229958369982 null null 606.481000000020003 null null null null null null 18.952903131552411 18.952903131552411 0.0 null [M + Na]+ C8H20N2O9P2 5 10 1.0 2.32835220153535 2.674064949522841 -9.098564879409665 6 848007 id_10810367786410780691 sample=1 period=1 cycle=848 experiment=7 -SML null C9H15O16P3 null null null 472.965800306751021 null null 606.481000000020003 null null null null null null 9.802237862248113 9.802237862248113 0.0 null [M + H]+ C9H15O16P3 1 2 0.697674418604651 -0.74849424888238 0.74849424888238 2.599690420943164 9 849005 null sample=1 period=1 cycle=849 experiment=5 -SML null C17H14N4O2S4 null null null 472.965800306751021 null null 606.481000000020003 null null null null null null 9.673686396034764 9.673686396034764 0.0 null [M + K]+ C17H14N4O2S4 2 2 0.697674418604651 3.489191948022111 3.489191948022111 5.671696893840119 9 849005 null sample=1 period=1 cycle=849 experiment=5 -SML null C13H14N4O7S3 null null null 472.965800306751021 null null 606.481000000020003 null null null null null null 9.657025629720902 9.657025629720902 0.0 null [M + K]+ C13H14N4O7S3 3 2 0.697674418604651 -3.80843387724835 3.80843387724835 0.381462381339687 9 849005 null sample=1 period=1 cycle=849 experiment=5 -SML null C16H18O6S4 null null null 472.965800306751021 null null 606.481000000020003 null null null null null null 9.444643391175774 9.444643391175774 0.0 null [M + K]+ C16H18O6S4 4 2 0.697674418604651 7.389829971091086 7.389829971091086 8.499368575629337 9 849005 null sample=1 period=1 cycle=849 experiment=5 -SML null C19H14O5S4 null null null 472.965800306751021 null null 606.481000000020003 null null null null null null 9.414969746574188 9.414969746574188 0.0 null [M + Na]+ C19H14O5S4 5 2 0.697674418604651 7.833584886703086 7.833584886703086 8.821057797010498 9 849005 null sample=1 period=1 cycle=849 experiment=5 -SML null C31H49N3O2 null null null 496.393559709474005 null null 608.394000000000005 null null null null null null 12.08360004509305 12.08360004509305 0.0 null [M + H]+ C31H49N3O2 1 2 0.5 7.659955549563526 7.659955549563526 7.666194109493317 12 851004 null sample=1 period=1 cycle=851 experiment=4 -SML null C23H51N7O3 null null null 496.393559709474005 null null 608.394000000000005 null null null null null null 11.40879578074424 11.40879578074424 0.0 null [M + Na]+ C23H51N7O3 2 2 0.5 -4.193693126868299 4.193693126868299 -2.013488283583159 12 851004 null sample=1 period=1 cycle=851 experiment=4 -SML null C28H53N3O2S null null null 496.393559709474005 null null 608.394000000000005 null null null null null null 9.878813012741157 9.878813012741157 0.0 null [M + H]+ C28H53N3O2S 3 2 0.5 -0.656534039873993 0.656534039873993 0.874953703509131 12 851004 null sample=1 period=1 cycle=851 experiment=4 -SML null C26H55N3O2S null null null 496.393559709474005 null null 608.394000000000005 null null null null null null 9.532842124092705 9.532842124092705 0.0 null [M + Na]+ C26H55N3O2S 4 2 0.5 5.278238893054652 5.278238893054652 5.721285717488984 12 851004 null sample=1 period=1 cycle=851 experiment=4 -SML null C25H49N7O3 null null null 496.393559709474005 null null 608.394000000000005 null null null null null null 9.303836881800034 9.303836881800034 0.0 null [M + H]+ C25H49N7O3 5 2 0.5 -6.816097764115619 6.816097764115619 -6.859820297677524 12 851004 null sample=1 period=1 cycle=851 experiment=4 -SML null C22H46O6 null null null 407.336909566928 null null 610.321000000020035 null null null null null null 3.5 3.5 0.0 null [M + H]+ C22H46O6 1 1 0.0 nan nan 0.476074799296441 15 853003 id_11314361845815354347 sample=1 period=1 cycle=853 experiment=3 -SML null C23H42N4O2 null null null 407.336909566928 null null 610.321000000020035 null null null null null null 1.0 1.0 0.0 null [M + H]+ C23H42N4O2 2 1 0.0 nan nan -2.807182790603921 15 853003 id_11314361845815354347 sample=1 period=1 cycle=853 experiment=3 -SML null C19H38N10 null null null 407.336909566928 null null 610.321000000020035 null null null null null null 0.636657639383096 0.636657639383096 0.0 null [M + H]+ C19H38N10 3 1 0.0 nan nan 3.785315794586575 15 853003 id_11314361845815354347 sample=1 period=1 cycle=853 experiment=3 -SML null C18H42N6O4 null null null 407.336909566928 null null 610.321000000020035 null null null null null null 0.602603903755284 0.602603903755284 0.0 null [M + H]+ C18H42N6O4 4 1 0.0 nan nan 7.068573384486937 15 853003 id_11314361845815354347 sample=1 period=1 cycle=853 experiment=3 -SML null C21H47N2O3P null null null 407.336909566928 null null 610.321000000020035 null null null null null null -0.6094379124341 -0.6094379124341 0.0 null [M + H]+ C21H47N2O3P 5 1 0.0 nan nan -6.866255173155861 15 853003 id_11314361845815354347 sample=1 period=1 cycle=853 experiment=3 -SML null C23H45N5O2 null null null 424.36421074658 null null 610.321000000020035 null null null null null null 16.360336009476693 13.323939090246116 3.036396919230577 null [M + H]+ C23H45N5O2 1 3 1.0 -2.02082243405874 2.02082243405874 -0.922286801423198 16 853004 null sample=1 period=1 cycle=853 experiment=4 -SML null C21H47N5O2 null null null 424.36421074658 null null 610.321000000020035 null null null null null null 15.557883110117828 12.891398392500449 2.666484717617379 null [M + Na]+ C21H47N5O2 2 3 1.0 4.676218099959367 4.676218099959367 4.746636116883184 16 853004 null sample=1 period=1 cycle=853 experiment=4 -SML null C18H45N7O4 null null null 424.36421074658 null null 610.321000000020035 null null null null null null 13.30527333003349 11.888924919330686 1.416348410702804 null [M + H]+ C18H45N7O4 3 3 1.0 9.177881129536456 9.177881129536456 8.557211936042933 16 853004 null sample=1 period=1 cycle=853 experiment=4 -SML null C23H51N3O null null null 424.36421074658 null null 610.321000000020035 null null null null null null 12.771514754587351 12.771514754587351 0.0 null [M + K]+ C23H51N3O 4 3 1.0 -6.946040522841118 6.946040522841118 -5.091394268942456 16 853004 null sample=1 period=1 cycle=853 experiment=4 -SML null C26H49NOS null null null 424.36421074658 null null 610.321000000020035 null null null null null null 10.132608405464048 10.132608405464048 0.0 null [M + H]+ C26H49NOS 5 3 1.0 8.667693098170556 8.667693098170556 8.125347053567902 16 853004 null sample=1 period=1 cycle=853 experiment=4 -SML null C29H48O5 null null null 477.359824108717987 null null 610.321000000020035 null null null null null null 3.5 3.5 0.0 null [M + H]+ C29H48O5 1 1 0.0 nan nan 4.971136043797487 17 853006 null sample=1 period=1 cycle=853 experiment=6 -SML null C30H44N4O null null null 477.359824108717987 null null 610.321000000020035 null null null null null null 1.0 1.0 0.0 null [M + H]+ C30H44N4O 2 1 0.0 nan nan 2.169492645174178 17 853006 null sample=1 period=1 cycle=853 experiment=6 -SML null C22H46N8O2 null null null 477.359824108717987 null null 610.321000000020035 null null null null null null 1.0 1.0 0.0 null [M + Na]+ C22H46N8O2 3 1 0.0 nan nan -7.896147061695832 17 853006 null sample=1 period=1 cycle=853 experiment=6 -SML null C30H50N2 null null null 477.359824108717987 null null 610.321000000020035 null null null null null null 1.0 1.0 0.0 null [M + K]+ C30H50N2 4 1 0.0 nan nan -1.536768147366649 17 853006 null sample=1 period=1 cycle=853 experiment=6 -SML null C28H46N4O null null null 477.359824108717987 null null 610.321000000020035 null null null null null null 1.0 1.0 0.0 null [M + Na]+ C28H46N4O 5 1 0.0 nan nan 7.209062124030016 17 853006 null sample=1 period=1 cycle=853 experiment=6 -SML null C28H55N5O4 null null null 526.433168385886006 null null 610.321000000020035 null null null null null null 4.664451024197501 4.664451024197501 0.0 null [M + H]+ C28H55N5O4 1 2 1.0 -0.185106640567048 0.185106640567048 0.924512026720884 18 853007 null sample=1 period=1 cycle=853 experiment=7 -SML null C31H57N3O2 null null null 526.433168385886006 null null 610.321000000020035 null null null null null null 4.465054326527998 4.465054326527998 0.0 null [M + Na]+ C31H57N3O2 2 2 1.0 -4.382324994082867 4.382324994082867 -2.147239711496391 18 853007 null sample=1 period=1 cycle=853 experiment=7 -SML null C28H61N3O3 null null null 526.433168385886006 null null 610.321000000020035 null null null null null null 4.443127059637575 4.443127059637575 0.0 null [M + K]+ C28H61N3O3 3 2 1.0 -4.777235287494281 4.777235287494281 -2.436256454970705 18 853007 null sample=1 period=1 cycle=853 experiment=7 -SML null C24H51N11O2 null null null 526.433168385886006 null null 610.321000000020035 null null null null null null 4.031430063553028 4.031430063553028 0.0 null [M + H]+ C24H51N11O2 4 2 1.0 6.784945314878405 6.784945314878405 6.025573588342346 18 853007 null sample=1 period=1 cycle=853 experiment=7 -SML null C33H55N3O2 null null null 526.433168385886006 null null 610.321000000020035 null null null null null null 3.410773190818925 3.410773190818925 0.0 null [M + H]+ C33H55N3O2 5 2 1.0 -0.185106640567048 0.185106640567048 -6.717027757583233 18 853007 null sample=1 period=1 cycle=853 experiment=7 -SML null C39H58N2O null null null 571.461957504937004 null null 610.321000000020035 null null null null null null 5.6964974310191 5.6964974310191 0.0 null [M + H]+ C39H58N2O 1 2 1.0 3.656826308124427 3.656826308124427 -0.408466653955956 19 853008 null sample=1 period=1 cycle=853 experiment=8 -SML null C28H58N8O4 null null null 571.461957504937004 null null 610.321000000020035 null null null null null null 5.62840242494866 5.62840242494866 0.0 null [M + H]+ C28H58N8O4 2 2 1.0 -4.907313010428966 4.907313010428966 -5.986895730548056 19 853008 null sample=1 period=1 cycle=853 experiment=8 -SML null C30H64N2O6 null null null 571.461957504937004 null null 610.321000000020035 null null null null null null 5.584753082732667 5.584753082732667 0.0 null [M + Na]+ C30H64N2O6 3 2 1.0 -5.658669244440071 5.658669244440071 -6.476307136286811 19 853008 null sample=1 period=1 cycle=853 experiment=8 -SML null C31H60N6O2 null null null 571.461957504937004 null null 610.321000000020035 null null null null null null 5.346531681460649 5.346531681460649 0.0 null [M + Na]+ C31H60N6O2 4 2 1.0 -9.251553314556515 9.251553314556515 -8.816606402788064 19 853008 null sample=1 period=1 cycle=853 experiment=8 -SML null C34H64N2O2 null null null 571.461957504937004 null null 610.321000000020035 null null null null null null 5.312451603507744 5.312451603507744 0.0 null [M + K]+ C34H64N2O2 5 2 1.0 9.710928596028868 9.710928596028868 3.534997946771918 19 853008 null sample=1 period=1 cycle=853 experiment=8 -SML null C14H20N10O7 null null null 463.137250632743985 null null 611.281000000019958 null null null null null null 4.433299582513639 4.433299582513639 0.0 null [M + Na]+ C14H20N10O7 1 2 1.0 -0.095698217001917 0.095698217001917 -7.801245401067781 21 854008 null sample=1 period=1 cycle=854 experiment=8 -SML null C23H20N8O null null null 463.137250632743985 null null 611.281000000019958 null null null null null null 4.203144319892965 4.203144319892965 0.0 null [M + K]+ C23H20N8O 2 2 1.0 4.869849748235222 4.869849748235222 -4.134254681277326 21 854008 null sample=1 period=1 cycle=854 experiment=8 -SML null C17H21FN6O7 null null null 463.137250632743985 null null 611.281000000019958 null null null null null null 4.10008145003479 4.10008145003479 0.0 null [M + Na]+ C17H21FN6O7 3 2 1.0 -0.095698217001917 0.095698217001917 5.300158106706689 21 854008 null sample=1 period=1 cycle=854 experiment=8 -SML null C26H18F2N4O null null null 463.137250632743985 null null 611.281000000019958 null null null null null null 4.018863224707272 4.018863224707272 0.0 null [M + Na]+ C26H18F2N4O 4 2 1.0 1.973170946666671 1.973170946666671 6.827990297000041 21 854008 null sample=1 period=1 cycle=854 experiment=8 -SML null C27H18N4O4 null null null 463.137250632743985 null null 611.281000000019958 null null null null null null 3.978205630617731 3.978205630617731 0.0 null [M + H]+ C27H18N4O4 5 2 1.0 -1.719050436694018 1.719050436694018 -6.112389669971726 21 854008 null sample=1 period=1 cycle=854 experiment=8 -SML null C21H41N3O12 null null null 566.228477510303037 null null 612.240000000000009 null null null null null null 4.757722501877893 4.757722501877893 0.0 null [M + K]+ C21H41N3O12 1 2 0.436619718309859 -2.2396451687519 2.2396451687519 -6.542132610342606 23 855004 null sample=1 period=1 cycle=855 experiment=4 -SML null C25H41N3O7S null null null 566.228477510303037 null null 612.240000000000009 null null null null null null 2.818482604517081 2.818482604517081 0.0 null [M + K]+ C25H41N3O7S 2 2 0.436619718309859 -2.806574118444672 2.806574118444672 -2.12324500664853 23 855004 null sample=1 period=1 cycle=855 experiment=4 -SML null C23H39N5O6P2 null null null 566.228477510303037 null null 612.240000000000009 null null null null null null 2.714244195568615 2.714244195568615 0.0 null [M + Na]+ C23H39N5O6P2 3 2 0.436619718309859 2.159947224077912 2.159947224077912 3.001583777574164 23 855004 null sample=1 period=1 cycle=855 experiment=4 -SML null C26H39N5O3S3 null null null 566.228477510303037 null null 612.240000000000009 null null null null null null 2.610241809429429 2.610241809429429 0.0 null [M + H]+ C26H39N5O3S3 4 2 0.436619718309859 -4.216098575435073 4.216098575435073 -0.533441533719245 23 855004 null sample=1 period=1 cycle=855 experiment=4 -SML null C26H37N7O3S null null null 566.228477510303037 null null 612.240000000000009 null null null null null null 2.536127191759609 2.536127191759609 0.0 null [M + K]+ C26H37N7O3S 5 2 0.436619718309859 -2.806574118444672 2.806574118444672 -4.485174957569314 23 855004 null sample=1 period=1 cycle=855 experiment=4 -SML null C33H53F null null null 507.377802577316004 null null 613.204999999980032 null null null null null null 7.417801407987388 7.417801407987388 0.0 null [M + K]+ C33H53F 1 2 1.0 1.785705379151822 1.785705379151822 2.985075850321597 26 856004 null sample=1 period=1 cycle=856 experiment=4 -SML null C30H54F2O null null null 507.377802577316004 null null 613.204999999980032 null null null null null null 6.89251885074948 6.89251885074948 0.0 null [M + K]+ C30H54F2O 2 2 1.0 -0.786499536769732 0.786499536769732 0.732568952817685 26 856004 null sample=1 period=1 cycle=856 experiment=4 -SML null C30H51F3O null null null 507.377802577316004 null null 613.204999999980032 null null null null null null 6.789598477570672 6.789598477570672 0.0 null [M + Na]+ C30H51F3O 3 2 1.0 -3.016272550100096 3.016272550100096 -1.220066726130651 26 856004 null sample=1 period=1 cycle=856 experiment=4 -SML null C33H47FN2O null null null 507.377802577316004 null null 613.204999999980032 null null null null null null 6.638628410173594 6.638628410173594 0.0 null [M + H]+ C33H47FN2O 4 2 1.0 5.767600448446966 5.767600448446966 6.472063241258406 26 856004 null sample=1 period=1 cycle=856 experiment=4 -SML null C32H52O3 null null null 507.377802577316004 null null 613.204999999980032 null null null null null null 3.5 3.5 0.0 null [M + Na]+ C32H52O3 5 1 0.0 nan nan -6.038196308384239 26 856004 null sample=1 period=1 cycle=856 experiment=4 -SML null C10H12O5 null null null 213.074829537142989 null null 614.173999999979969 null null null null null null 3.5 3.5 0.0 null [M + H]+ C10H12O5 1 1 0.0 nan nan -4.319604288913501 28 857003 null sample=1 period=1 cycle=857 experiment=3 -SML null C8H14O5 null null null 213.074829537142989 null null 614.173999999979969 null null null null null null 3.5 3.5 0.0 null [M + Na]+ C8H14O5 2 1 0.0 nan nan 6.970739132860442 28 857003 null sample=1 period=1 cycle=857 experiment=3 -SML null C6H8N6O3 null null null 213.074829537142989 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + H]+ C6H8N6O3 3 1 0.0 nan nan 8.28332964678035 28 857003 null sample=1 period=1 cycle=857 experiment=3 -SML null C9H10N4O null null null 213.074829537142989 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + Na]+ C9H10N4O 4 1 0.0 nan nan 0.694108509974577 28 857003 null sample=1 period=1 cycle=857 experiment=3 -SML null C6H14N4O2 null null null 213.074829537142989 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + K]+ C6H14N4O2 5 1 0.0 nan nan -0.019950491336188 28 857003 null sample=1 period=1 cycle=857 experiment=3 -SML null C11H15N2O9P null null null 373.040157682534982 null null 614.173999999979969 null null null null null null 23.830222282750416 23.830222282750416 0.0 null [M + Na]+ C11H15N2O9P 1 6 0.889909025895723 1.305298961381369 3.823427075478538 -1.554008445412062 29 857004 null sample=1 period=1 cycle=857 experiment=4 -SML null C12H19N2O4PS2 null null null 373.040157682534982 null null 614.173999999979969 null null null null null null 23.720375409778153 23.720375409778153 0.0 null [M + Na]+ C12H19N2O4PS2 2 9 0.940559246410657 5.456786647266265 6.842002799677939 -3.883591419560776 29 857004 null sample=1 period=1 cycle=857 experiment=4 -SML null C10H16N4O6P2 null null null 373.040157682534982 null null 614.173999999979969 null null null null null null 22.520973985256017 22.520973985256017 0.0 null [M + Na]+ C10H16N4O6P2 3 9 0.926745549906584 -4.234678553446738 4.234678553446738 -9.571381209189909 29 857004 null sample=1 period=1 cycle=857 experiment=4 -SML null C15H14N2O7 null null null 373.040157682534982 null null 614.173999999979969 null null null null null null 21.347779179714465 21.347779179714465 0.0 null [M + K]+ C15H14N2O7 4 5 0.5973656310428 0.101135136223425 1.746036431220398 -8.313328985286178 29 857004 null sample=1 period=1 cycle=857 experiment=4 -SML null C9H15N6O6P null null null 373.040157682534982 null null 614.173999999979969 null null null null null null 20.840561892315421 20.840561892315421 0.0 null [M + K]+ C9H15N6O6P 5 6 0.871490763890292 2.930105624214754 4.192444264217398 -5.546983382149036 29 857004 null sample=1 period=1 cycle=857 experiment=4 -SML null C20H37NO6 null null null 388.269335994209996 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + H]+ C20H37NO6 1 1 0.0 nan nan -0.073046923786965 30 857005 null sample=1 period=1 cycle=857 experiment=5 -SML null C19H35N5O2 null null null 388.269335994209996 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + Na]+ C19H35N5O2 2 1 0.0 nan nan 2.67838333606761 30 857005 null sample=1 period=1 cycle=857 experiment=5 -SML null C24H35N3 null null null 388.269335994209996 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + Na]+ C24H35N3 3 1 0.0 nan nan -7.682362741644806 30 857005 null sample=1 period=1 cycle=857 experiment=5 -SML null C21H33N5O2 null null null 388.269335994209996 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + H]+ C21H33N5O2 4 1 0.0 nan nan -3.517542473654744 30 857005 null sample=1 period=1 cycle=857 experiment=5 -SML null C16H33N7O4 null null null 388.269335994209996 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + H]+ C16H33N7O4 5 1 0.0 nan nan 6.843203604057673 30 857005 null sample=1 period=1 cycle=857 experiment=5 -SML null C26H51N5O3 null null null 482.403087306262989 null null 614.173999999979969 null null null null null null 6.5874834862548 6.5874834862548 0.0 null [M + H]+ C26H51N5O3 1 2 1.0 -6.616351530168046 6.616351530168046 -7.005837890510965 31 857007 null sample=1 period=1 cycle=857 experiment=7 -SML null C27H47BN6O null null null 482.403087306262989 null null 614.173999999979969 null null null null null null 4.765887509073973 4.765887509073973 0.0 null [M + H]+ C27H47BN6O 2 2 1.0 2.29709022075677 2.29709022075677 3.604309794474105 31 857007 null sample=1 period=1 cycle=857 experiment=7 -SML null C29H52FNO3 null null null 482.403087306262989 null null 614.173999999979969 null null null null null null 3.068738849958652 3.068738849958652 0.0 null [M + H]+ C29H52FNO3 3 2 1.0 -6.616351530168046 6.616351530168046 5.572332025239653 31 857007 null sample=1 period=1 cycle=857 experiment=7 -SML null C26H51BN2O5 null null null 482.403087306262989 null null 614.173999999979969 null null null null null null 2.747610168438948 2.747610168438948 0.0 null [M + H]+ C26H51BN2O5 4 2 1.0 -6.616351530168046 6.616351530168046 6.376663527635651 31 857007 null sample=1 period=1 cycle=857 experiment=7 -SML null C32H51NO2 null null null 482.403087306262989 null null 614.173999999979969 null null null null null null 1.0 1.0 0.0 null [M + H]+ C32H51NO2 5 1 0.0 nan nan 7.941454508115075 31 857007 null sample=1 period=1 cycle=857 experiment=7 -SML null C34H55NO3 null null null 526.429648899930044 null null 614.173999999979969 null null null null null null 9.809958490774431 9.809958490774431 0.0 null [M + H]+ C34H55NO3 1 3 0.8 6.462990336347634 6.462990336347634 7.936156043317339 32 857008 null sample=1 period=1 cycle=857 experiment=8 -SML null C30H57N5 null null null 526.429648899930044 null null 614.173999999979969 null null null null null null 9.033932158913366 9.033932158913366 0.0 null [M + K]+ C30H57N5 2 3 0.8 7.019507994789919 7.019507994789919 9.676460758110611 32 857008 null sample=1 period=1 cycle=857 experiment=8 -SML null C24H51N11O2 null null null 526.429648899930044 null null 614.173999999979969 null null null null null null 8.538047571343183 8.538047571343183 0.0 null [M + H]+ C24H51N11O2 3 3 0.8 -6.119422254982977 6.119422254982977 -0.659963133222153 32 857008 null sample=1 period=1 cycle=857 experiment=8 -SML null C27H53N9 null null null 526.429648899930044 null null 614.173999999979969 null null null null null null 8.197651351338704 8.197651351338704 0.0 null [M + Na]+ C27H53N9 4 2 0.6 -9.999476041150038 9.999476041150038 -3.731735407872217 32 857008 null sample=1 period=1 cycle=857 experiment=8 -SML null C31H59NO3S null null null 526.429648899930044 null null 614.173999999979969 null null null null null null 6.85711312302807 6.85711312302807 0.0 null [M + H]+ C31H59NO3S 5 3 0.8 -2.910393376606797 2.910393376606797 1.532398186838836 32 857008 null sample=1 period=1 cycle=857 experiment=8 -SML null C18H20O11 null null null 413.109579675280997 null null 616.093999999980042 null null null null null null 14.292209193029343 14.292209193029343 0.0 null [M + H]+ C18H20O11 1 6 0.775725593667546 3.924054898021201 3.924054898021201 4.216225612186144 35 859003 null sample=1 period=1 cycle=859 experiment=3 -SML null C19H22N2O6 null null null 413.109579675280997 null null 616.093999999980042 null null null null null null 12.819162190706074 12.819162190706074 0.0 null [M + K]+ C19H22N2O6 2 6 0.815303430079156 -0.131482556141338 2.714312399532566 -3.303842071539723 35 859003 null sample=1 period=1 cycle=859 experiment=3 -SML null C15H24O11S null null null 413.109579675280997 null null 616.093999999980042 null null null null null null 12.660029038223566 12.660029038223566 0.0 null [M + H]+ C15H24O11S 3 7 0.973614775725594 1.195942585932246 1.195942585932246 -3.944146758447272 35 859003 null sample=1 period=1 cycle=859 experiment=3 -SML null C13H23N6O5P null null null 413.109579675280997 null null 616.093999999980042 null null null null null null 12.324032812961905 12.324032812961905 0.0 null [M + K]+ C13H23N6O5P 4 7 0.973614775725594 0.274940520665822 5.923487618807297 -0.80581721151837 35 859003 null sample=1 period=1 cycle=859 experiment=3 -SML null C16H28O6S3 null null null 413.109579675280997 null null 616.093999999980042 null null null null null null 12.072418633913491 12.072418633913491 0.0 null [M + H]+ C16H28O6S3 5 7 0.973614775725594 -1.345352660301492 2.798781926730509 -6.047772630740976 35 859003 null sample=1 period=1 cycle=859 experiment=3 -SML null C28H53N5O5 null null null 540.409335498831979 null null 616.093999999980042 null null null null null null 8.562201213966528 8.562201213966528 0.0 null [M + H]+ C28H53N5O5 1 3 1.0 0.193050989235034 2.159177666783332 -4.831058767989835 36 859005 null sample=1 period=1 cycle=859 experiment=5 -SML null C26H55N5O5 null null null 540.409335498831979 null null 616.093999999980042 null null null null null null 7.983537782900839 7.983537782900839 0.0 null [M + Na]+ C26H55N5O5 2 3 1.0 7.137682449104624 7.137682449104624 -0.379455433393772 36 859005 null sample=1 period=1 cycle=859 experiment=5 -SML null C24H55N9O2 null null null 540.409335498831979 null null 616.093999999980042 null null null null null null 7.693823911659977 7.693823911659977 0.0 null [M + K]+ C24H55N9O2 3 3 1.0 2.837745655618497 2.837745655618497 -3.135773472553824 36 859005 null sample=1 period=1 cycle=859 experiment=5 -SML null C31H55N3O3 null null null 540.409335498831979 null null 616.093999999980042 null null null null null null 6.275805859763853 6.275805859763853 0.0 null [M + Na]+ C31H55N3O3 4 3 1.0 1.689763660980973 3.717451743960798 -7.82336828934907 36 859005 null sample=1 period=1 cycle=859 experiment=5 -SML null C27H57NO9 null null null 540.409335498831979 null null 616.093999999980042 null null null null null null 5.860735133057289 5.860735133057289 0.0 null [M + H]+ C27H57NO9 5 3 1.0 6.111411465722526 6.111411465722526 -2.356282867333573 36 859005 null sample=1 period=1 cycle=859 experiment=5 -SML null C21H41N3O12 null null null 566.23013795246402 null null 616.093999999980042 null null null null null null 4.365315043688498 4.365315043688498 0.0 null [M + K]+ C21H41N3O12 1 2 0.451127819548872 -6.763028731463948 6.763028731463948 -3.609662378680514 37 859006 null sample=1 period=1 cycle=859 experiment=6 -SML null C25H41N3O7S null null null 566.23013795246402 null null 616.093999999980042 null null null null null null 2.632316674128045 2.632316674128045 0.0 null [M + K]+ C25H41N3O7S 2 2 0.451127819548872 1.552130240029961 1.552130240029961 0.809212266841981 37 859006 null sample=1 period=1 cycle=859 experiment=6 -SML null C26H39N5O3S3 null null null 566.23013795246402 null null 616.093999999980042 null null null null null null 2.453266835792515 2.453266835792515 0.0 null [M + H]+ C26H39N5O3S3 3 2 0.451127819548872 0.081608948509376 0.081608948509376 2.399011077750407 37 859006 null sample=1 period=1 cycle=859 experiment=6 -SML null C25H41N3O6S2 null null null 566.23013795246402 null null 616.093999999980042 null null null null null null 2.187912946765366 2.187912946765366 0.0 null [M + Na]+ C25H41N3O6S2 4 2 0.451127819548872 -9.14541599163535 9.14541599163535 -4.875720032185424 37 859006 null sample=1 period=1 cycle=859 experiment=6 -SML null C29H41N3O2S2 null null null 566.23013795246402 null null 616.093999999980042 null null null null null null 2.134286094595516 2.134286094595516 0.0 null [M + K]+ C29H41N3O2S2 5 2 0.451127819548872 9.867289211334963 9.867289211334963 5.228086911962921 37 859006 null sample=1 period=1 cycle=859 experiment=6 -SML null C9H12O12 null null null 313.039838679245008 null null 617.057999999999993 null null null null null null 3.416839087745155 3.416839087745155 0.0 null [M + H]+ C9H12O12 1 1 0.0 -1.001779348035562 1.001779348035562 -1.001779348035562 39 860003 id_13016335405471045766 sample=1 period=1 cycle=860 experiment=3|sample=1 period=1 cycle=861 experiment=2 -SML null C10H8N4O8 null null null 313.039838679245008 null null 617.057999999999993 null null null null null null 0.485688527015936 0.485688527015936 0.0 null [M + H]+ C10H8N4O8 2 1 0.0 -5.274053463948874 5.274053463948874 -5.274053463948874 39 860003 id_13016335405471045766 sample=1 period=1 cycle=860 experiment=3|sample=1 period=1 cycle=861 experiment=2 -SML null C6H4N10O6 null null null 313.039838679245008 null null 617.057999999999993 null null null null null null -0.550207731913414 -0.550207731913414 0.0 null [M + H]+ C6H4N10O6 3 1 0.0 3.304305160773628 3.304305160773628 3.304305160773628 39 860003 id_13016335405471045766 sample=1 period=1 cycle=860 experiment=3|sample=1 period=1 cycle=861 experiment=2 -SML null C14H5F5N2O null null null 313.039838679245008 null null 617.057999999999993 null null null null null null -0.704999285604162 -0.704999285604162 0.0 null [M + H]+ C14H5F5N2O 4 1 0.0 1.144733385968608 1.144733385968608 1.144733385968608 39 860003 id_13016335405471045766 sample=1 period=1 cycle=860 experiment=3|sample=1 period=1 cycle=861 experiment=2 -SML null C9H17BrN2O5 null null null 313.039838679245008 null null 617.057999999999993 null null null null null null -0.738958931047442 -0.738958931047442 0.0 null [M + H]+ C9H17BrN2O5 5 1 0.0 1.528505625537048 1.528505625537048 1.528505625537048 39 860003 id_13016335405471045766 sample=1 period=1 cycle=860 experiment=3|sample=1 period=1 cycle=861 experiment=2 -SML null C21H24Cl2O4 null null null 411.113111072311028 null null 618.022000000019943 null null null null null null 7.356107435210711 7.356107435210711 0.0 null [M + H]+ C21H24Cl2O4 1 2 1.0 1.228960718579289 1.228960718579289 1.629751526893702 40 860005 id_2653120127184275567 sample=1 period=1 cycle=860 experiment=5 -SML null C23H25N3O7 null null null 456.172639883827003 null null 617.057999999999993 null null null null null null 6.422696285145079 6.422696285145079 0.0 null [M + H]+ C23H25N3O7 1 2 1.0 -1.295755987703123 1.295755987703123 -8.520257296786948 41 860007 null sample=1 period=1 cycle=860 experiment=7 -SML null C19H27N7O4 null null null 456.172639883827003 null null 617.057999999999993 null null null null null null 6.407730581647435 6.407730581647435 0.0 null [M + K]+ C19H27N7O4 2 2 1.0 1.630812676522861 1.630812676522861 -6.511921153966824 41 860007 null sample=1 period=1 cycle=860 experiment=7 -SML null C22H23N7O3 null null null 456.172639883827003 null null 617.057999999999993 null null null null null null 6.385351595915552 6.385351595915552 0.0 null [M + Na]+ C22H23N7O3 3 2 1.0 2.116838481366128 2.116838481366128 -6.178389533082018 41 860007 null sample=1 period=1 cycle=860 experiment=7 -SML null C18H31N3O8 null null null 456.172639883827003 null null 617.057999999999993 null null null null null null 6.182696599929702 6.182696599929702 0.0 null [M + K]+ C18H31N3O8 4 2 1.0 5.903014895754728 5.903014895754728 -3.580153917065536 41 860007 null sample=1 period=1 cycle=860 experiment=7 -SML null C21H27N3O7 null null null 456.172639883827003 null null 617.057999999999993 null null null null null null 6.15290396912128 6.15290396912128 0.0 null [M + Na]+ C21H27N3O7 5 2 1.0 6.389040700779578 6.389040700779578 -3.24662229618073 41 860007 null sample=1 period=1 cycle=860 experiment=7 -SML null C26H51N5O3 null null null 482.407140340066974 null null 617.057999999999993 null null null null null null 10.722442608007905 10.722442608007905 0.0 null [M + H]+ C26H51N5O3 1 2 1.0 1.546558632641359 1.546558632641359 1.395907979222642 42 860008 null sample=1 period=1 cycle=860 experiment=8 -SML null C29H53N3O null null null 482.407140340066974 null null 617.057999999999993 null null null null null null 10.67492997195748 10.67492997195748 0.0 null [M + Na]+ C29H53N3O 2 2 1.0 -2.56474925847262 2.56474925847262 -1.956181707608681 42 860008 null sample=1 period=1 cycle=860 experiment=8 -SML null C26H57N3O2 null null null 482.407140340066974 null null 617.057999999999993 null null null null null null 10.655948784217028 10.655948784217028 0.0 null [M + K]+ C26H57N3O2 3 2 1.0 -2.951576358907952 2.951576358907952 -2.271575049285469 42 860008 null sample=1 period=1 cycle=860 experiment=8 -SML null C31H51N3O null null null 482.407140340066974 null null 617.057999999999993 null null null null null null 10.311194139199582 10.311194139199582 0.0 null [M + H]+ C31H51N3O 4 2 1.0 -8.68106569835628 8.68106569835628 -6.943023316782265 42 860008 null sample=1 period=1 cycle=860 experiment=8 -SML null C27H58NO2P null null null 482.407140340066974 null null 617.057999999999993 null null null null null null 8.425039657384723 8.425039657384723 0.0 null [M + Na]+ C27H58NO2P 5 2 1.0 -6.768444319897811 6.768444319897811 -5.383597808681453 42 860008 null sample=1 period=1 cycle=860 experiment=8 -SML null C17H29NO13 null null null 456.171915734524987 null null 618.022000000019943 null null null null null null 8.35428234420319 8.35428234420319 0.0 null [M + H]+ C17H29NO13 1 2 1.0 -2.737109915480619 2.737109915480619 1.642570286795827 45 861003 null sample=1 period=1 cycle=861 experiment=3 -SML null C30H27NO null null null 456.171915734524987 null null 618.022000000019943 null null null null null null 8.128871768552493 8.128871768552493 0.0 null [M + K]+ C30H27NO 2 2 1.0 -6.749845754940504 6.749845754940504 -1.111093313913604 45 861003 null sample=1 period=1 cycle=861 experiment=3 -SML null C16H27N5O9 null null null 456.171915734524987 null null 618.022000000019943 null null null null null null 7.878749637401727 7.878749637401727 0.0 null [M + Na]+ C16H27N5O9 3 2 1.0 0.675547905901619 0.675547905901619 3.984441768094603 45 861003 null sample=1 period=1 cycle=861 experiment=3 -SML null C30H21N3O2 null null null 456.171915734524987 null null 618.022000000019943 null null null null null null 7.860681497085573 7.860681497085573 0.0 null [M + H]+ C30H21N3O2 4 2 1.0 -1.098095237589822 1.098095237589822 2.767312916164582 45 861003 null sample=1 period=1 cycle=861 experiment=3 -SML null C17H23N9O5 null null null 456.171915734524987 null null 618.022000000019943 null null null null null null 7.741548584132127 7.741548584132127 0.0 null [M + Na]+ C17H23N9O5 5 2 1.0 -3.596733623812131 3.596733623812131 1.052669877164592 45 861003 null sample=1 period=1 cycle=861 experiment=3 -SML null C36H52O6 null null null 603.36131248038896 null null 618.022000000019943 null null null null null null 3.852665756920889 3.852665756920889 0.0 null [M + Na]+ C36H52O6 1 2 0.714285714285714 0.014735963563312 0.014735963563312 -7.122769744442348 46 861005 null sample=1 period=1 cycle=861 experiment=5 -SML null C33H56O7 null null null 603.36131248038896 null null 618.022000000019943 null null null null null null 3.833773864756204 3.833773864756204 0.0 null [M + K]+ C33H56O7 2 2 0.714285714285714 -0.479087656043326 0.479087656043326 -7.37493705586356 46 861005 null sample=1 period=1 cycle=861 experiment=5 -SML null C40H52O2 null null null 603.36131248038896 null null 618.022000000019943 null null null null null null 3.5 3.5 0.0 null [M + K]+ C40H52O2 3 1 0.0 nan nan 2.35924357262763 46 861005 null sample=1 period=1 cycle=861 experiment=5 -SML null C45H46O null null null 603.36131248038896 null null 618.022000000019943 null null null null null null 3.5 3.5 0.0 null [M + H]+ C45H46O 4 1 0.0 nan nan -1.37573239197173 46 861005 null sample=1 period=1 cycle=861 experiment=5 -SML null C43H48O null null null 603.36131248038896 null null 618.022000000019943 null null null null null null 3.5 3.5 0.0 null [M + Na]+ C43H48O 5 1 0.0 nan nan 2.611410884048842 46 861005 null sample=1 period=1 cycle=861 experiment=5 -SML null C29H51N3O5 null null null 522.38651805643201 null null 618.982999999980052 null null null null null null 1.0 1.0 0.0 null [M + H]+ C29H51N3O5 1 1 0.0 nan nan -6.949122025670161 48 862004 null sample=1 period=1 cycle=862 experiment=4 -SML null C36H47N3 null null null 522.38651805643201 null null 618.982999999980052 null null null null null null 1.0 1.0 0.0 null [M + H]+ C36H47N3 2 1 0.0 nan nan 4.293947611526791 48 862004 null sample=1 period=1 cycle=862 experiment=4 -SML null C30H47N7O null null null 522.38651805643201 null null 618.982999999980052 null null null null null null 1.0 1.0 0.0 null [M + H]+ C30H47N7O 3 1 0.0 nan nan -9.509279981043925 48 862004 null sample=1 period=1 cycle=862 experiment=4 -SML null C31H53N3O null null null 522.38651805643201 null null 618.982999999980052 null null null null null null 1.0 1.0 0.0 null [M + K]+ C31H53N3O 4 1 0.0 nan nan 8.607879771097275 48 862004 null sample=1 period=1 cycle=862 experiment=4 -SML null C25H47N9O3 null null null 522.38651805643201 null null 618.982999999980052 null null null null null null 1.0 1.0 0.0 null [M + H]+ C25H47N9O3 5 1 0.0 nan nan -1.808545255031244 48 862004 null sample=1 period=1 cycle=862 experiment=4 -SML null C32H43N9O3 null null null 602.355320245104963 null null 618.982999999980052 null null null null null null 6.955514843428635 6.955514843428635 0.0 null [M + H]+ C32H43N9O3 1 2 0.552501381197249 -1.918108645384416 1.918108645384416 -1.398581463893163 49 862006 null sample=1 period=1 cycle=862 experiment=6 -SML null C27H49N9O4 null null null 602.355320245104963 null null 618.982999999980052 null null null null null null 6.773744877209534 6.773744877209534 0.0 null [M + K]+ C27H49N9O4 2 2 0.552501381197249 5.396148465222392 5.396148465222392 2.34263227547646 49 862006 null sample=1 period=1 cycle=862 experiment=6 -SML null C30H45N9O3 null null null 602.355320245104963 null null 618.982999999980052 null null null null null null 6.744400283004429 6.744400283004429 0.0 null [M + Na]+ C30H45N9O3 3 2 0.552501381197249 5.88997133554043 5.88997133554043 2.595220730944644 49 862006 null sample=1 period=1 cycle=862 experiment=6 -SML null C35H45N7O null null null 602.355320245104963 null null 618.982999999980052 null null null null null null 6.664303873031611 6.664303873031611 0.0 null [M + Na]+ C35H45N7O 4 2 0.552501381197249 -7.166597855441706 7.166597855441706 -4.083163048374841 49 862006 null sample=1 period=1 cycle=862 experiment=6 -SML null C32H49N7O2 null null null 602.355320245104963 null null 618.982999999980052 null null null null null null 6.631658587354478 6.631658587354478 0.0 null [M + K]+ C32H49N7O2 5 2 0.552501381197249 -7.660420725759744 7.660420725759744 -4.335751503654287 49 862006 null sample=1 period=1 cycle=862 experiment=6 diff --git a/src/tests/topp/THIRDPARTY/third_party_tests.cmake b/src/tests/topp/THIRDPARTY/third_party_tests.cmake index 2ba39b0cdf0..85cd1ea65c9 100644 --- a/src/tests/topp/THIRDPARTY/third_party_tests.cmake +++ b/src/tests/topp/THIRDPARTY/third_party_tests.cmake @@ -68,11 +68,6 @@ OPENMS_FINDBINARY(MSFRAGGER_BINARY "MSFragger.jar" "MSFragger") # percolator OPENMS_FINDBINARY(PERCOLATOR_BINARY "percolator" "Percolator") -#------------------------------------------------------------------------------ -# Sirius - -OPENMS_FINDBINARY(SIRIUS_BINARY "sirius;sirius.app;sirius.bat;sirius.exe" "Sirius") - #------------------------------------------------------------------------------ # Novor OPENMS_FINDBINARY(NOVOR_BINARY "novor.jar" "Novor") @@ -253,107 +248,6 @@ if (WITH_THERMORAWFILEPARSER_TEST) endif() endif() -#------------------------------------------------------------------------------ -if (NOT (${SIRIUS_BINARY} STREQUAL "SIRIUS_BINARY-NOTFOUND")) - # Note: Following test are performed without adduct/id information, since these are obtained by the MetaboliteAdductDecharger/AccurateMassSearch - if (ENABLE_SIRIUS_TEST) - # add dependencies for one test at a time to reduce memory and cpu consumption - - # test mzMl as input - # test internal .ms output (converter mode) - add_test("TOPP_SiriusAdapter_5" ${TOPP_BIN_PATH}/SiriusAdapter -test -sirius_executable "${SIRIUS_BINARY}" -in ${DATA_DIR_TOPP}/THIRDPARTY/SiriusAdapter_3_input.mzML -in_featureinfo ${DATA_DIR_TOPP}/THIRDPARTY/SiriusAdapter_3_input.featureXML -out_ms SiriusAdapter_5_output.tmp.ms -converter_mode -read_sirius_stdout) - add_test("TOPP_SiriusAdapter_5_out" ${DIFF} -in1 SiriusAdapter_5_output.tmp.ms -in2 ${DATA_DIR_TOPP}/THIRDPARTY/SiriusAdapter_5_output.ms) - set_tests_properties("TOPP_SiriusAdapter_5" PROPERTIES DEPENDS "TOPP_SiriusAdapter_3") - set_tests_properties("TOPP_SiriusAdapter_5_out" PROPERTIES DEPENDS "TOPP_SiriusAdapter_5") - # test internal .ms output negative - add_test("TOPP_SiriusAdapter_6" ${TOPP_BIN_PATH}/SiriusAdapter -test -sirius_executable "${SIRIUS_BINARY}" -in ${DATA_DIR_TOPP}/THIRDPARTY/SiriusAdapter_4_input.mzML -in_featureinfo ${DATA_DIR_TOPP}/THIRDPARTY/SiriusAdapter_4_input.featureXML -out_ms SiriusAdapter_6_output.tmp.ms -converter_mode -read_sirius_stdout) - add_test("TOPP_SiriusAdapter_6_out" ${DIFF} -in1 SiriusAdapter_6_output.tmp.ms -in2 ${DATA_DIR_TOPP}/THIRDPARTY/SiriusAdapter_6_output.ms) - set_tests_properties("TOPP_SiriusAdapter_6" PROPERTIES DEPENDS "TOPP_SiriusAdapter_5") - set_tests_properties("TOPP_SiriusAdapter_6_out" PROPERTIES DEPENDS "TOPP_SiriusAdapter_6") - # test internal .ms using assigned ms2 - - # use AccurateMassSearch data - #add_test("TOPP_AssayGeneratorMetabo_7" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -sirius_executable "${SIRIUS_BINARY}" -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_input.mzML -in_id ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_input.featureXML -out AssayGeneratorMetabo_ams_sirius_output.tmp.tsv -fragment_annotation sirius -use_exact_mass -transition_threshold 3.0 -min_transitions 2 -max_transitions 3 -preprocessing:filter_by_num_masstraces 1 -preprocessing:precursor_mz_tolerance 10 -preprocessing:precursor_mz_tolerance_unit ppm -preprocessing:feature_only -sirius:profile qtof -sirius:compound_timeout 100) - #add_test("TOPP_AssayGeneratorMetabo_7_out1" ${DIFF} -in1 AssayGeneratorMetabo_ams_sirius_output.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_sirius_output.tsv) - #set_tests_properties("TOPP_AssayGeneratorMetabo_7_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_7") - - # use AccurateMassSearch data - #add_test("TOPP_AssayGeneratorMetabo_8" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -sirius_executable "${SIRIUS_BINARY}" -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_input.mzML -in_id ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_input.featureXML -out AssayGeneratorMetabo_ams_sirius_ukn_output.tmp.tsv -fragment_annotation sirius -use_exact_mass -transition_threshold 3.0 -min_transitions 2 -max_transitions 3 -preprocessing:filter_by_num_masstraces 1 -preprocessing:precursor_mz_tolerance 10 -preprocessing:precursor_mz_tolerance_unit ppm -preprocessing:feature_only -sirius:candidates 5 -sirius:db ALL -sirius:profile qtof -sirius:compound_timeout 100 -use_known_unknowns) - #add_test("TOPP_AssayGeneratorMetabo_8_out1" ${DIFF} -in1 AssayGeneratorMetabo_ams_sirius_ukn_output.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_sirius_ukn_output.tsv) - #set_tests_properties("TOPP_AssayGeneratorMetabo_8" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_7") - #set_tests_properties("TOPP_AssayGeneratorMetabo_8_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_8") - - # use AccurateMassSearch data - #add_test("TOPP_AssayGeneratorMetabo_9" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -sirius_executable "${SIRIUS_BINARY}" -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_intsort_input.mzML -in_id ${DATA_DIR_TOPP}/AssayGeneratorMetabo_intsort_input.featureXML -out AssayGeneratorMetabo_ams_sirius_intsort_output.tmp.tsv -fragment_annotation sirius -use_exact_mass -transition_threshold 3.0 -min_transitions 2 -max_transitions 3 -preprocessing:filter_by_num_masstraces 1 -preprocessing:precursor_mz_tolerance 10 -preprocessing:precursor_mz_tolerance_unit ppm -preprocessing:feature_only -sirius:candidates 5 -sirius:profile qtof -sirius:compound_timeout 100) - #add_test("TOPP_AssayGeneratorMetabo_9_out1" ${DIFF} -in1 AssayGeneratorMetabo_ams_sirius_intsort_output.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_sirius_intsort_output.tsv) - #set_tests_properties("TOPP_AssayGeneratorMetabo_9" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_8") - #set_tests_properties("TOPP_AssayGeneratorMetabo_9_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_9") - - # use AccurateMassSearch data + fragment mass restriction - #add_test("TOPP_AssayGeneratorMetabo_10" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -sirius_executable "${SIRIUS_BINARY}" -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_input.mzML -in_id ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_input.featureXML -out AssayGeneratorMetabo_ams_sirius_restrict_output.tmp.tsv -fragment_annotation sirius -use_exact_mass -transition_threshold 3.0 -min_transitions 2 -max_transitions 3 -min_fragment_mz 100 -max_fragment_mz 900 -preprocessing:filter_by_num_masstraces 1 -preprocessing:precursor_mz_tolerance 10 -preprocessing:precursor_mz_tolerance_unit ppm -preprocessing:feature_only -sirius:profile qtof -sirius:compound_timeout 100) - #add_test("TOPP_AssayGeneratorMetabo_10_out1" ${DIFF} -in1 AssayGeneratorMetabo_ams_sirius_restrict_output.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_sirius_restrict_output.tsv) - #set_tests_properties("TOPP_AssayGeneratorMetabo_10" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_9") - #set_tests_properties("TOPP_AssayGeneratorMetabo_10_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_10") - - # use AccurateMassSearch data + fragment mass restriction + decoy generation (original). - # whitelist Guthion_decoy, since fragmentation tree re-rooting has multiple possible solutions. - #add_test("TOPP_AssayGeneratorMetabo_11" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -sirius_executable "${SIRIUS_BINARY}" -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_input.mzML -in_id ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_input.featureXML -out AssayGeneratorMetabo_ams_sirius_restrict_decoy_output.tmp.tsv -fragment_annotation sirius -decoy_generation -decoy_generation_method original -use_exact_mass -transition_threshold 3.0 -min_transitions 3 -max_transitions 3 -min_fragment_mz 100 -max_fragment_mz 900 -preprocessing:filter_by_num_masstraces 1 -preprocessing:precursor_mz_tolerance 10 -preprocessing:precursor_mz_tolerance_unit ppm -preprocessing:feature_only -sirius:profile qtof -sirius:compound_timeout 100) - #add_test("TOPP_AssayGeneratorMetabo_11_out1" ${DIFF} -in1 AssayGeneratorMetabo_ams_sirius_restrict_decoy_output.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_ams_sirius_restrict_decoy_output.tsv -whitelist "Guthion_decoy") - #set_tests_properties("TOPP_AssayGeneratorMetabo_11" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_10") - #set_tests_properties("TOPP_AssayGeneratorMetabo_11_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_11") - - # use AccurateMassSearch data + fragment mass restriction + decoy generation (original). - #add_test("TOPP_AssayGeneratorMetabo_12" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -sirius_executable "${SIRIUS_BINARY}" -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input.mzML -in_id ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input.featureXML -out AssayGeneratorMetabo_decoy_generation_output_original.tmp.tsv -fragment_annotation sirius -decoy_generation -decoy_generation_method original -use_exact_mass -transition_threshold 3.0 -min_transitions 1 -max_transitions 3 -min_fragment_mz 100 -max_fragment_mz 900 -preprocessing:filter_by_num_masstraces 1 -preprocessing:precursor_mz_tolerance 10 -preprocessing:precursor_mz_tolerance_unit ppm -preprocessing:feature_only -sirius:profile qtof -sirius:compound_timeout 100) - #add_test("TOPP_AssayGeneratorMetabo_12_out1" ${DIFF} -in1 AssayGeneratorMetabo_decoy_generation_output_original.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_output_original.tsv -whitelist "0_2_Proquinazid_decoy_[M+H]+_608_0") - #set_tests_properties("TOPP_AssayGeneratorMetabo_12" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_11") - #set_tests_properties("TOPP_AssayGeneratorMetabo_12_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_12") - - # use AccurateMassSearch data + fragment mass restriction + decoy generation (resolve overlap). - #add_test("TOPP_AssayGeneratorMetabo_13" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -sirius_executable "${SIRIUS_BINARY}" -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input.mzML -in_id ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input.featureXML -out AssayGeneratorMetabo_decoy_generation_output_resolve_overlap.tmp.tsv -fragment_annotation sirius -decoy_generation -decoy_generation_method resolve_overlap -use_exact_mass -transition_threshold 3.0 -min_transitions 1 -max_transitions 3 -min_fragment_mz 100 -max_fragment_mz 900 -preprocessing:filter_by_num_masstraces 1 -preprocessing:precursor_mz_tolerance 10 -preprocessing:precursor_mz_tolerance_unit ppm -preprocessing:feature_only -sirius:profile qtof -sirius:compound_timeout 100) - #add_test("TOPP_AssayGeneratorMetabo_13_out1" ${DIFF} -in1 AssayGeneratorMetabo_decoy_generation_output_resolve_overlap.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_output_resolve_overlap.tsv -whitelist "0_2_Proquinazid_decoy_[M+H]+_608_0") - #set_tests_properties("TOPP_AssayGeneratorMetabo_13" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_12") - #set_tests_properties("TOPP_AssayGeneratorMetabo_13_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_13") - - # use AccurateMassSearch data + fragment mass restriction + decoy generation (add_shift). - #add_test("TOPP_AssayGeneratorMetabo_14" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -sirius_executable "${SIRIUS_BINARY}" -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input.mzML -in_id ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input.featureXML -out AssayGeneratorMetabo_decoy_generation_output_add_shift.tmp.tsv -fragment_annotation sirius -decoy_generation -decoy_generation_method add_shift -use_exact_mass -transition_threshold 3.0 -min_transitions 1 -max_transitions 3 -min_fragment_mz 100 -max_fragment_mz 900 -preprocessing:filter_by_num_masstraces 1 -preprocessing:precursor_mz_tolerance 10 -preprocessing:precursor_mz_tolerance_unit ppm -preprocessing:feature_only -sirius:profile qtof -sirius:compound_timeout 100) - #add_test("TOPP_AssayGeneratorMetabo_14_out1" ${DIFF} -in1 AssayGeneratorMetabo_decoy_generation_output_add_shift.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_output_add_shift.tsv -whitelist "0_2_Proquinazid_decoy_[M+H]+_608_0") - #set_tests_properties("TOPP_AssayGeneratorMetabo_14" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_13") - #set_tests_properties("TOPP_AssayGeneratorMetabo_14_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_14") - - # use AccurateMassSearch data + fragment mass restriction + decoy generation (both). - #add_test("TOPP_AssayGeneratorMetabo_15" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -sirius_executable "${SIRIUS_BINARY}" -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input.mzML -in_id ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input.featureXML -out AssayGeneratorMetabo_decoy_generation_output_both.tmp.tsv -fragment_annotation sirius -decoy_generation -decoy_generation_method both -use_exact_mass -transition_threshold 3.0 -min_transitions 1 -max_transitions 3 -min_fragment_mz 100 -max_fragment_mz 900 -preprocessing:filter_by_num_masstraces 1 -preprocessing:precursor_mz_tolerance 10 -preprocessing:precursor_mz_tolerance_unit ppm -preprocessing:feature_only -sirius:profile qtof -sirius:compound_timeout 100) - #add_test("TOPP_AssayGeneratorMetabo_15_out1" ${DIFF} -in1 AssayGeneratorMetabo_decoy_generation_output_both.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_output_both.tsv -whitelist "0_2_Proquinazid_decoy_[M+H]+_608_0") - #set_tests_properties("TOPP_AssayGeneratorMetabo_15" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_14") - #set_tests_properties("TOPP_AssayGeneratorMetabo_15_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_15") - - # use AccurateMassSearch data + fragment mass restriction + decoy generation (both). - #add_test("TOPP_AssayGeneratorMetabo_16" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -sirius_executable "${SIRIUS_BINARY}" -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input.mzML -in_id ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input_multids.featureXML -out AssayGeneratorMetabo_decoy_generation_output_both_multids.tmp.tsv -fragment_annotation sirius -decoy_generation -decoy_generation_method both -use_exact_mass -transition_threshold 3.0 -min_transitions 1 -max_transitions 3 -min_fragment_mz 100 -max_fragment_mz 900 -preprocessing:filter_by_num_masstraces 1 -preprocessing:precursor_mz_tolerance 10 -preprocessing:precursor_mz_tolerance_unit ppm -preprocessing:feature_only -sirius:profile qtof -sirius:compound_timeout 100) - #add_test("TOPP_AssayGeneratorMetabo_16_out1" ${DIFF} -in1 AssayGeneratorMetabo_decoy_generation_output_both_multids.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_output_both_multids.tsv -whitelist "0_2_Second,Calonectrin,Millefin,3,17beta-dihydroxy-5,9-dioxo-4,5-9,10-diseco-androsta-1(10),2-dien-4-oicacid,(1E,4Z)-14,15-dihydroxy-8alpha-(2-methylpropanoyloxy)germacra-1(10),4,11(13)-trieno-12,6alpha-lactone,?_decoy_[M+H]+_608_0") - #set_tests_properties("TOPP_AssayGeneratorMetabo_16" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_15") - #set_tests_properties("TOPP_AssayGeneratorMetabo_16_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_16") - - # use AccurateMassSearch data + internal linking + decoy generation (both) - test filter based on total occurrence - #add_test("TOPP_AssayGeneratorMetabo_17" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -sirius_executable "${SIRIUS_BINARY}" -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input.mzML ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input.mzML ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input.mzML -in_id ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input.featureXML ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input_1.featureXML ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input_2.featureXML -out AssayGeneratorMetabo_decoy_generation_linking_output_both.tmp.tsv -fragment_annotation sirius -ambiguity_resolution_mz_tolerance 10.0 -ambiguity_resolution_mz_tolerance_unit Da -ambiguity_resolution_rt_tolerance 10.0 -total_occurrence_filter 0.8 -decoy_generation -decoy_generation_method both -use_exact_mass -transition_threshold 3.0 -min_transitions 1 -max_transitions 6 -preprocessing:filter_by_num_masstraces 1 -preprocessing:precursor_mz_tolerance 10 -preprocessing:precursor_mz_tolerance_unit ppm -preprocessing:feature_only -sirius:profile qtof -sirius:compound_timeout 100) - #add_test("TOPP_AssayGeneratorMetabo_17_out1" ${DIFF} -in1 AssayGeneratorMetabo_decoy_generation_linking_output_both.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_linking_output_both.tsv -whitelist "0_2_Proquinazid_decoy_[M+H]+_614_1") - #set_tests_properties("TOPP_AssayGeneratorMetabo_17" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_16") - #set_tests_properties("TOPP_AssayGeneratorMetabo_17_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_17") - - # use AccurateMassSearch data + internal linking + decoy generation (both) - test filter based on molecular formula and adduct - #add_test("TOPP_AssayGeneratorMetabo_18" ${TOPP_BIN_PATH}/AssayGeneratorMetabo -test -sirius_executable "${SIRIUS_BINARY}" -in ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input.mzML ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input.mzML ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input.mzML -in_id ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input.featureXML ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input_1.featureXML ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_input_2.featureXML -out AssayGeneratorMetabo_decoy_generation_linking_moladd_output_both.tmp.tsv -fragment_annotation sirius -ambiguity_resolution_mz_tolerance 10.0 -ambiguity_resolution_mz_tolerance_unit Da -ambiguity_resolution_rt_tolerance 10.0 -decoy_generation -decoy_generation_method both -use_exact_mass -transition_threshold 3.0 -min_transitions 1 -max_transitions 6 -preprocessing:filter_by_num_masstraces 1 -preprocessing:precursor_mz_tolerance 10 -preprocessing:precursor_mz_tolerance_unit ppm -preprocessing:feature_only -sirius:profile qtof -sirius:compound_timeout 100) - #add_test("TOPP_AssayGeneratorMetabo_18_out1" ${DIFF} -in1 AssayGeneratorMetabo_decoy_generation_linking_moladd_output_both.tmp.tsv -in2 ${DATA_DIR_TOPP}/AssayGeneratorMetabo_decoy_generation_linking_moladd_output_both.tsv -whitelist "0_2_Proquinazid_decoy_[M+H]+_614_1") - #set_tests_properties("TOPP_AssayGeneratorMetabo_18" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_17") - #set_tests_properties("TOPP_AssayGeneratorMetabo_18_out1" PROPERTIES DEPENDS "TOPP_AssayGeneratorMetabo_18") - endif() - - # Note that with FingerID, output for compound 79 without feature only - if (ENABLE_FINGERID_TEST) - add_test("TOPP_SiriusAdapter_4" ${TOPP_BIN_PATH}/SiriusAdapter -test -sirius_executable "${SIRIUS_BINARY}" -in ${DATA_DIR_TOPP}/THIRDPARTY/SiriusAdapter_2_input.mzML -in_featureinfo ${DATA_DIR_TOPP}/THIRDPARTY/SiriusAdapter_2_input.featureXML -out_sirius SiriusAdapter_4_output.tmp.mzTab -out_fingerid SiriusAdapter_4_foutput.tmp.mzTab -sirius:profile qtof -sirius:db ALL -fingerid:db BIO -read_sirius_stdout) - add_test("TOPP_SiriusAdapter_4_out" ${DIFF} -in1 SiriusAdapter_4_foutput.tmp.mzTab -in2 ${DATA_DIR_TOPP}/THIRDPARTY/SiriusAdapter_4_foutput.mzTab -whitelist "MTD" "C10H18Cl2N6O4S2") - set_tests_properties("TOPP_SiriusAdapter_4_out" PROPERTIES DEPENDS "TOPP_SiriusAdapter_4") - endif() - -endif() - #------------------------------------------------------------------------------ if (NOT (${NOVOR_BINARY} STREQUAL "NOVOR_BINARY-NOTFOUND")) add_test("TOPP_NovorAdapter_1" ${TOPP_BIN_PATH}/NovorAdapter -test -java_memory 512 -executable "${NOVOR_BINARY}" -in ${DATA_DIR_TOPP}/THIRDPARTY/NovorAdapter_in.mzML -out NovorAdapter_1_out.tmp.idXML -variable_modifications "Acetyl (K)" -fixed_modifications "Carbamidomethyl (C)" -forbiddenResidues "I") diff --git a/src/topp/AssayGeneratorMetabo.cpp b/src/topp/AssayGeneratorMetabo.cpp index 302e8196304..bded4cd119d 100644 --- a/src/topp/AssayGeneratorMetabo.cpp +++ b/src/topp/AssayGeneratorMetabo.cpp @@ -2,30 +2,20 @@ // SPDX-License-Identifier: BSD-3-Clause // // -------------------------------------------------------------------------- -// $Maintainer: Oliver Alka $ +// $Maintainer: Oliver Alka, Axel Walter $ // $Authors: Oliver Alka $ // -------------------------------------------------------------------------- -#include +#include #include #include #include -#include #include -#include #include -#include #include #include -#include -#include #include #include -#include -#include -#include -#include -#include using namespace OpenMS; @@ -33,54 +23,51 @@ using namespace OpenMS; //Doxygen docu //---------------------------------------------------------- /** -@page TOPP_AssayGeneratorMetabo AssayGeneratorMetabo - -@brief Generates an assay library using DDA data (Metabolomics) - -
        -
      - - - - - - - - - - -
      potential predecessor tools - → AssayGeneratorMetabo → potential successor tools -
      @ref TOPP_FeatureFinderMetabo OpenSWATH pipeline
      @ref TOPP_AccurateMassSearch
      - - -Build an assay library from DDA data (MS and MS/MS) (mzML). -Please provide a list of features found in the data (featureXML). - -Features can be detected using the FeatureFinderMetabo (FFM) and identifcation information -can be added using the AccurateMassSearch feautreXML output. - -If the FFM featureXML is provided the "use_known_unknowns" flag is used automatically. - -Internal procedure AssayGeneratorMetabo: \n -1. Input mzML and featureXML \n -2. Reannotate precursor mz and intensity \n -3. Filter feature by number of masstraces \n -4. Assign precursors to specific feature (FeatureMapping) \n -5. Extract feature meta information (if possible) \n -6. Find MS2 spectrum with highest intensity precursor for one feature \n -7. Dependent on the method fragment annotation via SIRIUS is used for transition -extraction. \n -If not fragment annotation is performed either the MS2 with the highest intensity precursor or a consensus spectrum - can be used for the transition extractuib. \n -8. Calculate thresholds (maximum and minimum intensity for transition peak) \n -9. Extract and write transitions (tsv, traml) \n - -The command line parameters of this tool are: -@verbinclude TOPP_SiriusAdapter.cli -INI file documentation of this tool: -@htmlinclude TOPP_SiriusAdapter.html - */ + @page TOPP_AssayGeneratorMetabo AssayGeneratorMetabo + + @brief Generates an assay library using DDA data (Metabolomics) + +
      + + + + + + + + + + + +
      potential predecessor tools + → AssayGeneratorMetabo → potential successor tools +
      @ref TOPP_FeatureFinderMetabo OpenSWATH pipeline
      @ref TOPP_AccurateMassSearch
      +
      + + Build an assay library from DDA data (MS and MS/MS) (mzML). + Please provide a list of features found in the data (featureXML). + + Features can be detected using the FeatureFinderMetabo (FFM) and identifcation information + can be added using the AccurateMassSearch featureXML output. + + If the FeatureFinderMetabo featureXML does not contain any identifications the "use_known_unknowns" flag is used automatically. + + Internal procedure AssayGeneratorMetabo: \n + 1. Input mzML and featureXML \n + 2. Reannotate precursor mz and intensity \n + 3. Filter feature by number of masstraces \n + 4. Assign precursors to specific feature (FeatureMapping) \n + 5. Extract feature meta information (if possible) \n + 6. Find MS2 spectrum with highest intensity precursor for one feature \n + 7. Annotation is performed either the MS2 with the highest intensity precursor or a consensus spectrum can be used for the transition extraction. \n + 8. Calculate thresholds (maximum and minimum intensity for transition peak) \n + 9. Extract and write transitions (tsv, traml) + + The command line parameters of this tool are: + @verbinclude TOPP_AssayGeneratorMetabo.cli + INI file documentation of this tool: + @htmlinclude TOPP_AssayGeneratorMetabo.html +*/ /// @cond TOPPCLASSES @@ -94,26 +81,21 @@ class TOPPAssayGeneratorMetabo : {} private: - SiriusAdapterAlgorithm algorithm; + SiriusExportAlgorithm sirius_export_algorithm; protected: void registerOptionsAndFlags_() override { - registerInputFile_("sirius_executable", "", "", "The Sirius executable. Provide a full or relative path, or make sure it can be found in your PATH environment.", false, false); - registerInputFileList_("in", "", StringList(), "MzML input file(s) used for assay library generation"); setValidFormats_("in", ListUtils::create("mzML")); - registerInputFileList_("in_id", "", StringList(), "FeatureXML input file(s) containing identification information (e.g. AccurateMassSearch)"); - setValidFormats_("in_id", ListUtils::create("featureXML")); + registerInputFileList_("in_featureinfo", "", StringList(), "FeatureXML input file(s) containing identification information (e.g. AccurateMassSearch)"); + setValidFormats_("in_featureinfo", ListUtils::create("featureXML")); registerOutputFile_("out", "", "", "Assay library output file"); setValidFormats_("out", ListUtils::create("tsv,traML,pqp")); - registerStringOption_("fragment_annotation", "", "sirius", "Fragment annotation method", false); - setValidStrings_("fragment_annotation", ListUtils::create("none,sirius")); - registerDoubleOption_("ambiguity_resolution_mz_tolerance", "", 10.0, "Mz tolerance for the resolution of identification ambiguity over multiple files", false); registerStringOption_("ambiguity_resolution_mz_tolerance_unit", "", "ppm", "Unit of the ambiguity_resolution_mz_tolerance", false, true); setValidStrings_("ambiguity_resolution_mz_tolerance_unit", ListUtils::create("ppm,Da")); @@ -122,27 +104,10 @@ class TOPPAssayGeneratorMetabo : setMinFloat_("total_occurrence_filter", 0.0); setMaxFloat_("total_occurrence_filter", 1.0); - registerDoubleOption_("fragment_annotation_score_threshold", "", 0.80, "Filters annotations based on the explained intensity of the peaks in a spectrum", false); - setMinFloat_("fragment_annotation_score_threshold", 0.0); - setMaxFloat_("fragment_annotation_score_threshold", 1.0); - - registerFlag_("decoy_generation", "Decoys will be generated using the fragmentation tree re-rooting approach. This option does only work in combination with the fragment annotation via Sirius.", false); - - registerStringOption_("decoy_generation_method", "", "original", "Uses different methods for decoy generation. Basis for the method is the fragmentation-tree re-rooting approach ('original'). This approach can be extended by using 'resolve_overlap', which will resolve overlapping fragments of the highest intensity fragments chosen, by adding -CH2 mass to the overlapping fragments. 'Add_shift' will add a -CH2 mass shift to the target fragments and use them as additional decoys if fragmentation-tree re-rooting failed. 'Both' combines the extended methods (resolve_overlap, add_shift).",false); - setValidStrings_("decoy_generation_method", ListUtils::create("original,resolve_overlap,add_shift,both")); - registerStringOption_("method", "", "highest_intensity", "Spectrum with the highest precursor intensity or a consensus spectrum is used for assay library construction (if no fragment annotation is used).",false); setValidStrings_("method", ListUtils::create("highest_intensity,consensus_spectrum")); - registerFlag_("use_exact_mass", "Use exact mass for precursor and fragment annotations", false); registerFlag_("exclude_ms2_precursor", "Excludes precursor in ms2 from transition list", false); - - // preprocessing - registerDoubleOption_("precursor_mz_distance", "", 0.0001, "Max m/z distance of the precursor entries of two spectra to be merged in [Da].", false); - registerDoubleOption_("precursor_recalibration_window", "", 0.01, "Tolerance window for precursor selection (Annotation of precursor mz and intensity)", false, true); - registerStringOption_("precursor_recalibration_window_unit", "", "Da", "Unit of the precursor_mz_tolerance_annotation", false, true); - setValidStrings_("precursor_recalibration_window_unit", ListUtils::create("Da,ppm")); - registerDoubleOption_("consensus_spectrum_precursor_rt_tolerance", "", 5, "Tolerance window (left and right) for precursor selection [seconds], for consensus spectrum generation (only available without fragment annotation)", false); registerFlag_("use_known_unknowns", "Use features without identification information", false); // transition extraction @@ -152,26 +117,38 @@ class TOPPAssayGeneratorMetabo : registerDoubleOption_("transition_threshold", "", 5, "Further transitions need at least x% of the maximum intensity (default 5%)", false); registerDoubleOption_("min_fragment_mz", "", 0.0, "Minimal m/z of a fragment ion choosen as a transition", false, true); registerDoubleOption_("max_fragment_mz", "", 2000.0, "Maximal m/z of a fragment ion choosen as a transition" , false, true); + - registerTOPPSubsection_("deisotoping", "deisotoping"); - registerFlag_("deisotoping:use_deisotoper", "Use Deisotoper (if no fragment annotation is used)", false); - registerDoubleOption_("deisotoping:fragment_tolerance", "", 1, "Tolerance used to match isotopic peaks", false); - registerStringOption_("deisotoping:fragment_unit", "", "ppm", "Unit of the fragment tolerance", false); - setValidStrings_("deisotoping:fragment_unit", ListUtils::create("ppm,Da")); - registerIntOption_("deisotoping:min_charge", "", 1, "The minimum charge considered", false); - setMinInt_("deisotoping:min_charge", 1); - registerIntOption_("deisotoping:max_charge", "", 1, "The maximum charge considered", false); - setMinInt_("deisotoping:max_charge", 1); - registerIntOption_("deisotoping:min_isopeaks", "", 2, "The minimum number of isotopic peaks (at least 2) required for an isotopic cluster", false); - setMinInt_("deisotoping:min_isopeaks", 2); - registerIntOption_("deisotoping:max_isopeaks", "", 3, "The maximum number of isotopic peaks (at least 2) considered for an isotopic cluster", false); - setMinInt_("deisotoping:max_isopeaks", 3); - registerFlag_("deisotoping:keep_only_deisotoped", "Only monoisotopic peaks of fragments with isotopic pattern are retained", false); - registerFlag_("deisotoping:annotate_charge", "Annotate the charge to the peaks", false); - - // sirius - registerFullParam_(algorithm.getDefaults()); - registerStringOption_("out_workspace_directory", "", "", "Output directory for SIRIUS workspace", false); + // precursor + addEmptyLine_(); + registerDoubleOption_("precursor_mz_distance", "", 0.0001, "Max m/z distance of the precursor entries of two spectra to be merged in [Da].", false); + registerDoubleOption_("precursor_recalibration_window", "", 0.01, "Tolerance window for precursor selection (Annotation of precursor mz and intensity)", false, true); + registerStringOption_("precursor_recalibration_window_unit", "", "Da", "Unit of the precursor_mz_tolerance_annotation", false, true); + setValidStrings_("precursor_recalibration_window_unit", ListUtils::create("Da,ppm")); + registerDoubleOption_("precursor_consensus_spectrum_rt_tolerance", "", 5, "Tolerance window (left and right) for precursor selection [seconds], for consensus spectrum generation (only available without fragment annotation)", false); + + addEmptyLine_(); + registerFlag_("deisotoping_use_deisotoper", "Use Deisotoper (if no fragment annotation is used)", false); + registerDoubleOption_("deisotoping_fragment_tolerance", "", 1, "Tolerance used to match isotopic peaks", false); + registerStringOption_("deisotoping_fragment_unit", "", "ppm", "Unit of the fragment tolerance", false); + setValidStrings_("deisotoping_fragment_unit", ListUtils::create("ppm,Da")); + registerIntOption_("deisotoping_min_charge", "", 1, "The minimum charge considered", false); + setMinInt_("deisotoping_min_charge", 1); + registerIntOption_("deisotoping_max_charge", "", 1, "The maximum charge considered", false); + setMinInt_("deisotoping_max_charge", 1); + registerIntOption_("deisotoping_min_isopeaks", "", 2, "The minimum number of isotopic peaks (at least 2) required for an isotopic cluster", false); + setMinInt_("deisotoping_min_isopeaks", 2); + registerIntOption_("deisotoping_max_isopeaks", "", 3, "The maximum number of isotopic peaks (at least 2) considered for an isotopic cluster", false); + setMinInt_("deisotoping_max_isopeaks", 3); + registerFlag_("deisotoping_keep_only_deisotoped", "Only monoisotopic peaks of fragments with isotopic pattern are retained", false); + registerFlag_("deisotoping_annotate_charge", "Annotate the charge to the peaks", false); + + addEmptyLine_(); + auto defaults = sirius_export_algorithm.getDefaults(); + defaults.remove("isotope_pattern_iterations"); + defaults.remove("no_masstrace_info_isotope_pattern"); + + registerFullParam_(defaults); } ExitCodes main_(int, const char **) override @@ -182,133 +159,41 @@ class TOPPAssayGeneratorMetabo : // param AssayGeneratorMetabo StringList in = getStringList_("in"); - StringList id = getStringList_("in_id"); + StringList id = getStringList_("in_featureinfo"); String out = getStringOption_("out"); - String fragment_annotation = getStringOption_("fragment_annotation"); String method = getStringOption_("method"); - bool use_fragment_annotation = fragment_annotation == "sirius" ? true : false; double ar_mz_tol = getDoubleOption_("ambiguity_resolution_mz_tolerance"); String ar_mz_tol_unit_res = getStringOption_("ambiguity_resolution_mz_tolerance_unit"); double ar_rt_tol = getDoubleOption_("ambiguity_resolution_rt_tolerance"); double total_occurrence_filter = getDoubleOption_("total_occurrence_filter"); - double score_threshold = getDoubleOption_("fragment_annotation_score_threshold"); - bool decoy_generation = getFlag_("decoy_generation"); - if (decoy_generation && !use_fragment_annotation) - { - decoy_generation = false; - OPENMS_LOG_WARN << "Warning: Decoy generation was switched off, due to the use of no or an unsupported fragment annotation method." << std::endl; - } bool method_consensus_spectrum = method == "consensus_spectrum" ? true : false; - bool use_exact_mass = getFlag_("use_exact_mass"); bool exclude_ms2_precursor = getFlag_("exclude_ms2_precursor"); - - String decoy_generation_method = getStringOption_("decoy_generation_method"); - bool original = false; - bool resolve_overlap = false; - bool add_shift = false; - if (decoy_generation_method == "original" && decoy_generation) - { - OPENMS_LOG_INFO << "Decoy method: fragmentation tree re-rooting." << std::endl; - original = true; - } - else if (decoy_generation_method == "resolve_overlap" && decoy_generation) - { - OPENMS_LOG_INFO << "Decoy method: fragmentation tree re-rooting and overlap resolution." << std::endl; - resolve_overlap = true; - } - else if (decoy_generation_method == "add_shift" && decoy_generation) - { - OPENMS_LOG_INFO << "Decoy method: fragmentation tree re-rooting and addition of -CH2 mass shift where re-rooting was not possible." << std::endl; - add_shift = true; - } - else if (decoy_generation_method == "both" && decoy_generation) - { - OPENMS_LOG_INFO << "Decoy method: fragmentation tree re-rooting with overlap resolution and addition of -CH2 mass shift where re-rooting was not possible." << std::endl; - resolve_overlap = true; - add_shift = true; - } int min_transitions = getIntOption_("min_transitions"); int max_transitions = getIntOption_("max_transitions"); double min_fragment_mz = getDoubleOption_("min_fragment_mz"); double max_fragment_mz = getDoubleOption_("max_fragment_mz"); - - double consensus_spectrum_precursor_rt_tolerance = getDoubleOption_("consensus_spectrum_precursor_rt_tolerance"); + double consensus_spectrum_precursor_rt_tolerance = getDoubleOption_("precursor_consensus_spectrum_rt_tolerance"); double pre_recal_win = getDoubleOption_("precursor_recalibration_window"); String pre_recal_win_unit = getStringOption_("precursor_recalibration_window_unit"); bool ppm_recal = pre_recal_win_unit == "ppm" ? true : false; - double precursor_mz_distance = getDoubleOption_("precursor_mz_distance"); - double cosine_sim_threshold = getDoubleOption_("cosine_similarity_threshold"); double transition_threshold = getDoubleOption_("transition_threshold"); bool use_known_unknowns = getFlag_("use_known_unknowns"); // param deisotoper - bool use_deisotoper = getFlag_("deisotoping:use_deisotoper"); - double fragment_tolerance = getDoubleOption_("deisotoping:fragment_tolerance"); - String fragment_unit = getStringOption_("deisotoping:fragment_unit"); + bool use_deisotoper = getFlag_("deisotoping_use_deisotoper"); + double fragment_tolerance = getDoubleOption_("deisotoping_fragment_tolerance"); + String fragment_unit = getStringOption_("deisotoping_fragment_unit"); bool fragment_unit_ppm = fragment_unit == "ppm" ? true : false; - int min_charge = getIntOption_("deisotoping:min_charge"); - int max_charge = getIntOption_("deisotoping:max_charge"); - unsigned int min_isopeaks = getIntOption_("deisotoping:min_isopeaks"); - unsigned int max_isopeaks = getIntOption_("deisotoping:max_isopeaks"); - bool keep_only_deisotoped = getFlag_("deisotoping:keep_only_deisotoped"); - bool annotate_charge = getFlag_("deisotoping:annotate_charge"); - - // param SiriusAdapterAlgorithm - String sirius_executable = getStringOption_("sirius_executable"); + int min_charge = getIntOption_("deisotoping_min_charge"); + int max_charge = getIntOption_("deisotoping_max_charge"); + unsigned int min_isopeaks = getIntOption_("deisotoping_min_isopeaks"); + unsigned int max_isopeaks = getIntOption_("deisotoping_max_isopeaks"); + bool keep_only_deisotoped = getFlag_("deisotoping_keep_only_deisotoped"); + bool annotate_charge = getFlag_("deisotoping_annotate_charge"); - algorithm.updateExistingParameter(getParam_()); - - writeDebug_("Parameters passed to SiriusAdapterAlgorithm", algorithm.getParameters(), 3); - - // SIRIUS workspace (currently needed for fragmentation trees) - String sirius_workspace_directory = getStringOption_("out_workspace_directory"); - - // assess the SIRIUS executable from SIRIUS_PATH or the PATH - if (use_fragment_annotation && sirius_executable.empty()) - { - OPENMS_LOG_INFO << "Fragment annotation with SIRIUS should be performed, but no executable was provided via '-sirius_execuable'. \n" - << "Try to automatically assess the SIRIUS executable location." << std::endl; - - if (sirius_executable.empty()) - { - const char* sirius_env_var = std::getenv("SIRIUS_PATH"); // returns nullptr of not found - if (sirius_env_var == nullptr) - { - OPENMS_LOG_INFO << "SIRIUS executable could not be recovered from SIRIUS_PATH." << std::endl; - } - else - { - const String sirius_path(sirius_env_var); - sirius_executable = QFileInfo(sirius_path.toQString()).canonicalFilePath().toStdString(); - OPENMS_LOG_INFO << "Success: sirius_executable resolved to '" + sirius_executable + "'" << std::endl; - } - } - - // was not found in the SIRIUS_PATH - // assess the SIRIUS executable from the PATH - if (sirius_executable.empty()) - { - #ifdef OPENMS_WINDOWSPLATFORM - sirius_executable = "sirius.bat"; - #else - sirius_executable = "sirius"; - #endif - if (File::findExecutable(sirius_executable)) - { - OPENMS_LOG_INFO << "Success: sirius_executable resolved to '" + sirius_executable + "'" << std::endl; - } - else - { - throw Exception::InvalidValue(__FILE__, - __LINE__, - OPENMS_PRETTY_FUNCTION, - "FATAL: Executable of SIRIUS could not be found. Please either use SIRIUS_PATH env variable, add the Sirius directory to our PATH or provide the executable with -sirius_executable", - ""); - } - } - } + writeDebug_("Parameters passed to SiriusExportAlgorithm", sirius_export_algorithm.getParameters(), 3); //------------------------------------------------------------- // input and check @@ -403,10 +288,10 @@ class TOPPAssayGeneratorMetabo : // run masstrace filter and feature mapping FeatureMapping::FeatureMappingInfo fm_info; FeatureMapping::FeatureToMs2Indices feature_mapping; // reference to *basefeature in vector - algorithm.preprocessingSirius(id[file_counter], - spectra, - fm_info, - feature_mapping); + sirius_export_algorithm.preprocessing(id[file_counter], + spectra, + fm_info, + feature_mapping); // filter known_unkowns based on description (UNKNOWN) (AMS) std::map> feature_ms2_spectra_map = feature_mapping.assignedMS2; @@ -432,157 +317,73 @@ class TOPPAssayGeneratorMetabo : feature_mapping.assignedMS2 = known_features; } - vector< MetaboTargetedAssay::CompoundTargetDecoyPair > v_cmp_spec; - - if (use_fragment_annotation && !sirius_executable.empty()) + if (use_deisotoper) { - // make temporary files - SiriusAdapterAlgorithm::SiriusTemporaryFileSystemObjects sirius_tmp(debug_level_); - - // write msfile and store the compound information in CompoundInfo Object - vector v_cmpinfo; - SiriusMSFile::store(spectra, - sirius_tmp.getTmpMsFile(), - feature_mapping, - algorithm.isFeatureOnly(), - algorithm.getIsotopePatternIterations(), - algorithm.isNoMasstraceInfoIsotopePattern(), - v_cmpinfo); - - algorithm.logFeatureSpectraNumber(id[file_counter], - feature_mapping, - spectra); - - // calls SIRIUS and returns vector of paths to sirius folder structure - std::vector subdirs; - String out_csifingerid; - subdirs = algorithm.callSiriusQProcess(sirius_tmp.getTmpMsFile(), - sirius_tmp.getTmpOutDir(), - sirius_executable, - out_csifingerid, - decoy_generation); - - OPENMS_LOG_DEBUG << subdirs.size() << " spectra were annotated using SIRIUS." << std::endl; - - if (subdirs.empty()) - { - throw OpenMS::Exception::Postcondition(__FILE__,__LINE__, OPENMS_PRETTY_FUNCTION, "Sirius was executed, but an empty output was generated"); - } - - // sort vector path list - SiriusAdapterAlgorithm::sortSiriusWorkspacePathsByScanIndex(subdirs); - - // extract Sirius/Passatutto FragmentAnnotation and DecoyAnnotation from subdirs - // and resolve ambiguous identifications in one file based on the native_id_ids and the SIRIUS IsotopeTree_Score - vector annotated_spectra = - SiriusFragmentAnnotation::extractAndResolveSiriusAnnotations(subdirs, score_threshold, use_exact_mass); - - // combine compound information (SiriusMSFile) with annotated spectra (SiriusFragmentAnnotation) - v_cmp_spec = MetaboTargetedAssay::pairCompoundWithAnnotatedTDSpectraPairs(v_cmpinfo, annotated_spectra); - - // should the sirius workspace be retained - if (!sirius_workspace_directory.empty()) + bool make_single_charged = false; + for (auto& peakmap_it : spectra) { - // convert path to absolute path - QDir sw_dir(sirius_workspace_directory.toQString()); - sirius_workspace_directory = String(sw_dir.absolutePath()); - - // move tmp folder to new location - bool copy_status = File::copyDirRecursively(sirius_tmp.getTmpDir().toQString(), sirius_workspace_directory.toQString()); - if (copy_status) + MSSpectrum& spectrum = peakmap_it; + if (spectrum.getMSLevel() == 1) { - OPENMS_LOG_INFO << "Sirius Workspace was successfully copied to " << sirius_workspace_directory << std::endl; + continue; } - else + else { - OPENMS_LOG_INFO << "Sirius Workspace could not be copied to " << sirius_workspace_directory << ". Please run AssayGeneratorMetabo with debug >= 2." << std::endl; + Deisotoper::deisotopeAndSingleCharge(spectrum, + fragment_tolerance, + fragment_unit_ppm, + min_charge, + max_charge, + keep_only_deisotoped, + min_isopeaks, + max_isopeaks, + make_single_charged, + annotate_charge); } } } - else // use heuristic + + // remove peaks form MS2 which are at a higher mz than the precursor + 10 ppm + for (auto& peakmap_it : spectra) { - if (use_deisotoper) + MSSpectrum& spectrum = peakmap_it; + if (spectrum.getMSLevel() == 1) { - bool make_single_charged = false; - for (auto& peakmap_it : spectra) - { - MSSpectrum& spectrum = peakmap_it; - if (spectrum.getMSLevel() == 1) - { - continue; - } - else - { - Deisotoper::deisotopeAndSingleCharge(spectrum, - fragment_tolerance, - fragment_unit_ppm, - min_charge, - max_charge, - keep_only_deisotoped, - min_isopeaks, - max_isopeaks, - make_single_charged, - annotate_charge); - } - } + continue; } - - // remove peaks form MS2 which are at a higher mz than the precursor + 10 ppm - for (auto& peakmap_it : spectra) + else { - MSSpectrum& spectrum = peakmap_it; - if (spectrum.getMSLevel() == 1) - { - continue; - } - else + // if peak mz higher than precursor mz set intensity to zero + double prec_mz = spectrum.getPrecursors()[0].getMZ(); + double mass_diff = Math::ppmToMass(10.0, prec_mz); + for (auto& spec : spectrum) { - // if peak mz higher than precursor mz set intensity to zero - double prec_mz = spectrum.getPrecursors()[0].getMZ(); - double mass_diff = Math::ppmToMass(10.0, prec_mz); - for (auto& spec : spectrum) + if (spec.getMZ() > prec_mz + mass_diff) { - if (spec.getMZ() > prec_mz + mass_diff) - { - spec.setIntensity(0); - } + spec.setIntensity(0); } - spectrum.erase(remove_if(spectrum.begin(), - spectrum.end(), - InIntensityRange(1, - numeric_limits::max(), - true)), spectrum.end()); } + spectrum.erase(remove_if(spectrum.begin(), + spectrum.end(), + InIntensityRange(1, + numeric_limits::max(), + true)), spectrum.end()); } } // potential transitions of one file vector tmp_mta; - if (use_fragment_annotation) - { - tmp_mta = MetaboTargetedAssay::extractMetaboTargetedAssayFragmentAnnotation(v_cmp_spec, - transition_threshold, - min_fragment_mz, - max_fragment_mz, - use_exact_mass, - exclude_ms2_precursor, - file_counter); - - } - else // use heuristics - { - tmp_mta = MetaboTargetedAssay::extractMetaboTargetedAssay(spectra, - feature_mapping, - consensus_spectrum_precursor_rt_tolerance, - precursor_mz_distance, - cosine_sim_threshold, - transition_threshold, - min_fragment_mz, - max_fragment_mz, - method_consensus_spectrum, - exclude_ms2_precursor, - file_counter); - } + tmp_mta = MetaboTargetedAssay::extractMetaboTargetedAssay(spectra, + feature_mapping, + consensus_spectrum_precursor_rt_tolerance, + precursor_mz_distance, + cosine_sim_threshold, + transition_threshold, + min_fragment_mz, + max_fragment_mz, + method_consensus_spectrum, + exclude_ms2_precursor, + file_counter); // append potential transitions of one file to vector of all files v_mta.insert(v_mta.end(), tmp_mta.begin(), tmp_mta.end()); } // end iteration over all files @@ -614,35 +415,9 @@ class TOPPAssayGeneratorMetabo : // use MRMAssay methods for filtering MRMAssay assay; - // sort by highest intensity - filter: min/max transitions (targets), filter: max transitions (decoys) - // e.g. if only one decoy fragment is available it will not be filtered out! + // sort by highest intensity - filter assay.filterMinMaxTransitionsCompound(t_exp, min_transitions, max_transitions); - // remove decoys which do not have a respective target after min/max transition filtering - // based on the TransitionGroupID (similar for targets "0_Acephate_[M+H]+_0" and decoys "0_Acephate_decoy_[M+H]+_0") - if (use_fragment_annotation && decoy_generation) - { - assay.filterUnreferencedDecoysCompound(t_exp); - } - - // resolve overlapping target and decoy masses - // after selection of decoy masses based on highest intensity (arbitrary, since passatutto uses - // the intensities based on the previous fragmentation tree), overlapping masses between targets - // and decoys of one respective metabolite_adduct combination can be resolved by adding a CH2 mass - if (use_fragment_annotation && decoy_generation && !original) - { - const double chtwo_mass = EmpiricalFormula("CH2").getMonoWeight(); - vector mappings = MetaboTargetedTargetDecoy::constructTargetDecoyMassMapping(t_exp); - if (resolve_overlap) - { - MetaboTargetedTargetDecoy::resolveOverlappingTargetDecoyMassesByIndividualMassShift(t_exp, mappings, chtwo_mass); - } - if (add_shift) - { - MetaboTargetedTargetDecoy::generateMissingDecoysByMassShift(t_exp, mappings, chtwo_mass); - } - } - // sort TargetedExperiment by name (TransitionID) t_exp.sortTransitionsByName(); diff --git a/src/topp/AssayGeneratorMetaboSirius.cpp b/src/topp/AssayGeneratorMetaboSirius.cpp new file mode 100644 index 00000000000..5e1fb3af2d1 --- /dev/null +++ b/src/topp/AssayGeneratorMetaboSirius.cpp @@ -0,0 +1,358 @@ +// Copyright (c) 2002-2023, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin +// SPDX-License-Identifier: BSD-3-Clause +// +// -------------------------------------------------------------------------- +// $Maintainer: Oliver Alka, Axel Walter $ +// $Authors: Oliver Alka, Axel Walter $ +// -------------------------------------------------------------------------- + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace OpenMS; + +//------------------------------------------------------------- +//Doxygen docu +//---------------------------------------------------------- +/** + @page TOPP_AssayGeneratorMetaboSirius AssayGeneratorMetaboSirius + + @brief Generates an assay library from SIRIUS fragmentation trees (Metabolomics) + +
      + + + + + + + + + + + + + + +
      potential predecessor tools + → AssayGeneratorMetaboSirius → potential successor tools +
      @ref TOPP_FeatureFinderMetabo OpenSWATH pipeline
      @ref TOPP_AccurateMassSearch
      @ref TOPP_SiriusExport
      +
      + + Build an assay library from a SIRIUS project directory using fragmentation trees. + + - Use the SiriusExport TOPP tool with each samples mzML and featureXML files to generate a SIRIUS input ms file. + @code + SiriusExport -in sample.mzML -in_featureinfo sample.featureXML -out_ms sample.ms + @endcode + - Run SIRIUS externally with "--no-compression" flag and the formula, passatutto (optional, for decoy generation) and write-summaries tools. + - This tool was tested with the SIRIUS project directory generated with SIRIUS versions >= 5.5.1 and <= 5.8.6. + @code + sirius --input sample.ms --project sirius-project --maxmz 300 --no-compression formula passatutto write-summaries + @endcode + - Provide the path to SIRIUS project as input parameter for this tool. + + The command line parameters of this tool are: + @verbinclude TOPP_AssayGeneratorMetaboSirius.cli + INI file documentation of this tool: + @htmlinclude TOPP_AssayGeneratorMetaboSirius.html +*/ + +/// @cond TOPPCLASSES + +class TOPPAssayGeneratorMetaboSirius : + public TOPPBase, + private TransitionTSVFile +{ +public: + TOPPAssayGeneratorMetaboSirius() : + TOPPBase("AssayGeneratorMetaboSirius", "Assay library generation from a SIRIUS project directory (Metabolomics)") + {} + +protected: + + void registerOptionsAndFlags_() override + { + registerInputFile_("in", "", "", "SIRIUS project directory"); + + registerInputFile_("in_compoundinfo", "", "", "Compound info table (.tsv file)"); + setValidFormats_("in_compoundinfo", ListUtils::create("tsv")); + + registerOutputFile_("out", "", "", "Assay library output file"); + setValidFormats_("out", ListUtils::create("tsv,traML,pqp")); + + registerDoubleOption_("ambiguity_resolution_mz_tolerance", "", 10.0, "Mz tolerance for the resolution of identification ambiguity over multiple files", false); + registerStringOption_("ambiguity_resolution_mz_tolerance_unit", "", "ppm", "Unit of the ambiguity_resolution_mz_tolerance", false, true); + setValidStrings_("ambiguity_resolution_mz_tolerance_unit", ListUtils::create("ppm,Da")); + registerDoubleOption_("ambiguity_resolution_rt_tolerance", "", 10.0, "RT tolerance in seconds for the resolution of identification ambiguity over multiple files", false); + registerDoubleOption_("total_occurrence_filter", "", 0.1, "Filter compound based on total occurrence in analysed samples", false); + setMinFloat_("total_occurrence_filter", 0.0); + setMaxFloat_("total_occurrence_filter", 1.0); + + registerDoubleOption_("fragment_annotation_score_threshold", "", 0.80, "Filters annotations based on the explained intensity of the peaks in a spectrum", false); + setMinFloat_("fragment_annotation_score_threshold", 0.0); + setMaxFloat_("fragment_annotation_score_threshold", 1.0); + + + registerStringOption_("method", "", "highest_intensity", "Spectrum with the highest precursor intensity or a consensus spectrum is used for assay library construction (if no fragment annotation is used).",false); + setValidStrings_("method", ListUtils::create("highest_intensity,consensus_spectrum")); + + registerFlag_("use_exact_mass", "Use exact mass for precursor and fragment annotations", false); + registerFlag_("exclude_ms2_precursor", "Excludes precursor in ms2 from transition list", false); + registerFlag_("use_known_unknowns", "Use features without identification information", false); + + // transition extraction + registerIntOption_("min_transitions", "", 3, "Minimal number of transitions", false); + registerIntOption_("max_transitions", "", 6, "Maximal number of transitions", false); + registerDoubleOption_("transition_threshold", "", 5, "Further transitions need at least x% of the maximum intensity (default 5%)", false); + registerDoubleOption_("min_fragment_mz", "", 0.0, "Minimal m/z of a fragment ion choosen as a transition", false, true); + registerDoubleOption_("max_fragment_mz", "", 2000.0, "Maximal m/z of a fragment ion choosen as a transition" , false, true); + + // decoys + registerFlag_("decoy_generation", "Decoys will be generated using the fragmentation tree re-rooting approach. This option does only work in combination with the fragment annotation via Sirius.", false); + registerStringOption_("decoy_generation_method", "", "original", "Uses different methods for decoy generation. Basis for the method is the fragmentation-tree re-rooting approach ('original'). This approach can be extended by using 'resolve_overlap', which will resolve overlapping target/decoy fragments by adding -CH2 mass to the overlapping decoy fragments. 'generate_missing_decoys' will add a -CH2 mass shift to the target fragments and use them as decoys if fragmentation-tree re-rooting failed. 'Both' combines the extended methods (resolve_overlap, generate_missing_decoys).",false); + setValidStrings_("decoy_generation_method", ListUtils::create("original,resolve_overlap,generate_missing_decoys,both")); + registerDoubleOption_("decoy_resolution_mz_tolerance", "", 10.0, "Mz tolerance for the resolution of overlapping m/z values for targets and decoys of one compound.", false); + registerStringOption_("decoy_resolution_mz_tolerance_unit", "", "ppm", "Unit of the decoy_resolution_mz_tolerance", false, true); + setValidStrings_("decoy_resolution_mz_tolerance_unit", ListUtils::create("ppm,Da")); + } + + ExitCodes main_(int, const char **) override + { + //------------------------------------------------------------- + // Parsing parameters + //------------------------------------------------------------- + String sirius_project_directory = getStringOption_("in"); + String compoundinfo_file = getStringOption_("in_compoundinfo"); + String out = getStringOption_("out"); + String method = getStringOption_("method"); + double ar_mz_tol = getDoubleOption_("ambiguity_resolution_mz_tolerance"); + String ar_mz_tol_unit_res = getStringOption_("ambiguity_resolution_mz_tolerance_unit"); + double ar_rt_tol = getDoubleOption_("ambiguity_resolution_rt_tolerance"); + double total_occurrence_filter = getDoubleOption_("total_occurrence_filter"); + double score_threshold = getDoubleOption_("fragment_annotation_score_threshold"); + bool decoy_generation = getFlag_("decoy_generation"); + bool use_exact_mass = getFlag_("use_exact_mass"); + bool exclude_ms2_precursor = getFlag_("exclude_ms2_precursor"); + String decoy_generation_method = getStringOption_("decoy_generation_method"); + bool original = false; + bool resolve_overlap = false; + bool generate_missing_decoys = false; + if (decoy_generation_method == "original" && decoy_generation) + { + OPENMS_LOG_INFO << "Decoy method: fragmentation tree re-rooting." << std::endl; + original = true; + } + else if (decoy_generation_method == "resolve_overlap" && decoy_generation) + { + OPENMS_LOG_INFO << "Decoy method: fragmentation tree re-rooting and overlap resolution." << std::endl; + resolve_overlap = true; + } + else if (decoy_generation_method == "generate_missing_decoys" && decoy_generation) + { + OPENMS_LOG_INFO << "Decoy method: fragmentation tree re-rooting and filling missing decoys by addition of -CH2 mass shift where re-rooting was not possible." << std::endl; + generate_missing_decoys = true; + } + else if (decoy_generation_method == "both" && decoy_generation) + { + OPENMS_LOG_INFO << "Decoy method: fragmentation tree re-rooting with overlap resolution and addition of -CH2 mass shift to generate missing decoys where re-rooting was not possible." << std::endl; + resolve_overlap = true; + generate_missing_decoys = true; + } + double decoy_mz_tol = getDoubleOption_("decoy_resolution_mz_tolerance"); + String decoy_mz_tol_unit_res = getStringOption_("decoy_resolution_mz_tolerance_unit"); + int min_transitions = getIntOption_("min_transitions"); + int max_transitions = getIntOption_("max_transitions"); + double min_fragment_mz = getDoubleOption_("min_fragment_mz"); + double max_fragment_mz = getDoubleOption_("max_fragment_mz"); + double transition_threshold = getDoubleOption_("transition_threshold"); + bool use_known_unknowns = getFlag_("use_known_unknowns"); + + //------------------------------------------------------------- + // Get all subdirectories within the SIRIUS project directory + //------------------------------------------------------------- + std::vector subdirs; + QDirIterator it(sirius_project_directory.toQString(), QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::NoIteratorFlags); + while (it.hasNext()) + { + subdirs.emplace_back(it.next()); + } + OPENMS_LOG_DEBUG << subdirs.size() << " spectra were annotated using SIRIUS." << std::endl; + if (subdirs.empty()) + { + decoy_generation = false; + throw OpenMS::Exception::Postcondition(__FILE__,__LINE__, OPENMS_PRETTY_FUNCTION, "SIRIUS project directory is empty."); + } + + //------------------------------------------------------------- + // Get CompoundInfo objects from tsv file + //------------------------------------------------------------- + vector v_cmpinfo; + // get number of files from maximum file_index value + size_t n_files = 0; + CsvFile csv(compoundinfo_file, '\t'); + size_t row_count = csv.rowCount(); + for (size_t i = 1; i < row_count; ++i) { + StringList row_data; + csv.getRow(i, row_data); + SiriusMSFile::CompoundInfo cmp_info; + // Convert and assign each field from row_data to cmp_info's attributes + cmp_info.cmp = row_data[0]; + cmp_info.file_index = stoi(row_data[1]); + cmp_info.pmass = stod(row_data[2]); + cmp_info.rt = stod(row_data[4]); + cmp_info.fmz = stod(row_data[5]); + cmp_info.fid = row_data[6]; + cmp_info.formula = row_data[7]; + cmp_info.charge = stoi(row_data[8]); + cmp_info.ionization = row_data[9]; + cmp_info.des = row_data[10]; + cmp_info.source_file = row_data[12]; + cmp_info.m_ids_id = row_data[15]; + // add if "use_known_unknown" flag is set or compound name is not "UNKNOWN" + if (use_known_unknowns || cmp_info.des != "UNKNOWN") { + v_cmpinfo.push_back(cmp_info); + } + // update n_files with most recent (highest) file_index + n_files = cmp_info.file_index + 1; + } + + //-------------------------------------------------------------------------- + // Get list of MetaboTargetedAssay (compound with all possible transitions) + //-------------------------------------------------------------------------- + //get annotated spectra from SIRIUS project subdirs + vector annotated_spectra = + SiriusFragmentAnnotation::extractAndResolveSiriusAnnotations(subdirs, score_threshold, use_exact_mass, decoy_generation); + + // combine compound info with annotated spectra + vector v_cmp_spec; + v_cmp_spec = MetaboTargetedAssay::pairCompoundWithAnnotatedTDSpectraPairs(v_cmpinfo, annotated_spectra); + + // pair compound info with potential transitions (filtered by min/max, exclude precursor) + vector v_mta; + v_mta = MetaboTargetedAssay::extractMetaboTargetedAssayFragmentAnnotation(v_cmp_spec, + transition_threshold, + min_fragment_mz, + max_fragment_mz, + use_exact_mass, + exclude_ms2_precursor); + + //-------------------------------------------------------------------------------------------- + // Combine ambigous identifications (derived from consensus features with similar m/z and RT) + //-------------------------------------------------------------------------------------------- + // build feature maps (matching original raw data files by file_index) and perfom feature linking + std::unordered_map< UInt64, vector > ambiguity_groups = MetaboTargetedAssay::buildAmbiguityGroup(v_mta, ar_mz_tol, ar_rt_tol, ar_mz_tol_unit_res, n_files); + + // resolve identification ambiguity based on highest occurrence and highest intensity + MetaboTargetedAssay::resolveAmbiguityGroup(ambiguity_groups, total_occurrence_filter, n_files); + + //-------------------------------------------------------------------------------------------- + // Merge all transitions in a TargetedExperiment and filter number of transitions + //-------------------------------------------------------------------------------------------- + vector v_cmp; + vector v_rmt_all; + for (const auto &it : ambiguity_groups) + { + for (const auto &comp_it : it.second) + { + v_cmp.push_back(comp_it.potential_cmp); + v_rmt_all.insert(v_rmt_all.end(), comp_it.potential_rmts.begin(), comp_it.potential_rmts.end()); + } + } + + TargetedExperiment t_exp; + t_exp.setCompounds(v_cmp); + t_exp.setTransitions(v_rmt_all); + + // use MRMAssay methods for filtering + MRMAssay assay; + // sort by highest intensity - filter: min/max transitions (targets), filter: max transitions (decoys) + // e.g. if only one decoy fragment is available it will not be filtered out! + assay.filterMinMaxTransitionsCompound(t_exp, min_transitions, max_transitions); + + //------------------------------------------------------ + // Decoys + //------------------------------------------------------ + if (decoy_generation) + { + // remove decoys which do not have a respective target after min/max transition filtering + // based on the TransitionGroupID (similar for targets "0_Acephate_[M+H]+_0" and decoys "0_Acephate_decoy_[M+H]+_0") + assay.filterUnreferencedDecoysCompound(t_exp); + // resolve overlapping target and decoy masses + // after selection of decoy masses based on highest intensity (arbitrary, since passatutto uses + // the intensities based on the previous fragmentation tree), overlapping masses between targets + // and decoys of one respective metabolite_adduct combination can be resolved by adding a CH2 mass + if (!original) + { + const double chtwo_mass = EmpiricalFormula("CH2").getMonoWeight(); + vector mappings = MetaboTargetedTargetDecoy::constructTargetDecoyMassMapping(t_exp); + + if (resolve_overlap) + { + MetaboTargetedTargetDecoy::resolveOverlappingTargetDecoyMassesByDecoyMassShift(t_exp, mappings, chtwo_mass, decoy_mz_tol, decoy_mz_tol_unit_res); + } + if (generate_missing_decoys) + { + MetaboTargetedTargetDecoy::generateMissingDecoysByMassShift(t_exp, mappings, chtwo_mass); + } + } + } + + // sort TargetedExperiment by name (TransitionID) + t_exp.sortTransitionsByName(); + + //------------------------------------------------------------- + // writing output + //------------------------------------------------------------- + + String extension = out.substr(out.find_last_of(".")+1); + + if (extension == "tsv") + { + // validate and write + OpenMS::TransitionTSVFile::convertTargetedExperimentToTSV(out.c_str(), t_exp); + } + else if (extension == "traML") + { + // validate + OpenMS::TransitionTSVFile::validateTargetedExperiment(t_exp); + // write traML + FileHandler().storeTransitions(out, t_exp, {FileTypes::TRAML}); + } + else if (extension == "pqp") + { + //validate + OpenMS::TransitionTSVFile::validateTargetedExperiment(t_exp); + // write pqp + TransitionPQPFile pqp_out; + pqp_out.convertTargetedExperimentToPQP(out.c_str(), t_exp); + } + return EXECUTION_OK; + } +}; + +int main(int argc, const char ** argv) +{ + TOPPAssayGeneratorMetaboSirius tool; + return tool.main(argc, argv); +} +/// @endcond diff --git a/src/topp/SiriusAdapter.cpp b/src/topp/SiriusAdapter.cpp deleted file mode 100644 index c6578d0a4b4..00000000000 --- a/src/topp/SiriusAdapter.cpp +++ /dev/null @@ -1,302 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Oliver Alka $ -// $Authors: Oliver Alka, Timo Sachsenberg $ -// -------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace OpenMS; -using namespace std; - -//---------------------------------------------------------- -// Doxygen docu -//---------------------------------------------------------- -/** -@page TOPP_SiriusAdapter SiriusAdapter - -@brief De novo metabolite identification. - -CSI:FingerID (Compound Structure Identification: FingerID) is a method for searching a tandem mass spectrum of a small molecule (metabolite) in a database of molecular structures. - -To use this feature, the Sirius command line tool as well as a java installation is needed. - -Sirius can be found on https://bio.informatik.uni-jena.de/software/sirius/ - -Please use Sirius Version 4.0.1 - -If you want to use the software with the Gurobi solver or CPLEX instead of GLPK, please follow the instructions in the sirius manual. - -Internal procedure in SiriusAdapter \n -1. Input mzML (and optional featureXML) \n -2. Preprocessing (see below)\n -3. Parsed by SiriusMSConverter into (sirius internal) .ms format \n -4. Submission of .ms and additional parameters to wrapped SIRIUS CLI \n -5. Sirius output saved in internal temporary folder structure \n -6. Sirius output is parsed (SiriusMzTabWriter/CsiFingerIDMzTabWriter) \n -7. Merge corresponding output in one mzTab (out_sirius/out_fingerid) \n - -Preprocessing (featureXML): -By providing a featureXML, the feature information can be used for feature mapping. -Sirius will then process the internally merged MS2 spectra allocated to one feature (instead of all available MS2). -To reduce the feature space even further a masstrace filter can be set. -Additional adduct information can be provided using a featureXML from the MetaboliteAdductDecharger or AccurateMassSearch. - -The command line parameters of this tool are: -@verbinclude TOPP_SiriusAdapter.cli -INI file documentation of this tool: -@htmlinclude TOPP_SiriusAdapter.html - */ - -/// @cond TOPPCLASSES - -class TOPPSiriusAdapter : - public TOPPBase -{ - public: - TOPPSiriusAdapter() : - TOPPBase("SiriusAdapter", "Metabolite identification using single and tandem mass spectrometry", false, - { - {"Kai Duehrkop and Sebastian Boecker", - "Fragmentation trees reloaded", - "J Cheminform; 2016", - "10.1186/s13321-016-0116-8"}, - {"Kai Duehrkop, Huibin Shen, Marvin Meusel, Juho Rousu, and Sebastian Boecker", - "Searching molecular structure databases with tandem mass spectra using CSI:FingerID", - "Proceedings of the National Academy of Sciences; 2015", - "10.1073/pnas.1509788112"} - }) - {} - -private: - SiriusAdapterAlgorithm algorithm; - -protected: - - void registerOptionsAndFlags_() override - { - registerInputFile_("sirius_executable", "", - // choose the default value according to the platform where it will be executed -#ifdef OPENMS_WINDOWSPLATFORM - "sirius.bat", -#else - "sirius", -#endif - "The Sirius executable. Provide a full or relative path, or make sure it can be found in your PATH environment.", false, false, {"is_executable"}); - - registerInputFile_("in", "", "", "MzML Input file"); - setValidFormats_("in", ListUtils::create("mzML")); - - registerInputFile_("in_featureinfo", "", "", "FeatureXML input with feature and adduct information", false); - setValidFormats_("in_featureinfo", ListUtils::create("featureXML")); - - registerOutputFile_("out_sirius", "", "", "MzTab output file for SIRIUS results", false); - setValidFormats_("out_sirius", ListUtils::create("mzTab")); - - registerOutputFile_("out_fingerid","", "", "MzTab output file for CSI:FingerID, if this parameter is given, SIRIUS will search for a molecular structure using CSI:FingerID after determining the sum formula", false); - setValidFormats_("out_fingerid", ListUtils::create("mzTab")); - - registerOutputFile_("out_ms","", "", "Internal SIRIUS .ms format after OpenMS preprocessing", false); - setValidFormats_("out_ms", ListUtils::create("ms")); - - registerOutputFile_("out_annotated_spectra","", "", "Export spectra with fragment annotations from SIRIUS", false); - setValidFormats_("out_annotated_spectra", ListUtils::create("mzML")); - - registerStringOption_("out_project_space", "", "", "Output directory for SIRIUS project space", false); - - registerStringOption_("sirius_user_email", "", "", "E-mail for your SIRIUS account.", false); - - registerStringOption_("sirius_user_password", "", "", "Password for your SIRIUS account.", false); - - registerFlag_("converter_mode", "Use this flag in combination with the out_ms file to convert the input mzML and featureXML to a .ms file. Without further SIRIUS processing.", true); - - addEmptyLine_(); - - auto defaults = algorithm.getDefaults(); - defaults.remove("project:processors"); - - registerFullParam_(defaults); - } - - ExitCodes main_(int, const char **) override - { - //------------------------------------------------------------- - // Parsing parameters - //------------------------------------------------------------- - String sirius_executable = getStringOption_("sirius_executable"); - String in = getStringOption_("in"); - String out_sirius = getStringOption_("out_sirius"); - String out_csifingerid = getStringOption_("out_fingerid"); - String featureinfo = getStringOption_("in_featureinfo"); - String out_ms = getStringOption_("out_ms"); - String out_ann_spectra = getStringOption_("out_annotated_spectra"); - String sirius_workspace_directory = getStringOption_("out_project_space"); - String sirius_user_email = getStringOption_("sirius_user_email"); - String sirius_user_password = getStringOption_("sirius_user_password"); - bool converter_mode = getFlag_("converter_mode"); - - auto params = getParam_(); - if (debug_level_ > 3) - { - params.setValue("read_sirius_stdout", "true"); - } - params.setValue("project:processors", params.getValue("threads")); - algorithm.updateExistingParameter(params); - - writeDebug_("Parameters passed to SiriusAdapterAlgorithm", algorithm.getParameters(), 3); - - //------------------------------------------------------------- - // Calculations - //------------------------------------------------------------- - MSExperiment spectra; - FileHandler().loadExperiment(in, spectra, {FileTypes::MZML}, log_type_); - - // make temporary files - SiriusAdapterAlgorithm::SiriusTemporaryFileSystemObjects sirius_tmp(debug_level_); - - // run masstrace filter and feature mapping - FeatureMapping::FeatureMappingInfo fm_info; - FeatureMapping::FeatureToMs2Indices feature_mapping; // reference to *basefeature in Feature Maps stored in fm_info using a KDTree - algorithm.preprocessingSirius(featureinfo, - spectra, - fm_info, - feature_mapping); - - // returns Log of feature and/or spectra number - algorithm.logFeatureSpectraNumber(featureinfo, feature_mapping, spectra); - - // write msfile and store the compound information in CompoundInfo Object - vector v_cmpinfo; - SiriusMSFile::store(spectra, - sirius_tmp.getTmpMsFile(), - feature_mapping, - algorithm.isFeatureOnly(), - algorithm.getIsotopePatternIterations(), - algorithm.isNoMasstraceInfoIsotopePattern(), - v_cmpinfo); - - // converter_mode enabled (only needed for SiriusAdapter) - if (!out_ms.empty() && converter_mode) - { - QFile::copy(sirius_tmp.getTmpMsFile().toQString(), out_ms.toQString()); - - OPENMS_LOG_WARN << "SiriusAdapter was used in converter mode and is terminated after OpenMS preprocessing. \n" - "If you would like to run SIRIUS internally please disable the converter mode." << std::endl; - - return EXECUTION_OK; - } - - // log in to Sirius account if email and password are specified - if (!sirius_user_email.empty() && !sirius_user_password.empty()) - { - algorithm.logInSiriusAccount(sirius_executable, sirius_user_email, sirius_user_password); - } - else OPENMS_LOG_WARN << "No Sirius user account login information specified!" << std::endl; - - // calls Sirius and returns vector of paths to sirius folder structure - std::vector subdirs = algorithm.callSiriusQProcess(sirius_tmp.getTmpMsFile(), - sirius_tmp.getTmpOutDir(), - sirius_executable, - out_csifingerid, - false); - - //------------------------------------------------------------- - // writing output - //------------------------------------------------------------- - - if (subdirs.empty()) - { - throw OpenMS::Exception::Postcondition(__FILE__,__LINE__, OPENMS_PRETTY_FUNCTION, "Sirius was executed, but an empty output was generated"); - } - - // sort vector path list - SiriusAdapterAlgorithm::sortSiriusWorkspacePathsByScanIndex(subdirs); - // TODO make parameter(s)? - double score_threshold = 0.0; - bool use_exact_mass = false; - if (!out_ann_spectra.empty()) - { - MSExperiment annotations{}; - // extract Sirius FragmentAnnotations from subdirs - // do not resolve for concat native IDs (i.e., per feature) since we want to write the annotated spectrum for every candidate - // use 0.0 to not have a score_threshold - annotations.setSpectra(SiriusFragmentAnnotation::extractSiriusAnnotationsTgtOnly(subdirs, score_threshold, use_exact_mass, false)); - // TODO check if we have duplicate native IDs without resolution and if this is a problem - FileHandler().storeExperiment(out_ann_spectra, annotations, {FileTypes::MZML}, log_type_); - - // TODO remove the following or use it to add more info to the spectra - // combine compound information (SiriusMSFile) with annotated spectra (SiriusFragmentAnnotation) - //vector v_cmp_spec = MetaboTargetedAssay::pairCompoundWithAnnotatedSpectra(v_cmpinfo, annotated_spectra); - } - - // convert sirius_output to mztab and store file - const int candidates = algorithm.getNumberOfSiriusCandidates(); - MzTab sirius_result; - MzTabFile siriusfile; - SiriusMzTabWriter::read(subdirs, in, candidates, sirius_result); - siriusfile.store(out_sirius, sirius_result); - - // convert sirius_output to mztab and store file - if (!out_csifingerid.empty()) - { - MzTab csi_result; - MzTabFile csifile; - CsiFingerIdMzTabWriter::read(subdirs, in, candidates, csi_result); - csifile.store(out_csifingerid, csi_result); - } - - // should the sirius workspace be retained - if (!sirius_workspace_directory.empty()) - { - // convert path to absolute path - QDir sw_dir(sirius_workspace_directory.toQString()); - sirius_workspace_directory = String(sw_dir.absolutePath()); - - // move tmp folder to new location - bool copy_status = File::copyDirRecursively(sirius_tmp.getTmpDir().toQString(), sirius_workspace_directory.toQString()); - if (copy_status) - { - OPENMS_LOG_INFO << "Sirius workspace was successfully copied to " << sirius_workspace_directory << std::endl; - } - else - { - OPENMS_LOG_INFO << "Sirius workspace could not be copied to " << sirius_workspace_directory << ". Please run SiriusAdapter with debug >= 2." << std::endl; - } - } - - // should the ms file be retained (non-converter mode) - if (!out_ms.empty()) - { - QFile::copy(sirius_tmp.getTmpMsFile().toQString(), out_ms.toQString()); - OPENMS_LOG_INFO << "Preprocessed .ms files were moved to " << out_ms << std::endl; - } - return EXECUTION_OK; - } -}; - -int main(int argc, const char ** argv) -{ - TOPPSiriusAdapter tool; - return tool.main(argc, argv); -} - -/// @endcond diff --git a/src/topp/SiriusExport.cpp b/src/topp/SiriusExport.cpp new file mode 100644 index 00000000000..218c71f7bc2 --- /dev/null +++ b/src/topp/SiriusExport.cpp @@ -0,0 +1,137 @@ +// Copyright (c) 2002-2023, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin +// SPDX-License-Identifier: BSD-3-Clause +// +// -------------------------------------------------------------------------- +// $Maintainer: Axel Walter, Oliver Alka $ +// $Authors: Axel Walter, Oliver Alka, Timo Sachsenberg $ +// -------------------------------------------------------------------------- + +#include +#include +#include + +using namespace OpenMS; + +//---------------------------------------------------------- +// Doxygen docu +//---------------------------------------------------------- +/** + @page TOPP_SiriusExport SiriusExport + + @brief De novo metabolite identification. + + Exports an input file for SIRIUS, a tool for metabolomics data analysis with several subtools, each serving specific purposes: + + - SIRIUS: Identify molecular formula for each compound individually using fragmentation trees and isotope patterns. Output from this tool can be used to generate an OpenSwathAssay library with the AssayGeneratorMetabo TOPP tool. + - CSI:FingerID: This subtool is dedicated to predicting molecular structures based on tandem mass spectrometry (MS/MS) data. It utilizes a fragmentation tree approach for the annotation of fragment spectra. + - CANOPUS: Predict compound categories for each compound individually based on its predicted molecular fingerprint (CSI:FingerID) using CANOPUS. + - Passatutto: Compute decoy spectra based on the fragmentation trees of the given input spectra. If no molecular formula is provided in the input, the top scoring computed formula is used. Required to include decoys in an OpenSwathWorkflow assay library generated by the AssayGeneratorMetabo TOPP tool. + + Sirius can be found at https://bio.informatik.uni-jena.de/software/sirius/ + + Internal procedure in SiriusExport + 1. Input mzML (and optional featureXML) \n + Make sure to input the matching mzML and featureXML files in the correct order.\n + 2. Preprocessing \n + By providing a featureXML, the feature information can be used for feature mapping. \n + Sirius will then process the internally merged MS2 spectra allocated to one feature (instead of all available MS2). \n + To reduce the feature space even further a masstrace filter can be set. \n + Additional adduct information can be provided using a featureXML from the MetaboliteAdductDecharger or AccurateMassSearch. \n + 3. Parsed by SiriusMSConverter into (sirius internal) .ms format + + The command line parameters of this tool are: + @verbinclude TOPP_SiriusExport.cli + INI file documentation of this tool: + @htmlinclude TOPP_SiriusExport.html +*/ + +/// @cond TOPPCLASSES + +class TOPPSiriusExport : + public TOPPBase +{ + public: + TOPPSiriusExport() : + TOPPBase("SiriusExport", "Metabolite identification using single and tandem mass spectrometry", false, + { + {"Kai Duehrkop and Sebastian Boecker", + "Fragmentation trees reloaded", + "J Cheminform; 2016", + "10.1186/s13321-016-0116-8"}, + {"Kai Duehrkop, Huibin Shen, Marvin Meusel, Juho Rousu, and Sebastian Boecker", + "Searching molecular structure databases with tandem mass spectra using CSI:FingerID", + "Proceedings of the National Academy of Sciences; 2015", + "10.1073/pnas.1509788112"} + }) + {} + +protected: + + void registerOptionsAndFlags_() override + { + registerInputFileList_("in", "", StringList(), "MzML Input file(s)"); + setValidFormats_("in", ListUtils::create("mzML")); + + registerInputFileList_("in_featureinfo", "", StringList(), "FeatureXML input with feature and adduct information", false); + setValidFormats_("in_featureinfo", ListUtils::create("featureXML")); + + registerOutputFile_("out","", "", "Internal SIRIUS .ms format after OpenMS preprocessing"); + setValidFormats_("out", ListUtils::create("ms")); + + registerOutputFile_("out_compoundinfo","", "", "File (.tsv) with information on processed compounds which are associated with a feature. Required for AssayGeneratorMetaboSirius tool.", false); + setValidFormats_("out_compoundinfo", ListUtils::create("tsv")); + + addEmptyLine_(); + + registerFullParam_(SiriusExportAlgorithm().getDefaults()); + } + + ExitCodes main_(int, const char **) override + { + //------------------------------------------------------------- + // Parsing parameters + //------------------------------------------------------------- + StringList mzML_files = getStringList_("in"); + StringList featureXML_files = getStringList_("in_featureinfo"); + String out_ms = getStringOption_("out"); + String out_compoundinfo = getStringOption_("out_compoundinfo"); + + SiriusExportAlgorithm algorithm; + algorithm.setParameters(getParam_().copySubset(SiriusExportAlgorithm().getDefaults())); + + //------------------------------------------------------------- + // Check input + //------------------------------------------------------------- + if (featureXML_files.size() > 0 && mzML_files.size() != featureXML_files.size()) + { + throw Exception::MissingInformation(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, + "Number of .mzML do not match to the number of .featureXML files. \n Please check and provide the corresponding files."); + } + + if (!out_compoundinfo.empty() && featureXML_files.size() == 0) + { + OPENMS_LOG_WARN << "A compound info output file was specified but no feature maps provided. The resulting table will be empty." << std::endl; + } + + if (algorithm.isFeatureOnly() && featureXML_files.size() == 0) + { + throw Exception::IllegalArgument(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, + "No feature maps provided but preprocessing:feature_only flag set. Please provide featureXML files."); + } + + algorithm.run(mzML_files, + featureXML_files, + out_ms, + out_compoundinfo); + + return EXECUTION_OK; + } +}; + +int main(int argc, const char ** argv) +{ + TOPPSiriusExport tool; + return tool.main(argc, argv); +} + +/// @endcond diff --git a/src/topp/executables.cmake b/src/topp/executables.cmake index 3219b96063f..157cadff9ce 100644 --- a/src/topp/executables.cmake +++ b/src/topp/executables.cmake @@ -5,6 +5,7 @@ set(directory source/APPLICATIONS/TOPP) set(TOPP_executables AccurateMassSearch AssayGeneratorMetabo +AssayGeneratorMetaboSirius BaselineFilter ClusterMassTraces ClusterMassTracesByPrecursor @@ -124,7 +125,7 @@ SeedListGenerator SemanticValidator SequenceCoverageCalculator SimpleSearchEngine -SiriusAdapter +SiriusExport SpecLibCreator SpecLibSearcher SpectraFilterBernNorm diff --git a/tools/spellcheck/correct_words.txt b/tools/spellcheck/correct_words.txt index 26c1f1ef40b..c4b0e3f71b2 100644 --- a/tools/spellcheck/correct_words.txt +++ b/tools/spellcheck/correct_words.txt @@ -3208,7 +3208,7 @@ Selenocysteine Ser Serine SimTandem -SiriusAdapter +SiriusExport SparseVectors Specqual Spectronaut From da1f58334530977a03ac5028602b5b1d6e79c3fb Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Mon, 12 Feb 2024 11:14:55 +0100 Subject: [PATCH 154/242] base64 encode relesae announcement so it doesn't get mangled --- .github/workflows/openms_ci_matrix_full.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 0b5ca4ee76c..8bfea63a818 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -608,7 +608,7 @@ jobs: RELEASE_TEXT=$(cat releaseTextHeader.txt $GITHUB_WORKSPACE/changelog.txt releaseTextFooter.txt) RELEASE_TEXT_ESCAPED_QUOTES="${RELEASE_TEXT//\"/\\\"}" cat releaseTextHeader.txt $GITHUB_WORKSPACE/changelog.txt releaseTextFooter.txt > RELEASE_TEXT_GH.md - echo release_text_contents=`cat RELEASE_TEXT_GH.md` >> $GITHUB_OUTPUT + echo release_text_contents=`base64 RELEASE_TEXT_GH.md` >> $GITHUB_OUTPUT - name: run GHA release action. id: create_release @@ -1007,7 +1007,7 @@ jobs: env: GH_TOKEN: ${{ steps.app-token.outputs.token }} run: | - echo '${{ needs.deploy-installer.outputs.release_text_contents }}' >> OpenMS-website/content/en/news/release${{ needs.build-and-test.outputs.version_number }}.md + base64 '${{ needs.deploy-installer.outputs.release_text_contents }}' >> OpenMS-website/content/en/news/release${{ needs.build-and-test.outputs.version_number }}.md pushd OpenMS-website git config --local user.email "action@github.com" git config --local user.name "GitHub Action" From 992217671de087c7e99a0700f8d3346d023ba18e Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Mon, 12 Feb 2024 12:08:07 +0100 Subject: [PATCH 155/242] fix base64 wrapping --- .github/workflows/openms_ci_matrix_full.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 8bfea63a818..6986dc59277 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -608,7 +608,7 @@ jobs: RELEASE_TEXT=$(cat releaseTextHeader.txt $GITHUB_WORKSPACE/changelog.txt releaseTextFooter.txt) RELEASE_TEXT_ESCAPED_QUOTES="${RELEASE_TEXT//\"/\\\"}" cat releaseTextHeader.txt $GITHUB_WORKSPACE/changelog.txt releaseTextFooter.txt > RELEASE_TEXT_GH.md - echo release_text_contents=`base64 RELEASE_TEXT_GH.md` >> $GITHUB_OUTPUT + echo release_text_contents=`base64 -w0 RELEASE_TEXT_GH.md` >> $GITHUB_OUTPUT - name: run GHA release action. id: create_release @@ -1007,7 +1007,7 @@ jobs: env: GH_TOKEN: ${{ steps.app-token.outputs.token }} run: | - base64 '${{ needs.deploy-installer.outputs.release_text_contents }}' >> OpenMS-website/content/en/news/release${{ needs.build-and-test.outputs.version_number }}.md + echo '${{ needs.deploy-installer.outputs.release_text_contents }}' | base64 -d >> OpenMS-website/content/en/news/release${{ needs.build-and-test.outputs.version_number }}.md pushd OpenMS-website git config --local user.email "action@github.com" git config --local user.name "GitHub Action" From 9261109b740d559ba5157bce1cef1a194bc02b33 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Mon, 12 Feb 2024 12:32:47 +0100 Subject: [PATCH 156/242] Update src/openms/include/OpenMS/DATASTRUCTURES/DistanceMatrix.h --- src/openms/include/OpenMS/DATASTRUCTURES/DistanceMatrix.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openms/include/OpenMS/DATASTRUCTURES/DistanceMatrix.h b/src/openms/include/OpenMS/DATASTRUCTURES/DistanceMatrix.h index 0f6150a4b4a..87a17d35cb7 100644 --- a/src/openms/include/OpenMS/DATASTRUCTURES/DistanceMatrix.h +++ b/src/openms/include/OpenMS/DATASTRUCTURES/DistanceMatrix.h @@ -444,7 +444,7 @@ class DistanceMatrix template std::ostream& operator<<(std::ostream& os, const DistanceMatrix& matrix) { - using SizeType = DistanceMatrix::SizeType; + using SizeType = typename DistanceMatrix::SizeType; // we need to print a square matrix. So we set the width //std::ios_base::fmtflags flag_backup = os.setf(std::ios::scientific); // 'scientific' messes with the width; don't do it From eb08cd5a4553491f903cab5efeebbab3d30b3390 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Mon, 12 Feb 2024 13:33:22 +0100 Subject: [PATCH 157/242] we used env.run_name in a lot of places where we should have used github.ref_name, they are the same when run automatically, but not when run manually --- .github/workflows/openms_ci_matrix_full.yml | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 6986dc59277..fd00351a714 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -546,13 +546,13 @@ jobs: HOST: ${{ secrets.ARCHIVE_RRSYNC_HOST }} run: | echo "Upload" - if [[ "${{ env.RUN_NAME }}" == "nightly" ]]; then + if [[ "${{ github.ref_name }}" == "nightly" ]]; then folder=nightlyGHA # TODO: Change back when we deactivate Jenkins - elif [[ "${{ env.RUN_NAME }}" == "release/*" ]]; then - tmpfolder=${{ env.RUN_NAME }} + elif [[ "${{ github.ref_name }}" == "release/*" ]]; then + tmpfolder=${{ github.ref_name }} folder=${tmpfolder/release/RC_GHA} # TODO: change back to RC after proper release else - folder=experimental/${{ env.RUN_NAME }} + folder=experimental/${{ github.ref_name }} fi echo "Uploading installers to: " $folder @@ -616,7 +616,7 @@ jobs: uses: ncipollo/release-action@v1.14.0 with: bodyFile: RELEASE_TEXT_GH.md - tag: ${{ env.RUN_NAME }} + tag: ${{ github.ref_name }} draft: true artifactErrorsFailBuild: true makeLatest: ${{ inputs.mark_as_latest }} @@ -649,13 +649,13 @@ jobs: unzip $GITHUB_WORKSPACE/docs/documentation.zip -d $GITHUB_WORKSPACE/docs rm $GITHUB_WORKSPACE/docs/documentation.zip echo "Upload" - if [[ "${{ env.RUN_NAME }}" == "nightly" ]]; then + if [[ "${{ github.ref_name }}" == "nightly" ]]; then folder=nightlyGHA # TODO: Change back when we deactivate Jenkins - elif [[ "${{ env.RUN_NAME }}" == "release/*" ]]; then - tmpfolder=${{ env.RUN_NAME }} + elif [[ "${{ github.ref_name }}" == "release/*" ]]; then + tmpfolder=${{ github.ref_name }} folder=${tmpfolder/release/RC_GHA} # TODO: change back to RC after proper release else - folder=experimental/${{ env.RUN_NAME }} + folder=experimental/${{ github.ref_name }} fi mkdir -p ~/.ssh/ @@ -852,13 +852,13 @@ jobs: HOST: ${{ secrets.ARCHIVE_RRSYNC_HOST }} run: | echo "Upload" - if [[ "${{ env.RUN_NAME }}" == "nightly" ]]; then + if [[ "${{ github.ref_name }}" == "nightly" ]]; then folder=nightlyGHA - elif [[ "${{ env.RUN_NAME }}" =~ release/([0-9]+\.[0-9]+\.[0-9]+) ]]; then + elif [[ "${{ github.ref_name }}" =~ release/([0-9]+\.[0-9]+\.[0-9]+) ]]; then tmpfolder=${BASH_REMATCH[1]} folder=release/RC_GHA/$tmpfolder # TODO: change back to RC after proper release else - folder=experimental/${{ env.RUN_NAME }} + folder=experimental/${{ github.ref_name }} fi echo "Uploading KNIME site to:" $folder From 089007c36523594bc6f24edd200f8bd8a2423a1b Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Mon, 12 Feb 2024 13:41:44 +0100 Subject: [PATCH 158/242] fix typo --- doc/code_examples/Tutorial_FileIO_mzML.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/code_examples/Tutorial_FileIO_mzML.cpp b/doc/code_examples/Tutorial_FileIO_mzML.cpp index f720ccb8957..618aa7136de 100644 --- a/doc/code_examples/Tutorial_FileIO_mzML.cpp +++ b/doc/code_examples/Tutorial_FileIO_mzML.cpp @@ -19,7 +19,7 @@ int main(int argc, const char** argv) return 1; } String tutorial_data_path(argv[1]); - auto file_mzXML = tutorial_data_path + "/data/Tutorial_FileIO_indexed.mzXML"; + auto file_mzXML = tutorial_data_path + "/data/Tutorial_FileIO_indexed.mzML"; if (! File::exists(file_mzXML)) { std::cerr << "The file " << file_mzXML << " was not found. Did you provide the correct path?\n"; } From 7941ae476b2e9901ee6bdeff23a9eaf02b6d9b7e Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Mon, 12 Feb 2024 14:31:30 +0100 Subject: [PATCH 159/242] fixed evaluation of nightly status for where to upload --- .github/workflows/openms_ci_matrix_full.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index fd00351a714..aa5810dc480 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -548,7 +548,7 @@ jobs: echo "Upload" if [[ "${{ github.ref_name }}" == "nightly" ]]; then folder=nightlyGHA # TODO: Change back when we deactivate Jenkins - elif [[ "${{ github.ref_name }}" == "release/*" ]]; then + elif [[ "${{ github.ref_name }}" == release/* ]]; then tmpfolder=${{ github.ref_name }} folder=${tmpfolder/release/RC_GHA} # TODO: change back to RC after proper release else @@ -651,7 +651,7 @@ jobs: echo "Upload" if [[ "${{ github.ref_name }}" == "nightly" ]]; then folder=nightlyGHA # TODO: Change back when we deactivate Jenkins - elif [[ "${{ github.ref_name }}" == "release/*" ]]; then + elif [[ "${{ github.ref_name }}" == release/* ]]; then tmpfolder=${{ github.ref_name }} folder=${tmpfolder/release/RC_GHA} # TODO: change back to RC after proper release else From cbfa72e0eea35a25966854d23d9f3e1b345adfb4 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Mon, 12 Feb 2024 14:54:16 +0100 Subject: [PATCH 160/242] fix paths and variables for uploading. --- .github/workflows/openms_ci_matrix_full.yml | 50 +++++++++++++++------ 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index aa5810dc480..493302d9ba6 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -549,8 +549,7 @@ jobs: if [[ "${{ github.ref_name }}" == "nightly" ]]; then folder=nightlyGHA # TODO: Change back when we deactivate Jenkins elif [[ "${{ github.ref_name }}" == release/* ]]; then - tmpfolder=${{ github.ref_name }} - folder=${tmpfolder/release/RC_GHA} # TODO: change back to RC after proper release + folder=RC_GHA/${{ github.ref_name }} # TODO: change back to RC after proper release else folder=experimental/${{ github.ref_name }} fi @@ -569,11 +568,19 @@ jobs: USER: ${{ secrets.ARCHIVE_RRSYNC_USER }} HOST: ${{ secrets.ARCHIVE_RRSYNC_HOST }} run: | + if [[ "${{ github.ref_name }}" == "nightly" ]]; then + folder=nightlyGHA # TODO: Change back when we deactivate Jenkins + elif [[ "${{ github.ref_name }}" == release/* ]]; then + folder=RC_GHA/${{ github.ref_name }} # TODO: change back to RC after proper release + else + folder=experimental/${{ github.ref_name }} + fi + mkdir -p ~/.ssh/ echo "$PASS" > ~/.ssh/private.key sudo chmod 600 ~/.ssh/private.key - ln -s ./$tmpfolder latest #create link to the release folder - rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/OpenMSInstaller/release/RC_GHA" # FIXME REVERT + ln -s ./$folder latest #create link to the release folder + rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/OpenMSInstaller/RC_GHA" # FIXME REVERT - name: create RELEASE_TEXT id: mk_release_txt @@ -652,8 +659,7 @@ jobs: if [[ "${{ github.ref_name }}" == "nightly" ]]; then folder=nightlyGHA # TODO: Change back when we deactivate Jenkins elif [[ "${{ github.ref_name }}" == release/* ]]; then - tmpfolder=${{ github.ref_name }} - folder=${tmpfolder/release/RC_GHA} # TODO: change back to RC after proper release + folder=RC_GHA/${{ github.ref_name }} # TODO: change back to RC after proper release else folder=experimental/${{ github.ref_name }} fi @@ -673,11 +679,19 @@ jobs: USER: ${{ secrets.ARCHIVE_RRSYNC_USER }} HOST: ${{ secrets.ARCHIVE_RRSYNC_HOST }} run: | + if [[ "${{ github.ref_name }}" == "nightly" ]]; then + folder=nightlyGHA # TODO: Change back when we deactivate Jenkins + elif [[ "${{ github.ref_name }}" == release/* ]]; then + folder=RC_GHA/${{ github.ref_name }} # TODO: change back to RC after proper release + else + folder=experimental/${{ github.ref_name }} + fi + mkdir -p ~/.ssh/ echo "$PASS" > ~/.ssh/private.key sudo chmod 600 ~/.ssh/private.key - ln -s ./$tmpfolder latest #we can use the same link from above. - rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/Documentation/release/RC_GHA" # FIXME REVERT + ln -s ./$folder latest #we can use the same link from above. + rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/Documentation/RC_GHA" # FIXME REVERT # TODO create softlinks to latest nightly # TODO create and upload file hashes, at least for release candidate @@ -854,9 +868,9 @@ jobs: echo "Upload" if [[ "${{ github.ref_name }}" == "nightly" ]]; then folder=nightlyGHA - elif [[ "${{ github.ref_name }}" =~ release/([0-9]+\.[0-9]+\.[0-9]+) ]]; then - tmpfolder=${BASH_REMATCH[1]} - folder=release/RC_GHA/$tmpfolder # TODO: change back to RC after proper release + elif [[ "${{ github.ref_name }}" == release/* ]]; then + tmpfolder=${{ github.ref_name }} + folder=RC_GHA/$tmpfolder # TODO: change back to RC after proper release else folder=experimental/${{ github.ref_name }} fi @@ -881,11 +895,21 @@ jobs: USER: ${{ secrets.ARCHIVE_RRSYNC_USER }} HOST: ${{ secrets.ARCHIVE_RRSYNC_HOST }} run: | + echo "Upload" + if [[ "${{ github.ref_name }}" == "nightly" ]]; then + folder=nightlyGHA + elif [[ "${{ github.ref_name }}" == release/* ]]; then + tmpfolder=${{ github.ref_name }} + folder=RC_GHA/$tmpfolder # TODO: change back to RC after proper release + else + folder=experimental/${{ github.ref_name }} + fi + mkdir -p ~/.ssh/ echo "$PASS" > ~/.ssh/private.key sudo chmod 600 ~/.ssh/private.key - ln -s ./$tmpfolder latest #create link to the release folder - rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/knime-plugin/updateSite/release/RC_GHA" # FIXME REVERT + ln -s ./$folder latest #create link to the release folder + rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/knime-plugin/updateSite/RC_GHA" # FIXME REVERT do-release: if: inputs.do_release From eacc9169aacf216e58294f5f98d997c097af9008 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Mon, 12 Feb 2024 15:49:05 +0100 Subject: [PATCH 161/242] fixed links for latest --- .github/workflows/openms_ci_matrix_full.yml | 33 +++++++++------------ 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 493302d9ba6..7917dced589 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -203,7 +203,7 @@ jobs: fi else if [[ 'true' == ${{ inputs.mark_as_latest }} || 'true' == ${{inputs.announce_release}} ]]; then - echo "Can't mark as lates or announce release unless we do a release" + echo "Can't mark as latest or announce release unless we do a release" exit 1 fi fi @@ -568,12 +568,11 @@ jobs: USER: ${{ secrets.ARCHIVE_RRSYNC_USER }} HOST: ${{ secrets.ARCHIVE_RRSYNC_HOST }} run: | - if [[ "${{ github.ref_name }}" == "nightly" ]]; then - folder=nightlyGHA # TODO: Change back when we deactivate Jenkins - elif [[ "${{ github.ref_name }}" == release/* ]]; then - folder=RC_GHA/${{ github.ref_name }} # TODO: change back to RC after proper release + if [[ "${{ github.ref_name }}" == release/* ]]; then + folder=${{ github.ref_name }} # TODO: change back to RC after proper release else - folder=experimental/${{ github.ref_name }} + echo refusing to mark non-release branch as latest + exit 1 fi mkdir -p ~/.ssh/ @@ -679,12 +678,11 @@ jobs: USER: ${{ secrets.ARCHIVE_RRSYNC_USER }} HOST: ${{ secrets.ARCHIVE_RRSYNC_HOST }} run: | - if [[ "${{ github.ref_name }}" == "nightly" ]]; then - folder=nightlyGHA # TODO: Change back when we deactivate Jenkins - elif [[ "${{ github.ref_name }}" == release/* ]]; then - folder=RC_GHA/${{ github.ref_name }} # TODO: change back to RC after proper release + if [[ "${{ github.ref_name }}" == release/* ]]; then + folder=${{ github.ref_name }} # TODO: change back to RC after proper release else - folder=experimental/${{ github.ref_name }} + echo refusing to mark non-release branch as latest + exit 1 fi mkdir -p ~/.ssh/ @@ -869,8 +867,7 @@ jobs: if [[ "${{ github.ref_name }}" == "nightly" ]]; then folder=nightlyGHA elif [[ "${{ github.ref_name }}" == release/* ]]; then - tmpfolder=${{ github.ref_name }} - folder=RC_GHA/$tmpfolder # TODO: change back to RC after proper release + folder=RC_GHA/${{ github.ref_name }} # TODO: change back to RC after proper release else folder=experimental/${{ github.ref_name }} fi @@ -896,13 +893,11 @@ jobs: HOST: ${{ secrets.ARCHIVE_RRSYNC_HOST }} run: | echo "Upload" - if [[ "${{ github.ref_name }}" == "nightly" ]]; then - folder=nightlyGHA - elif [[ "${{ github.ref_name }}" == release/* ]]; then - tmpfolder=${{ github.ref_name }} - folder=RC_GHA/$tmpfolder # TODO: change back to RC after proper release + if [[ "${{ github.ref_name }}" == release/* ]]; then + folder=${{ github.ref_name }} # TODO: change back to RC after proper release else - folder=experimental/${{ github.ref_name }} + echo refusing to mark non-release branch as latest + exit 1 fi mkdir -p ~/.ssh/ From 82c523a5f397a0304ca9213b0dbf7cae437ab9f6 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Mon, 12 Feb 2024 16:15:47 +0100 Subject: [PATCH 162/242] fix doxygen formatting issue --- .../CLUSTERING/ClusterHierarchical.h | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterHierarchical.h b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterHierarchical.h index 5b43d8e597c..bbeb1d0cefe 100644 --- a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterHierarchical.h +++ b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterHierarchical.h @@ -107,24 +107,24 @@ class OPENMS_DLLAPI ClusterHierarchical } /** - @brief clustering function for binned PeakSpectrum - - A version of the clustering function for PeakSpectra employing binned similarity methods. From the given PeakSpectrum BinnedSpectrum are - generated, so the similarity functor @see BinnedSpectrumCompareFunctor can be applied. - - @param data vector of @ref PeakSpectrum s to be clustered - @param comparator a BinnedSpectrumCompareFunctor - @param sz the desired binsize for the @ref BinnedSpectrum s - @param sp the desired binspread for the @ref BinnedSpectrum s - @param offset the desired bins offset for the @ref BinnedSpectrum s - @param clusterer a clustermethod implementation, base class ClusterFunctor - @param cluster_tree the vector that will hold the BinaryTreeNodes representing the clustering (for further investigation with the - ClusterAnalyzer methods) - @param original_distance the DistanceMatrix holding the pairwise distances of the elements in @p data, will be made newly if given size does not - fit to the number of elements given in @p data - @see ClusterFunctor, BinaryTreeNode, ClusterAnalyzer, BinnedSpectrum, BinnedSpectrumCompareFunctor - - @ingroup SpectraClustering + @brief clustering function for binned PeakSpectrum + + A version of the clustering function for PeakSpectra employing binned similarity methods. From the given PeakSpectrum BinnedSpectrum are + generated, so the similarity functor @see BinnedSpectrumCompareFunctor can be applied. + + @param data vector of @ref PeakSpectrum s to be clustered + @param comparator a BinnedSpectrumCompareFunctor + @param sz Bin size for the @ref BinnedSpectrum s + @param sp Bin spread for the @ref BinnedSpectrum s + @param offset Bin offset for the @ref BinnedSpectrum s + @param clusterer a clustermethod implementation, base class ClusterFunctor + @param cluster_tree Vector of BinaryTreeNodes representing the clustering (for further investigation with the ClusterAnalyzer methods) + @param original_distance The DistanceMatrix holding the pairwise distances of the elements in @p data, will be made newly if given size does not + fit to the number of elements given in @p data + + @see ClusterFunctor, BinaryTreeNode, ClusterAnalyzer, BinnedSpectrum, BinnedSpectrumCompareFunctor + + @ingroup SpectraClustering */ void cluster(std::vector& data, const BinnedSpectrumCompareFunctor& comparator, From 3dc1af474148713a8536396756d95d866ef57a00 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Mon, 12 Feb 2024 17:18:05 +0100 Subject: [PATCH 163/242] redirect the upload paths to where they should live post-testing --- .github/workflows/openms_ci_matrix_full.yml | 27 ++++++++++----------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 7917dced589..6662a7961cc 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -165,10 +165,9 @@ jobs: shell: bash name: Create changelog for release on Ubuntu + GCC run: | - if [[ ${{ steps.extract_branch.outputs.RUN_NAME }} =~ ^release\/([0-9]+\.[0-9]+\.[0-9]+) ]]; then #FIXME readd trailing $ for regex to ONLY match actual releases. + if [[ ${{ steps.extract_branch.outputs.RUN_NAME }} =~ ^release\/([0-9]+\.[0-9]+\.[0-9]+)$ ]]; then VERSION_NUMBER=${BASH_REMATCH[1]} echo "Version number: $VERSION_NUMBER" - VERSION_NUMBER="3.0.0" #FIXME remove this override, we apparently didn't actually put anything in the changelog for 2.9.1... if [ "${VERSION_NUMBER##*.}" -eq "0" ] # Handle trailing 0 in major releases (eg 3.0.0) then VERSION_NUMBER=${VERSION_NUMBER%.*} @@ -547,9 +546,9 @@ jobs: run: | echo "Upload" if [[ "${{ github.ref_name }}" == "nightly" ]]; then - folder=nightlyGHA # TODO: Change back when we deactivate Jenkins + folder=nightly elif [[ "${{ github.ref_name }}" == release/* ]]; then - folder=RC_GHA/${{ github.ref_name }} # TODO: change back to RC after proper release + folder=${{ github.ref_name }} else folder=experimental/${{ github.ref_name }} fi @@ -569,7 +568,7 @@ jobs: HOST: ${{ secrets.ARCHIVE_RRSYNC_HOST }} run: | if [[ "${{ github.ref_name }}" == release/* ]]; then - folder=${{ github.ref_name }} # TODO: change back to RC after proper release + folder=${{ github.ref_name }} else echo refusing to mark non-release branch as latest exit 1 @@ -579,7 +578,7 @@ jobs: echo "$PASS" > ~/.ssh/private.key sudo chmod 600 ~/.ssh/private.key ln -s ./$folder latest #create link to the release folder - rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/OpenMSInstaller/RC_GHA" # FIXME REVERT + rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/OpenMSInstaller/release" - name: create RELEASE_TEXT id: mk_release_txt @@ -656,9 +655,9 @@ jobs: rm $GITHUB_WORKSPACE/docs/documentation.zip echo "Upload" if [[ "${{ github.ref_name }}" == "nightly" ]]; then - folder=nightlyGHA # TODO: Change back when we deactivate Jenkins + folder=nightly elif [[ "${{ github.ref_name }}" == release/* ]]; then - folder=RC_GHA/${{ github.ref_name }} # TODO: change back to RC after proper release + folder=release/${{ github.ref_name }} else folder=experimental/${{ github.ref_name }} fi @@ -679,7 +678,7 @@ jobs: HOST: ${{ secrets.ARCHIVE_RRSYNC_HOST }} run: | if [[ "${{ github.ref_name }}" == release/* ]]; then - folder=${{ github.ref_name }} # TODO: change back to RC after proper release + folder=${{ github.ref_name }} else echo refusing to mark non-release branch as latest exit 1 @@ -689,7 +688,7 @@ jobs: echo "$PASS" > ~/.ssh/private.key sudo chmod 600 ~/.ssh/private.key ln -s ./$folder latest #we can use the same link from above. - rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/Documentation/RC_GHA" # FIXME REVERT + rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/Documentation/release # TODO create softlinks to latest nightly # TODO create and upload file hashes, at least for release candidate @@ -865,9 +864,9 @@ jobs: run: | echo "Upload" if [[ "${{ github.ref_name }}" == "nightly" ]]; then - folder=nightlyGHA + folder=nightly elif [[ "${{ github.ref_name }}" == release/* ]]; then - folder=RC_GHA/${{ github.ref_name }} # TODO: change back to RC after proper release + folder=release/${{ github.ref_name }} else folder=experimental/${{ github.ref_name }} fi @@ -894,7 +893,7 @@ jobs: run: | echo "Upload" if [[ "${{ github.ref_name }}" == release/* ]]; then - folder=${{ github.ref_name }} # TODO: change back to RC after proper release + folder=${{ github.ref_name }} else echo refusing to mark non-release branch as latest exit 1 @@ -904,7 +903,7 @@ jobs: echo "$PASS" > ~/.ssh/private.key sudo chmod 600 ~/.ssh/private.key ln -s ./$folder latest #create link to the release folder - rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/knime-plugin/updateSite/RC_GHA" # FIXME REVERT + rsync --progress -avz -e "ssh -i ~/.ssh/private.key -o StrictHostKeyChecking=no" latest "$USER@$HOST:/knime-plugin/updateSite/release do-release: if: inputs.do_release From 611911cf07a119a92e0fd0e7df41ca89f60d226d Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Tue, 13 Feb 2024 10:34:22 +0100 Subject: [PATCH 164/242] update knime version to 5.2 --- .github/workflows/openms_ci_matrix_full.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 6662a7961cc..c9e23b7bddf 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -696,7 +696,7 @@ jobs: build-deploy-knime-updatesite: env: - KNIME: 5.1 + KNIME: 5.2 JAVA_VER: 17 PLUGIN_BUILD: ${{ github.workspace }}/plugin-build PLUGIN_SOURCE: ${{ github.workspace }}/plugin-source @@ -830,7 +830,7 @@ jobs: - name: Build KNIME update site shell: bash env: - KNIME: 5.1 + KNIME: 5.2 run: | # fix folder structure From b5775aca2640ef7b6ffd623a36c89f07558f7905 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Tue, 13 Feb 2024 10:52:55 +0100 Subject: [PATCH 165/242] allow trailing text in release versions --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index c9e23b7bddf..760c817cccf 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -165,7 +165,7 @@ jobs: shell: bash name: Create changelog for release on Ubuntu + GCC run: | - if [[ ${{ steps.extract_branch.outputs.RUN_NAME }} =~ ^release\/([0-9]+\.[0-9]+\.[0-9]+)$ ]]; then + if [[ ${{ steps.extract_branch.outputs.RUN_NAME }} =~ ^release\/([0-9]+\.[0-9]+\.[0-9]+) ]]; then VERSION_NUMBER=${BASH_REMATCH[1]} echo "Version number: $VERSION_NUMBER" if [ "${VERSION_NUMBER##*.}" -eq "0" ] # Handle trailing 0 in major releases (eg 3.0.0) From 5f20c8c559634161a0c82751fe9687286b663c4f Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Tue, 13 Feb 2024 11:25:19 +0100 Subject: [PATCH 166/242] remove DO NOT MERGE from release PR text. --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 760c817cccf..aad0a01d4a9 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -987,7 +987,7 @@ jobs: head: '${{ github.ref_name }}', base: 'develop', body: [ - 'DO NOT MERGE ME!!!!! This PR is auto-generated by', + 'This PR is auto-generated by', '[actions/github-script](https://github.com/actions/github-script).' ].join('\n') }); From ed899daca900ad6c31825ddb0a7089b471c9c1e8 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Wed, 14 Feb 2024 11:49:05 +0100 Subject: [PATCH 167/242] update tutorials; do not require external path --- doc/code_examples/Tutorial_FileIO.cpp | 30 +- .../Tutorial_FileIO_Consumer.cpp | 14 +- doc/code_examples/Tutorial_FileIO_mzML.cpp | 20 +- doc/code_examples/Tutorial_Final.cpp | 263 ++++++++---------- doc/code_examples/Tutorial_GUI_ListEditor.cpp | 4 +- .../Tutorial_GUI_ParamEditor.cpp | 19 +- doc/code_examples/Tutorial_GUI_Plot1D.cpp | 12 +- doc/code_examples/Tutorial_GaussFilter.cpp | 8 +- .../Tutorial_IdentificationClasses.cpp | 33 +-- doc/code_examples/Tutorial_Labeled.cpp | 10 +- doc/code_examples/Tutorial_MSChromatogram.cpp | 6 +- doc/code_examples/Tutorial_MSExperiment.cpp | 34 ++- doc/code_examples/Tutorial_MapAlignment.cpp | 16 +- doc/code_examples/Tutorial_MetaInfo.cpp | 10 +- .../Tutorial_MorphologicalFilter.cpp | 9 +- 15 files changed, 217 insertions(+), 271 deletions(-) diff --git a/doc/code_examples/Tutorial_FileIO.cpp b/doc/code_examples/Tutorial_FileIO.cpp index fbcafdddb87..247b956b3d8 100644 --- a/doc/code_examples/Tutorial_FileIO.cpp +++ b/doc/code_examples/Tutorial_FileIO.cpp @@ -2,9 +2,10 @@ // SPDX-License-Identifier: BSD-3-Clause // -#include #include +#include #include +#include // exotic header for path to tutorial data #include using namespace OpenMS; @@ -12,19 +13,7 @@ using namespace std; int main(int argc, const char** argv) { - // path to the data should be given on the command line - if (argc != 2) - { - std::cerr << "usage: " << argv[0] << " \n\n"; - return 1; - } - String tutorial_data_path(argv[1]); - auto file_mzXML = tutorial_data_path + "/data/Tutorial_FileIO.mzXML"; - - if (!File::exists(file_mzXML)) - { - std::cerr << "The file " << file_mzXML << " was not found. Did you provide the correct path?\n"; - } + auto file_mzXML = OPENMS_DOC_PATH + String("/code_examples/data/Tutorial_FileIO.mzXML"); // temporary data storage PeakMap map; @@ -38,25 +27,26 @@ int main(int argc, const char** argv) FileHandler f; PeakFileOptions opts; // Here we set the MZ range to load to 100-200 - opts.setMZRange( {100, 200} ); + opts.setMZRange({100, 200}); f.setOptions(opts); - f.loadExperiment(tutorial_data_path + "/data/Tutorial_FileIO.mzXML", map, {FileTypes::MZXML}); + f.loadExperiment(file_mzXML, map, {FileTypes::MZXML}); // we can also load an experiment from a file without any restrictions on the file type: - FileHandler().loadExperiment(tutorial_data_path + "/data/Tutorial_Spectrum1D.dta", map); + FileHandler().loadExperiment(File::path(file_mzXML) + "/Tutorial_Spectrum1D.dta", map); // if we want to allow all types that can store MS2 data we can do the following: - FileHandler().loadExperiment(tutorial_data_path + "/data/Tutorial_FileIO.mzXML", map, FileTypeList::typesWithProperties({FileTypes::FileProperties::PROVIDES_EXPERIMENT})); + FileHandler().loadExperiment(file_mzXML, map, + FileTypeList::typesWithProperties({FileTypes::FileProperties::PROVIDES_EXPERIMENT})); // The curly braces can contain multiple file properties. The FileTypeList that is created is the intersection of these properties // so: FileTypeList::typesWithProperties({FileTypes::FileProperties::PROVIDES_EXPERIMENT, FileTypes::FileProperties::READABLE}) // returns only fileTypes which can store both MS1 and MS2 spectra // We use various FileHandler functions to load other types. FeatureMap feat; - FileHandler().loadFeatures(tutorial_data_path + "/data/Tutorial_Labeled.featureXML", feat); + FileHandler().loadFeatures(File::path(file_mzXML) + "/Tutorial_Labeled.featureXML", feat); // If we try to load something from a file that can't store that info (for example trying to get an experiment from an idXML file) // An error gets thrown at run time. Check out @p FileHandler class for more info -} //end of main +} // end of main diff --git a/doc/code_examples/Tutorial_FileIO_Consumer.cpp b/doc/code_examples/Tutorial_FileIO_Consumer.cpp index 935fd04774e..a1a66dbd663 100644 --- a/doc/code_examples/Tutorial_FileIO_Consumer.cpp +++ b/doc/code_examples/Tutorial_FileIO_Consumer.cpp @@ -5,6 +5,7 @@ #include #include #include +#include // exotic header for path to tutorial data #include using namespace OpenMS; @@ -35,20 +36,11 @@ class TICWritingConsumer : public MSDataWritingConsumer int main(int argc, const char** argv) { - // path to the data should be given on the command line - if (argc != 2) - { - std::cerr << "usage: " << argv[0] << " \n\n"; - return 1; - } - String tutorial_data_path(argv[1]); - auto file_mzXML = tutorial_data_path + "/data/Tutorial_FileIO.mzXML"; - - if (! File::exists(file_mzXML)) { std::cerr << "The file " << file_mzXML << " was not found. Did you provide the correct path?\n"; } + auto file_mzXML = OPENMS_DOC_PATH + String("/code_examples/data/Tutorial_FileIO.mzXML"); // Create the consumer, set output file name, transform TICWritingConsumer consumer("Tutorial_FileIO_output.mzML"); - MzMLFile().transform(tutorial_data_path + "/data/Tutorial_FileIO_indexed.mzML", &consumer); + MzMLFile().transform(file_mzXML, &consumer); std::cout << "There are " << consumer.nr_spectra << " spectra in the input file.\n"; std::cout << "The total ion current is " << consumer.TIC << std::endl; diff --git a/doc/code_examples/Tutorial_FileIO_mzML.cpp b/doc/code_examples/Tutorial_FileIO_mzML.cpp index 618aa7136de..fcc503f239c 100644 --- a/doc/code_examples/Tutorial_FileIO_mzML.cpp +++ b/doc/code_examples/Tutorial_FileIO_mzML.cpp @@ -2,27 +2,21 @@ // SPDX-License-Identifier: BSD-3-Clause // -#include #include +#include #include +#include // exotic header for path to tutorial data + #include + using namespace OpenMS; using namespace std; int main(int argc, const char** argv) { - // path to the data should be given on the command line - if (argc != 2) - { - std::cerr << "usage: " << argv[0] << " \n\n"; - return 1; - } - String tutorial_data_path(argv[1]); - auto file_mzXML = tutorial_data_path + "/data/Tutorial_FileIO_indexed.mzML"; - - if (! File::exists(file_mzXML)) { std::cerr << "The file " << file_mzXML << " was not found. Did you provide the correct path?\n"; } - + auto file_mzXML = OPENMS_DOC_PATH + String("/code_examples/data/Tutorial_FileIO_indexed.mzML"); + IndexedMzMLFileLoader imzml; // load data from an indexed MzML file @@ -37,4 +31,4 @@ int main(int argc, const char** argv) // store the (unmodified) data in a different file imzml.store("Tutorial_FileIO_output.mzML", map); -} //end of main +} // end of main diff --git a/doc/code_examples/Tutorial_Final.cpp b/doc/code_examples/Tutorial_Final.cpp index 1b0d6fbde09..dffdfd00bbe 100644 --- a/doc/code_examples/Tutorial_Final.cpp +++ b/doc/code_examples/Tutorial_Final.cpp @@ -9,11 +9,11 @@ //! [doxygen_snippet_Includes] -#include +#include #include +#include #include #include -#include //! [doxygen_snippet_Includes] @@ -21,7 +21,7 @@ using namespace OpenMS; using namespace std; //------------------------------------------------------------- -//Doxygen docu +// Doxygen docu //------------------------------------------------------------- /** @@ -29,7 +29,8 @@ using namespace std; @brief The DatabaseFilter tool filters a protein database in fasta format according to one or multiple filtering criteria. - The resulting database is written as output. Depending on the reporting method (method="whitelist" or "blacklist") only entries are retained that passed all filters ("whitelist) or failed at least one filter ("blacklist"). + The resulting database is written as output. Depending on the reporting method (method="whitelist" or "blacklist") only entries are retained that + passed all filters ("whitelist) or failed at least one filter ("blacklist"). Implemented filter criteria: @@ -44,157 +45,131 @@ using namespace std; // We do not want this class to show up in the docu: /// @cond TOPPCLASSES -class TOPPDatabaseFilter : - public TOPPBase +class TOPPDatabaseFilter : public TOPPBase { public: - TOPPDatabaseFilter() : - TOPPBase("DatabaseFilter", "Filters a protein database (FASTA format) based on identified proteins", false) // false: mark as unofficial tool - { - } + TOPPDatabaseFilter(): + TOPPBase("DatabaseFilter", "Filters a protein database (FASTA format) based on identified proteins", false) // false: mark as unofficial tool + { + } protected: + //! [doxygen_snippet_Register] + + void registerOptionsAndFlags_() override + { + registerInputFile_("in", "", "", "Input FASTA file, containing a protein database."); + setValidFormats_("in", {"fasta"}); + registerInputFile_("id", "", "", "Input file containing identified peptides and proteins."); + setValidFormats_("id", {"idXML", "mzid"}); + registerStringOption_("method", "", "whitelist", "Switch between white-/blacklisting of protein IDs", false); + setValidStrings_("method", {"whitelist", "blacklist"}); + registerOutputFile_("out", "", "", "Output FASTA file where the reduced database will be written to."); + setValidFormats_("out", {"fasta"}); + } + + //! [doxygen_snippet_Register] + + //! [doxygen_snippet_Functionality_1] + + void filterByProteinAccessions_(const vector& db, + const vector& peptide_identifications, + bool whitelist, + vector& db_new) + { + set id_accessions; + for (const auto& pep_id : peptide_identifications) + { + for (const auto& hit : pep_id.getHits()) + { + for (const auto& ev : hit.getPeptideEvidences()) + { + const String& id_accession = ev.getProteinAccession(); + id_accessions.insert(id_accession); + } + } + } + + //! [doxygen_snippet_Functionality_1] + + OPENMS_LOG_INFO << "Number of Protein IDs: " << id_accessions.size() << endl; + + //! [doxygen_snippet_Functionality_2] + + for (const auto entry : db) + { + const String& fasta_accession = entry.identifier; + const bool found = id_accessions.find(fasta_accession) != id_accessions.end(); + if ((found && whitelist) || (! found && ! whitelist)) // either found in the whitelist or not found in the blacklist + { + db_new.push_back(entry); + } + } + + //! [doxygen_snippet_Functionality_2] + } + + ExitCodes main_(int, const char**) override + { + + //! [doxygen_snippet_InputParam] -//! [doxygen_snippet_Register] - - void registerOptionsAndFlags_() override - { - registerInputFile_("in", "", "","Input FASTA file, containing a database."); - setValidFormats_("in", ListUtils::create("fasta")); - registerInputFile_("id", "", "", "Input file containing identified peptides and proteins."); - setValidFormats_("id", ListUtils::create("idXML,mzid")); - registerStringOption_("method", "", "whitelist", "Switch between white-/blacklisting of protein IDs", false); - setValidStrings_("method", ListUtils::create("whitelist,blacklist")); - registerOutputFile_("out", "", "", "Output FASTA file where the reduced database will be written to."); - setValidFormats_("out", ListUtils::create("fasta")); - } - -//! [doxygen_snippet_Register] - -//! [doxygen_snippet_Functionality_1] - - void filterByProteinIDs_(const vector& db, const vector& peptide_identifications, bool whitelist, vector& db_new) - { - set id_accessions; - for (Size i = 0; i != peptide_identifications.size(); ++i) - { - const PeptideIdentification& id = peptide_identifications[i]; - const vector& hits = id.getHits(); - for (Size k = 0; k != hits.size(); ++k) - { - const vector& evidences = hits[k].getPeptideEvidences(); - for (Size m = 0; m != evidences.size(); ++m) - { - const String& id_accession = evidences[m].getProteinAccession(); - id_accessions.insert(id_accession); - } - } - } - - //! [doxygen_snippet_Functionality_1] - - OPENMS_LOG_INFO << "Protein IDs: " << id_accessions.size() << endl; - - //! [doxygen_snippet_Functionality_2] - - for (Size i = 0; i != db.size() ; ++i) - { - const String& fasta_accession = db[i].identifier; - const bool found = id_accessions.find(fasta_accession) != id_accessions.end(); - if ((found && whitelist) || (!found && !whitelist)) //either found in the whitelist or not found in the blacklist - { - db_new.push_back(db[i]); - } - } - - //! [doxygen_snippet_Functionality_2] - } - - ExitCodes main_(int, const char **) override - { - - //! [doxygen_snippet_InputParam] - - //------------------------------------------------------------- - // parsing parameters - //------------------------------------------------------------- - String in(getStringOption_("in")); - String ids(getStringOption_("id")); - String method(getStringOption_("method")); - bool whitelist = (method == "whitelist"); - String out(getStringOption_("out")); - - //! [doxygen_snippet_InputParam] - - //------------------------------------------------------------- - // reading input - //------------------------------------------------------------- - - //! [doxygen_snippet_InputRead] - - vector db; - FASTAFile().load(in, db); - - //! [doxygen_snippet_InputRead] - - // Check if no filter criteria was given - // If you add a new filter please check if it was set here as well - if (ids.empty()) - { - FASTAFile().store(out, db); - } - - vector db_new; - - if (!ids.empty()) // filter by protein IDs - { - FileHandler fh; - FileTypes::Type ids_type = fh.getType(ids); - vector protein_identifications; - vector peptide_identifications; - - if (ids_type == FileTypes::IDXML || ids_type == FileTypes::MZIDENTML ) - { - FileHandler().loadIdentifications(ids, protein_identifications, peptide_identifications, {FileTypes::IDXML, FileTypes::MZIDENTML}); - } - else - { - OPENMS_LOG_ERROR << "Error: Unknown input file type given. Aborting!"; - printUsage_(); - return ILLEGAL_PARAMETERS; - } - - OPENMS_LOG_INFO << "Identifications: " << ids.size() << endl; - - // run filter - filterByProteinIDs_(db, peptide_identifications, whitelist, db_new); - } - - //------------------------------------------------------------- - // writing output - //------------------------------------------------------------- - - OPENMS_LOG_INFO << "Database entries (before / after): " << db.size() << " / " << db_new.size() << endl; - //! [doxygen_snippet_output] - - FASTAFile().store(out, db_new); - - //! [doxygen_snippet_output] - - return EXECUTION_OK; - } + //------------------------------------------------------------- + // parsing parameters + //------------------------------------------------------------- + String in(getStringOption_("in")); + String ids(getStringOption_("id")); + String method(getStringOption_("method")); + bool whitelist = (method == "whitelist"); + String out(getStringOption_("out")); + //! [doxygen_snippet_InputParam] + + //------------------------------------------------------------- + // reading input + //------------------------------------------------------------- + + //! [doxygen_snippet_InputRead] + + vector db; + FASTAFile().load(in, db); + + //! [doxygen_snippet_InputRead] + + vector protein_identifications; + vector peptide_identifications; + + FileHandler().loadIdentifications(ids, protein_identifications, peptide_identifications); + + OPENMS_LOG_INFO << "Identifications: " << ids.size() << endl; + + // run filter + vector db_new; + filterByProteinAccessions_(db, peptide_identifications, whitelist, db_new); + + //------------------------------------------------------------- + // writing output + //------------------------------------------------------------- + + OPENMS_LOG_INFO << "Database entries (before / after): " << db.size() << " / " << db_new.size() << endl; + //! [doxygen_snippet_output] + + FASTAFile().store(out, db_new); + + //! [doxygen_snippet_output] + + return EXECUTION_OK; + } }; -int main(int argc, const char ** argv) +int main(int argc, const char** argv) { - TOPPDatabaseFilter tool; - OPENMS_LOG_FATAL_ERROR << "THIS IS TEST CODE AND SHOULD NEVER BE RUN OUTSIDE OF TESTING" << endl; - tool.main(argc, argv); - return 0; + TOPPDatabaseFilter tool; + OPENMS_LOG_FATAL_ERROR << "THIS IS TEST CODE AND SHOULD NEVER BE RUN OUTSIDE OF TESTING" << endl; + tool.main(argc, argv); + return 0; } /// @endcond //! [doxygen_snippet_final] - diff --git a/doc/code_examples/Tutorial_GUI_ListEditor.cpp b/doc/code_examples/Tutorial_GUI_ListEditor.cpp index 3039b94f68f..319c3837447 100644 --- a/doc/code_examples/Tutorial_GUI_ListEditor.cpp +++ b/doc/code_examples/Tutorial_GUI_ListEditor.cpp @@ -10,8 +10,8 @@ using namespace OpenMS; int main(int argc, char ** argv) { QApplication app(argc, argv); - ListEditor * listeditor = new ListEditor; - listeditor->show(); + ListEditor listeditor; + listeditor.show(); return app.exec(); } diff --git a/doc/code_examples/Tutorial_GUI_ParamEditor.cpp b/doc/code_examples/Tutorial_GUI_ParamEditor.cpp index 7de091da788..5c737e8ca96 100644 --- a/doc/code_examples/Tutorial_GUI_ParamEditor.cpp +++ b/doc/code_examples/Tutorial_GUI_ParamEditor.cpp @@ -5,7 +5,10 @@ #include #include #include +#include +#include // exotic header for path to tutorial data +#include #include using namespace OpenMS; @@ -13,10 +16,8 @@ using namespace std; Int main(int argc, const char** argv) { - if (argc < 2) return 1; - // the path to the data should be given on the command line - String tutorial_data_path(argv[1]); - + String tutorial_data_path(OPENMS_DOC_PATH + String("/code_examples/")); + QApplication app(argc, const_cast(argv)); Param param; @@ -24,14 +25,12 @@ Int main(int argc, const char** argv) paramFile.load(tutorial_data_path + "/data/Tutorial_ParamEditor.ini", param); - ParamEditor* editor = new ParamEditor(nullptr); - editor->load(param); - editor->show(); + ParamEditor editor(nullptr); + editor.load(param); + editor.show(); app.exec(); - editor->store(); + editor.store(); paramFile.store("Tutorial_ParamEditor_out.ini", param); - - return 0; } //end of main diff --git a/doc/code_examples/Tutorial_GUI_Plot1D.cpp b/doc/code_examples/Tutorial_GUI_Plot1D.cpp index 885c85c1671..a786bd3e608 100644 --- a/doc/code_examples/Tutorial_GUI_Plot1D.cpp +++ b/doc/code_examples/Tutorial_GUI_Plot1D.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include // exotic header for path to tutorial data #include using namespace OpenMS; @@ -17,10 +17,6 @@ using namespace std; Int main(int argc, const char** argv) { String tutorial_data_path(OPENMS_DOC_PATH + String("/code_examples/data/Tutorial_Spectrum1D.dta")); - if (argc >= 2) - { // the path to the data can be given on the command line - tutorial_data_path = argv[1]; - } QApplication app(argc, const_cast(argv)); @@ -32,9 +28,9 @@ Int main(int argc, const char** argv) exp.addSpectrum(spec); LayerDataBase::ExperimentSharedPtrType exp_sptr(new PeakMap(exp)); LayerDataBase::ODExperimentSharedPtrType on_disc_exp_sptr(new OnDiscMSExperiment()); - auto* widget = new Plot1DWidget(Param(), DIM::Y, nullptr); - widget->canvas()->addPeakLayer(exp_sptr, on_disc_exp_sptr); - widget->show(); + Plot1DWidget widget(Param(), DIM::Y, nullptr); + widget.canvas()->addPeakLayer(exp_sptr, on_disc_exp_sptr); + widget.show(); return app.exec(); } // end of main diff --git a/doc/code_examples/Tutorial_GaussFilter.cpp b/doc/code_examples/Tutorial_GaussFilter.cpp index 174142b8cfa..761e1b03e0c 100644 --- a/doc/code_examples/Tutorial_GaussFilter.cpp +++ b/doc/code_examples/Tutorial_GaussFilter.cpp @@ -6,6 +6,8 @@ #include #include #include +#include +#include // exotic header for path to tutorial data #include using namespace OpenMS; @@ -13,13 +15,11 @@ using namespace std; int main(int argc, const char** argv) { - if (argc < 2) return 1; - // the path to the data should be given on the command line - String tutorial_data_path(argv[1]); + auto file_gauss = OPENMS_DOC_PATH + String("/code_examples/data/Tutorial_GaussFilter.mzML"); PeakMap exp; - FileHandler().loadExperiment(tutorial_data_path + "/data/Tutorial_GaussFilter.mzML", exp, {FileTypes::MZML}); + FileHandler().loadExperiment(file_gauss, exp, {FileTypes::MZML}); GaussFilter g; Param param; diff --git a/doc/code_examples/Tutorial_IdentificationClasses.cpp b/doc/code_examples/Tutorial_IdentificationClasses.cpp index 7c1a1439c12..cf9bc12eb99 100644 --- a/doc/code_examples/Tutorial_IdentificationClasses.cpp +++ b/doc/code_examples/Tutorial_IdentificationClasses.cpp @@ -23,19 +23,17 @@ using namespace std; int main() { // Create new protein identification object corresponding to a single search - vector protein_ids; - ProteinIdentification protein_id; - - protein_id.setIdentifier("Identifier"); // Each ProteinIdentification object stores a vector of protein hits vector protein_hits; - ProteinHit protein_hit = ProteinHit(); + ProteinHit protein_hit; protein_hit.setAccession("MyAccession"); protein_hit.setSequence("PEPTIDEPEPTIDEPEPTIDEPEPTIDER"); protein_hit.setScore(1.0); protein_hits.push_back(protein_hit); + ProteinIdentification protein_id; + protein_id.setIdentifier("Identifier"); protein_id.setHits(protein_hits); DateTime now = DateTime::now(); @@ -53,16 +51,17 @@ int main() protein_id.setSearchEngine("SearchEngine"); protein_id.setScoreType("HyperScore"); + vector protein_ids; protein_ids.push_back(protein_id); // Iterate over protein identifications and protein hits - for (auto it = protein_ids.begin(); it != protein_ids.end(); ++it) + for (const auto& prot : protein_ids) { - for (auto hit = it->getHits().begin(); hit < it->getHits().end(); ++hit) + for (const auto& hit : prot.getHits()) { - cout << "Protein hit accession: " << hit->getAccession() << endl; - cout << "Protein hit sequence: " << hit->getSequence() << endl; - cout << "Protein hit score: " << hit->getScore() << endl; + cout << "Protein hit accession: " << hit.getAccession() << '\n'; + cout << "Protein hit sequence: " << hit.getSequence() << '\n'; + cout << "Protein hit score: " << hit.getScore() << '\n'; } } @@ -110,20 +109,18 @@ int main() for (const auto& peptide_id : peptide_ids) { // Peptide identification values - cout << "Peptide ID m/z: " << peptide_id.getMZ() << endl; - cout << "Peptide ID rt: " << peptide_id.getRT() << endl; - cout << "Peptide ID score type: " << peptide_id.getScoreType() << endl; + cout << "Peptide ID m/z: " << peptide_id.getMZ() << '\n'; + cout << "Peptide ID rt: " << peptide_id.getRT() << '\n'; + cout << "Peptide ID score type: " << peptide_id.getScoreType() << '\n'; // PeptideHits for (const auto& scored_hit : peptide_id.getHits()) { - cout << " - Peptide hit rank: " << scored_hit.getRank() << endl; - cout << " - Peptide hit sequence: " << scored_hit.getSequence().toString() << endl; - cout << " - Peptide hit score: " << scored_hit.getScore() << endl; + cout << " - Peptide hit rank: " << scored_hit.getRank() << '\n'; + cout << " - Peptide hit sequence: " << scored_hit.getSequence().toString() << '\n'; + cout << " - Peptide hit score: " << scored_hit.getScore() << '\n'; } } - // ... - return 0; } diff --git a/doc/code_examples/Tutorial_Labeled.cpp b/doc/code_examples/Tutorial_Labeled.cpp index 7ab0deec5db..1c1adecf336 100644 --- a/doc/code_examples/Tutorial_Labeled.cpp +++ b/doc/code_examples/Tutorial_Labeled.cpp @@ -6,20 +6,16 @@ #include #include +#include // exotic header for path to tutorial data using namespace OpenMS; using namespace std; int main(int argc, const char** argv) { - if (argc < 2) return 1; - // the path to the data should be given on the command line - String tutorial_data_path(argv[1]); - - vector maps; - maps.resize(1); + vector maps(1, FeatureMap{}); - FileHandler().loadFeatures(tutorial_data_path + "/data/Tutorial_Labeled.featureXML", maps[0], {FileTypes::FEATUREXML}); + FileHandler().loadFeatures(OPENMS_DOC_PATH + String("/code_examples/data/Tutorial_Labeled.featureXML"), maps[0], {FileTypes::FEATUREXML}); ConsensusMap out; out.getColumnHeaders()[0].filename = "data/Tutorial_Labeled.mzML"; out.getColumnHeaders()[0].size = maps[0].size(); diff --git a/doc/code_examples/Tutorial_MSChromatogram.cpp b/doc/code_examples/Tutorial_MSChromatogram.cpp index 6e46523357b..c0f40c30026 100644 --- a/doc/code_examples/Tutorial_MSChromatogram.cpp +++ b/doc/code_examples/Tutorial_MSChromatogram.cpp @@ -3,23 +3,23 @@ //! [doxygen_snippet_MSChromatogram] +#include #include #include -#include using namespace OpenMS; using namespace std; int main() { - // create a chromatogram + // create a chromatogram MSChromatogram chromatogram; // fill it with metadata information chromatogram.setNativeID("transition_300.9_188.0"); chromatogram.getProduct().setMZ(188.0); chromatogram.getPrecursor().setMZ(300.9); - + // fill chromatogram with peaks ChromatogramPeak peak; peak.setIntensity(1.0); diff --git a/doc/code_examples/Tutorial_MSExperiment.cpp b/doc/code_examples/Tutorial_MSExperiment.cpp index 7998d59c609..b5e5d661460 100644 --- a/doc/code_examples/Tutorial_MSExperiment.cpp +++ b/doc/code_examples/Tutorial_MSExperiment.cpp @@ -5,7 +5,9 @@ //! [doxygen_snippet_MSExperiment] #include +#include #include +#include #include using namespace OpenMS; @@ -16,7 +18,7 @@ int main() // create a peak map containing 4 dummy spectra and peaks MSExperiment exp; - + // The following examples creates a MSExperiment containing four MSSpectrum instances. for (Size i = 0; i < 4; ++i) { @@ -29,7 +31,7 @@ int main() peak.setMZ(mz + i); spectrum.push_back(peak); } - + exp.addSpectrum(spectrum); } @@ -39,7 +41,7 @@ int main() cout << it.getRT() << " - " << it->getMZ() << endl; } - // Iteration over all peaks in the experiment. + // Iteration over all peaks in the experiment. // Output: RT, m/z, and intensity // Note that the retention time is stored in the spectrum (not in the peak object) for (auto s_it = exp.begin(); s_it != exp.end(); ++s_it) @@ -50,17 +52,27 @@ int main() } } - // We could store the spectra to a mzML file with: - // FileHandler mzml; - // mzml.storeExperiment(filename, exp); - + // update the data ranges for all dimensions (RT, m/z, int, IM) and print them: + exp.updateRanges(); + std::cout << "Data ranges:\n"; + exp.printRange(std::cout); + std::cout << "\nGet maximum intensity on its own: " << exp.getMinMobility() << '\n'; + exp.getMinRT(); + + // Store the spectra to a mzML file with: + FileHandler fh; + auto tmp_filename = File::getTemporaryFile(); + fh.storeExperiment(tmp_filename, exp); + // And load it with - // mzml.loadExperiment(filename, exp); + fh.loadExperiment(tmp_filename, exp); // If we wanted to load only the MS2 spectra we could speed up reading by setting: - // mzml.getOptions().addMSLevel(2); - // before executing: mzml.loadExperiment(filename, exp); + fh.getOptions().setMSLevels({2}); + // and then load from disk: + fh.loadExperiment(tmp_filename, exp); + // note: the file in 'tmp_filename' will be automatically deleted return 0; -} //end of main +} // end of main //! [doxygen_snippet_MSExperiment] diff --git a/doc/code_examples/Tutorial_MapAlignment.cpp b/doc/code_examples/Tutorial_MapAlignment.cpp index 66b19bb097d..8d5d3bee7ec 100644 --- a/doc/code_examples/Tutorial_MapAlignment.cpp +++ b/doc/code_examples/Tutorial_MapAlignment.cpp @@ -2,20 +2,18 @@ // SPDX-License-Identifier: BSD-3-Clause // -#include - #include +#include #include +#include // exotic header for path to tutorial data using namespace OpenMS; using namespace std; int main(int argc, const char** argv) { - if (argc < 2) return 1; - // the path to the data should be given on the command line - String tutorial_data_path(argv[1]); - + auto tutorial_data_path = OPENMS_DOC_PATH + String("/code_examples/"); + FeatureMap reference; FeatureMap toAlign; @@ -25,7 +23,7 @@ int main(int argc, const char** argv) // create map alignment algorithm MapAlignmentAlgorithmPoseClustering algorithm; - + // ... set parameters algorithm.setReference(reference); @@ -38,6 +36,4 @@ int main(int argc, const char** argv) // store results xml_file.storeFeatures("Tutorial_MapAlignment_1.featureXML", reference); xml_file.storeFeatures("Tutorial_MapAlignment_2.featureXML", toAlign); - - return 0; -} //end of main +} // end of main diff --git a/doc/code_examples/Tutorial_MetaInfo.cpp b/doc/code_examples/Tutorial_MetaInfo.cpp index aa65495f9c7..6883c12b764 100644 --- a/doc/code_examples/Tutorial_MetaInfo.cpp +++ b/doc/code_examples/Tutorial_MetaInfo.cpp @@ -2,8 +2,8 @@ // SPDX-License-Identifier: BSD-3-Clause // -#include #include +#include #include using namespace OpenMS; @@ -13,15 +13,15 @@ Int main() { MetaInfoInterface info; - //insert meta data + // insert meta data info.setMetaValue("color", String("#ff0000")); info.setMetaValue("id", 112131415); - //access id by index + // access id by index UInt id_index = info.metaRegistry().getIndex("id"); cout << "id : " << (UInt)(info.getMetaValue(id_index)) << endl; - //access color by name + // access color by name cout << "color: " << (String)(info.getMetaValue("color")) << endl; return 0; -} //end of main +} // end of main diff --git a/doc/code_examples/Tutorial_MorphologicalFilter.cpp b/doc/code_examples/Tutorial_MorphologicalFilter.cpp index dad7352e426..996b1d3a9ce 100644 --- a/doc/code_examples/Tutorial_MorphologicalFilter.cpp +++ b/doc/code_examples/Tutorial_MorphologicalFilter.cpp @@ -5,6 +5,7 @@ #include #include #include +#include // exotic header for path to tutorial data #include using namespace OpenMS; @@ -12,10 +13,8 @@ using namespace std; int main(int argc, const char** argv) { - if (argc < 2) return 1; - // the path to the data should be given on the command line - String tutorial_data_path(argv[1]); - + auto tutorial_data_path = OPENMS_DOC_PATH + String("/code_examples/"); + PeakMap exp; FileHandler().loadExperiment(tutorial_data_path + "/data/Tutorial_MorphologicalFilter.mzML", exp); @@ -31,4 +30,4 @@ int main(int argc, const char** argv) mf.filterExperiment(exp); return 0; -} //end of main +} // end of main From 10ca09f5f39f45852799838157488a9b7f752941 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Wed, 14 Feb 2024 11:49:35 +0100 Subject: [PATCH 168/242] reflect changes in tutorial to real TOPP tool --- src/topp/DatabaseFilter.cpp | 40 +++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/topp/DatabaseFilter.cpp b/src/topp/DatabaseFilter.cpp index 5d63483e83f..726875195de 100644 --- a/src/topp/DatabaseFilter.cpp +++ b/src/topp/DatabaseFilter.cpp @@ -53,45 +53,47 @@ class TOPPDatabaseFilter : protected: void registerOptionsAndFlags_() override { - registerInputFile_("in", "", "","Input FASTA file, containing a database."); - setValidFormats_("in", ListUtils::create("fasta")); + registerInputFile_("in", "", "", "Input FASTA file, containing a protein database."); + setValidFormats_("in", {"fasta"}); registerInputFile_("id", "", "", "Input file containing identified peptides and proteins."); - setValidFormats_("id", ListUtils::create("idXML,mzid")); - registerStringOption_("method", "", "whitelist", "Switch between white-/blacklisting", false); - setValidStrings_("method", ListUtils::create("whitelist,blacklist")); + setValidFormats_("id", {"idXML", "mzid"}); + registerStringOption_("method", "", "whitelist", "Switch between white-/blacklisting of protein IDs", false); + setValidStrings_("method", {"whitelist", "blacklist"}); registerOutputFile_("out", "", "", "Output FASTA file where the reduced database will be written to."); - setValidFormats_("out", ListUtils::create("fasta")); + setValidFormats_("out", {"fasta"}); } - void filterByProteinAccessions_(const vector& db, const vector& peptide_identifications, bool whitelist, vector& db_new) + void filterByProteinAccessions_(const vector& db, + const vector& peptide_identifications, + bool whitelist, + vector& db_new) { set id_accessions; - for (Size i = 0; i != peptide_identifications.size(); ++i) + for (const auto& pep_id : peptide_identifications) { - const PeptideIdentification& id = peptide_identifications[i]; - const vector& hits = id.getHits(); - for (Size k = 0; k != hits.size(); ++k) + for (const auto& hit : pep_id.getHits()) { - const vector& evidences = hits[k].getPeptideEvidences(); - for (Size m = 0; m != evidences.size(); ++m) + for (const auto& ev : hit.getPeptideEvidences()) { - const String& id_accession = evidences[m].getProteinAccession(); + const String& id_accession = ev.getProteinAccession(); id_accessions.insert(id_accession); } } } - OPENMS_LOG_INFO << "Protein accessions: " << id_accessions.size() << endl; + OPENMS_LOG_INFO << "Number of Protein IDs: " << id_accessions.size() << endl; - for (Size i = 0; i != db.size() ; ++i) + for (const auto entry : db) { - const String& fasta_accession = db[i].identifier; + const String& fasta_accession = entry.identifier; const bool found = id_accessions.find(fasta_accession) != id_accessions.end(); - if ((found && whitelist) || (!found && !whitelist)) //either found in the whitelist or not found in the blacklist + if ((found && whitelist) || (! found && ! whitelist)) // either found in the whitelist or not found in the blacklist { - db_new.push_back(db[i]); + db_new.push_back(entry); } } + + //! [doxygen_snippet_Functionality_2] } ExitCodes main_(int, const char **) override From c5a5fff0c464d7f22e2ad349af41e2db7acc0f04 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Wed, 14 Feb 2024 12:14:58 +0100 Subject: [PATCH 169/242] remove unneccessary overloads which are already provided by the baseclass --- .../include/OpenMS/KERNEL/MSExperiment.h | 12 ---------- src/openms/source/KERNEL/MSExperiment.cpp | 24 ------------------- 2 files changed, 36 deletions(-) diff --git a/src/openms/include/OpenMS/KERNEL/MSExperiment.h b/src/openms/include/OpenMS/KERNEL/MSExperiment.h index b8c33b3e959..9e74eea321a 100644 --- a/src/openms/include/OpenMS/KERNEL/MSExperiment.h +++ b/src/openms/include/OpenMS/KERNEL/MSExperiment.h @@ -502,18 +502,6 @@ namespace OpenMS */ void updateRanges(Int ms_level); - /// returns the minimal m/z value - CoordinateType getMinMZ() const; - - /// returns the maximal m/z value - CoordinateType getMaxMZ() const; - - /// returns the minimal retention time value - CoordinateType getMinRT() const; - - /// returns the maximal retention time value - CoordinateType getMaxRT() const; - /// returns the total number of peaks UInt64 getSize() const; diff --git a/src/openms/source/KERNEL/MSExperiment.cpp b/src/openms/source/KERNEL/MSExperiment.cpp index 4ed4a86da4e..f727affe8c4 100644 --- a/src/openms/source/KERNEL/MSExperiment.cpp +++ b/src/openms/source/KERNEL/MSExperiment.cpp @@ -305,30 +305,6 @@ namespace OpenMS } } - /// returns the minimal m/z value - MSExperiment::CoordinateType MSExperiment::getMinMZ() const - { - return RangeManagerType::getMinMZ(); - } - - /// returns the maximal m/z value - MSExperiment::CoordinateType MSExperiment::getMaxMZ() const - { - return RangeManagerType::getMaxMZ(); - } - - /// returns the minimal retention time value - MSExperiment::CoordinateType MSExperiment::getMinRT() const - { - return RangeManagerType::getMinRT(); - } - - /// returns the maximal retention time value - MSExperiment::CoordinateType MSExperiment::getMaxRT() const - { - return RangeManagerType::getMaxRT(); - } - /// returns the total number of peaks UInt64 MSExperiment::getSize() const { From 02019d3f938d33367c4ac4c067e4ea449b590909 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Feb 2024 22:18:13 +0000 Subject: [PATCH 170/242] Bump contrib from `04d64c6` to `5545518` Bumps [contrib](https://github.com/OpenMS/contrib) from `04d64c6` to `5545518`. - [Commits](https://github.com/OpenMS/contrib/compare/04d64c6ae206a24cd3bf0d553022f58df86175eb...554551862ed1000e6b074d35cb887943e81f8606) --- updated-dependencies: - dependency-name: contrib dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- contrib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib b/contrib index 04d64c6ae20..554551862ed 160000 --- a/contrib +++ b/contrib @@ -1 +1 @@ -Subproject commit 04d64c6ae206a24cd3bf0d553022f58df86175eb +Subproject commit 554551862ed1000e6b074d35cb887943e81f8606 From 59ffed315c2ee3799d1f34defe2e83da63d08a44 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Wed, 21 Feb 2024 13:52:47 +0100 Subject: [PATCH 171/242] Update MatrixUtils.h --- src/openms/include/OpenMS/DATASTRUCTURES/Utils/MatrixUtils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openms/include/OpenMS/DATASTRUCTURES/Utils/MatrixUtils.h b/src/openms/include/OpenMS/DATASTRUCTURES/Utils/MatrixUtils.h index 924d7c77b6d..1936f689c42 100644 --- a/src/openms/include/OpenMS/DATASTRUCTURES/Utils/MatrixUtils.h +++ b/src/openms/include/OpenMS/DATASTRUCTURES/Utils/MatrixUtils.h @@ -10,7 +10,7 @@ #include -#include +#include #include From 4f33fa521a0df4a11329b36067be99fa9621f535 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Wed, 21 Feb 2024 17:26:10 +0100 Subject: [PATCH 172/242] check if CI caching is involved... --- src/openms/include/OpenMS/DATASTRUCTURES/Utils/MatrixUtils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openms/include/OpenMS/DATASTRUCTURES/Utils/MatrixUtils.h b/src/openms/include/OpenMS/DATASTRUCTURES/Utils/MatrixUtils.h index 1936f689c42..924d7c77b6d 100644 --- a/src/openms/include/OpenMS/DATASTRUCTURES/Utils/MatrixUtils.h +++ b/src/openms/include/OpenMS/DATASTRUCTURES/Utils/MatrixUtils.h @@ -10,7 +10,7 @@ #include -#include +#include #include From 66042b3bbdd8b4053c9023ba75238733af24386e Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Thu, 22 Feb 2024 10:52:34 +0100 Subject: [PATCH 173/242] attempt to install eigen from chocolatey --- .github/workflows/openms_ci_matrix_full.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index aad0a01d4a9..bad1fbc52e2 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -281,6 +281,13 @@ jobs: path: ${{ github.workspace }}/OpenMS/contrib key: ${{ runner.os }}-contrib3 + - name: Install Chocolatey and packages (if possible on windows) + if: startsWith(matrix.os, 'windows') + run: | + Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) + - name: Install Eigen + run: choco install eigen + - name: Download contrib build from archive (Windows) if: startsWith(matrix.os, 'windows') && steps.cache-contrib.outputs.cache-hit != 'true' shell: bash From c5ce169da553d72fcbbb371d50e9bc0cc3dbeb39 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Thu, 22 Feb 2024 10:59:44 +0100 Subject: [PATCH 174/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index bad1fbc52e2..16995ac9d3f 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -252,6 +252,8 @@ jobs: ## GH CLI "SHOULD BE" installed. Sometimes I had to manually install nonetheless. Super weird. # https://github.com/actions/runner-images/blob/main/images/win/scripts/Installers/Install-GitHub-CLI.ps1 echo "C:\Program Files (x86)\GitHub CLI" >> $GITHUB_PATH + # Install some dependencies from choco + choco install eigen -y --no-progress if [[ "${{ steps.set-vars.outputs.pkg_type }}" != "none" ]]; then choco install doxygen.portable ghostscript graphviz -y --no-progress @@ -280,13 +282,6 @@ jobs: with: path: ${{ github.workspace }}/OpenMS/contrib key: ${{ runner.os }}-contrib3 - - - name: Install Chocolatey and packages (if possible on windows) - if: startsWith(matrix.os, 'windows') - run: | - Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) - - name: Install Eigen - run: choco install eigen - name: Download contrib build from archive (Windows) if: startsWith(matrix.os, 'windows') && steps.cache-contrib.outputs.cache-hit != 'true' From 25cb80bd9fa05a0410696b222a830926cd9541df Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Thu, 22 Feb 2024 13:42:56 +0100 Subject: [PATCH 175/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 16995ac9d3f..b1e8de66544 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -252,8 +252,9 @@ jobs: ## GH CLI "SHOULD BE" installed. Sometimes I had to manually install nonetheless. Super weird. # https://github.com/actions/runner-images/blob/main/images/win/scripts/Installers/Install-GitHub-CLI.ps1 echo "C:\Program Files (x86)\GitHub CLI" >> $GITHUB_PATH - # Install some dependencies from choco + # Install eigen from choco choco install eigen -y --no-progress + echo "eigen_choco=C:\ProgramData\chocolatey\lib\eigen\share\cmake" >> $GITHUB_OUTPUT if [[ "${{ steps.set-vars.outputs.pkg_type }}" != "none" ]]; then choco install doxygen.portable ghostscript graphviz -y --no-progress @@ -386,6 +387,7 @@ jobs: CCACHE_SLOPPINESS: time_macros,include_file_ctime,include_file_mtime CCACHE_COMPILERCHECK: content WITH_THERMORAWFILEPARSER_TEST: "OFF" + Eigen3_DIR: ${{ steps.tools-prefix.outputs.eigen_choco }} # Eigen is installed on windows using choco - name: Test shell: bash From f40fc583d04f05b5759c01eba2ba1c181ad224aa Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Thu, 22 Feb 2024 14:49:20 +0100 Subject: [PATCH 176/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index b1e8de66544..82da6c8776b 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -387,7 +387,7 @@ jobs: CCACHE_SLOPPINESS: time_macros,include_file_ctime,include_file_mtime CCACHE_COMPILERCHECK: content WITH_THERMORAWFILEPARSER_TEST: "OFF" - Eigen3_DIR: ${{ steps.tools-prefix.outputs.eigen_choco }} # Eigen is installed on windows using choco + Eigen3_DIR: "${{ steps.tools-prefix.outputs.eigen_choco }}" # Eigen is installed on windows using choco - name: Test shell: bash From f5678220e649895e15028bb6e72946c5cffb81ff Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Thu, 22 Feb 2024 16:07:06 +0100 Subject: [PATCH 177/242] remove matrix utils. replace OpenMS matrix class with eigen matrix (#7326) * remove matrix utils. replace OpenMS matrix class with eigen matrix * removed unused methods * add back set/getValue * reviewer comment * Update src/openms/source/ANALYSIS/QUANTITATION/IsotopeLabelingMDVs.cpp * minor opts * add more doc * trimmed down interface even more * add tests * Eigenized some code * removed iterators in favor of reshaped * better ostream output * removed unneeded setZero * Update Matrix.h * print eigen version --- cmake/cmake_findExternalLibs.cmake | 6 +- src/openms/CMakeLists.txt | 3 +- .../OpenMS/ANALYSIS/OPENSWATH/MRMScoring.h | 5 +- .../ANALYSIS/QUANTITATION/ItraqConstants.h | 2 +- .../include/OpenMS/DATASTRUCTURES/Matrix.h | 463 ++++++------------ .../OpenMS/DATASTRUCTURES/Utils/MatrixUtils.h | 58 --- .../OpenMS/DATASTRUCTURES/Utils/sources.cmake | 1 - .../OpenMS/MATH/MISC/BilinearInterpolation.h | 4 +- .../source/ANALYSIS/OPENSWATH/MRMScoring.cpp | 220 ++++----- .../QUANTITATION/IsobaricIsotopeCorrector.cpp | 24 +- .../IsobaricQuantitationMethod.cpp | 4 +- .../QUANTITATION/IsotopeLabelingMDVs.cpp | 5 +- .../ANALYSIS/QUANTITATION/ItraqConstants.cpp | 50 +- .../ANALYSIS/TOPDOWN/FLASHDeconvAlgorithm.cpp | 26 +- .../COMPARISON/SPECTRA/PeakAlignment.cpp | 62 +-- .../MISC/NonNegativeLeastSquaresSolver.cpp | 4 +- src/pyOpenMS/pxds/Matrix.pxd | 18 +- .../class_tests/openms/executables.cmake | 2 +- .../source/BilinearInterpolation_test.cpp | 80 ++- .../IsobaricQuantitationMethod_test.cpp | 8 +- .../source/IsotopeLabelingMDVs_test.cpp | 4 +- .../openms/source/ItraqConstants_test.cpp | 50 +- .../ItraqEightPlexQuantitationMethod_test.cpp | 4 +- .../ItraqFourPlexQuantitationMethod_test.cpp | 4 +- .../openms/source/MRMScoring_test.cpp | 82 ++-- .../openms/source/MatrixUtils_test.cpp | 44 -- .../class_tests/openms/source/Matrix_test.cpp | 245 +++------ .../NonNegativeLeastSquaresSolver_test.cpp | 14 +- ...TMTEighteenPlexQuantitationMethod_test.cpp | 6 +- .../TMTElevenPlexQuantitationMethod_test.cpp | 4 +- .../TMTSixPlexQuantitationMethod_test.cpp | 4 +- .../TMTSixteenPlexQuantitationMethod_test.cpp | 6 +- .../TMTTenPlexQuantitationMethod_test.cpp | 8 +- src/topp/ImageCreator.cpp | 11 +- 34 files changed, 573 insertions(+), 958 deletions(-) delete mode 100644 src/openms/include/OpenMS/DATASTRUCTURES/Utils/MatrixUtils.h delete mode 100644 src/tests/class_tests/openms/source/MatrixUtils_test.cpp diff --git a/cmake/cmake_findExternalLibs.cmake b/cmake/cmake_findExternalLibs.cmake index b997a4d5e6f..86360012c03 100644 --- a/cmake/cmake_findExternalLibs.cmake +++ b/cmake/cmake_findExternalLibs.cmake @@ -146,8 +146,10 @@ find_package(BZip2 REQUIRED) #------------------------------------------------------------------------------ # Find eigen3 # creates Eigen3::Eigen3 package -find_package(Eigen3 3.3.4 REQUIRED) - +find_package(Eigen3 3.4.0 REQUIRED) +if(TARGET Eigen3::Eigen) + message("Eigen version found: ${Eigen3_VERSION}") +endif(TARGET Eigen3::Eigen) #------------------------------------------------------------------------------ # Find Crawdad libraries if requested diff --git a/src/openms/CMakeLists.txt b/src/openms/CMakeLists.txt index d4d18b5e3b5..c0624a660ad 100644 --- a/src/openms/CMakeLists.txt +++ b/src/openms/CMakeLists.txt @@ -86,7 +86,7 @@ include (${PROJECT_SOURCE_DIR}/includes.cmake) #------------------------------------------------------------------------------ # all the dependency libraries are linked into libOpenMS.so -set(OPENMS_DEP_LIBRARIES Evergreen LibSVM::LibSVM XercesC::XercesC Qt5::Core Qt5::Network) +set(OPENMS_DEP_LIBRARIES Evergreen LibSVM::LibSVM XercesC::XercesC Eigen3::Eigen Qt5::Core Qt5::Network) ## setup the argumentes to 'target_link_libraries(OpenMS PRIVATE ${OPENMS_DEP_PRIVATE_LIBRARIES})' set(OPENMS_DEP_PRIVATE_LIBRARIES @@ -97,7 +97,6 @@ set(OPENMS_DEP_PRIVATE_LIBRARIES Boost::date_time Boost::iostreams Boost::regex - Eigen3::Eigen GTE Quadtree SIMDe diff --git a/src/openms/include/OpenMS/ANALYSIS/OPENSWATH/MRMScoring.h b/src/openms/include/OpenMS/ANALYSIS/OPENSWATH/MRMScoring.h index e515273521f..5b900be37c3 100644 --- a/src/openms/include/OpenMS/ANALYSIS/OPENSWATH/MRMScoring.h +++ b/src/openms/include/OpenMS/ANALYSIS/OPENSWATH/MRMScoring.h @@ -120,9 +120,6 @@ namespace OpenSwath */ double calcXcorrCoelutionWeightedScore(const std::vector& normalized_library_intensity); - /// calculate the cross-correlation contrast score - double calcXcorrContrastCoelutionScore(); - /// calculate the separate cross-correlation contrast score std::vector calcSeparateXcorrContrastCoelutionScore(); @@ -261,7 +258,7 @@ namespace OpenSwath //@} /// contains max Peaks from xcorr_contrast_matrix_ - OpenMS::Matrix xcorr_contrast_matrix_max_peak_sec_; + OpenMS::Matrix xcorr_contrast_matrix_max_peak_sec_; /// the precomputed cross correlation matrix of the MS1 trace XCorrMatrixType xcorr_precursor_matrix_; diff --git a/src/openms/include/OpenMS/ANALYSIS/QUANTITATION/ItraqConstants.h b/src/openms/include/OpenMS/ANALYSIS/QUANTITATION/ItraqConstants.h index 1dd8bec092f..723d836aef1 100644 --- a/src/openms/include/OpenMS/ANALYSIS/QUANTITATION/ItraqConstants.h +++ b/src/openms/include/OpenMS/ANALYSIS/QUANTITATION/ItraqConstants.h @@ -46,7 +46,7 @@ namespace OpenMS typedef std::map ChannelMapType; /// (user defined?) isotope correction matrix in (-2, -1, +1, +2) row style - typedef std::vector > IsotopeMatrices; + typedef std::vector> IsotopeMatrices; /// channel names for 4plex( 114, 115, 116, 117) static const Int CHANNELS_FOURPLEX[4][1]; diff --git a/src/openms/include/OpenMS/DATASTRUCTURES/Matrix.h b/src/openms/include/OpenMS/DATASTRUCTURES/Matrix.h index c458a67b51a..3f6eb7820f2 100644 --- a/src/openms/include/OpenMS/DATASTRUCTURES/Matrix.h +++ b/src/openms/include/OpenMS/DATASTRUCTURES/Matrix.h @@ -3,376 +3,223 @@ // // -------------------------------------------------------------------------- // $Maintainer: Timo Sachsenberg $ -// $Authors: $ +// $Authors: Timo Sachsenberg $ // -------------------------------------------------------------------------- #pragma once #include -#include // pow() -#include -#include +#include + +#include #include +#include namespace OpenMS { - - /** - @brief A two-dimensional matrix. Similar to std::vector, but uses a binary - operator(,) for element access. - - Think of it as a random access container. You can also generate gray - scale images. This data structure is not designed to be used for linear algebra, - but rather a simple two-dimensional array. - - The following member functions of the base class std::vector - can also be used: - -
        -
      • begin
      • -
      • end
      • -
      • rbegin
      • -
      • rend
      • -
      • front
      • -
      • back
      • -
      • assign
      • -
      • empty
      • -
      • size
      • -
      • capacity
      • -
      • max_size
      • -
      - - @ingroup Datastructures - */ + /** + * @brief A class representing a thin wrapper around an Eigen matrix. + * + * The Matrix class provides functionality for creating, manipulating, and accessing matrices. + * It is implemented using the Eigen library and supports various operations such as resizing, clearing, + * accessing elements, setting values, and comparing matrices. + * + * @ingroup Datastructures + */ template - class Matrix : - protected std::vector + class Matrix { -protected: - typedef std::vector Base; - -public: - - ///@name STL compliance type definitions - //@{ - typedef Base container_type; - - typedef typename Base::difference_type difference_type; - typedef typename Base::size_type size_type; - - typedef typename Base::const_iterator const_iterator; - typedef typename Base::const_reverse_iterator const_reverse_iterator; - typedef typename Base::iterator iterator; - typedef typename Base::reverse_iterator reverse_iterator; - - typedef typename Base::const_reference const_reference; - typedef typename Base::pointer pointer; - typedef typename Base::reference reference; - typedef typename Base::value_type value_type; - - typedef typename Base::allocator_type allocator_type; - //@} - - ///@name OpenMS compliance type definitions - //@{ - typedef Base ContainerType; - typedef difference_type DifferenceType; - typedef size_type SizeType; - - typedef const_iterator ConstIterator; - typedef const_reverse_iterator ConstReverseIterator; - typedef iterator Iterator; - typedef reverse_iterator ReverseIterator; - - typedef const_reference ConstReference; - typedef pointer Pointer; - typedef reference Reference; - typedef value_type ValueType; - - typedef allocator_type AllocatorType; - //@} - - ///@name Constructors, assignment, and destructor - //@{ - Matrix() : - Base(), - rows_(0), - cols_(0) - {} - - Matrix(const SizeType rows, const SizeType cols, ValueType value = ValueType()) : - Base(rows * cols, value), - rows_(rows), - cols_(cols) - {} - - Matrix(const Matrix& source) : - Base(source), - rows_(source.rows_), - cols_(source.cols_) - {} - - Matrix& operator=(const Matrix& rhs) - { - Base::operator=(rhs); - rows_ = rhs.rows_; - cols_ = rhs.cols_; - return *this; - } - - ~Matrix() {} - //@} - - ///@name Accessors - //@{ - const_reference operator()(size_type const i, size_type const j) const - { - return getValue(i, j); - } - - reference operator()(size_type const i, size_type const j) - { - return getValue(i, j); - } - - const_reference getValue(size_type const i, size_type const j) const - { - return Base::operator[](index(i, j)); - } - - reference getValue(size_type const i, size_type const j) - { - return Base::operator[](index(i, j)); - } - - void setValue(size_type const i, size_type const j, value_type value) - { - Base::operator[](index(i, j)) = value; - } - - /// Return the i-th row of the matrix as a vector. - container_type row(size_type const i) const - { -#ifdef OPENMS_DEBUG - if (i >= rows_) throw Exception::IndexOverflow(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, i, rows_); -#endif - container_type values(cols_); - for (size_type j = 0; j < cols_; j++) - { - values[j] = Base::operator[](index(i, j)); - } - return values; - } - - /// Return the i-th column of the matrix as a vector. - container_type col(size_type const i) const - { -#ifdef OPENMS_DEBUG - if (i >= cols_) throw Exception::IndexOverflow(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, i, cols_); -#endif - container_type values(rows_); - for (size_type j = 0; j < rows_; j++) - { - values[j] = Base::operator[](index(j, i)); - } - return values; - } - - //@} - - + public: /** - @name Pure access declarations + * @brief Eigen matrix type. + */ + using EigenMatrixType = Eigen::Matrix; - These make begin(), end() etc. from container_type accessible. - */ - //@{ -public: - - using Base::begin; - using Base::end; - using Base::rbegin; - using Base::rend; + // Default constructor. Creates the "null" matrix. + Matrix() = default; - using Base::front; - using Base::back; - using Base::assign; + // Destructor + ~Matrix() = default; - using Base::empty; - using Base::size; + // Copy constructor + Matrix(const Matrix& other) = default; - using Base::capacity; - using Base::max_size; + // Copy assignment operator + Matrix& operator=(const Matrix& other) = default; - //@} + // Move constructor + Matrix(Matrix&& other) noexcept = default; - void clear() - { - Base::clear(); - rows_ = 0; - cols_ = 0; - } + // Move assignment operator + Matrix& operator=(Matrix&& other) noexcept = default; - void resize(size_type i, size_type j, value_type value = value_type()) + /** + * @brief Constructor to create a matrix with specified dimensions and fill value. + * + * @param rows Number of rows in the matrix. + * @param cols Number of columns in the matrix. + * @param value Initial value to fill the matrix. + */ + Matrix(Size rows, Size cols, Value value = Value()) : data_(rows, cols) { - rows_ = i; - cols_ = j; - Base::resize(rows_ * cols_, value); + data_.fill(value); } - - void resize(std::pair const& size_pair, value_type value = value_type()) + + /** + * @brief Accessor to get the value at the specified position in the matrix. + * + * @param i Row index. + * @param j Column index. + * @return reference to the value at the specified position. + */ + const Value& operator()(int i, int j) const { - rows_ = size_pair.first; - cols_ = size_pair.second; - Base::resize(rows_ * cols_, value); + return data_(i, j); } - /// Number of rows - SizeType rows() const + /** + * @brief Accessor to get the value at the specified position in the matrix. + * + * @param i Row index. + * @param j Column index. + * @return const reference to the value at the specified position. + */ + Value& operator()(int i, int j) { - return rows_; + return data_(i, j); } - /// Number of columns - SizeType cols() const + /* + @brief get matrix entry + Note: pyOpenMS can't easily wrap operator() so we provide additional getter / setter. + */ + const Value& getValue(size_t const i, size_t const j) const { - return cols_; + return data_(i, j); } - std::pair sizePair() const + /* + @brief get matrix entry + Note: pyOpenMS can't easily wrap operator() so we provide additional getter / setter. + */ + Value& getValue(size_t const i, size_t const j) { - return std::pair(rows_, cols_); - } + return data_(i, j); + } - /** - @brief Calculate the index into the underlying vector from row and column. - Note that Matrix uses the (row,column) lexicographic ordering for indexing. + /* + @brief set matrix entry + Note: pyOpenMS can't easily wrap operator() so we provide additional getter / setter. */ - SizeType const index(SizeType row, SizeType col) const + void setValue(size_t const i, size_t const j, const Value& value) { -#ifdef OPENMS_DEBUG - if (row >= rows_) throw Exception::IndexOverflow(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, row, rows_); - if (col >= cols_) throw Exception::IndexOverflow(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, col, cols_); -#endif - return row * cols_ + col; + data_(i, j) = value; } /** - @brief Calculate the row and column from an index into the underlying vector. - Note that Matrix uses the (row,column) lexicographic ordering for indexing. - */ - std::pair const indexPair(Size index) const - { -#ifdef OPENMS_DEBUG - if (index >= size()) throw Exception::IndexOverflow(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, index, size() - 1); -#endif - return std::pair(index / cols_, index % cols_); + * @brief Number of rows + */ + size_t rows() const + { + return data_.rows(); } /** - @brief Calculate the column from an index into the underlying vector. - Note that Matrix uses the (row,column) lexicographic ordering for indexing. - */ - SizeType colIndex(SizeType index) const - { -#ifdef OPENMS_DEBUG - if (index >= size()) throw Exception::IndexOverflow(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, index, size() - 1); -#endif - return index % cols_; + * @brief Number of columns + */ + size_t cols() const + { + return data_.cols(); } /** - @brief Calculate the row from an index into the underlying vector. - Note that Matrix uses the (row,column) lexicographic ordering for indexing. - */ - SizeType rowIndex(SizeType index) const - { -#ifdef OPENMS_DEBUG - if (index >= size()) throw Exception::IndexOverflow(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, index, size() - 1); -#endif - - return index / cols_; + * @brief Sets the matrix values using a 2D array. + * + * This function resizes the matrix to the specified number of rows and columns, + * and then assigns the values from the 2D array to the corresponding elements + * in the matrix. + * + * @tparam T The type of the matrix elements. + * @tparam ROWS The number of rows in the matrix. + * @tparam COLS The number of columns in the matrix. + * @param array The 2D array containing the values to be assigned to the matrix. + */ + template + void setMatrix(T const (&array)[ROWS][COLS]) + { + data_.resize(ROWS, COLS); + for (int i = 0; i < ROWS; ++i) + { + for (int j = 0; j < COLS; ++j) + { + data_(i, j) = array[i][j]; + } + } } - + /** - @brief Equality comparator. - - If matrices have different row or column numbers, throws a precondition exception. - */ - bool operator==(Matrix const& rhs) const + * @brief Equality operator. Compares two matrices for equality. + * + * @param rhs The matrix to be compared. + * @return True if matrices are equal, false otherwise. + */ + bool operator==(const Matrix& rhs) const { - OPENMS_PRECONDITION(cols_ == rhs.cols_, - "Matrices have different row sizes."); - OPENMS_PRECONDITION(rows_ == rhs.rows_, - "Matrices have different column sizes."); - return static_cast::Base const&>(*this) == static_cast::Base const&>(rhs); + return data_ == rhs.data_; } /** - @brief Less-than comparator. Comparison is done lexicographically: first by row, then by column. - - If matrices have different row or column numbers, throws a precondition exception. - */ - bool operator<(Matrix const& rhs) const + * @brief Get the total number of elements in the matrix. Useful for checking if the matrix is empty + * or iterating over raw data. + * + * @return The total number of elements. + */ + size_t size() const { - OPENMS_PRECONDITION(cols_ == rhs.cols_, - "Matrices have different row sizes."); - OPENMS_PRECONDITION(rows_ == rhs.rows_, - "Matrices have different column sizes."); - return static_cast::Base const&>(*this) < static_cast::Base const&>(rhs); + return data_.size(); } - /// set matrix to 2D arrays values - template - void setMatrix(const ValueType matrix[ROWS][COLS]) - { - resize(ROWS, COLS); - for (SizeType i = 0; i < this->rows_; ++i) + /** + * @brief Friend function to output the matrix to an output stream. + * + * @param os Output stream. + * @param matrix Matrix to be output. + * @return Reference to the output stream. + */ + friend std::ostream& operator<<(std::ostream& os, const Matrix& matrix) + { + for (size_t i = 0; i < matrix.rows(); ++i) { - for (SizeType j = 0; j < this->cols_; ++j) + for (size_t j = 0; j < matrix.cols(); ++j) { - setValue(i, j, matrix[i][j]); + os << std::setprecision(6) << std::setw(6) << matrix(i, j) << ' '; } + os << '\n'; } + return os; } - const Base& asVector() + /** + * @brief Get a const reference to the underlying Eigen matrix. + * + * @return Const reference to the Eigen matrix. + */ + const EigenMatrixType& getEigenMatrix() const { - return *this; + return data_; } -protected: - - ///@name Data members - //@{ - /// Number of rows (height of a column) - SizeType rows_; - /// Number of columns (width of a row) - SizeType cols_; - //@} - - }; // class Matrix - - /** - @brief Print the contents to a stream. - - @relatesalso Matrix - */ - template - std::ostream& operator<<(std::ostream& os, const Matrix& matrix) - { - typedef typename Matrix::size_type size_type; - for (size_type i = 0; i < matrix.rows(); ++i) + /** + * @brief Get a reference to the underlying Eigen matrix. + * + * @return reference to the Eigen matrix. + */ + EigenMatrixType& getEigenMatrix() { - for (size_type j = 0; j < matrix.cols(); ++j) - { - os << std::setprecision(6) << std::setw(6) << matrix(i, j) << ' '; - } - os << std::endl; + return data_; } - return os; - } - + private: + EigenMatrixType data_; ///< Eigen matrix storing the actual data. + }; } // namespace OpenMS - diff --git a/src/openms/include/OpenMS/DATASTRUCTURES/Utils/MatrixUtils.h b/src/openms/include/OpenMS/DATASTRUCTURES/Utils/MatrixUtils.h deleted file mode 100644 index 924d7c77b6d..00000000000 --- a/src/openms/include/OpenMS/DATASTRUCTURES/Utils/MatrixUtils.h +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Timo Sachsenberg $ -// $Authors: Christian Ehrlich $ -// -------------------------------------------------------------------------- - -#pragma once - -#include - -#include - -#include - -namespace OpenMS -{ - /** Matrix utility functions. - * - */ - - typedef boost::shared_ptr< const Eigen::MatrixXd > EigenMatrixXdPtr; - typedef boost::shared_ptr< Eigen::MatrixXd > MutableEigenMatrixXdPtr; - - inline EigenMatrixXdPtr - convertOpenMSMatrix2EigenMatrixXd( const Matrix& m ) - { - MutableEigenMatrixXdPtr em ( new Eigen::MatrixXd(m.rows(), m.cols()) ); - for (unsigned i=0; i& channel_frequency) - { - for (Matrix::SizeType i = 0; i < channel_frequency.rows(); ++i) - { - for (Matrix::SizeType j = 0; j < channel_frequency.rows(); ++j) - { - // check if the entries are those of a identity matrix; - // i==j -> m(i,j) == 1.0 && i!=j -> m(i,j) == 0.0 - if ((i == j && channel_frequency(i, j) != 1.0) || channel_frequency(i, j) != 0.0) - { - return false; - } - } - } - return true; - } -}//namespace - diff --git a/src/openms/include/OpenMS/DATASTRUCTURES/Utils/sources.cmake b/src/openms/include/OpenMS/DATASTRUCTURES/Utils/sources.cmake index a4707fd60a8..83623c415c0 100644 --- a/src/openms/include/OpenMS/DATASTRUCTURES/Utils/sources.cmake +++ b/src/openms/include/OpenMS/DATASTRUCTURES/Utils/sources.cmake @@ -3,7 +3,6 @@ set(directory include/OpenMS/DATASTRUCTURES/Utils) ### list all header files of the directory here set(sources_list_h -MatrixUtils.h MapUtilities.h ) diff --git a/src/openms/include/OpenMS/MATH/MISC/BilinearInterpolation.h b/src/openms/include/OpenMS/MATH/MISC/BilinearInterpolation.h index 25566286d15..3b2b47d643a 100644 --- a/src/openms/include/OpenMS/MATH/MISC/BilinearInterpolation.h +++ b/src/openms/include/OpenMS/MATH/MISC/BilinearInterpolation.h @@ -290,7 +290,7 @@ namespace OpenMS void addValue(KeyType arg_pos_0, KeyType arg_pos_1, ValueType arg_value) { - typedef typename container_type::difference_type DiffType; + typedef typename std::ptrdiff_t DiffType; // apply key transformation _0 KeyType const pos_0 = key2index_0(arg_pos_0); @@ -506,7 +506,7 @@ namespace OpenMS /// Returns \c true if getData() is empty. bool empty() const { - return data_.empty(); + return data_.getEigenMatrix().size() == 0; } //@} diff --git a/src/openms/source/ANALYSIS/OPENSWATH/MRMScoring.cpp b/src/openms/source/ANALYSIS/OPENSWATH/MRMScoring.cpp index 0c846ff891a..a64e19b7525 100644 --- a/src/openms/source/ANALYSIS/OPENSWATH/MRMScoring.cpp +++ b/src/openms/source/ANALYSIS/OPENSWATH/MRMScoring.cpp @@ -26,9 +26,9 @@ namespace OpenSwath void MRMScoring::initializeXCorrMatrix(const std::vector< std::vector< double > >& data) { - xcorr_matrix_.resize(data.size(), data.size()); - xcorr_matrix_max_peak_.resize(data.size(), data.size()); - xcorr_matrix_max_peak_sec_.resize(data.size(), data.size()); + xcorr_matrix_.getEigenMatrix().resize(data.size(), data.size()); + xcorr_matrix_max_peak_.getEigenMatrix().resize(data.size(), data.size()); + xcorr_matrix_max_peak_sec_.getEigenMatrix().resize(data.size(), data.size()); std::vector< std::vector< double > > tmp_data = data; for (std::size_t i = 0; i < tmp_data.size(); i++) @@ -41,10 +41,10 @@ namespace OpenSwath for (std::size_t j = i; j < data.size(); j++) { // compute normalized cross correlation - xcorr_matrix_.setValue(i, j, Scoring::normalizedCrossCorrelationPost(tmp_data[i], tmp_data[j], static_cast(data[i].size()), 1)); - auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_matrix_.getValue(i, j)); - xcorr_matrix_max_peak_.setValue(i, j, std::abs(x->first)); - xcorr_matrix_max_peak_sec_.setValue(i, j, x->second); + xcorr_matrix_(i, j) = Scoring::normalizedCrossCorrelationPost(tmp_data[i], tmp_data[j], static_cast(data[i].size()), 1); + auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_matrix_(i, j)); + xcorr_matrix_max_peak_(i, j) = std::abs(x->first); + xcorr_matrix_max_peak_sec_(i, j) = x->second; } } } @@ -93,18 +93,19 @@ namespace OpenSwath Scoring::standardize_data(intensity[i]); } - xcorr_matrix_.resize(native_ids.size(), native_ids.size()); - xcorr_matrix_max_peak_.resize(native_ids.size(), native_ids.size()); - xcorr_matrix_max_peak_sec_.resize(native_ids.size(), native_ids.size()); + xcorr_matrix_.getEigenMatrix().resize(native_ids.size(), native_ids.size()); + xcorr_matrix_max_peak_.getEigenMatrix().resize(native_ids.size(), native_ids.size()); + xcorr_matrix_max_peak_sec_.getEigenMatrix().resize(native_ids.size(), native_ids.size()); + for (std::size_t i = 0; i < native_ids.size(); i++) { for (std::size_t j = i; j < native_ids.size(); j++) { // compute normalized cross correlation - xcorr_matrix_.setValue(i, j, Scoring::normalizedCrossCorrelationPost(intensity[i], intensity[j], static_cast(intensity[i].size()), 1)); - auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_matrix_.getValue(i, j)); - xcorr_matrix_max_peak_.setValue(i, j, std::abs(x->first)); - xcorr_matrix_max_peak_sec_.setValue(i, j, x->second); + xcorr_matrix_(i, j) = Scoring::normalizedCrossCorrelationPost(intensity[i], intensity[j], static_cast(intensity[i].size()), 1); + auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_matrix_(i, j)); + xcorr_matrix_max_peak_(i, j) = std::abs(x->first); + xcorr_matrix_max_peak_sec_(i, j) = x->second; } } } @@ -123,16 +124,17 @@ namespace OpenSwath Scoring::standardize_data(intensityj[i]); } - xcorr_contrast_matrix_.resize(native_ids_set1.size(), native_ids_set2.size()); - xcorr_contrast_matrix_max_peak_sec_.resize(native_ids_set1.size(), native_ids_set2.size()); + xcorr_contrast_matrix_.getEigenMatrix().resize(native_ids_set1.size(), native_ids_set2.size()); + xcorr_contrast_matrix_max_peak_sec_.getEigenMatrix().resize(native_ids_set1.size(), native_ids_set2.size()); + for (std::size_t i = 0; i < native_ids_set1.size(); i++) { for (std::size_t j = 0; j < native_ids_set2.size(); j++) { // compute normalized cross correlation - xcorr_contrast_matrix_.setValue(i, j, Scoring::normalizedCrossCorrelationPost(intensityi[i], intensityj[j], static_cast(intensityi[i].size()), 1)); - auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_contrast_matrix_.getValue(i, j)); - xcorr_contrast_matrix_max_peak_sec_.setValue(i, j, x->second); + xcorr_contrast_matrix_(i, j) = Scoring::normalizedCrossCorrelationPost(intensityi[i], intensityj[j], static_cast(intensityi[i].size()), 1); + auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_contrast_matrix_(i, j)); + xcorr_contrast_matrix_max_peak_sec_(i, j) = x->second; } } } @@ -146,13 +148,13 @@ namespace OpenSwath Scoring::standardize_data(intensity[i]); } - xcorr_precursor_matrix_.resize(precursor_ids.size(), precursor_ids.size()); + xcorr_precursor_matrix_.getEigenMatrix().resize(precursor_ids.size(), precursor_ids.size()); for (std::size_t i = 0; i < precursor_ids.size(); i++) { for (std::size_t j = i; j < precursor_ids.size(); j++) { // compute normalized cross correlation - xcorr_precursor_matrix_.setValue(i, j, Scoring::normalizedCrossCorrelationPost(intensity[i], intensity[j], static_cast(intensity[i].size()), 1)); + xcorr_precursor_matrix_(i, j) = Scoring::normalizedCrossCorrelationPost(intensity[i], intensity[j], static_cast(intensity[i].size()), 1); } } } @@ -171,20 +173,20 @@ namespace OpenSwath Scoring::standardize_data(intensityj[i]); } - xcorr_precursor_contrast_matrix_.resize(precursor_ids.size(), native_ids.size()); + xcorr_precursor_contrast_matrix_.getEigenMatrix().resize(precursor_ids.size(), native_ids.size()); for (std::size_t i = 0; i < precursor_ids.size(); i++) { for (std::size_t j = 0; j < native_ids.size(); j++) { // compute normalized cross correlation - xcorr_precursor_contrast_matrix_.setValue(i, j, Scoring::normalizedCrossCorrelationPost(intensityi[i], intensityj[j], static_cast(intensityi[i].size()), 1)); + xcorr_precursor_contrast_matrix_(i, j) = Scoring::normalizedCrossCorrelationPost(intensityi[i], intensityj[j], static_cast(intensityi[i].size()), 1); } } } void MRMScoring::initializeXCorrPrecursorContrastMatrix(const std::vector< std::vector< double > >& data_precursor, const std::vector< std::vector< double > >& data_fragments) { - xcorr_precursor_contrast_matrix_.resize(data_precursor.size(), data_fragments.size()); + xcorr_precursor_contrast_matrix_.getEigenMatrix().resize(data_precursor.size(), data_fragments.size()); std::vector< std::vector< double > > tmp_data_precursor = data_precursor; std::vector< std::vector< double > > tmp_data_fragments = data_fragments; for (std::size_t i = 0; i < tmp_data_precursor.size(); i++) @@ -201,7 +203,7 @@ namespace OpenSwath for (std::size_t j = 0; j < data_fragments.size(); j++) { // compute normalized cross correlation - xcorr_precursor_contrast_matrix_.setValue(i, j, Scoring::normalizedCrossCorrelationPost(tmp_data_precursor[i], tmp_data_fragments[j], static_cast(tmp_data_precursor[i].size()), 1)); + xcorr_precursor_contrast_matrix_(i, j) = Scoring::normalizedCrossCorrelationPost(tmp_data_precursor[i], tmp_data_fragments[j], static_cast(tmp_data_precursor[i].size()), 1); #ifdef MRMSCORING_TESTING std::cout << " fill xcorr_precursor_contrast_matrix_ "<< tmp_data_precursor[i].size() << " / " << tmp_data_fragments[j].size() << " : " << xcorr_precursor_contrast_matrix_[i][j].data.size() << std::endl; #endif @@ -228,13 +230,13 @@ namespace OpenSwath Scoring::standardize_data(combined_intensity[i]); } - xcorr_precursor_combined_matrix_.resize(combined_intensity.size(), combined_intensity.size()); + xcorr_precursor_combined_matrix_.getEigenMatrix().resize(combined_intensity.size(), combined_intensity.size()); for (std::size_t i = 0; i < combined_intensity.size(); i++) { for (std::size_t j = i; j < combined_intensity.size(); j++) { // compute normalized cross correlation - xcorr_precursor_combined_matrix_.setValue(i, j, Scoring::normalizedCrossCorrelationPost(combined_intensity[i], combined_intensity[j], static_cast(combined_intensity[i].size()), 1)); + xcorr_precursor_combined_matrix_(i, j) = Scoring::normalizedCrossCorrelationPost(combined_intensity[i], combined_intensity[j], static_cast(combined_intensity[i].size()), 1); } } } @@ -256,7 +258,7 @@ namespace OpenSwath { // first is the X value (RT), should be an int //deltas.push_back(std::abs(Scoring::xcorrArrayGetMaxPeak(xcorr_matrix_.getValue(i, j))->first)); - msc(xcorr_matrix_max_peak_.getValue(i,j)); + msc(xcorr_matrix_max_peak_(i,j)); #ifdef MRMSCORING_TESTING std::cout << "&&_xcoel append " << std::abs(Scoring::xcorrArrayGetMaxPeak(xcorr_matrix_[i][j])->first) << std::endl; #endif @@ -281,7 +283,7 @@ namespace OpenSwath double deltas{0}; for (std::size_t i = 0; i < xcorr_matrix_max_peak_.rows(); i++) { - deltas += (xcorr_matrix_max_peak_.getValue(i, i)//std::abs(Scoring::xcorrArrayGetMaxPeak(xcorr_matrix_.getValue(i, i))->first) + deltas += (xcorr_matrix_max_peak_(i, i)//std::abs(Scoring::xcorrArrayGetMaxPeak(xcorr_matrix_.getValue(i, i))->first) * normalized_library_intensity[i] * normalized_library_intensity[i]); #ifdef MRMSCORING_TESTING @@ -292,7 +294,7 @@ namespace OpenSwath for (std::size_t j = i + 1; j < xcorr_matrix_max_peak_.rows(); j++) { // first is the X value (RT), should be an int - deltas += (xcorr_matrix_max_peak_.getValue(i, j)//std::abs(Scoring::xcorrArrayGetMaxPeak(xcorr_matrix_.getValue(i, j))->first) + deltas += (xcorr_matrix_max_peak_(i, j)//std::abs(Scoring::xcorrArrayGetMaxPeak(xcorr_matrix_.getValue(i, j))->first) * normalized_library_intensity[i] * normalized_library_intensity[j] * 2); #ifdef MRMSCORING_TESTING @@ -311,27 +313,6 @@ namespace OpenSwath return deltas; } - double MRMScoring::calcXcorrContrastCoelutionScore() - { - OPENSWATH_PRECONDITION(xcorr_contrast_matrix_.rows() > 0 && xcorr_contrast_matrix_.cols() > 1, "Expect cross-correlation matrix of at least 1x2"); - - OpenSwath::mean_and_stddev msc; - for (const auto& e : xcorr_contrast_matrix_) - { - // first is the X value (RT), should be an int - msc(std::abs(Scoring::xcorrArrayGetMaxPeak(e)->first)); -#ifdef MRMSCORING_TESTING - std::cout << "&&_xcoel append " << std::abs(Scoring::xcorrArrayGetMaxPeak(xcorr_contrast_matrix_[i][j])->first) << std::endl; -#endif - } - - double deltas_mean = msc.mean(); - double deltas_stdv = msc.sample_stddev(); - - double xcorr_coelution_score = deltas_mean + deltas_stdv; - return xcorr_coelution_score; - } - std::vector MRMScoring::calcSeparateXcorrContrastCoelutionScore() { OPENSWATH_PRECONDITION(xcorr_contrast_matrix_.rows() > 0 && xcorr_contrast_matrix_.cols() > 1, "Expect cross-correlation matrix of at least 1x2"); @@ -343,7 +324,7 @@ namespace OpenSwath for (std::size_t j = 0; j < xcorr_contrast_matrix_.cols(); j++) { // first is the X value (RT), should be an int - auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_contrast_matrix_.getValue(i, j)); + auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_contrast_matrix_(i, j)); deltas_id += std::abs(x->first); #ifdef MRMSCORING_TESTING std::cout << "&&_xcoel append " << xcorr_contrast_matrix_max_peak_getValue(i, j) << std::endl; @@ -365,7 +346,7 @@ namespace OpenSwath for (std::size_t j = i; j < xcorr_precursor_matrix_.rows(); j++) { // first is the X value (RT), should be an int - auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_precursor_matrix_.getValue(i, j)); + auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_precursor_matrix_(i, j)); msc(std::abs(x->first)); #ifdef MRMSCORING_TESTING std::cout << "&&_xcoel append " << std::abs(Scoring::xcorrArrayGetMaxPeak(xcorr_precursor_matrix_[i][j])->first) << std::endl; @@ -385,9 +366,13 @@ namespace OpenSwath OPENSWATH_PRECONDITION(xcorr_precursor_contrast_matrix_.rows() > 0 && xcorr_precursor_contrast_matrix_.cols() > 1, "Expect cross-correlation matrix of at least 1x2"); OpenSwath::mean_and_stddev msc; - for (const auto& e : xcorr_precursor_contrast_matrix_) + size_t n_entries = xcorr_precursor_contrast_matrix_.getEigenMatrix().size(); + const auto& em = xcorr_precursor_contrast_matrix_.getEigenMatrix(); + + for (size_t i = 0; i < n_entries; i++) { // first is the X value (RT), should be an int + auto e = *(em.data() + i); msc(std::abs(Scoring::xcorrArrayGetMaxPeak(e)->first)); #ifdef MRMSCORING_TESTING std::cout << "&&_xcoel append " << std::abs(Scoring::xcorrArrayGetMaxPeak(xcorr_precursor_contrast_matrix_[i][j])->first) << std::endl; @@ -406,10 +391,14 @@ namespace OpenSwath OPENSWATH_PRECONDITION(xcorr_precursor_contrast_matrix_.rows() > 0 && xcorr_precursor_contrast_matrix_.cols() > 0, "Expect cross-correlation matrix of at least 1x1"); OpenSwath::mean_and_stddev msc; - for (const auto& e : xcorr_precursor_contrast_matrix_) + size_t n_entries = xcorr_precursor_contrast_matrix_.getEigenMatrix().size(); + auto& em = xcorr_precursor_contrast_matrix_.getEigenMatrix(); + for (size_t i = 0; i < n_entries; i++) { // first is the X value (RT), should be an int - msc(std::abs(Scoring::xcorrArrayGetMaxPeak(e)->first)); + auto e = *(em.data() + i); + msc(std::abs(Scoring::xcorrArrayGetMaxPeak(e)->first)); + #ifdef MRMSCORING_TESTING std::cout << "&&_xcoel append " << std::abs(Scoring::xcorrArrayGetMaxPeak(xcorr_precursor_contrast_matrix_[i][j])->first) << std::endl; #endif @@ -432,7 +421,7 @@ namespace OpenSwath for (std::size_t j = i; j < xcorr_precursor_combined_matrix_.rows(); j++) { // first is the X value (RT), should be an int - auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_precursor_combined_matrix_.getValue(i, j)); + auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_precursor_combined_matrix_(i, j)); msc(std::abs(x->first)); #ifdef MRMSCORING_TESTING std::cout << "&&_xcoel append " << std::abs(Scoring::xcorrArrayGetMaxPeak(xcorr_precursor_combined_matrix_[i][j])->first) << std::endl; @@ -464,7 +453,7 @@ namespace OpenSwath for (std::size_t j = i; j < xcorr_matrix_max_peak_sec_.rows(); j++) { // second is the Y value (intensity) - intensities += xcorr_matrix_max_peak_sec_.getValue(i, j); + intensities += xcorr_matrix_max_peak_sec_(i, j); element_number++; } } @@ -482,7 +471,7 @@ namespace OpenSwath double intensities{0}; for (std::size_t i = 0; i < xcorr_matrix_max_peak_sec_.rows(); i++) { - intensities += (xcorr_matrix_max_peak_sec_.getValue(i, i) + intensities += (xcorr_matrix_max_peak_sec_(i, i) * normalized_library_intensity[i] * normalized_library_intensity[i]); #ifdef MRMSCORING_TESTING @@ -491,7 +480,7 @@ namespace OpenSwath #endif for (std::size_t j = i + 1; j < xcorr_matrix_max_peak_sec_.rows(); j++) { - intensities += (xcorr_matrix_max_peak_sec_.getValue(i, j) + intensities += (xcorr_matrix_max_peak_sec_(i, j) * normalized_library_intensity[i] * normalized_library_intensity[j] * 2); #ifdef MRMSCORING_TESTING @@ -506,13 +495,8 @@ namespace OpenSwath double MRMScoring::calcXcorrContrastShapeScore() { OPENSWATH_PRECONDITION(xcorr_contrast_matrix_max_peak_sec_.rows() > 0 && xcorr_contrast_matrix_max_peak_sec_.cols() > 1, "Expect cross-correlation matrix of at least 1x2"); - - double intensities{0}; - for (const auto& e : xcorr_contrast_matrix_max_peak_sec_) - { - intensities += e; - } - return intensities; + const auto& em = xcorr_contrast_matrix_max_peak_sec_.getEigenMatrix(); + return em.sum(); } std::vector MRMScoring::calcSeparateXcorrContrastShapeScore() @@ -526,7 +510,7 @@ namespace OpenSwath for (std::size_t j = 0; j < xcorr_contrast_matrix_max_peak_sec_.cols(); j++) { // second is the Y value (intensity) - intensities_id += xcorr_contrast_matrix_max_peak_sec_.getValue(i,j); + intensities_id += xcorr_contrast_matrix_max_peak_sec_(i,j); } intensities.push_back(intensities_id / xcorr_contrast_matrix_max_peak_sec_.cols()); } @@ -543,7 +527,7 @@ namespace OpenSwath { for(size_t j = i; j < xcorr_precursor_matrix_.cols(); j++) { - auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_precursor_matrix_.getValue(i, j)); + auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_precursor_matrix_(i, j)); intensities += x->second; } } @@ -557,37 +541,43 @@ namespace OpenSwath OPENSWATH_PRECONDITION(xcorr_precursor_contrast_matrix_.rows() > 0 && xcorr_precursor_contrast_matrix_.cols() > 0, "Expect cross-correlation matrix of at least 1x1"); double intensities{0}; - for (const auto& e : xcorr_precursor_contrast_matrix_) + const auto& em = xcorr_precursor_contrast_matrix_.getEigenMatrix(); + size_t n_elements = em.size(); + for (size_t i = 0; i != n_elements; ++i) { - intensities += Scoring::xcorrArrayGetMaxPeak(e)->second; + const auto& e = *(em.data() + i); + intensities += Scoring::xcorrArrayGetMaxPeak(e)->second;; } - return intensities / xcorr_precursor_contrast_matrix_.size(); + + return intensities / (double)n_elements; } double MRMScoring::calcXcorrPrecursorContrastShapeScore() { OPENSWATH_PRECONDITION(xcorr_precursor_contrast_matrix_.rows() > 0 && xcorr_precursor_contrast_matrix_.cols() > 1, "Expect cross-correlation matrix of at least 1x2"); - double intensities{0}; - for (const auto& e : xcorr_precursor_contrast_matrix_) + + const auto& em = xcorr_precursor_contrast_matrix_.getEigenMatrix(); + size_t n_elements = em.size(); + for (size_t i = 0; i != n_elements; ++i) { + const auto& e = *(em.data() + i); intensities += Scoring::xcorrArrayGetMaxPeak(e)->second; } - return intensities / xcorr_precursor_contrast_matrix_.size(); + return intensities / (double)n_elements; } double MRMScoring::calcXcorrPrecursorCombinedShapeScore() { OPENSWATH_PRECONDITION(xcorr_precursor_combined_matrix_.rows() > 1, "Expect cross-correlation matrix of at least 2x2"); - double intensities{0}; for(size_t i = 0; i < xcorr_precursor_combined_matrix_.rows(); i++) { for(size_t j = i; j < xcorr_precursor_combined_matrix_.cols(); j++) { - auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_precursor_combined_matrix_.getValue(i, j)); + auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_precursor_combined_matrix_(i, j)); intensities += x->second; } } @@ -734,16 +724,18 @@ namespace OpenSwath fillIntensityFromFeature(mrmfeature, native_ids, intensity); std::vector max_rank_vec = Scoring::computeRankVector(intensity, rank_vec); - mi_matrix_.resize(native_ids.size(),native_ids.size()); + mi_matrix_.getEigenMatrix().resize(native_ids.size(), native_ids.size()); + mi_matrix_.getEigenMatrix().setZero(); for (std::size_t i = 0; i < native_ids.size(); i++) { for (std::size_t j = i; j < native_ids.size(); j++) { // compute ranked mutual information - mi_matrix_.setValue(i, j, Scoring::rankedMutualInformation(rank_vec[i], rank_vec[j], max_rank_vec[i], max_rank_vec[j])); + mi_matrix_(i, j) = Scoring::rankedMutualInformation(rank_vec[i], rank_vec[j], max_rank_vec[i], max_rank_vec[j]); } } } + void MRMScoring::initializeMIContrastMatrix(OpenSwath::IMRMFeature* mrmfeature, const std::vector& native_ids_set1, const std::vector& native_ids_set2) { std::vector> intensityi, intensityj; @@ -753,13 +745,13 @@ namespace OpenSwath std::vector max_rank_vec1 = Scoring::computeRankVector(intensityi, rank_vec1); std::vector max_rank_vec2 = Scoring::computeRankVector(intensityj, rank_vec2); - mi_contrast_matrix_.resize(native_ids_set1.size(), native_ids_set2.size()); + mi_contrast_matrix_.getEigenMatrix().resize(native_ids_set1.size(), native_ids_set2.size()); for (std::size_t i = 0; i < native_ids_set1.size(); i++) { for (std::size_t j = 0; j < native_ids_set2.size(); j++) { // compute ranked mutual information - mi_contrast_matrix_.setValue(i, j, Scoring::rankedMutualInformation(rank_vec1[i], rank_vec2[j], max_rank_vec1[i], max_rank_vec2[j])); + mi_contrast_matrix_(i, j) = Scoring::rankedMutualInformation(rank_vec1[i], rank_vec2[j], max_rank_vec1[i], max_rank_vec2[j]); } } } @@ -767,17 +759,19 @@ namespace OpenSwath void MRMScoring::initializeMIPrecursorMatrix(OpenSwath::IMRMFeature* mrmfeature, const std::vector& precursor_ids) { std::vector> intensity; - std::vector> rank_vec{}; + std::vector> rank_vec; fillIntensityFromPrecursorFeature(mrmfeature, precursor_ids, intensity); std::vector max_rank_vec = Scoring::computeRankVector(intensity, rank_vec); - mi_precursor_matrix_.resize(precursor_ids.size(),precursor_ids.size()); + mi_precursor_matrix_.getEigenMatrix().resize(precursor_ids.size(), precursor_ids.size()); + mi_precursor_matrix_.getEigenMatrix().setZero(); + for (std::size_t i = 0; i < precursor_ids.size(); i++) { for (std::size_t j = i; j < precursor_ids.size(); j++) { // compute ranked mutual information - mi_precursor_matrix_.setValue(i, j, Scoring::rankedMutualInformation(rank_vec[i], rank_vec[j], max_rank_vec[i], max_rank_vec[j])); + mi_precursor_matrix_(i, j) = Scoring::rankedMutualInformation(rank_vec[i], rank_vec[j], max_rank_vec[i], max_rank_vec[j]); } } } @@ -791,13 +785,13 @@ namespace OpenSwath std::vector max_rank_vec1 = Scoring::computeRankVector(intensityi, rank_vec1); std::vector max_rank_vec2 = Scoring::computeRankVector(intensityj, rank_vec2); - mi_precursor_contrast_matrix_.resize(precursor_ids.size(), native_ids.size()); + mi_precursor_contrast_matrix_.getEigenMatrix().resize(precursor_ids.size(), native_ids.size()); for (std::size_t i = 0; i < precursor_ids.size(); i++) { for (std::size_t j = 0; j < native_ids.size(); j++) { // compute ranked mutual information - mi_precursor_contrast_matrix_.setValue(i, j, Scoring::rankedMutualInformation(rank_vec1[i], rank_vec2[j], max_rank_vec1[i], max_rank_vec2[j])); + mi_precursor_contrast_matrix_(i, j) = Scoring::rankedMutualInformation(rank_vec1[i], rank_vec2[j], max_rank_vec1[i], max_rank_vec2[j]); } } } @@ -814,27 +808,24 @@ namespace OpenSwath max_rank_vec.reserve(max_rank_vec.size() + native_ids.size()); max_rank_vec.insert(max_rank_vec.end(), max_rank_vec_tmp.begin(), max_rank_vec_tmp.end()); - mi_precursor_combined_matrix_.resize(rank_vec.size(), rank_vec.size()); + mi_precursor_combined_matrix_.getEigenMatrix().resize(rank_vec.size(), rank_vec.size()); for (std::size_t i = 0; i < rank_vec.size(); i++) { for (std::size_t j = i; j < rank_vec.size(); j++) { // compute ranked mutual information double curr_mutual_score = Scoring::rankedMutualInformation(rank_vec[i], rank_vec[j], max_rank_vec[i], max_rank_vec[j]); - mi_precursor_combined_matrix_.setValue(i ,j, curr_mutual_score); - mi_precursor_combined_matrix_.setValue(j ,i, curr_mutual_score); + mi_precursor_combined_matrix_(i, j) = curr_mutual_score; + if (i != j) mi_precursor_combined_matrix_(j, i) = curr_mutual_score; } } } + double MRMScoring::calcMIScore() { OPENSWATH_PRECONDITION(mi_matrix_.rows() > 1, "Expect mutual information matrix of at least 2x2"); - - double mi_scores{0}; - for (const auto& e : mi_matrix_) - { - mi_scores += e; - } + const auto& em = mi_matrix_.getEigenMatrix(); + double mi_scores = em.sum(); //mi_matrix_ is a triangular matrix size_t element_number = mi_matrix_.rows() * mi_matrix_.rows() / 2 + (mi_matrix_.rows() + 1) / 2; return mi_scores / element_number; @@ -848,7 +839,7 @@ namespace OpenSwath double mi_scores{0}; for (std::size_t i = 0; i < mi_matrix_.rows(); i++) { - mi_scores += mi_matrix_.getValue(i,i) + mi_scores += mi_matrix_(i, i) * normalized_library_intensity[i] * normalized_library_intensity[i]; #ifdef MRMSCORING_TESTING @@ -857,7 +848,7 @@ namespace OpenSwath #endif for (std::size_t j = i + 1; j < mi_matrix_.rows(); j++) { - mi_scores += mi_matrix_.getValue(i,j) + mi_scores += mi_matrix_(i, j) * normalized_library_intensity[i] * normalized_library_intensity[j] * 2; #ifdef MRMSCORING_TESTING @@ -873,39 +864,34 @@ namespace OpenSwath { OPENSWATH_PRECONDITION(mi_precursor_matrix_.rows() > 1, "Expect mutual information matrix of at least 2x2"); - double mi_scores{0}; - for (const auto& e : mi_precursor_matrix_) - { - mi_scores += e; - } + const auto& em = mi_precursor_matrix_.getEigenMatrix(); + double mi_scores = em.sum(); //mi_precursor_matrix_ is a triangular matrix size_t element_number = mi_precursor_matrix_.rows()*mi_precursor_matrix_.rows()/2 + (mi_precursor_matrix_.rows()+1)/2; - return mi_scores / element_number; + return mi_scores / (double)element_number; } double MRMScoring::calcMIPrecursorContrastScore() { OPENSWATH_PRECONDITION(mi_precursor_contrast_matrix_.rows() > 0 && mi_precursor_contrast_matrix_.cols() > 1, "Expect mutual information matrix of at least 1x2"); - double mi_scores{0}; - for (const auto& e : mi_precursor_contrast_matrix_) - { - mi_scores += e; - } - return mi_scores / mi_precursor_contrast_matrix_.size(); + const auto& em = mi_precursor_contrast_matrix_.getEigenMatrix(); + size_t n_entries = em.size(); + double mi_scores = em.sum(); + + return mi_scores / (double)n_entries; } double MRMScoring::calcMIPrecursorCombinedScore() { OPENSWATH_PRECONDITION(mi_precursor_combined_matrix_.rows() > 1, "Expect mutual information matrix of at least 2x2"); - double mi_scores{0}; + const auto& em = mi_precursor_combined_matrix_.getEigenMatrix(); + size_t n_entries = em.size(); - for (const auto& e: mi_precursor_combined_matrix_) - { - mi_scores += e; - } - return mi_scores / mi_precursor_combined_matrix_.size(); + double mi_scores = em.sum(); + + return mi_scores / (double)n_entries; } std::vector MRMScoring::calcSeparateMIContrastScore() @@ -913,13 +899,13 @@ namespace OpenSwath OPENSWATH_PRECONDITION(mi_contrast_matrix_.rows() > 0 && mi_contrast_matrix_.cols() > 1, "Expect mutual information matrix of at least 1x2"); std::vector mi_scores; - mi_scores.resize(mi_contrast_matrix_.rows()); + mi_scores.resize(mi_contrast_matrix_.rows()); for (std::size_t i = 0; i < mi_contrast_matrix_.rows(); i++) { double mi_scores_id = 0; for (std::size_t j = 0; j < mi_contrast_matrix_.cols(); j++) { - mi_scores_id += mi_contrast_matrix_.getValue(i,j); + mi_scores_id += mi_contrast_matrix_(i, j); } mi_scores[i] = mi_scores_id / mi_contrast_matrix_.cols(); } diff --git a/src/openms/source/ANALYSIS/QUANTITATION/IsobaricIsotopeCorrector.cpp b/src/openms/source/ANALYSIS/QUANTITATION/IsobaricIsotopeCorrector.cpp index 3799281aed6..b763aa0300d 100644 --- a/src/openms/source/ANALYSIS/QUANTITATION/IsobaricIsotopeCorrector.cpp +++ b/src/openms/source/ANALYSIS/QUANTITATION/IsobaricIsotopeCorrector.cpp @@ -10,7 +10,6 @@ #include #include -#include #include #include @@ -40,16 +39,21 @@ namespace OpenMS Matrix correction_matrix = quant_method->getIsotopeCorrectionMatrix(); - if (matrixIsIdentityMatrix(correction_matrix)) + if (correction_matrix.getEigenMatrix().isIdentity(0.0)) { - throw Exception::InvalidParameter(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, - "IsobaricIsotopeCorrector: The given isotope correction matrix is an identity matrix leading to no correction. " - "Please provide a valid isotope_correction matrix as it was provided with the sample kit!"); + OPENMS_LOG_DEBUG << "Correction matrix is the identity matrix." << std::endl; + OPENMS_LOG_DEBUG << correction_matrix << std::endl; + + // workaround: TMT11plex has a special case where the correction matrix is the identity matrix + if (quant_method->getMethodName() != "tmt11plex") + { + throw Exception::InvalidParameter(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, + "IsobaricIsotopeCorrector: The given isotope correction matrix is an identity matrix leading to no correction. " + "Please provide a valid isotope_correction matrix as it was provided with the sample kit!"); + } } - - // convert to Eigen matrix - EigenMatrixXdPtr m(convertOpenMSMatrix2EigenMatrixXd(correction_matrix)); - Eigen::FullPivLU ludecomp(*m); + + Eigen::FullPivLU ludecomp(correction_matrix.getEigenMatrix()); Eigen::VectorXd b; b.resize(quant_method->getNumberOfChannels()); b.setZero(); @@ -79,7 +83,7 @@ namespace OpenMS //solve Eigen::MatrixXd e_mx = ludecomp.solve(b); - if (!((*m) * e_mx).isApprox(b)) + if (!(correction_matrix.getEigenMatrix() * e_mx).isApprox(b)) { throw Exception::InvalidParameter(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "IsobaricIsotopeCorrector: Cannot multiply!"); } diff --git a/src/openms/source/ANALYSIS/QUANTITATION/IsobaricQuantitationMethod.cpp b/src/openms/source/ANALYSIS/QUANTITATION/IsobaricQuantitationMethod.cpp index c5d71c3754d..6b426b97d71 100644 --- a/src/openms/source/ANALYSIS/QUANTITATION/IsobaricQuantitationMethod.cpp +++ b/src/openms/source/ANALYSIS/QUANTITATION/IsobaricQuantitationMethod.cpp @@ -73,14 +73,14 @@ namespace OpenMS if (target_channel >= 0 && Size(target_channel) < getNumberOfChannels()) { - channel_frequency.setValue(target_channel, contributing_channel, correction / 100.0); + channel_frequency(target_channel, contributing_channel) = correction / 100.0; } self_contribution -= correction; // count reduced self-contribution even if it does not affect another channel } affected_channel_idx++; } // set reduced self contribution - channel_frequency.setValue(contributing_channel, contributing_channel, self_contribution / 100.0); + channel_frequency(contributing_channel, contributing_channel) = self_contribution / 100.0; // increment channel index ++contributing_channel; } diff --git a/src/openms/source/ANALYSIS/QUANTITATION/IsotopeLabelingMDVs.cpp b/src/openms/source/ANALYSIS/QUANTITATION/IsotopeLabelingMDVs.cpp index 22fd7705d52..08dce160b27 100644 --- a/src/openms/source/ANALYSIS/QUANTITATION/IsotopeLabelingMDVs.cpp +++ b/src/openms/source/ANALYSIS/QUANTITATION/IsotopeLabelingMDVs.cpp @@ -11,7 +11,6 @@ #include #include #include -#include #include //Standard library @@ -48,8 +47,8 @@ namespace OpenMS const DerivatizationAgent& correction_matrix_agent) { // MDV_corrected = correction_matrix_inversed * MDV_observed (normalized_features) - - if (matrixIsIdentityMatrix(correction_matrix) && !correction_matrix.empty()) + auto& em = correction_matrix.getEigenMatrix(); + if (em.isIdentity() && !(em.size() == 0)) { throw Exception::InvalidParameter(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "IsotopeLabelingMDVs: The given isotope correction matrix is an identity matrix leading to no correction." diff --git a/src/openms/source/ANALYSIS/QUANTITATION/ItraqConstants.cpp b/src/openms/source/ANALYSIS/QUANTITATION/ItraqConstants.cpp index 9b800f8c4ef..e5d3cdb99b4 100644 --- a/src/openms/source/ANALYSIS/QUANTITATION/ItraqConstants.cpp +++ b/src/openms/source/ANALYSIS/QUANTITATION/ItraqConstants.cpp @@ -61,18 +61,18 @@ namespace OpenMS OPENMS_PRECONDITION(itraq_type < SIZE_OF_ITRAQ_TYPES && itraq_type >= 0, "Error while trying to access invalid isotope correction matrix."); StringList isotopes; - std::vector > channel_names(3); - channel_names[0].setMatrix<4, 1>(CHANNELS_FOURPLEX); - channel_names[1].setMatrix<8, 1>(CHANNELS_EIGHTPLEX); - channel_names[2].setMatrix<6, 1>(CHANNELS_TMT_SIXPLEX); + std::vector> channel_names(3); + channel_names[0].setMatrix(CHANNELS_FOURPLEX); + channel_names[1].setMatrix(CHANNELS_EIGHTPLEX); + channel_names[2].setMatrix(CHANNELS_TMT_SIXPLEX); for (Int i = 0; i < CHANNEL_COUNT[itraq_type]; ++i) { - String line = String(channel_names[itraq_type].getValue(i, 0)) + ":"; + String line = String(channel_names[itraq_type](i, 0)) + ":"; for (Int j = 0; j < 3; ++j) { - line += String(isotope_corrections[itraq_type].getValue(i, j)) + "/"; + line += String(isotope_corrections[itraq_type](i, j)) + "/"; } - line += String(isotope_corrections[itraq_type].getValue(i, 3)); + line += String(isotope_corrections[itraq_type](i, 3)); isotopes.push_back(line); } @@ -83,9 +83,9 @@ namespace OpenMS { // TODO: make generic .. why do we need to initialize all matrices, we are only interested in itraq_type isotope_corrections.resize(SIZE_OF_ITRAQ_TYPES); - isotope_corrections[0].setMatrix<4, 4>(ItraqConstants::ISOTOPECORRECTIONS_FOURPLEX); - isotope_corrections[1].setMatrix<8, 4>(ItraqConstants::ISOTOPECORRECTIONS_EIGHTPLEX); - isotope_corrections[2].setMatrix<6, 4>(ItraqConstants::ISOTOPECORRECTIONS_TMT_SIXPLEX); + isotope_corrections[0].setMatrix(ItraqConstants::ISOTOPECORRECTIONS_FOURPLEX); + isotope_corrections[1].setMatrix(ItraqConstants::ISOTOPECORRECTIONS_EIGHTPLEX); + isotope_corrections[2].setMatrix(ItraqConstants::ISOTOPECORRECTIONS_TMT_SIXPLEX); // split the channels key:name pairs apart for (StringList::const_iterator it = channels.begin(); it != channels.end(); ++it) @@ -135,10 +135,10 @@ namespace OpenMS } // overwrite line in Matrix with custom values - isotope_corrections[itraq_type].setValue(line, 0, corrections[0].toDouble()); - isotope_corrections[itraq_type].setValue(line, 1, corrections[1].toDouble()); - isotope_corrections[itraq_type].setValue(line, 2, corrections[2].toDouble()); - isotope_corrections[itraq_type].setValue(line, 3, corrections[3].toDouble()); + isotope_corrections[itraq_type](line, 0) = corrections[0].toDouble(); + isotope_corrections[itraq_type](line, 1) = corrections[1].toDouble(); + isotope_corrections[itraq_type](line, 2) = corrections[2].toDouble(); + isotope_corrections[itraq_type](line, 3) = corrections[3].toDouble(); #ifdef ITRAQ_DEBUG std::cout << "Channel " << channel << " has values " << corrections << std::endl; @@ -170,18 +170,18 @@ namespace OpenMS reporter_mass_exact[131] = 131.138176; } /// valid names for 4 and 8plex, i.e. 114,115,116,117 for 4plex - std::vector > channel_names; + std::vector> channel_names; channel_names.resize(3); - channel_names[0].setMatrix<4, 1>(CHANNELS_FOURPLEX); - channel_names[1].setMatrix<8, 1>(CHANNELS_EIGHTPLEX); - channel_names[2].setMatrix<6, 1>(CHANNELS_TMT_SIXPLEX); + channel_names[0].setMatrix(CHANNELS_FOURPLEX); + channel_names[1].setMatrix(CHANNELS_EIGHTPLEX); + channel_names[2].setMatrix(CHANNELS_TMT_SIXPLEX); map.clear(); for (Size i = 0; i < channel_names[itraq_type].rows(); ++i) { ChannelInfo info; info.description = ""; - info.name = channel_names[itraq_type].getValue(i, 0); + info.name = channel_names[itraq_type](i, 0); info.id = (Int)i; if (reporter_mass_exact.find(info.name) == reporter_mass_exact.end()) { @@ -250,9 +250,9 @@ namespace OpenMS // subtract all isotope deviations of row i for (Int col_idx = 0; col_idx < 4; ++col_idx) { - val += -isotope_corrections[itraq_type].getValue(i, col_idx) / 100; + val += -isotope_corrections[itraq_type](i, col_idx) / 100; } - channel_frequency.setValue(i, j, val); + channel_frequency(i, j) = val; } else // from mass i to mass j (directly copy the deviation) { @@ -260,22 +260,22 @@ namespace OpenMS { if (j < i && i <= j + 2) // -2, -1 cases of row 'i' { - channel_frequency.setValue(j, i, isotope_corrections[itraq_type].getValue(i, j - i + 2) / 100); + channel_frequency(j, i) = isotope_corrections[itraq_type](i, j - i + 2) / 100; } else if (i < j && j <= i + 2) // +1, +2 cases of row 'i' { - channel_frequency.setValue(j, i, isotope_corrections[itraq_type].getValue(i, j - i + 1) / 100); + channel_frequency(j, i) = isotope_corrections[itraq_type](i, j - i + 1) / 100; } } else // special case of ch-121 for 8plex { // make everything more 'extreme' by 1 index if (i == 7 && j == 6) // -2 case of ch-121 { - channel_frequency.setValue(j, i, isotope_corrections[itraq_type].getValue(i, 0) / 100); + channel_frequency(j, i) = isotope_corrections[itraq_type](i, 0) / 100; } else if (i == 6 && j == 7) // +2 case of ch-121 { - channel_frequency.setValue(j, i, isotope_corrections[itraq_type].getValue(i, 3) / 100); + channel_frequency(j, i) = isotope_corrections[itraq_type](i, 3) / 100.0; } } } diff --git a/src/openms/source/ANALYSIS/TOPDOWN/FLASHDeconvAlgorithm.cpp b/src/openms/source/ANALYSIS/TOPDOWN/FLASHDeconvAlgorithm.cpp index 604a506ca02..285864f549d 100644 --- a/src/openms/source/ANALYSIS/TOPDOWN/FLASHDeconvAlgorithm.cpp +++ b/src/openms/source/ANALYSIS/TOPDOWN/FLASHDeconvAlgorithm.cpp @@ -197,14 +197,15 @@ namespace OpenMS void FLASHDeconvAlgorithm::setFilters_() { filter_.clear(); - harmonic_filter_matrix_.clear(); + int charge_range = current_max_charge_; for (int i = 0; i < charge_range; i++) { filter_.push_back(-log(i + 1)); //+ } - harmonic_filter_matrix_.resize(harmonic_charges_.size(), charge_range); + harmonic_filter_matrix_.getEigenMatrix().resize(harmonic_charges_.size(), charge_range); + harmonic_filter_matrix_.getEigenMatrix().setZero(); for (Size k = 0; k < harmonic_charges_.size(); k++) { @@ -215,7 +216,7 @@ namespace OpenMS { double a = i > 0 ? exp(-filter_[i - 1]) : 0; double b = exp(-filter_[i]); - harmonic_filter_matrix_.setValue(k, i, -log(b - (b - a) * n / hc)); + harmonic_filter_matrix_(k, i) = -log(b - (b - a) * n / hc); } } } @@ -477,7 +478,7 @@ namespace OpenMS { for (int t = -1; t < 2; t++) { - long hmz_bin_index = mass_bin_index - harmonic_bin_offset_matrix_.getValue(k, j) + t; + long hmz_bin_index = mass_bin_index - harmonic_bin_offset_matrix_(k, j) + t; if (hmz_bin_index > 0 && hmz_bin_index != (long)mz_bin_index && hmz_bin_index < (int)mz_bins_.size() && mz_bins_[hmz_bin_index]) { @@ -531,7 +532,7 @@ namespace OpenMS Matrix abs_charge_ranges(2, mass_bins_.size(), INT_MAX); for (Size i = 0; i < mass_bins_.size(); i++) { - abs_charge_ranges.setValue(1, (int)i, INT_MIN); + abs_charge_ranges(1, (int)i) = INT_MIN; } Size mz_bin_index = mz_bins_.find_first(); long bin_size = (long)mass_bins_.size(); @@ -621,8 +622,8 @@ namespace OpenMS int max_intensity_abs_charge_range = max_intensity_abs_charge_ranges[i]; if (max_index >= 0 && max_index < bin_size) { - abs_charge_ranges.setValue(0, max_index, std::min(abs_charge_ranges.getValue(0, max_index), max_intensity_abs_charge_range)); - abs_charge_ranges.setValue(1, max_index, std::max(abs_charge_ranges.getValue(1, max_index), max_intensity_abs_charge_range)); + abs_charge_ranges(0, max_index) = std::min(abs_charge_ranges(0, max_index), max_intensity_abs_charge_range); + abs_charge_ranges(1, max_index) = std::max(abs_charge_ranges(1, max_index), max_intensity_abs_charge_range); mass_bins_[max_index] = true; } } @@ -672,7 +673,7 @@ namespace OpenMS double log_m = getBinValue_(mass_bin_index, mass_bin_min_value_, bin_mul_factor); double mass = exp(log_m); - PeakGroup pg(1, per_mass_abs_charge_ranges.getValue(1, mass_bin_index) + 1, // make an empty peakGroup (mass) + PeakGroup pg(1, per_mass_abs_charge_ranges(1, mass_bin_index) + 1, // make an empty peakGroup (mass) is_positive_); pg.reserve(charge_range * 12); @@ -685,7 +686,7 @@ namespace OpenMS std::fill(total_harmonic_intensity.begin(), total_harmonic_intensity.end(), .0); // scan through charge - from mass to m/z - for (size_t j = per_mass_abs_charge_ranges.getValue(0, mass_bin_index); j <= (size_t)per_mass_abs_charge_ranges.getValue(1, mass_bin_index); j++) + for (size_t j = per_mass_abs_charge_ranges(0, mass_bin_index); j <= (size_t)per_mass_abs_charge_ranges(1, mass_bin_index); j++) { int max_peak_index = -1; size_t abs_charge = j + 1; @@ -986,19 +987,20 @@ namespace OpenMS double mz_bin_max_value = log_mz_peaks_[log_mz_peaks_.size() - 1].logMz; Size mass_bin_number = getBinNumber_(mass_bin_max_value, mass_bin_min_value_, bin_mul_factor) + 1; bin_offsets_.clear(); - harmonic_bin_offset_matrix_.clear(); for (int i = 0; i < current_charge_range; i++) { bin_offsets_.push_back((int)round((mz_bin_min_value_ - filter_[i] - mass_bin_min_value_) * bin_mul_factor)); } - harmonic_bin_offset_matrix_.resize(harmonic_charges_.size(), current_charge_range); + harmonic_bin_offset_matrix_.getEigenMatrix().resize(harmonic_charges_.size(), current_charge_range); + + for (Size k = 0; k < harmonic_charges_.size(); k++) { for (int i = 0; i < current_charge_range; i++) { - harmonic_bin_offset_matrix_.setValue(k, i, (int)round((mz_bin_min_value_ - harmonic_filter_matrix_.getValue(k, i) - mass_bin_min_value_) * bin_mul_factor)); + harmonic_bin_offset_matrix_(k, i) = (int)round((mz_bin_min_value_ - harmonic_filter_matrix_(k, i) - mass_bin_min_value_) * bin_mul_factor); } } diff --git a/src/openms/source/COMPARISON/SPECTRA/PeakAlignment.cpp b/src/openms/source/COMPARISON/SPECTRA/PeakAlignment.cpp index 2e703d29aed..3601171a0f9 100644 --- a/src/openms/source/COMPARISON/SPECTRA/PeakAlignment.cpp +++ b/src/openms/source/COMPARISON/SPECTRA/PeakAlignment.cpp @@ -102,11 +102,11 @@ namespace OpenMS Matrix matrix(spec1.size() + 1, spec2.size() + 1, 0); for (Size i = 1; i < matrix.rows(); i++) { - matrix.setValue(i, 0, -gap * i); + matrix(i, 0) = -gap * i; } for (Size i = 1; i < matrix.cols(); i++) { - matrix.setValue(0, i, -gap * i); + matrix(0, i) = -gap * i; } //get sigma - the standard deviation (sqrt of variance) @@ -162,18 +162,18 @@ namespace OpenMS if (fabs(pos1 - pos2) <= epsilon) { // actual cell = max(upper left cell+score, left cell-gap, upper cell-gap) - double from_left(matrix.getValue(i, j - 1) - gap); - double from_above(matrix.getValue(i - 1, j) - gap); + double from_left(matrix(i, j - 1) - gap); + double from_above(matrix(i - 1, j) - gap); double int1(spec1[i - 1].getIntensity()), int2(spec2[j - 1].getIntensity()); - double from_diagonal(matrix.getValue(i - 1, j - 1) + peakPairScore_(pos1, int1, pos2, int2, sigma)); - matrix.setValue(i, j, max(from_left, max(from_above, from_diagonal))); + double from_diagonal(matrix(i - 1, j - 1) + peakPairScore_(pos1, int1, pos2, int2, sigma)); + matrix(i, j) = max(from_left, max(from_above, from_diagonal)); } else { // actual cell = max(left cell-gap, upper cell-gap) - double from_left(matrix.getValue(i, j - 1) - gap); - double from_above(matrix.getValue(i - 1, j) - gap); - matrix.setValue(i, j, max(from_left, from_above)); + double from_left(matrix(i, j - 1) - gap); + double from_above(matrix(i - 1, j) - gap); + matrix(i, j) = max(from_left, from_above); } } } @@ -186,11 +186,11 @@ namespace OpenMS double best_score(numeric_limits::min()); for (Size i = 0; i < matrix.cols(); i++) { - best_score = max(best_score, matrix.getValue(matrix.rows() - 1, i)); + best_score = max(best_score, matrix(matrix.rows() - 1, i)); } for (Size i = 0; i < matrix.rows(); i++) { - best_score = max(best_score, matrix.getValue(i, matrix.cols() - 1)); + best_score = max(best_score, matrix(i, matrix.cols() - 1)); } //calculate self-alignment scores for both input spectra @@ -237,11 +237,11 @@ namespace OpenMS Matrix matrix(spec1.size() + 1, spec2.size() + 1, 0); for (Size i = 1; i < matrix.rows(); i++) { - matrix.setValue(i, 0, -gap * i); + matrix(i, 0) = -gap * i; } for (Size i = 1; i < matrix.cols(); i++) { - matrix.setValue(0, i, -gap * i); + matrix(0, i) = -gap * i; } // gives the direction of the matrix cell that originated the respective cell @@ -297,28 +297,28 @@ namespace OpenMS if (fabs(pos1 - pos2) <= epsilon) { // actual cell = max(upper left cell+score, left cell-gap, upper cell-gap) - double from_left(matrix.getValue(i, j - 1) - gap); - double from_above(matrix.getValue(i - 1, j) - gap); + double from_left(matrix(i, j - 1) - gap); + double from_above(matrix(i - 1, j) - gap); double int1(spec1[i - 1].getIntensity()), int2(spec2[j - 1].getIntensity()); - double from_diagonal(matrix.getValue(i - 1, j - 1) + peakPairScore_(pos1, int1, pos2, int2, sigma)); - matrix.setValue(i, j, max(from_left, max(from_above, from_diagonal))); + double from_diagonal(matrix(i - 1, j - 1) + peakPairScore_(pos1, int1, pos2, int2, sigma)); + matrix(i, j) = max(from_left, max(from_above, from_diagonal)); // TODO the cases where all or two values are equal if (from_diagonal > from_left && from_diagonal > from_above) { - traceback.setValue(i - 1, j - 1, 1); + traceback(i - 1, j - 1) = 1; } else { if (from_left > from_diagonal && from_left > from_above) { - traceback.setValue(i - 1, j - 1, 0); + traceback(i - 1, j - 1) = 0; } else { if (from_above > from_diagonal && from_above > from_left) { - traceback.setValue(i - 1, j - 1, 2); + traceback(i - 1, j - 1) = 2; } } } @@ -326,16 +326,16 @@ namespace OpenMS else { // actual cell = max(left cell-gap, upper cell-gap) - double from_left(matrix.getValue(i, j - 1) - gap); - double from_above(matrix.getValue(i - 1, j) - gap); - matrix.setValue(i, j, max(from_left, from_above)); + double from_left(matrix(i, j - 1) - gap); + double from_above(matrix(i - 1, j) - gap); + matrix(i, j) = std::max(from_left, from_above); if (from_left > from_above) { - traceback.setValue(i - 1, j - 1, 0); + traceback(i - 1, j - 1) = 0; } else //from_left <= from_above { - traceback.setValue(i - 1, j - 1, 2); + traceback(i - 1, j - 1) = 2; } } } @@ -348,18 +348,18 @@ namespace OpenMS double best_score(numeric_limits::min()); for (Size i = 0; i < matrix.cols(); i++) { - if (best_score < matrix.getValue(matrix.rows() - 1, i)) + if (best_score < matrix(matrix.rows() - 1, i)) { - best_score = matrix.getValue(matrix.rows() - 1, i); + best_score = matrix(matrix.rows() - 1, i); row_index = matrix.rows() - 1; col_index = i; } } for (Size i = 0; i < matrix.rows(); i++) { - if (best_score < matrix.getValue(i, matrix.cols() - 1)) + if (best_score < matrix(i, matrix.cols() - 1)) { - best_score = matrix.getValue(i, matrix.cols() - 1); + best_score = matrix(i, matrix.cols() - 1); row_index = i; col_index = matrix.cols() - 1; } @@ -369,7 +369,7 @@ namespace OpenMS while (row_index > 0 && col_index > 0) { //from diagonal - peaks aligned - if (traceback.getValue(row_index - 1, col_index - 1) == 1) + if (traceback(row_index - 1, col_index - 1) == 1) { //register aligned peaks only ret_val.insert(ret_val.begin(), pair(row_index - 1, col_index - 1)); @@ -377,7 +377,7 @@ namespace OpenMS col_index = col_index - 1; } // gap alignment - else if (traceback.getValue(row_index - 1, col_index - 1) == 0) + else if (traceback(row_index - 1, col_index - 1) == 0) { col_index = col_index - 1; } diff --git a/src/openms/source/MATH/MISC/NonNegativeLeastSquaresSolver.cpp b/src/openms/source/MATH/MISC/NonNegativeLeastSquaresSolver.cpp index d5a42b6ca24..af72bf38877 100644 --- a/src/openms/source/MATH/MISC/NonNegativeLeastSquaresSolver.cpp +++ b/src/openms/source/MATH/MISC/NonNegativeLeastSquaresSolver.cpp @@ -64,9 +64,9 @@ namespace OpenMS NNLS::nnls_(a_vec, &a_rows, &a_rows, &a_cols, b_vec, x_vec, &rnorm, w, zz, indx, &mode); - // translate solution back to Matrix: - x.resize(a_cols, 1); + x.getEigenMatrix().resize(a_cols, 1); + x.getEigenMatrix().setZero(); for (Int row = 0; row < a_cols; ++row) { x(row, 0) = x_vec[row]; diff --git a/src/pyOpenMS/pxds/Matrix.pxd b/src/pyOpenMS/pxds/Matrix.pxd index 37d5b5e2f67..102c0cdce9b 100644 --- a/src/pyOpenMS/pxds/Matrix.pxd +++ b/src/pyOpenMS/pxds/Matrix.pxd @@ -12,27 +12,11 @@ cdef extern from "" namespace "OpenMS": Matrix() except + nogil Matrix(Matrix[ValueT]) except + nogil Matrix(size_t rows, size_t cols, ValueT value) except + nogil - # const_reference operator()(size_t i, size_t j) except + nogil - # reference operator()(size_t i, size_t j) except + nogil - # const_reference getValue(size_t i, size_t j) except + nogil ValueT getValue(size_t i, size_t j) nogil void setValue(size_t i, size_t j, ValueT value) nogil - ## The following two lines introduce an odd bug: - # static PyObject *__pyx_convert_vector_to_py_double is declared twice by Cython: - # TODO look into Cython Bug - # libcpp_vector[ValueT] row(size_t i) except + nogil - # libcpp_vector[ValueT] col(size_t i) except + nogil - libcpp_vector[ValueT] asVector() except + nogil # wrap-ignore - void clear() except + nogil - void resize(size_t i, size_t j, ValueT value) except + nogil - void resize(libcpp_pair[ size_t, size_t ] & size_pair, ValueT value) except + nogil size_t rows() nogil size_t cols() nogil - libcpp_pair[ size_t, size_t ] sizePair() except + nogil - size_t index(size_t row, size_t col) except + nogil - libcpp_pair[ size_t, size_t ] indexPair(size_t index) except + nogil - size_t colIndex(size_t index) except + nogil # wrap-doc:Calculate the column from an index into the underlying vector. Note that Matrix uses the (row,column) lexicographic ordering for indexing - size_t rowIndex(size_t index) except + nogil # wrap-doc:Calculate the row from an index into the underlying vector. Note that Matrix uses the (row,column) lexicographic ordering for indexing + size_t size() nogil ## bool operator==(Matrix & rhs) except + nogil ## bool operator<(Matrix & rhs) except + nogil # TEMPLATE # void setMatrix(ValueType matrix) except + nogil diff --git a/src/tests/class_tests/openms/executables.cmake b/src/tests/class_tests/openms/executables.cmake index f22aa8e3eea..3450c27d12d 100644 --- a/src/tests/class_tests/openms/executables.cmake +++ b/src/tests/class_tests/openms/executables.cmake @@ -67,7 +67,6 @@ set(datastructures_executables_list MassExplainer_test MatchedIterator_test Matrix_test - #MatrixUtils_test OPXLDataStructs_test Param_test ParamValue_test @@ -505,6 +504,7 @@ set(analysis_executables_list ItraqEightPlexQuantitationMethod_test TMTSixPlexQuantitationMethod_test TMTTenPlexQuantitationMethod_test + TMTElevenPlexQuantitationMethod_test TMTSixteenPlexQuantitationMethod_test TMTEighteenPlexQuantitationMethod_test KDTreeFeatureMaps_test diff --git a/src/tests/class_tests/openms/source/BilinearInterpolation_test.cpp b/src/tests/class_tests/openms/source/BilinearInterpolation_test.cpp index 2212ed4f110..c5126a28856 100644 --- a/src/tests/class_tests/openms/source/BilinearInterpolation_test.cpp +++ b/src/tests/class_tests/openms/source/BilinearInterpolation_test.cpp @@ -43,25 +43,6 @@ START_TEST( BilinearInterpolation, "$Id$" ) ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// -START_SECTION([EXTRA] typedefs ) -{ - typedef BilinearInterpolation < float, double > BIFD; - BIFD::ValueType * value; - BIFD::KeyType * key; - BIFD::ContainerType * container; - BIFD::ContainerType::value_type * containerValue; - value = nullptr; - key = nullptr; - container = nullptr; - containerValue = nullptr; - // shut off warnings - (void)value; - (void)key; - (void)container; - (void)containerValue; - NOT_TESTABLE; -} -END_SECTION typedef BilinearInterpolation < float, double > BIFD; @@ -85,7 +66,7 @@ END_SECTION START_SECTION(BilinearInterpolation& operator= ( BilinearInterpolation const & arg )) { BIFD::ContainerType v; - v.resize(2,3); + v.getEigenMatrix().resize(2,3); v(0,0) = 17; v(0,1) = 18.9; v(0,2) = 20.333; @@ -120,7 +101,7 @@ END_SECTION START_SECTION(BilinearInterpolation( BilinearInterpolation const & arg )) { BIFD::ContainerType v; - v.resize(2,3); + v.getEigenMatrix().resize(2,3); v(0,0) = 17; v(0,1) = 18.9; v(0,2) = 20.333; @@ -153,7 +134,7 @@ END_SECTION START_SECTION(ContainerType& getData()) { BIFD bifd; - bifd.getData().resize(2,3); + bifd.getData().getEigenMatrix().resize(2,3); bifd.getData()(1,2) = 10012; bifd.getData()(0,0) = 10000; bifd.getData()(1,0) = 10010; @@ -175,7 +156,7 @@ END_SECTION START_SECTION(template< typename SourceContainer > void setData( SourceContainer const & data )) { BIFD bifd; - bifd.getData().resize(2,3); + bifd.getData().getEigenMatrix().resize(2,3); bifd.getData()(1,2) = 10012; bifd.getData()(0,0) = 10000; bifd.getData()(1,0) = 10010; @@ -188,7 +169,7 @@ START_SECTION(template< typename SourceContainer > void setData( SourceContainer TEST_EQUAL(bifd.getData(),bifd2.getData()); BIFD bifd3; - bifd3.getData().resize(2,3); + bifd3.getData().getEigenMatrix().resize(2,3); TEST_NOT_EQUAL(bifd.getData(),bifd3.getData()); } END_SECTION @@ -294,7 +275,7 @@ START_SECTION(KeyType supportMax_0() const) bifd.setMapping_0(3,1,2); bifd.setMapping_1(5,3,4); - bifd.getData().resize(2,3); + bifd.getData().getEigenMatrix().resize(2,3); TEST_REAL_SIMILAR(bifd.index2key_0(0),-1); TEST_REAL_SIMILAR(bifd.index2key_0(1),2); @@ -417,7 +398,7 @@ START_SECTION(KeyType supportMax_1() const) bifd.setMapping_1(3,1,2); bifd.setMapping_0(5,3,4); - bifd.getData().resize(3,2); + bifd.getData().getEigenMatrix().resize(3,2); TEST_REAL_SIMILAR(bifd.index2key_1(0),-1); TEST_REAL_SIMILAR(bifd.index2key_1(1),2); @@ -442,22 +423,20 @@ START_SECTION(bool empty() const) { BIFD bifd; TEST_EQUAL(bifd.empty(),true); - bifd.getData().resize(1,2); + bifd.getData().getEigenMatrix().resize(1,2); TEST_EQUAL(bifd.empty(),false); - bifd.getData().resize(0,0); + bifd.getData().getEigenMatrix().resize(0,0); TEST_EQUAL(bifd.empty(),true); - bifd.getData().resize(1,2); + bifd.getData().getEigenMatrix().resize(1,2); TEST_EQUAL(bifd.empty(),false); - bifd.getData().resize(1,0); + bifd.getData().getEigenMatrix().resize(1,0); TEST_EQUAL(bifd.empty(),true); - bifd.getData().resize(1,2); + bifd.getData().getEigenMatrix().resize(1,2); TEST_EQUAL(bifd.empty(),false); - bifd.getData().resize(0,0); + bifd.getData().getEigenMatrix().resize(0,0); TEST_EQUAL(bifd.empty(),true); - bifd.getData().resize(2,2); + bifd.getData().getEigenMatrix().resize(2,2); TEST_EQUAL(bifd.empty(),false); - bifd.getData().clear(); - TEST_EQUAL(bifd.empty(),true); } END_SECTION @@ -484,29 +463,32 @@ START_SECTION((void addValue( KeyType arg_pos_0, KeyType arg_pos_1, ValueType ar verbose(STATUS("j: " << j)); BIFD bifd_small; - bifd_small.getData().resize(5,5,0); + bifd_small.getData().getEigenMatrix().resize(5,5); + bifd_small.getData().getEigenMatrix().setZero(); bifd_small.setMapping_0( 0, 0, 5, 5 ); bifd_small.setMapping_1( 0, 0, 5, 5 ); bifd_small.addValue( p, q, 100 ); - for ( BIFD::ContainerType::iterator iter = bifd_small.getData().begin(); - iter != bifd_small.getData().end(); - ++iter - ) *iter = Math::round(*iter); + bifd_small.getData().getEigenMatrix() = + bifd_small.getData().getEigenMatrix().unaryExpr([](double val) { + return Math::round(val); + }); verbose(STATUS(" " << bifd_small.getData())); BIFD bifd_big; - bifd_big.getData().resize(15,15,0); + bifd_big.getData().getEigenMatrix().resize(15,15); + bifd_big.getData().getEigenMatrix().setZero(); bifd_big.setMapping_0( 5, 0, 10, 5 ); bifd_big.setMapping_1( 5, 0, 10, 5 ); bifd_big.addValue( p, q, 100 ); - for ( BIFD::ContainerType::iterator iter = bifd_big.getData().begin(); - iter != bifd_big.getData().end(); - ++iter - ) *iter = Math::round(*iter); + // Round the entries of the matrix in place + bifd_big.getData().getEigenMatrix() = + bifd_big.getData().getEigenMatrix().unaryExpr([](double val) { + return Math::round(val); + }); verbose(STATUS(bifd_big.getData())); BIFD::ContainerType big_submatrix; - big_submatrix.resize(5,5); + big_submatrix.getEigenMatrix().resize(5,5); for ( int m = 0; m < 5; ++m ) for ( int n = 0; n < 5; ++n ) big_submatrix(m,n)=bifd_big.getData()(m+5,n+5); @@ -535,8 +517,10 @@ START_SECTION((ValueType value( KeyType arg_pos_0, KeyType arg_pos_1 ) const)) BIFD bifd_small; BIFD bifd_big; - bifd_small.getData().resize(5,5,0); - bifd_big.getData().resize(15,15,0); + bifd_small.getData().getEigenMatrix().resize(5,5); + bifd_small.getData().getEigenMatrix().setZero(); + bifd_big.getData().getEigenMatrix().resize(15,15); + bifd_big.getData().getEigenMatrix().setZero(); for ( int i = 0; i < 5; ++i ) { for ( int j = 0; j < 5; ++j ) diff --git a/src/tests/class_tests/openms/source/IsobaricQuantitationMethod_test.cpp b/src/tests/class_tests/openms/source/IsobaricQuantitationMethod_test.cpp index 4a63a9207b9..0990551530e 100644 --- a/src/tests/class_tests/openms/source/IsobaricQuantitationMethod_test.cpp +++ b/src/tests/class_tests/openms/source/IsobaricQuantitationMethod_test.cpp @@ -141,9 +141,9 @@ START_SECTION((virtual Matrix getIsotopeCorrectionMatrix() const =0)) {0.002, 0.056, 0.924, 0.04}, {0, 0.001, 0.045, 0.923}}; - for(Matrix::SizeType i = 0; i < m.rows(); ++i) + for (size_t i = 0; i < m.rows(); ++i) { - for(Matrix::SizeType j = 0; j < m.cols(); ++j) + for (size_t j = 0; j < m.cols(); ++j) { TEST_REAL_SIMILAR(real_m[i][j], m(i,j)) } @@ -160,9 +160,9 @@ START_SECTION((virtual Matrix getIsotopeCorrectionMatrix() const =0)) {0.002, 0.056, 0.854, 0.04}, {0, 0.006, 0.045, 0.923}}; - for(Matrix::SizeType i = 0; i < m.rows(); ++i) + for(size_t i = 0; i < m.rows(); ++i) { - for(Matrix::SizeType j = 0; j < m.cols(); ++j) + for(size_t j = 0; j < m.cols(); ++j) { TEST_REAL_SIMILAR(real_m2[i][j], m(i,j)) } diff --git a/src/tests/class_tests/openms/source/IsotopeLabelingMDVs_test.cpp b/src/tests/class_tests/openms/source/IsotopeLabelingMDVs_test.cpp index 56750a1caf7..5a734a3621f 100644 --- a/src/tests/class_tests/openms/source/IsotopeLabelingMDVs_test.cpp +++ b/src/tests/class_tests/openms/source/IsotopeLabelingMDVs_test.cpp @@ -314,7 +314,7 @@ START_SECTION(( void IsotopeLabelingMDVs::isotopicCorrection( {0.8466, 0.0957, 0.0343, 0.0233}, {0.8484, 0.0954, 0.0337, 0.0225} }; - correction_matrix_tBDMS.setMatrix<4,4>(correction_matrix_tBDMS_); + correction_matrix_tBDMS.setMatrix(correction_matrix_tBDMS_); // L1_norm_max, L1_peak_apex_int From CHO_190316_Flux.xlsx provided by Douglas McCloskey // L1_corrected self calculated @@ -374,7 +374,7 @@ START_SECTION(( void IsotopeLabelingMDVs::isotopicCorrections( {0.8466, 0.0957, 0.0343, 0.0233}, {0.8484, 0.0954, 0.0337, 0.0225} }; - correction_matrix_tBDMS.setMatrix<4,4>(correction_matrix_tBDMS_); + correction_matrix_tBDMS.setMatrix(correction_matrix_tBDMS_); // L1_norm_max, L1_peak_apex_int From CHO_190316_Flux.xlsx provided by Douglas McCloskey // L1_corrected self calculated diff --git a/src/tests/class_tests/openms/source/ItraqConstants_test.cpp b/src/tests/class_tests/openms/source/ItraqConstants_test.cpp index a4614ced10f..4decff2c331 100644 --- a/src/tests/class_tests/openms/source/ItraqConstants_test.cpp +++ b/src/tests/class_tests/openms/source/ItraqConstants_test.cpp @@ -43,9 +43,9 @@ START_SECTION((static StringList getIsotopeMatrixAsStringList(const int itraq_ty { ItraqConstants::IsotopeMatrices ic; ic.resize(3); - ic[0].setMatrix<4,4>(ItraqConstants::ISOTOPECORRECTIONS_FOURPLEX); - ic[1].setMatrix<8,4>(ItraqConstants::ISOTOPECORRECTIONS_EIGHTPLEX); - ic[2].setMatrix<6,4>(ItraqConstants::ISOTOPECORRECTIONS_TMT_SIXPLEX); + ic[0].setMatrix(ItraqConstants::ISOTOPECORRECTIONS_FOURPLEX); + ic[1].setMatrix(ItraqConstants::ISOTOPECORRECTIONS_EIGHTPLEX); + ic[2].setMatrix(ItraqConstants::ISOTOPECORRECTIONS_TMT_SIXPLEX); { StringList ics = ItraqConstants::getIsotopeMatrixAsStringList(ItraqConstants::FOURPLEX, ic); @@ -69,16 +69,16 @@ START_SECTION((static void updateIsotopeMatrixFromStringList(const int itraq_typ { ItraqConstants::IsotopeMatrices ic; ic.resize(3); - ic[0].setMatrix<4,4>(ItraqConstants::ISOTOPECORRECTIONS_FOURPLEX); - ic[1].setMatrix<8,4>(ItraqConstants::ISOTOPECORRECTIONS_EIGHTPLEX); - ic[2].setMatrix<6,4>(ItraqConstants::ISOTOPECORRECTIONS_TMT_SIXPLEX); + ic[0].setMatrix(ItraqConstants::ISOTOPECORRECTIONS_FOURPLEX); + ic[1].setMatrix(ItraqConstants::ISOTOPECORRECTIONS_EIGHTPLEX); + ic[2].setMatrix(ItraqConstants::ISOTOPECORRECTIONS_TMT_SIXPLEX); //StringList t_ics = ListUtils::create("114:0/1/5.9/0.2,115:0/2/5.6/0.1,116:0/3/4.5/0.1,117:0.1/4/3.5/0.1"); // the default StringList t_ics = ListUtils::create("114:0/1/5.9/4.2,115:3/2/5.6/0.1,116:0/3/4.5/0.1,117:0.1/4/3.5/2"); - ic[0].setValue(0,3,4.2); - ic[0].setValue(1,0,3); - ic[0].setValue(3,3,2); + ic[0](0,3) = 4.2; + ic[0](1,0) = 3; + ic[0](3,3) = 2; ItraqConstants::IsotopeMatrices ic_new; ItraqConstants::updateIsotopeMatrixFromStringList(ItraqConstants::FOURPLEX, t_ics, ic_new); @@ -90,10 +90,10 @@ START_SECTION((static void updateIsotopeMatrixFromStringList(const int itraq_typ } // reset previously updated and update TMT isotope corrections - ic[0].setMatrix<4,4>(ItraqConstants::ISOTOPECORRECTIONS_FOURPLEX); - ic[2].setValue(0,2,3.4); - ic[2].setValue(1,0,2.1); - ic[2].setValue(4,3,5.1); + ic[0].setMatrix(ItraqConstants::ISOTOPECORRECTIONS_FOURPLEX); + ic[2](0,2) = 3.4; + ic[2](1,0) = 2.1; + ic[2](4,3) = 5.1; // StringList tmt_ics = ListUtils::create("126:0/0/0/0,127:0/0/0/0,128:0/0/0/0,129:0/0/0/0,130:0/0/0/0,131:0/0/0/0"); // the original one StringList tmt_ics = ListUtils::create("126:0/0/3.4/0,127:2.1/0/0/0,128:0/0/0/0,129:0/0/0/0,130:0/0/0/5.1,131:0/0/0/0"); @@ -175,15 +175,15 @@ START_SECTION((static Matrix translateIsotopeMatrix(const int &itraq_typ { ItraqConstants::IsotopeMatrices ic; ic.resize(3); - ic[0].setMatrix<4,4>(ItraqConstants::ISOTOPECORRECTIONS_FOURPLEX); - ic[1].setMatrix<8,4>(ItraqConstants::ISOTOPECORRECTIONS_EIGHTPLEX); - ic[2].setMatrix<6,4>(ItraqConstants::ISOTOPECORRECTIONS_TMT_SIXPLEX); + ic[0].setMatrix(ItraqConstants::ISOTOPECORRECTIONS_FOURPLEX); + ic[1].setMatrix(ItraqConstants::ISOTOPECORRECTIONS_EIGHTPLEX); + ic[2].setMatrix(ItraqConstants::ISOTOPECORRECTIONS_TMT_SIXPLEX); Matrix channel_frequency = ItraqConstants::translateIsotopeMatrix(ItraqConstants::FOURPLEX, ic); std::cout << "CF: \n" << channel_frequency << "\n"; - TEST_REAL_SIMILAR(channel_frequency.getValue(0,0), 0.929) - TEST_REAL_SIMILAR(channel_frequency.getValue(3,0), 0) + TEST_REAL_SIMILAR(channel_frequency(0,0), 0.929) + TEST_REAL_SIMILAR(channel_frequency(3,0), 0) channel_frequency = ItraqConstants::translateIsotopeMatrix(ItraqConstants::EIGHTPLEX, ic); @@ -200,16 +200,16 @@ START_SECTION((static Matrix translateIsotopeMatrix(const int &itraq_typ */ // test lower right triangle - TEST_REAL_SIMILAR(channel_frequency.getValue(6,7), 0.0027) - TEST_REAL_SIMILAR(channel_frequency.getValue(7,7), 0.9211) - TEST_REAL_SIMILAR(channel_frequency.getValue(7,6), 0.0000) + TEST_REAL_SIMILAR(channel_frequency(6,7), 0.0027) + TEST_REAL_SIMILAR(channel_frequency(7,7), 0.9211) + TEST_REAL_SIMILAR(channel_frequency(7,6), 0.0000) channel_frequency = ItraqConstants::translateIsotopeMatrix(ItraqConstants::TMT_SIXPLEX, ic); std::cout << "CF: \n" << channel_frequency << "\n"; - TEST_REAL_SIMILAR(channel_frequency.getValue(0,0), 1.0) - TEST_REAL_SIMILAR(channel_frequency.getValue(1,0), 0.0) - TEST_REAL_SIMILAR(channel_frequency.getValue(0,1), 0.0) - TEST_REAL_SIMILAR(channel_frequency.getValue(3,3), 1.0) + TEST_REAL_SIMILAR(channel_frequency(0,0), 1.0) + TEST_REAL_SIMILAR(channel_frequency(1,0), 0.0) + TEST_REAL_SIMILAR(channel_frequency(0,1), 0.0) + TEST_REAL_SIMILAR(channel_frequency(3,3), 1.0) } END_SECTION diff --git a/src/tests/class_tests/openms/source/ItraqEightPlexQuantitationMethod_test.cpp b/src/tests/class_tests/openms/source/ItraqEightPlexQuantitationMethod_test.cpp index dd1f7460c0e..182c89a74d2 100644 --- a/src/tests/class_tests/openms/source/ItraqEightPlexQuantitationMethod_test.cpp +++ b/src/tests/class_tests/openms/source/ItraqEightPlexQuantitationMethod_test.cpp @@ -129,9 +129,9 @@ START_SECTION((virtual Matrix getIsotopeCorrectionMatrix() const )) { 0, 0, 0, 0, 0, 0, 0, 0.9211 } }; - for(Matrix::SizeType i = 0; i < m.rows(); ++i) + for(size_t i = 0; i < m.rows(); ++i) { - for(Matrix::SizeType j = 0; j < m.cols(); ++j) + for(size_t j = 0; j < m.cols(); ++j) { TEST_REAL_SIMILAR(m(i,j), real_m[i][j]) } diff --git a/src/tests/class_tests/openms/source/ItraqFourPlexQuantitationMethod_test.cpp b/src/tests/class_tests/openms/source/ItraqFourPlexQuantitationMethod_test.cpp index af139a441f2..70c62fbe149 100644 --- a/src/tests/class_tests/openms/source/ItraqFourPlexQuantitationMethod_test.cpp +++ b/src/tests/class_tests/openms/source/ItraqFourPlexQuantitationMethod_test.cpp @@ -140,9 +140,9 @@ START_SECTION((virtual Matrix getIsotopeCorrectionMatrix() const )) {0.002, 0.056, 0.924, 0.04}, {0, 0.001, 0.045, 0.923}}; - for(Matrix::SizeType i = 0; i < m.rows(); ++i) + for (size_t i = 0; i < m.rows(); ++i) { - for(Matrix::SizeType j = 0; j < m.cols(); ++j) + for (size_t j = 0; j < m.cols(); ++j) { TEST_REAL_SIMILAR(m(i,j), real_m[i][j]) } diff --git a/src/tests/class_tests/openms/source/MRMScoring_test.cpp b/src/tests/class_tests/openms/source/MRMScoring_test.cpp index 35546d3503a..1dc73029926 100644 --- a/src/tests/class_tests/openms/source/MRMScoring_test.cpp +++ b/src/tests/class_tests/openms/source/MRMScoring_test.cpp @@ -203,11 +203,11 @@ mean(xcorr_max) # shape score TEST_EQUAL(mrmscore.getXCorrMatrix().rows(), 2) TEST_EQUAL(mrmscore.getXCorrMatrix().cols(), 2) - TEST_EQUAL(mrmscore.getXCorrMatrix().getValue(0, 0).data.size(), 23) + TEST_EQUAL(mrmscore.getXCorrMatrix()(0, 0).data.size(), 23) // test auto-correlation = xcorrmatrix_0_0 const OpenSwath::Scoring::XCorrArrayType auto_correlation = - mrmscore.getXCorrMatrix().getValue(0, 0); + mrmscore.getXCorrMatrix()(0, 0); TEST_EQUAL(auto_correlation.data[11].first, 0) TEST_EQUAL(auto_correlation.data[12].first, 1) @@ -223,7 +223,7 @@ mean(xcorr_max) # shape score // test cross-correlation = xcorrmatrix_0_1 const OpenSwath::Scoring::XCorrArrayType cross_correlation = - mrmscore.getXCorrMatrix().getValue(0, 1); + mrmscore.getXCorrMatrix()(0, 1); TEST_REAL_SIMILAR(cross_correlation.data[13].second, -0.31165141) // find(2)->second, TEST_REAL_SIMILAR(cross_correlation.data[12].second, -0.35036919) // find(1)->second, @@ -252,16 +252,25 @@ mean(xcorr_max) # shape score TEST_EQUAL(mrmscore.getXCorrPrecursorContrastMatrix().cols(), 2) std::vector sum_matrix; - for(auto e : mrmscore.getXCorrPrecursorContrastMatrix()) - { - double sum{0}; - for(size_t i = 0; i < e.data.size(); ++i) + + const auto& cm = mrmscore.getXCorrPrecursorContrastMatrix(); + // Note: the original code depens on col vs. row order and + // the old code: for (auto e : mrmscore.getXCorrPrecursorContrastMatrix()) fails with different data + for (size_t r = 0; r != cm.rows(); ++r) + for (size_t c = 0; c != cm.cols(); ++c) { - sum += abs(e.data[i].second); + double sum{0}; + for (size_t i = 0; i < cm(r,c).data.size(); ++i) + { + sum += abs(cm(r,c).data[i].second); + } + sum_matrix.push_back(sum); } - sum_matrix.push_back(sum); +/* + for (auto e : mrmscore.getXCorrPrecursorContrastMatrix()) + { } - +*/ TEST_REAL_SIMILAR(sum_matrix[0], 3.40949220) TEST_REAL_SIMILAR(sum_matrix[1], 6.19794611) TEST_REAL_SIMILAR(sum_matrix[2], 3.68912454) @@ -288,15 +297,20 @@ mean(xcorr_max) # shape score TEST_EQUAL(mrmscore.getXCorrPrecursorCombinedMatrix().cols(), 5) std::vector sum_matrix; - for(auto e : mrmscore.getXCorrPrecursorCombinedMatrix()) - { - double sum{0}; - for(size_t i = 0; i < e.data.size(); ++i) + + const auto& cm = mrmscore.getXCorrPrecursorCombinedMatrix(); + // Note: the original code depens on col vs. row order and + // the old code: for (auto e : mrmscore.getXCorrPrecursorCombinedMatrix()) fails with different data + for (size_t r = 0; r != cm.rows(); ++r) + for (size_t c = 0; c != cm.cols(); ++c) { - sum += abs(e.data[i].second); + double sum{0}; + for (size_t i = 0; i < cm(r,c).data.size(); ++i) + { + sum += abs(cm(r,c).data[i].second); + } + sum_matrix.push_back(sum); } - sum_matrix.push_back(sum); - } // Check upper triangular matrix TEST_REAL_SIMILAR(sum_matrix[0], 5.86440677) @@ -348,11 +362,11 @@ END_SECTION*/ TEST_EQUAL(mrmscore.getXCorrContrastMatrix().rows(), 2) TEST_EQUAL(mrmscore.getXCorrContrastMatrix().cols(), 2) - TEST_EQUAL(mrmscore.getXCorrContrastMatrix().getValue(0, 0).data.size(), 23) + TEST_EQUAL(mrmscore.getXCorrContrastMatrix()(0, 0).data.size(), 23) // test auto-correlation = xcorrmatrix_0_0 const OpenSwath::Scoring::XCorrArrayType auto_correlation = - mrmscore.getXCorrContrastMatrix().getValue(0, 0); + mrmscore.getXCorrContrastMatrix()(0, 0); TEST_REAL_SIMILAR(auto_correlation.data[11].second, 1) // find(0)->second, TEST_REAL_SIMILAR(auto_correlation.data[12].second, -0.227352707759245) // find(1)->second, TEST_REAL_SIMILAR(auto_correlation.data[10].second, -0.227352707759245) // find(-1)->second, @@ -361,7 +375,7 @@ END_SECTION*/ // // test cross-correlation = xcorrmatrix_0_1 const OpenSwath::Scoring::XCorrArrayType cross_correlation = - mrmscore.getXCorrContrastMatrix().getValue(0, 1); + mrmscore.getXCorrContrastMatrix()(0, 1); TEST_REAL_SIMILAR(cross_correlation.data[13].second, -0.31165141) // find(2)->second, TEST_REAL_SIMILAR(cross_correlation.data[12].second, -0.35036919) // find(1)->second, TEST_REAL_SIMILAR(cross_correlation.data[11].second, 0.03129565) // find(0)->second, @@ -698,10 +712,10 @@ mean(m4) TEST_EQUAL(mrmscore.getMIMatrix().rows(), 2) TEST_EQUAL(mrmscore.getMIMatrix().cols(), 2) - TEST_REAL_SIMILAR(mrmscore.getMIMatrix().getValue(0, 0), 3.2776) - TEST_REAL_SIMILAR(mrmscore.getMIMatrix().getValue(0, 1), 3.2776) - TEST_REAL_SIMILAR(mrmscore.getMIMatrix().getValue(1, 1), 3.4594) - TEST_REAL_SIMILAR(mrmscore.getMIMatrix().getValue(1, 0), 0) // value not initialized for lower diagonal half of matrix + TEST_REAL_SIMILAR(mrmscore.getMIMatrix()(0, 0), 3.2776) + TEST_REAL_SIMILAR(mrmscore.getMIMatrix()(0, 1), 3.2776) + TEST_REAL_SIMILAR(mrmscore.getMIMatrix()(1, 1), 3.4594) + TEST_REAL_SIMILAR(mrmscore.getMIMatrix()(1, 0), 0) // value not initialized for lower diagonal half of matrix } END_SECTION @@ -720,11 +734,7 @@ mean(m4) TEST_EQUAL(mrmscore.getMIPrecursorContrastMatrix().rows(), 3) TEST_EQUAL(mrmscore.getMIPrecursorContrastMatrix().cols(), 2) - double sum{0}; - for(auto e : mrmscore.getMIPrecursorContrastMatrix()) - { - sum += e; - } + double sum = mrmscore.getMIPrecursorContrastMatrix().getEigenMatrix().sum(); TEST_REAL_SIMILAR(sum, 12.01954465) } END_SECTION @@ -745,11 +755,7 @@ mean(m4) TEST_EQUAL(mrmscore.getMIPrecursorCombinedMatrix().rows(), 5) TEST_EQUAL(mrmscore.getMIPrecursorCombinedMatrix().cols(), 5) - double sum{0}; - for(auto e : mrmscore.getMIPrecursorCombinedMatrix()) - { - sum += e; - } + double sum = mrmscore.getMIPrecursorCombinedMatrix().getEigenMatrix().sum(); TEST_REAL_SIMILAR(sum, 48.98726953) } END_SECTION @@ -770,10 +776,10 @@ mean(m4) mrmscore.initializeMIContrastMatrix(imrmfeature, native_ids1, native_ids2); delete imrmfeature; - TEST_REAL_SIMILAR(mrmscore.getMIContrastMatrix().getValue(0, 0), 3.2776) - TEST_REAL_SIMILAR(mrmscore.getMIContrastMatrix().getValue(0, 1), 3.2776) - TEST_REAL_SIMILAR(mrmscore.getMIContrastMatrix().getValue(1, 1), 3.2776) - TEST_REAL_SIMILAR(mrmscore.getMIContrastMatrix().getValue(1, 0), 3.4594) + TEST_REAL_SIMILAR(mrmscore.getMIContrastMatrix()(0, 0), 3.2776) + TEST_REAL_SIMILAR(mrmscore.getMIContrastMatrix()(0, 1), 3.2776) + TEST_REAL_SIMILAR(mrmscore.getMIContrastMatrix()(1, 1), 3.2776) + TEST_REAL_SIMILAR(mrmscore.getMIContrastMatrix()(1, 0), 3.4594) } END_SECTION diff --git a/src/tests/class_tests/openms/source/MatrixUtils_test.cpp b/src/tests/class_tests/openms/source/MatrixUtils_test.cpp deleted file mode 100644 index 522654ae8c2..00000000000 --- a/src/tests/class_tests/openms/source/MatrixUtils_test.cpp +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: $ -// $Authors: $ -// -------------------------------------------------------------------------- - -#include - -/////////////////////////// -#include -/////////////////////////// - -using namespace OpenMS; -using namespace std; - -START_TEST(MatrixUtils, "$Id$") - -///////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////// - -MatrixUtils* ptr = 0; -MatrixUtils* null_ptr = 0; -START_SECTION(MatrixUtils()) -{ - ptr = new MatrixUtils(); - TEST_NOT_EQUAL(ptr, null_ptr) -} -END_SECTION - -START_SECTION(~MatrixUtils()) -{ - delete ptr; -} -END_SECTION - - -///////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////// -END_TEST - - - diff --git a/src/tests/class_tests/openms/source/Matrix_test.cpp b/src/tests/class_tests/openms/source/Matrix_test.cpp index 505467ec534..6405925b0cb 100644 --- a/src/tests/class_tests/openms/source/Matrix_test.cpp +++ b/src/tests/class_tests/openms/source/Matrix_test.cpp @@ -32,14 +32,23 @@ Matrix* ptr = nullptr; Matrix* nullPointer = nullptr; START_SECTION((Matrix())) { - ptr = new Matrix; + ptr = new Matrix; TEST_NOT_EQUAL(ptr, nullPointer); Matrix mi1; - TEST_EQUAL(mi1.size(),0); - TEST_EQUAL(mi1.cols(),0); - TEST_EQUAL(mi1.rows(),0); - TEST_EQUAL(mi1.empty(),true); + TEST_EQUAL(mi1.size(), 0); + TEST_EQUAL(mi1.cols(), 0); + TEST_EQUAL(mi1.rows(), 0); + + for (auto & i : mi1.getEigenMatrix().reshaped()) + { + TEST_EQUAL(i, i - 1); // this should not be executed on empty matrix + } + + for (const auto & i : mi1.getEigenMatrix().reshaped()) + { + TEST_EQUAL(i, i - 1); // this should not be executed on empty matrix + } STATUS("mi1:\n"<< mi1); } END_SECTION; @@ -52,34 +61,19 @@ END_SECTION; Matrix mi; -START_SECTION((void resize(size_type i, size_type j, value_type value = value_type()))) +START_SECTION((void getEigenMatrix().resize(size_type i, size_type j))) { - mi.resize(2,2,3); + mi.getEigenMatrix().resize(2,2); + mi.getEigenMatrix().fill(3); + mi.getEigenMatrix().resize(2,3); + mi.getEigenMatrix().fill(7); STATUS("mi1:\n"<< mi); - mi.resize(2,3,7); - STATUS("mi1:\n"<< mi); - TEST_EQUAL(mi(0,0),3); - TEST_EQUAL(mi(0,1),3); - TEST_EQUAL(mi(0,2),3); - TEST_EQUAL(mi(1,0),3); - TEST_EQUAL(mi(1,1),7); - TEST_EQUAL(mi(1,2),7); -} -END_SECTION - -START_SECTION((void resize(std::pair const & size_pair, value_type value = value_type()))) -{ - std::pair const sizepair(2,2); - mi.resize(sizepair,3); - STATUS("mi1:\n"<< mi); - mi.resize(2,3,7); - STATUS("mi1:\n"<< mi); - TEST_EQUAL(mi(0,0),3); - TEST_EQUAL(mi(0,1),3); - TEST_EQUAL(mi(0,2),3); - TEST_EQUAL(mi(1,0),3); - TEST_EQUAL(mi(1,1),7); - TEST_EQUAL(mi(1,2),7); + TEST_EQUAL(mi(0,0),7); + TEST_EQUAL(mi(0,1),7); + TEST_EQUAL(mi(0,2),7); + TEST_EQUAL(mi(1,0),7); + TEST_EQUAL(mi(1,1),7); + TEST_EQUAL(mi(1,2),7); } END_SECTION @@ -87,14 +81,31 @@ START_SECTION((Matrix(const Matrix & source))) { Matrix mi2(mi); STATUS("mi2:\n"<< mi2); - TEST_EQUAL(mi2.cols(),3); - TEST_EQUAL(mi2.rows(),2); - TEST_EQUAL(mi2(0,0),3); - TEST_EQUAL(mi2(0,1),3); - TEST_EQUAL(mi2(0,2),3); - TEST_EQUAL(mi2(1,0),3); - TEST_EQUAL(mi2(1,1),7); - TEST_EQUAL(mi2(1,2),7); + TEST_EQUAL(mi2.cols(),3); + TEST_EQUAL(mi2.rows(),2); + TEST_EQUAL(mi2(0,0),7); + TEST_EQUAL(mi2(0,1),7); + TEST_EQUAL(mi2(0,2),7); + TEST_EQUAL(mi2(1,0),7); + TEST_EQUAL(mi2(1,1),7); + TEST_EQUAL(mi2(1,2),7); + + // test iterators and confirm column first order + size_t row{}, col{}; + for (auto & i : mi2.getEigenMatrix().reshaped()) + { + TEST_EQUAL(i, mi.getValue(row, col)); + ++col; + if (col == mi2.cols()) { col = 0; ++row;} + } + + row = 0; col = 0; + for (const auto & i : mi2.getEigenMatrix().reshaped()) + { + TEST_EQUAL(i, mi.getValue(row, col)); + ++col; + if (col == mi2.cols()) { col = 0; ++row;} + } } END_SECTION @@ -106,10 +117,10 @@ START_SECTION((Matrix& operator = (const Matrix & rhs))) STATUS("mi3:\n"< const & micr = mi; + Matrix const & micr = mi; STATUS("micr:\n"< const & micr = mi; - STATUS("micr:\n"< const & micr = mi; - TEST_EQUAL(micr.getValue(1,2),33); + TEST_EQUAL(micr(1,2), 33); } END_SECTION START_SECTION((reference operator() (size_type const i, size_type const j))) { - STATUS(mi.getValue(1,0)); - mi.getValue(1,0) = 44; - STATUS(mi.getValue(1,0)); + STATUS(mi(1,0)); + mi(1,0) = 44; + STATUS(mi(1,0)); Matrix const & micr = mi; - TEST_EQUAL(micr.getValue(1,0), 44); -} -END_SECTION - -START_SECTION(container_type row(size_type const i) const) -{ - Matrix::container_type row = mi.row(0); - TEST_EQUAL(row.size(), 3) - TEST_EQUAL(row[0], 3) - TEST_EQUAL(row[1], 3) - TEST_EQUAL(row[2], 3) - row = mi.row(1); - TEST_EQUAL(row[0], 44) - TEST_EQUAL(row[1], 17) - TEST_EQUAL(row[2], 33) -} -END_SECTION - -START_SECTION(container_type col(size_type const i) const) -{ - Matrix::container_type col = mi.col(0); - TEST_EQUAL(col.size(), 2) - TEST_EQUAL(col[0], 3) - TEST_EQUAL(col[1], 44) - col = mi.col(1); - TEST_EQUAL(col.size(), 2) - TEST_EQUAL(col[0], 3) - TEST_EQUAL(col[1], 17) - col = mi.col(2); - TEST_EQUAL(col.size(), 2) - TEST_EQUAL(col[0], 3) - TEST_EQUAL(col[1], 33) + TEST_EQUAL(micr(1,0), 44); } END_SECTION -START_SECTION((void clear())) +START_SECTION((void operator()(size_type const i, size_type const j) = value_type value)) { - Matrix mi4(mi); - STATUS("mi4:\n"< mi5(4,5,6); START_SECTION((Matrix(const SizeType rows, const SizeType cols, ValueType value = ValueType()))) { STATUS("mi5:\n"< mf(6,7,8); -START_SECTION((SizeType colIndex(SizeType index) const)) -{ - TEST_EQUAL(mf.colIndex(30),2); -} -END_SECTION; - -START_SECTION((SizeType const index(SizeType row, SizeType col) const)) -{ - TEST_EQUAL(mf.index(5,5),40); -} -END_SECTION; - -START_SECTION((SizeType rowIndex(SizeType index) const)) -{ - TEST_EQUAL(mf.rowIndex(30),4); -} -END_SECTION; - -START_SECTION((std::pair const indexPair(Size index) const)) -{ - std::pair result = mf.indexPair(30); - TEST_EQUAL(result.first,4); - TEST_EQUAL(result.second,2); -} -END_SECTION - -START_SECTION((std::pair sizePair() const)) -{ - Matrix const mf(6,7,8); - TEST_EQUAL(mf.sizePair().first,6); - TEST_EQUAL(mf.sizePair().second,7); -} -END_SECTION - START_SECTION((bool operator==(Matrix const &rhs) const)) { Matrix mi1(4,5,6); @@ -277,27 +205,6 @@ START_SECTION((bool operator==(Matrix const &rhs) const)) } END_SECTION -START_SECTION((bool operator<(Matrix const &rhs) const)) -{ - Matrix mi1(4,5,6); - TEST_EQUAL(mi1 mi2(4,5,6); - TEST_EQUAL(mi1 mi3(5,4,6); - Matrix mi4(4,4,6); - Matrix mi5(5,5,6); - TEST_PRECONDITION_VIOLATED(bool comparison = (mi1==mi3);(void) comparison); - TEST_PRECONDITION_VIOLATED(bool comparison = (mi1==mi4);(void) comparison); - TEST_PRECONDITION_VIOLATED(bool comparison = (mi1==mi5);(void) comparison); -} -END_SECTION - START_SECTION((template void setMatrix(const ValueType matrix[ROWS][COLS]))) { double test_matrix[4][4] = { @@ -308,10 +215,10 @@ START_SECTION((template void setMatrix(const ValueType matr }; Matrix myMatrix; - myMatrix.setMatrix<4,4>(test_matrix); - for (size_t i=0;i<4;++i) + myMatrix.setMatrix(test_matrix); + for (size_t i=0; i<4; ++i) { - for (size_t j=0;j<4;++j) + for (size_t j=0; j<4; ++j) { TEST_EQUAL( myMatrix(i,j), test_matrix[i][j] ) } diff --git a/src/tests/class_tests/openms/source/NonNegativeLeastSquaresSolver_test.cpp b/src/tests/class_tests/openms/source/NonNegativeLeastSquaresSolver_test.cpp index eb3d1ea8a96..daff62a4cfa 100644 --- a/src/tests/class_tests/openms/source/NonNegativeLeastSquaresSolver_test.cpp +++ b/src/tests/class_tests/openms/source/NonNegativeLeastSquaresSolver_test.cpp @@ -50,14 +50,14 @@ START_SECTION((static Int solve(const Matrix< double > &A, const Matrix< double double x_1[4][1] = {{0.931153},{0.36833},{0},{0}}; Matrix A,b,x; - A.setMatrix<3,4>(A_1); - b.setMatrix<3,1>(b_1); - x.resize(4,1); + A.setMatrix(A_1); + b.setMatrix(b_1); + x.getEigenMatrix().resize(4,1); TOLERANCE_ABSOLUTE(0.0005); NonNegativeLeastSquaresSolver::solve(A,b,x); - for (size_t i=0;i &A, const Matrix< double double b_2[4][1] = {{5},{45},{4},{31}}; double x_2[4][1] = {{4.3395},{48.4364},{0},{33.4945}}; - A.setMatrix<4,4>(A_2); - b.setMatrix<4,1>(b_2); - x.resize(4,1); + A.setMatrix(A_2); + b.setMatrix(b_2); + x.getEigenMatrix().resize(4,1); NonNegativeLeastSquaresSolver::solve(A,b,x); for (size_t i=0;i getIsotopeCorrectionMatrix() const )) }; Matrix test_Matrix; - test_Matrix.setMatrix<18,18>(test_matrix); + test_Matrix.setMatrix(test_matrix); TMTEighteenPlexQuantitationMethod quant_meth; @@ -196,9 +196,9 @@ START_SECTION((virtual Matrix getIsotopeCorrectionMatrix() const )) ABORT_IF(m.rows() != 18) ABORT_IF(m.cols() != 18) - for(Matrix::SizeType i = 0; i < m.rows(); ++i) + for(size_t i = 0; i < m.rows(); ++i) { - for(Matrix::SizeType j = 0; j < m.cols(); ++j) + for(size_t j = 0; j < m.cols(); ++j) { TEST_REAL_SIMILAR(m(i,j), test_Matrix(i,j)) } diff --git a/src/tests/class_tests/openms/source/TMTElevenPlexQuantitationMethod_test.cpp b/src/tests/class_tests/openms/source/TMTElevenPlexQuantitationMethod_test.cpp index 4617159eb90..bbe9c0ba9f5 100644 --- a/src/tests/class_tests/openms/source/TMTElevenPlexQuantitationMethod_test.cpp +++ b/src/tests/class_tests/openms/source/TMTElevenPlexQuantitationMethod_test.cpp @@ -177,9 +177,9 @@ START_SECTION((virtual Matrix getIsotopeCorrectionMatrix() const )) ABORT_IF(m.rows() != 11) ABORT_IF(m.cols() != 11) - for (Matrix::SizeType i = 0; i < m.rows(); ++i) + for (size_t i = 0; i < m.rows(); ++i) { - for (Matrix::SizeType j = 0; j < m.cols(); ++j) + for (size_t j = 0; j < m.cols(); ++j) { if (i == j) { TEST_REAL_SIMILAR(m(i,j), 1.0) } else { TEST_REAL_SIMILAR(m(i,j), 0.0) } diff --git a/src/tests/class_tests/openms/source/TMTSixPlexQuantitationMethod_test.cpp b/src/tests/class_tests/openms/source/TMTSixPlexQuantitationMethod_test.cpp index ff12c3ce016..94eb9a32468 100644 --- a/src/tests/class_tests/openms/source/TMTSixPlexQuantitationMethod_test.cpp +++ b/src/tests/class_tests/openms/source/TMTSixPlexQuantitationMethod_test.cpp @@ -109,9 +109,9 @@ START_SECTION((virtual Matrix getIsotopeCorrectionMatrix() const )) ABORT_IF(m.rows() != 6) ABORT_IF(m.cols() != 6) - for(Matrix::SizeType i = 0; i < m.rows(); ++i) + for(size_t i = 0; i < m.rows(); ++i) { - for(Matrix::SizeType j = 0; j < m.cols(); ++j) + for(size_t j = 0; j < m.cols(); ++j) { if (i == j) TEST_REAL_SIMILAR(m(i,j), 1.0) diff --git a/src/tests/class_tests/openms/source/TMTSixteenPlexQuantitationMethod_test.cpp b/src/tests/class_tests/openms/source/TMTSixteenPlexQuantitationMethod_test.cpp index 96d1f0b05c9..a2712d6109d 100644 --- a/src/tests/class_tests/openms/source/TMTSixteenPlexQuantitationMethod_test.cpp +++ b/src/tests/class_tests/openms/source/TMTSixteenPlexQuantitationMethod_test.cpp @@ -172,7 +172,7 @@ START_SECTION((virtual Matrix getIsotopeCorrectionMatrix() const )) }; Matrix test_Matrix; - test_Matrix.setMatrix<16,16>(test_matrix); + test_Matrix.setMatrix(test_matrix); TMTSixteenPlexQuantitationMethod quant_meth; @@ -186,9 +186,9 @@ START_SECTION((virtual Matrix getIsotopeCorrectionMatrix() const )) ABORT_IF(m.rows() != 16) ABORT_IF(m.cols() != 16) - for(Matrix::SizeType i = 0; i < m.rows(); ++i) + for (size_t i = 0; i < m.rows(); ++i) { - for(Matrix::SizeType j = 0; j < m.cols(); ++j) + for (size_t j = 0; j < m.cols(); ++j) { TEST_REAL_SIMILAR(m(i,j), test_Matrix(i,j)) } diff --git a/src/tests/class_tests/openms/source/TMTTenPlexQuantitationMethod_test.cpp b/src/tests/class_tests/openms/source/TMTTenPlexQuantitationMethod_test.cpp index 8317c37421f..9e1871af509 100644 --- a/src/tests/class_tests/openms/source/TMTTenPlexQuantitationMethod_test.cpp +++ b/src/tests/class_tests/openms/source/TMTTenPlexQuantitationMethod_test.cpp @@ -170,7 +170,7 @@ START_SECTION((virtual Matrix getIsotopeCorrectionMatrix() const )) {0,0,0,0,0,0,0,0.0275,0,0.9628}}; Matrix test_Matrix; - test_Matrix.setMatrix<10,10>(test_matrix); + test_Matrix.setMatrix(test_matrix); TMTTenPlexQuantitationMethod quant_meth; @@ -183,11 +183,11 @@ START_SECTION((virtual Matrix getIsotopeCorrectionMatrix() const )) ABORT_IF(m.rows() != 10) ABORT_IF(m.cols() != 10) - for(Matrix::SizeType i = 0; i < m.rows(); ++i) + for (size_t i = 0; i < m.rows(); ++i) { - for(Matrix::SizeType j = 0; j < m.cols(); ++j) + for (size_t j = 0; j < m.cols(); ++j) { - if (i == j) TEST_REAL_SIMILAR(m(i,j),test_Matrix(i,j)) + if (i == j) TEST_REAL_SIMILAR(m(i,j), test_Matrix(i,j)) else TEST_REAL_SIMILAR(m(i,j), test_Matrix(i,j)) } } diff --git a/src/topp/ImageCreator.cpp b/src/topp/ImageCreator.cpp index ff4a0ebc799..1b18750eb8e 100644 --- a/src/topp/ImageCreator.cpp +++ b/src/topp/ImageCreator.cpp @@ -278,7 +278,8 @@ class TOPPImageCreator : //---------------------------------------------------------------- //Do the actual resampling BilinearInterpolation bilip; - bilip.getData().resize(rows, cols); + bilip.getData().getEigenMatrix().resize(rows, cols); + bilip.getData().getEigenMatrix().setZero(); if (!getFlag_("transpose")) { @@ -323,8 +324,8 @@ class TOPPImageCreator : //---------------------------------------------------------------- //create and store image - int scans = (int) bilip.getData().sizePair().first; - int peaks = (int) bilip.getData().sizePair().second; + int scans = (int) bilip.getData().rows(); + int peaks = (int) bilip.getData().cols(); bool use_log = getFlag_("log_intensity"); @@ -358,7 +359,7 @@ class TOPPImageCreator : double factor = getDoubleOption_("max_intensity"); if (factor == 0) { - factor = (*std::max_element(bilip.getData().begin(), bilip.getData().end())); + factor = bilip.getData().getEigenMatrix().maxCoeff(); } // with a user-supplied gradient, we need to logarithmize explicitly; // by default, the gradient itself is adjusted to the log-scale: @@ -370,7 +371,7 @@ class TOPPImageCreator : { for (int j = 0; j < peaks; ++j) { - double value = bilip.getData().getValue(i, j); + double value = bilip.getData()(i, j); if (use_log) value = std::log(value); if (value > 1e-4) { From 87c37b6534b3e9f3f07c39185953ec191ee8aea3 Mon Sep 17 00:00:00 2001 From: Julianus Pfeuffer Date: Thu, 22 Feb 2024 16:09:15 +0100 Subject: [PATCH 178/242] use message STATUS for Eigen version report --- cmake/cmake_findExternalLibs.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/cmake_findExternalLibs.cmake b/cmake/cmake_findExternalLibs.cmake index 86360012c03..6b446643e2b 100644 --- a/cmake/cmake_findExternalLibs.cmake +++ b/cmake/cmake_findExternalLibs.cmake @@ -148,7 +148,7 @@ find_package(BZip2 REQUIRED) # creates Eigen3::Eigen3 package find_package(Eigen3 3.4.0 REQUIRED) if(TARGET Eigen3::Eigen) - message("Eigen version found: ${Eigen3_VERSION}") + message(STATUS "Eigen version found: ${Eigen3_VERSION}") endif(TARGET Eigen3::Eigen) #------------------------------------------------------------------------------ From bd6c9d24c0af42687e1db11a1fbf324b5b640c73 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 22:54:03 +0000 Subject: [PATCH 179/242] Bump src/pyOpenMS/pyopenms-docs from `6a0aab2` to `e75ffd0` Bumps [src/pyOpenMS/pyopenms-docs](https://github.com/OpenMS/pyopenms-docs) from `6a0aab2` to `e75ffd0`. - [Release notes](https://github.com/OpenMS/pyopenms-docs/releases) - [Commits](https://github.com/OpenMS/pyopenms-docs/compare/6a0aab29763f4ca9cb90625b2671857595342114...e75ffd03616a35c9764c6c9a3954aabebe42a3a3) --- updated-dependencies: - dependency-name: src/pyOpenMS/pyopenms-docs dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- src/pyOpenMS/pyopenms-docs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pyOpenMS/pyopenms-docs b/src/pyOpenMS/pyopenms-docs index 6a0aab29763..e75ffd03616 160000 --- a/src/pyOpenMS/pyopenms-docs +++ b/src/pyOpenMS/pyopenms-docs @@ -1 +1 @@ -Subproject commit 6a0aab29763f4ca9cb90625b2671857595342114 +Subproject commit e75ffd03616a35c9764c6c9a3954aabebe42a3a3 From 39a414dd33c9c78cd68c5865c6c9351389a01825 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Mon, 4 Mar 2024 12:12:27 +0100 Subject: [PATCH 180/242] update citation to OpenMS 3.0 --- src/openms/source/APPLICATIONS/TOPPBase.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/openms/source/APPLICATIONS/TOPPBase.cpp b/src/openms/source/APPLICATIONS/TOPPBase.cpp index 86e4ff71075..13728ac837b 100755 --- a/src/openms/source/APPLICATIONS/TOPPBase.cpp +++ b/src/openms/source/APPLICATIONS/TOPPBase.cpp @@ -69,10 +69,10 @@ namespace OpenMS using namespace Exception; String TOPPBase::topp_ini_file_ = String(QDir::homePath()) + "/.TOPP.ini"; - const Citation TOPPBase::cite_openms_ = { "Rost HL, Sachsenberg T, Aiche S, Bielow C et al.", - "OpenMS: a flexible open-source software platform for mass spectrometry data analysis", - "Nat Meth. 2016; 13, 9: 741-748", - "10.1038/nmeth.3959" }; + const Citation TOPPBase::cite_openms_ + = {"Pfeuffer, J., Bielow, C., Wein, S. et al.", "OpenMS 3 enables reproducible analysis of large-scale mass spectrometry data", + "Nat Methods (2024)", "10.1038/s41592-024-02197-7"}; + void TOPPBase::setMaxNumberOfThreads(int #ifdef _OPENMP @@ -580,7 +580,7 @@ namespace OpenMS is << " + " << is.indent(3) << c.toString() << is.indent(0) << "\n"; } is << is.indent(0) << "\n"; - is << invert("Usage:\n") + is << invert("Usage:") << "\n" // line break needs to be separate, to avoid colored trailing whitespaces << " " << bright(tool_name_) << " " << "\n" << "\n"; From cb913933287749036f1773b53f9af19a818a9855 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Mon, 4 Mar 2024 13:10:04 +0100 Subject: [PATCH 181/242] add citiation for OpenMS3.0 to 'OpenMSInfo' tool and beautify output a little --- .../include/OpenMS/APPLICATIONS/TOPPBase.h | 8 +- src/topp/OpenMSInfo.cpp | 129 ++++++++++-------- 2 files changed, 75 insertions(+), 62 deletions(-) diff --git a/src/openms/include/OpenMS/APPLICATIONS/TOPPBase.h b/src/openms/include/OpenMS/APPLICATIONS/TOPPBase.h index d4fba96ffaa..b93aa7a4de8 100644 --- a/src/openms/include/OpenMS/APPLICATIONS/TOPPBase.h +++ b/src/openms/include/OpenMS/APPLICATIONS/TOPPBase.h @@ -185,7 +185,10 @@ namespace OpenMS */ String getToolPrefix() const; -private: + /// Returns a link to the documentation of the tool (accessible on our servers and only after inclusion in the nightly branch or a release). + String getDocumentationURL() const; + + private: /// Tool name. This is assigned once and for all in the constructor. String const tool_name_; @@ -350,9 +353,6 @@ namespace OpenMS */ String getSubsection_(const String& name) const; - /// Returns a link to the documentation of the tool (accessible on our servers and only after inclusion in the nightly branch or a release). - String getDocumentationURL() const; - /// Returns the default parameters Param getDefaultParameters_() const; diff --git a/src/topp/OpenMSInfo.cpp b/src/topp/OpenMSInfo.cpp index 2abdbed8750..e5b0f3acf5c 100644 --- a/src/topp/OpenMSInfo.cpp +++ b/src/topp/OpenMSInfo.cpp @@ -6,13 +6,15 @@ // $Authors: Marc Sturm, Chris Bielow $ // -------------------------------------------------------------------------- -#include +#include +#include #include #include +#include #include #include +#include #include -#include #ifdef _OPENMP #include "omp.h" @@ -26,46 +28,49 @@ using namespace std; /** @page TOPP_OpenMSInfo OpenMSInfo -@brief Prints configurations details of %OpenMS (Version, Git hash, SIMD extensions, Multithreading), along with directories where auxilliary data like - modifications (UniMOD), Enzymes etc are taken from. +@brief Prints configurations details of %OpenMS (Version, Git hash, SIMD extensions, Multithreading), along with directories where auxilliary data +like modifications (UniMOD), Enzymes etc are taken from. Some path's can be manipulated by the user by setting environment variables. If not set, the values are taken from the system defaults.
        -
      • Data path: controlled by the environment variable 'OPENMS_DATA_PATH'; the value should point to a %OpenMS share directory, e.g. 'c:/program files/OpenMS3.1/share/OpenMS' -
      • Temp path: controlled by the environment variable 'OPENMS_TMPDIR'; the value should point to where you want %OpenMS to store temporary data. -
      • Userdata path: controlled by the environment variable 'OPENMS_HOME_PATH'; the value should point to where you want %OpenMS to store user-realted data, e.g. the .OpenMS.ini. +
      • Data path: controlled by the environment variable 'OPENMS_DATA_PATH'; the value should point to a %OpenMS share directory, e.g. +'c:/program files/OpenMS3.1/share/OpenMS'
      • Temp path: controlled by the environment variable 'OPENMS_TMPDIR'; the value should point to +where you want %OpenMS to store temporary data.
      • Userdata path: controlled by the environment variable 'OPENMS_HOME_PATH'; the value should +point to where you want %OpenMS to store user-realted data, e.g. the .OpenMS.ini.
      This tool does not need/use any command line parameters. Example output: @code -OpenMS Version: -================== -Version : 3.1.0-pre-disabled-20230914 -Build time : Sep 14 2023, 12:02:03 + +Full documentation: http://www.openms.de/doxygen/nightly/html/TOPP_OpenMSInfo.html +To cite OpenMS: + + Pfeuffer, J., Bielow, C., Wein, S. et al.. OpenMS 3 enables reproducible analysis of large-scale mass spectrometry + data. Nat Methods (2024). doi:10.1038/s41592-024-02197-7. + +<< OpenMS Version >> +Version : 3.1.0 +Build time : Mar 4 2024, 10:42:53 Git sha1 : disabled Git branch : disabled -Installation information: -================== -Data path : C:/dev/openms/share/OpenMS +<< Installation information >> +Data path : C:/dev/openms2/share/OpenMS Temp path : C:/Users/bielow/AppData/Local/Temp Userdata path: C:/Users/bielow/ -Build information: -================== +<< Build information >> Source path : C:/dev/openms/src/openms Binary path : C:/dev/openms_build/src/openms Binary arch : 64 bit -Build type : Release +Build type : Debug LP-Solver : COIN-OR OpenMP : enabled (maxThreads = 32) -SIMD extensions : SSE, SSE2, SSE3, SSE4.1, AVX +SIMD extensions : SSE, SSE2, SSE3, SSE4.1, SSE4.2, AVX -OS Information: -================== +<< OS Information >> Name: Windows Version: 10 Architecture: 64 bit @@ -82,7 +87,7 @@ const auto max_threads = Internal::OpenMSBuildInfo::getOpenMPMaxNumThreads(); class TOPPOpenMSInfo : public TOPPBase { public: - TOPPOpenMSInfo() : TOPPBase("OpenMSInfo", "Prints configurations details of OpenMS.") + TOPPOpenMSInfo(): TOPPBase("OpenMSInfo", "Prints configurations details of OpenMS.") { } @@ -93,54 +98,62 @@ class TOPPOpenMSInfo : public TOPPBase registerInputFile_("dummy", "", "", "A fake input file, which is needed for some workflow systems to call this tool", false, true); } - //Param getSubsectionDefaults_(const String& /*section*/) const override + // Param getSubsectionDefaults_(const String& /*section*/) const override //{ - // return SpectraMerger().getParameters(); - //} + // return SpectraMerger().getParameters(); + // } ExitCodes main_(int, const char**) override { - cout << "OpenMS Version:" << "\n"; - cout << "==================" << "\n"; - cout << "Version : " << VersionInfo::getVersion() << "\n"; - cout << "Build time : " << VersionInfo::getTime() << "\n"; - cout << "Git sha1 : " << VersionInfo::getRevision() << "\n"; - cout << "Git branch : " << VersionInfo::getBranch() << "\n"; - cout << "\n"; - cout << "Installation information:" << "\n"; - cout << "==================" << "\n"; - cout << "Data path : " << File::getOpenMSDataPath() << "\n"; - cout << "Temp path : " << File::getTempDirectory() << "\n"; - cout << "Userdata path: " << File::getUserDirectory() << "\n"; - - cout << "\n"; - cout << "Build information:" << "\n"; - cout << "==================" << "\n"; - cout << "Source path : " << OPENMS_SOURCE_PATH << "\n"; - cout << "Binary path : " << OPENMS_BINARY_PATH << "\n"; - cout << "Binary arch : " << Internal::OpenMSOSInfo::getBinaryArchitecture() << "\n"; - cout << "Build type : " << Internal::OpenMSBuildInfo::getBuildType() << "\n"; + IndentedStream is(cout, 0, 10); + is << '\n' + << bright("Full documentation: ") // the space is needed, otherwise the remaining line will be underlined on Windows.. + << underline(TOPPBase::getDocumentationURL()) << " " // the space is needed ... + << '\n' + << bright("To cite OpenMS:\n") << " + " + << is.indent(3) << cite_openms_.toString() << is.indent(0); + + is << "\n\n" + << green("<< OpenMS Version >>\n") + << "Version : " << VersionInfo::getVersion() << "\n" + << "Build time : " << VersionInfo::getTime() << "\n" + << "Git sha1 : " << VersionInfo::getRevision() << "\n" + << "Git branch : " << VersionInfo::getBranch() << "\n" + << "\n" + << green("<< Installation information >>\n") + << "Data path : " << File::getOpenMSDataPath() << "\n" + << "Temp path : " << File::getTempDirectory() << "\n" + << "Userdata path: " << File::getUserDirectory() << "\n" + << "\n" + << green("<< Build information >>\n") + << "Source path : " << OPENMS_SOURCE_PATH << "\n" + << "Binary path : " << OPENMS_BINARY_PATH << "\n" + << "Binary arch : " << Internal::OpenMSOSInfo::getBinaryArchitecture() << "\n" + << "Build type : " << Internal::OpenMSBuildInfo::getBuildType() << "\n"; #if COINOR_SOLVER == 1 - cout << "LP-Solver : COIN-OR\n"; + is << "LP-Solver : COIN-OR\n"; #else cout << "LP-Solver : GLPK\n"; #endif - #ifdef _OPENMP - cout << "OpenMP : " << "enabled (maxThreads = " << max_threads << ")" << "\n"; - #else - cout << "OpenMP : " << "disabled" << "\n"; - #endif - cout << "SIMD extensions : " << Internal::OpenMSOSInfo::getActiveSIMDExtensions() << "\n"; - cout << "\n"; +#ifdef _OPENMP + is << "OpenMP : " + << "enabled (maxThreads = " << max_threads << ")" + << "\n"; +#else + is << "OpenMP : " + << "disabled" + << "\n"; +#endif + is << "SIMD extensions : " << Internal::OpenMSOSInfo::getActiveSIMDExtensions() << "\n" + << "\n"; Internal::OpenMSOSInfo info = Internal::OpenMSOSInfo::getOSInfo(); - cout << "OS Information:" << "\n"; - cout << "==================" << "\n"; - cout << "Name: " << info.getOSAsString() << "\n"; - cout << "Version: " << info.getOSVersionAsString() << "\n"; - cout << "Architecture: " << info.getArchAsString() << "\n"; - cout << "\n"; + is << green("<< OS Information >>\n") + << "Name: " << info.getOSAsString() << "\n" + << "Version: " << info.getOSVersionAsString() << "\n" + << "Architecture: " << info.getArchAsString() << "\n" + << "\n"; return EXECUTION_OK; } From b70742f82c53ba6b4e84aa69568203b288d1d3d2 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Mon, 4 Mar 2024 13:15:26 +0100 Subject: [PATCH 182/242] update changelog --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index b4b26e57612..7f21c23788a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -36,6 +36,7 @@ Fixes: Misc: - OpenMSInfo reports the ILP solver (CoinOr or glpk) (#7156) +- add citation information for OpenMS 3.0 (NatMethods) (#7383) - Add export for Common Workflow Language (CWL) (#6156) - Add tool description lib (TDL) dependency (#6156) From b146ea40041ae92e87340022caacfa6aba750e0f Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Mon, 4 Mar 2024 14:53:45 +0100 Subject: [PATCH 183/242] Update CHANGELOG Co-authored-by: Timo Sachsenberg --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 7f21c23788a..edfe8d529f1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -36,7 +36,7 @@ Fixes: Misc: - OpenMSInfo reports the ILP solver (CoinOr or glpk) (#7156) -- add citation information for OpenMS 3.0 (NatMethods) (#7383) +- add citation information for OpenMS 3.0 (Nat. Methods) (#7383) - Add export for Common Workflow Language (CWL) (#6156) - Add tool description lib (TDL) dependency (#6156) From 885a43bc07fc73fc1c381ca767dd64ead3e75496 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Tue, 5 Mar 2024 12:08:10 +0100 Subject: [PATCH 184/242] Bump github-actions-cpu-cores version --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 82da6c8776b..ef5b303f588 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -93,7 +93,7 @@ jobs: run: echo "RUN_NAME=${{ github.event.pull_request && github.event.number || github.ref_name }}" >> $GITHUB_OUTPUT - name: Get number of CPU cores - uses: SimenB/github-actions-cpu-cores@v1 + uses: SimenB/github-actions-cpu-cores@v2 id: cpu-cores - id: set-vars From 2e602f3816da1e7cf48b86e67a12207cf2ecfe31 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Tue, 5 Mar 2024 12:10:06 +0100 Subject: [PATCH 185/242] Update cppcheck.yml bump version of checkout action --- .github/workflows/cppcheck.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cppcheck.yml b/.github/workflows/cppcheck.yml index bc280d29232..0c8122a10d0 100644 --- a/.github/workflows/cppcheck.yml +++ b/.github/workflows/cppcheck.yml @@ -6,7 +6,7 @@ jobs: name: cppcheck-test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: cppcheck uses: deep5050/cppcheck-action@main From 7bd0d3bfe345f00a97ecb85ec4bbdda1d94f74d9 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Tue, 5 Mar 2024 12:28:10 +0100 Subject: [PATCH 186/242] Update pyopenms-wheels.yml with latest *-artifacts action version --- .github/workflows/pyopenms-wheels.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/pyopenms-wheels.yml b/.github/workflows/pyopenms-wheels.yml index c8085f73bd5..7e188528be1 100644 --- a/.github/workflows/pyopenms-wheels.yml +++ b/.github/workflows/pyopenms-wheels.yml @@ -124,7 +124,7 @@ jobs: done - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 name: Upload artifacts with: name: ${{ runner.os }}-wheels @@ -260,7 +260,7 @@ jobs: done - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 name: Upload artifacts if: always() with: @@ -269,7 +269,7 @@ jobs: bld/CMakeCache.txt bld/pyOpenMS/env.py - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 name: Upload wheels with: name: ${{ runner.os }}-wheels @@ -352,7 +352,7 @@ jobs: done - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 name: Upload artifacts with: name: ${{ runner.os }}-wheels @@ -395,7 +395,7 @@ jobs: echo "$HOME/miniconda3/Scripts" >> $GITHUB_PATH - name: Download artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: ${{ runner.os }}-wheels @@ -445,17 +445,17 @@ jobs: steps: # haha github is just ridiculous.. not getting their actions to do basic stuff for years - name: Download artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: Linux-wheels path: /home/runner/work/OpenMS/OpenMS/Linux-wheels - name: Download artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: Windows-wheels path: /home/runner/work/OpenMS/OpenMS/Windows-wheels - name: Download artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: macOS-wheels path: /home/runner/work/OpenMS/OpenMS/macOS-wheels From 30d012faed9e46bde0774af807819a5d6718dd6b Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Tue, 5 Mar 2024 13:50:19 +0100 Subject: [PATCH 187/242] Trigger openms-ci-full after merging from develop --- .github/workflows/update_nightly.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index bf1e13c64a9..215a70504a6 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -55,3 +55,8 @@ jobs: git push origin nightly -f env: GITHUB_TOKEN: ${{ secrets.OPENMS_GITHUB_APP_PRIVATE_KEY }} + + - name: Call CI + if: steps.compare_branches.outputs.behind == 'true' || inputs.force + run: | + gh workflow run openms-ci-full --ref nightly From 7af0a527832e693467829b2a64e60c9f876fb823 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Tue, 5 Mar 2024 13:50:47 +0100 Subject: [PATCH 188/242] Use PAT --- .github/workflows/update_nightly.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index 215a70504a6..68f2adaeb18 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -60,3 +60,5 @@ jobs: if: steps.compare_branches.outputs.behind == 'true' || inputs.force run: | gh workflow run openms-ci-full --ref nightly + env: + GITHUB_TOKEN: ${{ secrets.OPENMS_GITHUB_APP_PRIVATE_KEY }} From 3771e25766ac72b72a9ffbb3233eafd3dfe8729f Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Tue, 5 Mar 2024 13:57:36 +0100 Subject: [PATCH 189/242] update setup-cmake version --- .github/workflows/pyopenms-wheels.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pyopenms-wheels.yml b/.github/workflows/pyopenms-wheels.yml index 7e188528be1..fcff5f9cbdf 100644 --- a/.github/workflows/pyopenms-wheels.yml +++ b/.github/workflows/pyopenms-wheels.yml @@ -22,7 +22,7 @@ jobs: path: OpenMS - name: Setup cmake - uses: jwlawson/actions-setup-cmake@v1.13 + uses: jwlawson/actions-setup-cmake@v2 with: cmake-version: '3.25.x' @@ -138,7 +138,7 @@ jobs: path: OpenMS - name: Setup cmake - uses: jwlawson/actions-setup-cmake@v1.13 + uses: jwlawson/actions-setup-cmake@v2 with: cmake-version: '3.25.x' @@ -292,7 +292,7 @@ jobs: path: OpenMS - name: Setup cmake - uses: jwlawson/actions-setup-cmake@v1.13 + uses: jwlawson/actions-setup-cmake@v2 with: cmake-version: '3.25.x' From a895bdab750b608cb5c3e74fb9957804b6fd277a Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Tue, 5 Mar 2024 14:08:32 +0100 Subject: [PATCH 190/242] try without token --- .github/workflows/update_nightly.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index 68f2adaeb18..215a70504a6 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -60,5 +60,3 @@ jobs: if: steps.compare_branches.outputs.behind == 'true' || inputs.force run: | gh workflow run openms-ci-full --ref nightly - env: - GITHUB_TOKEN: ${{ secrets.OPENMS_GITHUB_APP_PRIVATE_KEY }} From 242ca79ac7d3321a041592043260c0b0b9bc4b0d Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Tue, 5 Mar 2024 15:06:44 +0100 Subject: [PATCH 191/242] Update update_nightly.yml --- .github/workflows/update_nightly.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/update_nightly.yml b/.github/workflows/update_nightly.yml index 215a70504a6..cb38a4d15c4 100644 --- a/.github/workflows/update_nightly.yml +++ b/.github/workflows/update_nightly.yml @@ -60,3 +60,5 @@ jobs: if: steps.compare_branches.outputs.behind == 'true' || inputs.force run: | gh workflow run openms-ci-full --ref nightly + env: + GH_TOKEN: ${{ github.token }} From 06a851b9df3dfd30cea4ceac2d777875d4510bbe Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Tue, 5 Mar 2024 17:21:27 +0100 Subject: [PATCH 192/242] Only try to download the changelog if do_release --- .github/workflows/openms_ci_matrix_full.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index ef5b303f588..97e16b7cde3 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -537,6 +537,7 @@ jobs: name: source.tar.gz - name: Download changelog as artifact + if: inputs.do_release uses: actions/download-artifact@v4 with: name: changelog.txt From 7425392685cccdbae4e6133c4b735cfd522163ab Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 6 Mar 2024 09:25:06 +0100 Subject: [PATCH 193/242] Update openms_ci_matrix_full.yml --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 97e16b7cde3..716feb05a25 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -739,7 +739,7 @@ jobs: # Should be the default. - name: Set up JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: ${{ env.JAVA_VER }} distribution: 'temurin' From ebb9da8a2e284a9b5da74ffae803a9a686fb286e Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 6 Mar 2024 11:04:35 +0100 Subject: [PATCH 194/242] Revert to targeting KNIME 5.1 --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 97e16b7cde3..43a3fcf7e42 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -701,7 +701,7 @@ jobs: build-deploy-knime-updatesite: env: - KNIME: 5.2 + KNIME: 5.1 JAVA_VER: 17 PLUGIN_BUILD: ${{ github.workspace }}/plugin-build PLUGIN_SOURCE: ${{ github.workspace }}/plugin-source From e3c07876d57454767c5bd06ec8aa6083873e2bd1 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 6 Mar 2024 11:57:42 +0100 Subject: [PATCH 195/242] revert other definition of KNIME version --- .github/workflows/openms_ci_matrix_full.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 93e5500a3ea..4b9934794b4 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -835,7 +835,7 @@ jobs: - name: Build KNIME update site shell: bash env: - KNIME: 5.2 + KNIME: 5.1 run: | # fix folder structure From 72a5eaf23338e75938b09afa51c39cbdf3a09b04 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Wed, 6 Mar 2024 12:07:04 +0100 Subject: [PATCH 196/242] Remove unnecessary redeclaration of KNIME version --- .github/workflows/openms_ci_matrix_full.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 4b9934794b4..7142c6f28ab 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -834,9 +834,6 @@ jobs: - name: Build KNIME update site shell: bash - env: - KNIME: 5.1 - run: | # fix folder structure mv ${PLUGIN_BUILD}/.mvn ./ From da9cdefa65126920f910c05df7dad560e17d09cd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 22:29:07 +0000 Subject: [PATCH 197/242] Bump src/pyOpenMS/pyopenms-docs from `e75ffd0` to `df06fc8` Bumps [src/pyOpenMS/pyopenms-docs](https://github.com/OpenMS/pyopenms-docs) from `e75ffd0` to `df06fc8`. - [Release notes](https://github.com/OpenMS/pyopenms-docs/releases) - [Commits](https://github.com/OpenMS/pyopenms-docs/compare/e75ffd03616a35c9764c6c9a3954aabebe42a3a3...df06fc86eba99a5e8913de69e2500595fc71ee73) --- updated-dependencies: - dependency-name: src/pyOpenMS/pyopenms-docs dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- src/pyOpenMS/pyopenms-docs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pyOpenMS/pyopenms-docs b/src/pyOpenMS/pyopenms-docs index e75ffd03616..df06fc86eba 160000 --- a/src/pyOpenMS/pyopenms-docs +++ b/src/pyOpenMS/pyopenms-docs @@ -1 +1 @@ -Subproject commit e75ffd03616a35c9764c6c9a3954aabebe42a3a3 +Subproject commit df06fc86eba99a5e8913de69e2500595fc71ee73 From a04a6262056d5d5b8ad7f39f6c783b31c5f5a2a2 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Mon, 11 Mar 2024 17:36:39 +0100 Subject: [PATCH 198/242] make pyopenms compile again --- src/pyOpenMS/addons/MatrixDouble.pyx | 54 ++++++++++++++++------------ 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/src/pyOpenMS/addons/MatrixDouble.pyx b/src/pyOpenMS/addons/MatrixDouble.pyx index 7dde4217fc8..6a43cc3ac4d 100644 --- a/src/pyOpenMS/addons/MatrixDouble.pyx +++ b/src/pyOpenMS/addons/MatrixDouble.pyx @@ -3,7 +3,7 @@ from Matrix cimport * # continue with extra code if needed - def get_matrix(self): + def get_matrix_as_view(self): """Cython signature: numpy_matrix get_matrix() """ @@ -11,15 +11,23 @@ from Matrix cimport * cdef unsigned int rows = mat_.rows() cdef unsigned int cols = mat_.cols() + cdef unsigned int n = rows * cols + cdef np.ndarray[double, ndim=2] data + data = np.zeros( (rows,cols), dtype=np.float64) - cdef libcpp_vector[double] tmp_vec; - tmp_vec = mat_.asVector(); + cdef libcpp_vector[double] * vec_ptr = mat_ + cdef double * raw_ptr = address(deref(vec_ptr)[0]) - xarr = np.asarray(tmp_vec) + ## # We use a memory view to get the data from the raw data + ## # See https://cython.readthedocs.io/en/latest/src/userguide/memoryviews.html + ## # See https://stackoverflow.com/questions/43021574/cast-c-array-into-numpy-array-cython-typed-memoryview-in-cython-code + cdef double[:] vec_view = raw_ptr # cast to memoryview, refer to the underlying buffer without copy + xarr = np.asarray(vec_view) # numpy array refer to the underlying buffer without copy xarr = xarr.reshape(rows, cols) - return xarr + return xarr.transpose() - def get_matrix_as_view(self): + + def get_matrix(self): """Cython signature: numpy_matrix get_matrix() """ @@ -40,23 +48,23 @@ from Matrix cimport * cdef double[:] vec_view = raw_ptr # cast to memoryview, refer to the underlying buffer without copy xarr = np.asarray(vec_view) # numpy array refer to the underlying buffer without copy xarr = xarr.reshape(rows, cols) - return xarr - - def set_matrix(self, np.ndarray[double, ndim=2, mode="c"] data not None): - """Cython signature: numpy_matrix set_matrix() - """ - - cdef _Matrix[double] * mat_ = self.inst.get() - - cdef unsigned int rows = data.shape[0] - cdef unsigned int cols = data.shape[1] - mat_.resize(rows, cols, 0) - - cdef int i = 0 - cdef int j = 0 - for i in range(int(rows)): - for j in range(int(cols)): - mat_.setValue(i,j,data[i][j]) + return xarr.transpose().copy() + +# def set_matrix(self, np.ndarray[double, ndim=2, mode="c"] data not None): +# """Cython signature: numpy_matrix set_matrix() +# """ +# +# cdef _Matrix[double] * mat_ = self.inst.get() +# +# cdef unsigned int rows = data.shape[0] +# cdef unsigned int cols = data.shape[1] +# mat_.resize(rows, cols, 0) +# +# cdef int i = 0 +# cdef int j = 0 +# for i in range(int(rows)): +# for j in range(int(cols)): +# mat_.setValue(i,j,data[i][j]) From 4276c98bd2b12c113526237d75ae6a7a10307653 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Mon, 11 Mar 2024 19:15:40 +0100 Subject: [PATCH 199/242] fix more tests --- src/pyOpenMS/tests/unittests/test000.py | 5 +- .../unittests/test_BilinearInterpolation.py | 54 +++++++------------ 2 files changed, 22 insertions(+), 37 deletions(-) diff --git a/src/pyOpenMS/tests/unittests/test000.py b/src/pyOpenMS/tests/unittests/test000.py index a18e506a2cc..7f6f1d4e44c 100644 --- a/src/pyOpenMS/tests/unittests/test000.py +++ b/src/pyOpenMS/tests/unittests/test000.py @@ -3631,9 +3631,8 @@ def testMatrixDouble(): MapAlignmentAlgorithmIdentification.__init__ """ - m = pyopenms.MatrixDouble() N = 90 - m.resize(N-1, N+2, 5.0) + m = pyopenms.MatrixDouble(N-1, N+2, 5.0) assert m.rows() == 89 assert m.cols() == 92 @@ -3680,7 +3679,7 @@ def testMatrixDouble(): assert m.getValue(1, 6) == 11.0 assert matrix_view[1, 6] == 11.0 - m.clear() + m = pyopenms.MatrixDouble() assert m.rows() == 0 assert m.cols() == 0 diff --git a/src/pyOpenMS/tests/unittests/test_BilinearInterpolation.py b/src/pyOpenMS/tests/unittests/test_BilinearInterpolation.py index fa8877b20f5..43fd759a0cb 100644 --- a/src/pyOpenMS/tests/unittests/test_BilinearInterpolation.py +++ b/src/pyOpenMS/tests/unittests/test_BilinearInterpolation.py @@ -8,8 +8,7 @@ class TestBilinearInterpolation(unittest.TestCase): def test_BilinearInterpolation(self): - mat = pyopenms.MatrixDouble() - mat.resize(2, 3, float()) + mat = pyopenms.MatrixDouble(2, 3, 0.0) mat.setValue(0, 0, 17) mat.setValue(0, 1, 18.9) mat.setValue(0, 2, 20.333) @@ -43,8 +42,8 @@ def test_BilinearInterpolation(self): def test_getData_setData(self): bilip = pyopenms.BilinearInterpolation() - tmp = bilip.getData() - tmp.resize(2, 3, float()) + tmp = pyopenms.MatrixDouble(2, 3, 0.0) + tmp.setValue(1, 2, 10012) tmp.setValue(0, 0, 10000) tmp.setValue(1, 0, 10010) @@ -108,8 +107,8 @@ def test_supportMax_0(self): bilip.setMapping_0(3.0, 1.0, 2.0) bilip.setMapping_1(5.0, 3.0, 4.0) - tmp = bilip.getData() - tmp.resize(2, 3, float()) + tmp = pyopenms.MatrixDouble(2, 3, 0.0) + bilip.setData(tmp) self.assertAlmostEqual(bilip.index2key_0(0), -1) self.assertAlmostEqual(bilip.index2key_0(1), 2) @@ -174,8 +173,7 @@ def test_supportMax_1(self): bilip.setMapping_1(3.0, 1.0, 2.0) bilip.setMapping_0(5.0, 3.0, 4.0) - tmp = bilip.getData() - tmp.resize(3, 2, float()) + tmp = pyopenms.MatrixDouble(3, 2, 0.0) bilip.setData(tmp) self.assertAlmostEqual(bilip.index2key_1(0), -1) self.assertAlmostEqual(bilip.index2key_1(1), 2) @@ -191,43 +189,36 @@ def test_empty(self): bilip = pyopenms.BilinearInterpolation() self.assertTrue(bilip.empty()) - tmp = bilip.getData() - tmp.resize(1, 2, float()) + tmp = pyopenms.MatrixDouble(1, 2, 0.0) bilip.setData(tmp) self.assertFalse(bilip.empty()) - tmp = bilip.getData() - tmp.resize(0, 0, float()) + tmp = pyopenms.MatrixDouble(0, 0, 0.0) bilip.setData(tmp) self.assertTrue(bilip.empty()) - tmp = bilip.getData() - tmp.resize(1, 2, float()) + tmp = pyopenms.MatrixDouble(1, 2, 0.0) bilip.setData(tmp) self.assertFalse(bilip.empty()) - tmp = bilip.getData() - tmp.resize(1, 0, float()) + tmp = pyopenms.MatrixDouble(1, 0, 0.0) bilip.setData(tmp) self.assertTrue(bilip.empty()) - tmp = bilip.getData() - tmp.resize(1, 2, float()) + tmp = pyopenms.MatrixDouble(1, 2, 0.0) bilip.setData(tmp) self.assertFalse(bilip.empty()) - tmp = bilip.getData() - tmp.resize(0, 0, float()) + tmp = pyopenms.MatrixDouble(0, 0, 0.0) bilip.setData(tmp) self.assertTrue(bilip.empty()) - tmp = bilip.getData() - tmp.resize(2, 2, float()) + tmp = pyopenms.MatrixDouble(2, 2, 0.0) bilip.setData(tmp) self.assertFalse(bilip.empty()) tmp = bilip.getData() - tmp.clear() + tmp = pyopenms.MatrixDouble(0, 0, 0.0) bilip.setData(tmp) self.assertTrue(bilip.empty()) @@ -239,23 +230,21 @@ def test_addValue(self): q = j / 10.0 bilip_small = pyopenms.BilinearInterpolation() - tmp = bilip_small.getData() - tmp.resize(5, 5, float()) + tmp = pyopenms.MatrixDouble(5, 5, 0.0) bilip_small.setData(tmp) bilip_small.setMapping_0(0.0, 0.0, 5.0, 5.0) bilip_small.setMapping_1(0.0, 0.0, 5.0, 5.0) bilip_small.addValue(p, q, 100) bilip_big = pyopenms.BilinearInterpolation() - tmp = bilip_big.getData() - tmp.resize(15, 15, float()) + tmp = pyopenms.MatrixDouble(15, 15, 0.0) bilip_big.setData(tmp) bilip_big.setMapping_0(5.0, 0.0, 10.0, 5.0) bilip_big.setMapping_1(5.0, 0.0, 10.0, 5.0) bilip_big.addValue(p, q, 100) - big_submatrix = pyopenms.MatrixDouble() - big_submatrix.resize(5, 5, float()) + big_submatrix = pyopenms.MatrixDouble(5, 5, 0.0) + for m in range(5): for n in range(5): big_submatrix.setValue(m, n, @@ -271,11 +260,8 @@ def test_value(self): bilip_small = pyopenms.BilinearInterpolation() bilip_big = pyopenms.BilinearInterpolation() - tmp_small = bilip_small.getData() - tmp_big = bilip_big.getData() - - tmp_small.resize(5, 5, float()) - tmp_big.resize(15, 15, float()) + tmp_small = pyopenms.MatrixDouble(5, 5, 0.0) + tmp_big = pyopenms.MatrixDouble(15, 15, 0.0) for i in range(5): for j in range(5): From 0fe3c90904d932dd5f63e3b96cb9cf87f1ca8c5c Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Tue, 12 Mar 2024 10:01:49 +0100 Subject: [PATCH 200/242] new attempt with inheritance --- .../include/OpenMS/DATASTRUCTURES/Matrix.h | 86 ++++--------------- .../source/ANALYSIS/OPENSWATH/MRMScoring.cpp | 48 +++++------ .../QUANTITATION/IsotopeLabelingMDVs.cpp | 4 +- .../ANALYSIS/QUANTITATION/ItraqConstants.cpp | 2 +- .../COMPARISON/SPECTRA/PeakAlignment.cpp | 16 ++-- .../MISC/NonNegativeLeastSquaresSolver.cpp | 6 +- src/pyOpenMS/pxds/Matrix.pxd | 1 + 7 files changed, 56 insertions(+), 107 deletions(-) diff --git a/src/openms/include/OpenMS/DATASTRUCTURES/Matrix.h b/src/openms/include/OpenMS/DATASTRUCTURES/Matrix.h index 3f6eb7820f2..3c95fdd5fb0 100644 --- a/src/openms/include/OpenMS/DATASTRUCTURES/Matrix.h +++ b/src/openms/include/OpenMS/DATASTRUCTURES/Matrix.h @@ -28,13 +28,15 @@ namespace OpenMS * @ingroup Datastructures */ template - class Matrix + class Matrix : public Eigen::Matrix { public: /** * @brief Eigen matrix type. */ using EigenMatrixType = Eigen::Matrix; + using EigenMatrixType::resize; + using EigenMatrixType::fill; // Default constructor. Creates the "null" matrix. Matrix() = default; @@ -61,33 +63,9 @@ namespace OpenMS * @param cols Number of columns in the matrix. * @param value Initial value to fill the matrix. */ - Matrix(Size rows, Size cols, Value value = Value()) : data_(rows, cols) + Matrix(Size rows, Size cols, Value value = Value()) : EigenMatrixType(rows, cols) { - data_.fill(value); - } - - /** - * @brief Accessor to get the value at the specified position in the matrix. - * - * @param i Row index. - * @param j Column index. - * @return reference to the value at the specified position. - */ - const Value& operator()(int i, int j) const - { - return data_(i, j); - } - - /** - * @brief Accessor to get the value at the specified position in the matrix. - * - * @param i Row index. - * @param j Column index. - * @return const reference to the value at the specified position. - */ - Value& operator()(int i, int j) - { - return data_(i, j); + fill(value); } /* @@ -96,7 +74,7 @@ namespace OpenMS */ const Value& getValue(size_t const i, size_t const j) const { - return data_(i, j); + return *this(i, j); } /* @@ -105,7 +83,7 @@ namespace OpenMS */ Value& getValue(size_t const i, size_t const j) { - return data_(i, j); + return this->operator()(i, j); } /* @@ -114,23 +92,7 @@ namespace OpenMS */ void setValue(size_t const i, size_t const j, const Value& value) { - data_(i, j) = value; - } - - /** - * @brief Number of rows - */ - size_t rows() const - { - return data_.rows(); - } - - /** - * @brief Number of columns - */ - size_t cols() const - { - return data_.cols(); + this->operator()(i, j) = value; } /** @@ -145,15 +107,15 @@ namespace OpenMS * @tparam COLS The number of columns in the matrix. * @param array The 2D array containing the values to be assigned to the matrix. */ - template + template void setMatrix(T const (&array)[ROWS][COLS]) { - data_.resize(ROWS, COLS); + resize(ROWS, COLS); for (int i = 0; i < ROWS; ++i) { for (int j = 0; j < COLS; ++j) { - data_(i, j) = array[i][j]; + this->operator()(i, j) = array[i][j]; } } } @@ -164,20 +126,8 @@ namespace OpenMS * @param rhs The matrix to be compared. * @return True if matrices are equal, false otherwise. */ - bool operator==(const Matrix& rhs) const - { - return data_ == rhs.data_; - } - - /** - * @brief Get the total number of elements in the matrix. Useful for checking if the matrix is empty - * or iterating over raw data. - * - * @return The total number of elements. - */ - size_t size() const - { - return data_.size(); + bool operator==(const Matrix& rhs) const { + return EigenMatrixType::operator==(rhs); } /** @@ -189,9 +139,9 @@ namespace OpenMS */ friend std::ostream& operator<<(std::ostream& os, const Matrix& matrix) { - for (size_t i = 0; i < matrix.rows(); ++i) + for (long int i = 0; i < matrix.rows(); ++i) { - for (size_t j = 0; j < matrix.cols(); ++j) + for (long int j = 0; j < matrix.cols(); ++j) { os << std::setprecision(6) << std::setw(6) << matrix(i, j) << ' '; } @@ -207,7 +157,7 @@ namespace OpenMS */ const EigenMatrixType& getEigenMatrix() const { - return data_; + return *this; } /** @@ -217,9 +167,7 @@ namespace OpenMS */ EigenMatrixType& getEigenMatrix() { - return data_; + return *this; } - private: - EigenMatrixType data_; ///< Eigen matrix storing the actual data. }; } // namespace OpenMS diff --git a/src/openms/source/ANALYSIS/OPENSWATH/MRMScoring.cpp b/src/openms/source/ANALYSIS/OPENSWATH/MRMScoring.cpp index a64e19b7525..2bea1a59c77 100644 --- a/src/openms/source/ANALYSIS/OPENSWATH/MRMScoring.cpp +++ b/src/openms/source/ANALYSIS/OPENSWATH/MRMScoring.cpp @@ -252,9 +252,9 @@ namespace OpenSwath OPENSWATH_PRECONDITION(xcorr_matrix_max_peak_.rows() > 1, "Expect cross-correlation matrix of at least 2x2"); OpenSwath::mean_and_stddev msc; - for (std::size_t i = 0; i < xcorr_matrix_max_peak_.rows(); i++) + for (long int i = 0; i < xcorr_matrix_max_peak_.rows(); i++) { - for (std::size_t j = i; j < xcorr_matrix_max_peak_.rows(); j++) + for (long int j = i; j < xcorr_matrix_max_peak_.rows(); j++) { // first is the X value (RT), should be an int //deltas.push_back(std::abs(Scoring::xcorrArrayGetMaxPeak(xcorr_matrix_.getValue(i, j))->first)); @@ -281,7 +281,7 @@ namespace OpenSwath double weights = 0; #endif double deltas{0}; - for (std::size_t i = 0; i < xcorr_matrix_max_peak_.rows(); i++) + for (long int i = 0; i < xcorr_matrix_max_peak_.rows(); i++) { deltas += (xcorr_matrix_max_peak_(i, i)//std::abs(Scoring::xcorrArrayGetMaxPeak(xcorr_matrix_.getValue(i, i))->first) * normalized_library_intensity[i] @@ -291,7 +291,7 @@ namespace OpenSwath normalized_library_intensity[i] * normalized_library_intensity[i] << std::endl; weights += normalized_library_intensity[i] * normalized_library_intensity[i]; #endif - for (std::size_t j = i + 1; j < xcorr_matrix_max_peak_.rows(); j++) + for (long int j = i + 1; j < xcorr_matrix_max_peak_.rows(); j++) { // first is the X value (RT), should be an int deltas += (xcorr_matrix_max_peak_(i, j)//std::abs(Scoring::xcorrArrayGetMaxPeak(xcorr_matrix_.getValue(i, j))->first) @@ -318,10 +318,10 @@ namespace OpenSwath OPENSWATH_PRECONDITION(xcorr_contrast_matrix_.rows() > 0 && xcorr_contrast_matrix_.cols() > 1, "Expect cross-correlation matrix of at least 1x2"); std::vector deltas; - for (std::size_t i = 0; i < xcorr_contrast_matrix_.rows(); i++) + for (long int i = 0; i < xcorr_contrast_matrix_.rows(); i++) { double deltas_id = 0; - for (std::size_t j = 0; j < xcorr_contrast_matrix_.cols(); j++) + for (long int j = 0; j < xcorr_contrast_matrix_.cols(); j++) { // first is the X value (RT), should be an int auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_contrast_matrix_(i, j)); @@ -341,9 +341,9 @@ namespace OpenSwath OPENSWATH_PRECONDITION(xcorr_precursor_matrix_.rows() > 1, "Expect cross-correlation matrix of at least 2x2"); OpenSwath::mean_and_stddev msc; - for (std::size_t i = 0; i < xcorr_precursor_matrix_.rows(); i++) + for (long int i = 0; i < xcorr_precursor_matrix_.rows(); i++) { - for (std::size_t j = i; j < xcorr_precursor_matrix_.rows(); j++) + for (long int j = i; j < xcorr_precursor_matrix_.rows(); j++) { // first is the X value (RT), should be an int auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_precursor_matrix_(i, j)); @@ -416,9 +416,9 @@ namespace OpenSwath OPENSWATH_PRECONDITION(xcorr_precursor_combined_matrix_.rows() > 1, "Expect cross-correlation matrix of at least 2x2"); OpenSwath::mean_and_stddev msc; - for (std::size_t i = 0; i < xcorr_precursor_combined_matrix_.rows(); i++) + for (long int i = 0; i < xcorr_precursor_combined_matrix_.rows(); i++) { - for (std::size_t j = i; j < xcorr_precursor_combined_matrix_.rows(); j++) + for (long int j = i; j < xcorr_precursor_combined_matrix_.rows(); j++) { // first is the X value (RT), should be an int auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_precursor_combined_matrix_(i, j)); @@ -448,9 +448,9 @@ namespace OpenSwath size_t element_number{0}; double intensities{0}; - for (std::size_t i = 0; i < xcorr_matrix_max_peak_sec_.rows(); i++) + for (long int i = 0; i < xcorr_matrix_max_peak_sec_.rows(); i++) { - for (std::size_t j = i; j < xcorr_matrix_max_peak_sec_.rows(); j++) + for (long int j = i; j < xcorr_matrix_max_peak_sec_.rows(); j++) { // second is the Y value (intensity) intensities += xcorr_matrix_max_peak_sec_(i, j); @@ -469,7 +469,7 @@ namespace OpenSwath // see _calc_weighted_xcorr_shape_score in MRM_pgroup.pm // -- they only multiply up the intensity once double intensities{0}; - for (std::size_t i = 0; i < xcorr_matrix_max_peak_sec_.rows(); i++) + for (long int i = 0; i < xcorr_matrix_max_peak_sec_.rows(); i++) { intensities += (xcorr_matrix_max_peak_sec_(i, i) * normalized_library_intensity[i] @@ -478,7 +478,7 @@ namespace OpenSwath std::cout << "_xcorr_weighted " << i << " " << i << " " << Scoring::xcorrArrayGetMaxPeak(xcorr_matrix_[i][i])->second << " weight " << normalized_library_intensity[i] * normalized_library_intensity[i] << std::endl; #endif - for (std::size_t j = i + 1; j < xcorr_matrix_max_peak_sec_.rows(); j++) + for (long int j = i + 1; j < xcorr_matrix_max_peak_sec_.rows(); j++) { intensities += (xcorr_matrix_max_peak_sec_(i, j) * normalized_library_intensity[i] @@ -504,10 +504,10 @@ namespace OpenSwath OPENSWATH_PRECONDITION(xcorr_contrast_matrix_max_peak_sec_.rows() > 0 && xcorr_contrast_matrix_max_peak_sec_.cols() > 1, "Expect cross-correlation matrix of at least 1x2"); std::vector intensities; - for (std::size_t i = 0; i < xcorr_contrast_matrix_max_peak_sec_.rows(); i++) + for (long int i = 0; i < xcorr_contrast_matrix_max_peak_sec_.rows(); i++) { double intensities_id = 0; - for (std::size_t j = 0; j < xcorr_contrast_matrix_max_peak_sec_.cols(); j++) + for (long int j = 0; j < xcorr_contrast_matrix_max_peak_sec_.cols(); j++) { // second is the Y value (intensity) intensities_id += xcorr_contrast_matrix_max_peak_sec_(i,j); @@ -523,9 +523,9 @@ namespace OpenSwath OPENSWATH_PRECONDITION(xcorr_precursor_matrix_.rows() > 1, "Expect cross-correlation matrix of at least 2x2"); double intensities{0}; - for(size_t i = 0; i < xcorr_precursor_matrix_.rows(); i++) + for(long int i = 0; i < xcorr_precursor_matrix_.rows(); i++) { - for(size_t j = i; j < xcorr_precursor_matrix_.cols(); j++) + for(long int j = i; j < xcorr_precursor_matrix_.cols(); j++) { auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_precursor_matrix_(i, j)); intensities += x->second; @@ -573,9 +573,9 @@ namespace OpenSwath OPENSWATH_PRECONDITION(xcorr_precursor_combined_matrix_.rows() > 1, "Expect cross-correlation matrix of at least 2x2"); double intensities{0}; - for(size_t i = 0; i < xcorr_precursor_combined_matrix_.rows(); i++) + for(long int i = 0; i < xcorr_precursor_combined_matrix_.rows(); i++) { - for(size_t j = i; j < xcorr_precursor_combined_matrix_.cols(); j++) + for(long int j = i; j < xcorr_precursor_combined_matrix_.cols(); j++) { auto x = Scoring::xcorrArrayGetMaxPeak(xcorr_precursor_combined_matrix_(i, j)); intensities += x->second; @@ -837,7 +837,7 @@ namespace OpenSwath OPENSWATH_PRECONDITION(mi_matrix_.rows() > 1, "Expect mutual information matrix of at least 2x2"); double mi_scores{0}; - for (std::size_t i = 0; i < mi_matrix_.rows(); i++) + for (long int i = 0; i < mi_matrix_.rows(); i++) { mi_scores += mi_matrix_(i, i) * normalized_library_intensity[i] @@ -846,7 +846,7 @@ namespace OpenSwath std::cout << "_mi_weighted " << i << " " << i << " " << mi_matrix_[i][i] << " weight " << normalized_library_intensity[i] * normalized_library_intensity[i] << std::endl; #endif - for (std::size_t j = i + 1; j < mi_matrix_.rows(); j++) + for (long int j = i + 1; j < mi_matrix_.rows(); j++) { mi_scores += mi_matrix_(i, j) * normalized_library_intensity[i] @@ -900,10 +900,10 @@ namespace OpenSwath std::vector mi_scores; mi_scores.resize(mi_contrast_matrix_.rows()); - for (std::size_t i = 0; i < mi_contrast_matrix_.rows(); i++) + for (long int i = 0; i < mi_contrast_matrix_.rows(); i++) { double mi_scores_id = 0; - for (std::size_t j = 0; j < mi_contrast_matrix_.cols(); j++) + for (long int j = 0; j < mi_contrast_matrix_.cols(); j++) { mi_scores_id += mi_contrast_matrix_(i, j); } diff --git a/src/openms/source/ANALYSIS/QUANTITATION/IsotopeLabelingMDVs.cpp b/src/openms/source/ANALYSIS/QUANTITATION/IsotopeLabelingMDVs.cpp index 08dce160b27..2dfc52ad344 100644 --- a/src/openms/source/ANALYSIS/QUANTITATION/IsotopeLabelingMDVs.cpp +++ b/src/openms/source/ANALYSIS/QUANTITATION/IsotopeLabelingMDVs.cpp @@ -84,9 +84,9 @@ namespace OpenMS else { correction_matrix_eigen.resize(correction_matrix.rows(), correction_matrix.cols()); - for (size_t i = 0; i < correction_matrix.rows(); ++i) + for (long int i = 0; i < correction_matrix.rows(); ++i) { - for (size_t j = 0; j < correction_matrix.cols(); ++j) + for (long int j = 0; j < correction_matrix.cols(); ++j) { correction_matrix_eigen(i,j) = correction_matrix(i,j); } diff --git a/src/openms/source/ANALYSIS/QUANTITATION/ItraqConstants.cpp b/src/openms/source/ANALYSIS/QUANTITATION/ItraqConstants.cpp index e5d3cdb99b4..af586478933 100644 --- a/src/openms/source/ANALYSIS/QUANTITATION/ItraqConstants.cpp +++ b/src/openms/source/ANALYSIS/QUANTITATION/ItraqConstants.cpp @@ -177,7 +177,7 @@ namespace OpenMS channel_names[2].setMatrix(CHANNELS_TMT_SIXPLEX); map.clear(); - for (Size i = 0; i < channel_names[itraq_type].rows(); ++i) + for (long int i = 0; i < channel_names[itraq_type].rows(); ++i) { ChannelInfo info; info.description = ""; diff --git a/src/openms/source/COMPARISON/SPECTRA/PeakAlignment.cpp b/src/openms/source/COMPARISON/SPECTRA/PeakAlignment.cpp index 3601171a0f9..7c15e2978d4 100644 --- a/src/openms/source/COMPARISON/SPECTRA/PeakAlignment.cpp +++ b/src/openms/source/COMPARISON/SPECTRA/PeakAlignment.cpp @@ -100,11 +100,11 @@ namespace OpenMS //initialize alignment matrix with 0 in (0,0) and a multiple of gapcost in the first row/col matrix(row,col,values) Matrix matrix(spec1.size() + 1, spec2.size() + 1, 0); - for (Size i = 1; i < matrix.rows(); i++) + for (long int i = 1; i < matrix.rows(); i++) { matrix(i, 0) = -gap * i; } - for (Size i = 1; i < matrix.cols(); i++) + for (long int i = 1; i < matrix.cols(); i++) { matrix(0, i) = -gap * i; } @@ -184,11 +184,11 @@ namespace OpenMS //get best overall score and return double best_score(numeric_limits::min()); - for (Size i = 0; i < matrix.cols(); i++) + for (long int i = 0; i < matrix.cols(); i++) { best_score = max(best_score, matrix(matrix.rows() - 1, i)); } - for (Size i = 0; i < matrix.rows(); i++) + for (long int i = 0; i < matrix.rows(); i++) { best_score = max(best_score, matrix(i, matrix.cols() - 1)); } @@ -235,11 +235,11 @@ namespace OpenMS //initialize alignment matrix with 0 in (0,0) and a multiple of gapcost in the first row/col matrix(row,col,values) Matrix matrix(spec1.size() + 1, spec2.size() + 1, 0); - for (Size i = 1; i < matrix.rows(); i++) + for (long int i = 1; i < matrix.rows(); i++) { matrix(i, 0) = -gap * i; } - for (Size i = 1; i < matrix.cols(); i++) + for (long int i = 1; i < matrix.cols(); i++) { matrix(0, i) = -gap * i; } @@ -346,7 +346,7 @@ namespace OpenMS //get matrix coordinates from best alloverscore Size row_index(0), col_index(0); double best_score(numeric_limits::min()); - for (Size i = 0; i < matrix.cols(); i++) + for (long int i = 0; i < matrix.cols(); i++) { if (best_score < matrix(matrix.rows() - 1, i)) { @@ -355,7 +355,7 @@ namespace OpenMS col_index = i; } } - for (Size i = 0; i < matrix.rows(); i++) + for (long int i = 0; i < matrix.rows(); i++) { if (best_score < matrix(i, matrix.cols() - 1)) { diff --git a/src/openms/source/MATH/MISC/NonNegativeLeastSquaresSolver.cpp b/src/openms/source/MATH/MISC/NonNegativeLeastSquaresSolver.cpp index af72bf38877..b5fe54df4ac 100644 --- a/src/openms/source/MATH/MISC/NonNegativeLeastSquaresSolver.cpp +++ b/src/openms/source/MATH/MISC/NonNegativeLeastSquaresSolver.cpp @@ -22,9 +22,9 @@ namespace OpenMS // translate A to array a (column major order) double * a_vec = new double[A.rows() * A.cols()]; size_t idx = 0; - for (size_t col = 0; col < A.cols(); ++col) + for (long int col = 0; col < A.cols(); ++col) { - for (size_t row = 0; row < A.rows(); ++row) + for (long int row = 0; row < A.rows(); ++row) { a_vec[idx] = A(row, col); idx++; @@ -41,7 +41,7 @@ namespace OpenMS // translate b double * b_vec = new double[a_rows]; - for (size_t row = 0; row < b.rows(); ++row) + for (long int row = 0; row < b.rows(); ++row) { b_vec[row] = b(row, 0); } diff --git a/src/pyOpenMS/pxds/Matrix.pxd b/src/pyOpenMS/pxds/Matrix.pxd index 102c0cdce9b..5180d558ddf 100644 --- a/src/pyOpenMS/pxds/Matrix.pxd +++ b/src/pyOpenMS/pxds/Matrix.pxd @@ -17,6 +17,7 @@ cdef extern from "" namespace "OpenMS": size_t rows() nogil size_t cols() nogil size_t size() nogil + ValueT* data() nogil ## bool operator==(Matrix & rhs) except + nogil ## bool operator<(Matrix & rhs) except + nogil # TEMPLATE # void setMatrix(ValueType matrix) except + nogil From 04c33cac0fac60df305540bfe9c0011343cfe566 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Tue, 12 Mar 2024 14:10:41 +0100 Subject: [PATCH 201/242] clarification of input-output data --- .../include/OpenMS/IONMOBILITY/IMDataConverter.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/openms/include/OpenMS/IONMOBILITY/IMDataConverter.h b/src/openms/include/OpenMS/IONMOBILITY/IMDataConverter.h index 7c015380b9f..6b745b28dfb 100644 --- a/src/openms/include/OpenMS/IONMOBILITY/IMDataConverter.h +++ b/src/openms/include/OpenMS/IONMOBILITY/IMDataConverter.h @@ -31,13 +31,13 @@ namespace OpenMS /** @brief Splits a PeakMap into one PeakMap per FAIMS compensation voltage - This only works with a PeakMap that has a FAIMS compensation voltage - associated with each spectrum. + This only works with a PeakMap that has a FAIMS compensation voltage + (obtained via 'spec.getDriftTime()') associated with each spectrum. The spectra from the original PeakMap are moved to new PeakMaps, so the original PeakMap is unusable afterwards. @param exp The PeakMap - @return Several maps, split by CVs + @return Several maps, one for each CV @throws Exception::MissingInformation if @p exp is not FAIMS data */ static std::vector splitByFAIMSCV(PeakMap&& exp); @@ -48,7 +48,9 @@ namespace OpenMS The input @p im_frame must have a floatDataArray where IM values are annotated. If not, an exception is thrown. - To get some coarser binning, choose a smaller @p number_of_bins. The default creates a new bin (=spectrum in the output) for each distinct ion mobility value. + To get some coarser binning, choose a smaller @p number_of_bins. The default of `-1` creates a new bin (=spectrum in the output) for each distinct ion mobility value. + + For the output spectra, the IM value is annotated once in `spec.getDriftTime()` (using the center of the IM bin). There is no metadata array which contains IM values floatDataArray. @param im_frame Concatenated spectrum representing a frame @param number_of_bins In how many bins should the ion mobility frame be sliced? Default(-1) assigns all peaks with identical ion-mobility values to a separate spectrum. @@ -62,7 +64,9 @@ namespace OpenMS @brief Expands all (TimsTOF) ion mobility frames in the PeakMap (i.e. all IM spectra with an IM float data array) into separate spectra. Non-IM spectra are simply copied to the result. To get some coarser custom binning, choose a smaller @p number_of_bins. The default creates a new bin (=spectrum in the output) for each distinct ion mobility value. - For custom bins, the IM range is divided into equally spaced bins and the bin center is the new drift time. + For custom bins, the IM range is divided into equally spaced bins and the bin center is the new drift time. + For the new output spectra, the IM value is annotated once in `spec.getDriftTime()` (using the center of the IM bin). There is no metadata array which + contains IM values floatDataArray. @param in The PeakMap containing IM-frame spectra @param number_of_bins In how many bins should the ion mobility frame be sliced? Default(-1) assigns all peaks with identical ion-mobility values to a separate spectrum. From 939c3389fb384893e7482fe602e841296236a742 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Wed, 13 Mar 2024 15:23:10 +0100 Subject: [PATCH 202/242] rename TOPP tutorial --- doc/code_examples/{Tutorial_Final.cpp => Tutorial_TOPP.cpp} | 4 ++-- doc/doxygen/public/developer_tutorial.doxygen | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename doc/code_examples/{Tutorial_Final.cpp => Tutorial_TOPP.cpp} (98%) diff --git a/doc/code_examples/Tutorial_Final.cpp b/doc/code_examples/Tutorial_TOPP.cpp similarity index 98% rename from doc/code_examples/Tutorial_Final.cpp rename to doc/code_examples/Tutorial_TOPP.cpp index dffdfd00bbe..1393caaf8cb 100644 --- a/doc/code_examples/Tutorial_Final.cpp +++ b/doc/code_examples/Tutorial_TOPP.cpp @@ -1,4 +1,4 @@ -//! [doxygen_snippet_final] +//! [doxygen_snippet_TOPPexample] // Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin // SPDX-License-Identifier: BSD-3-Clause // -------------------------------------------------------------------------- @@ -172,4 +172,4 @@ int main(int argc, const char** argv) /// @endcond -//! [doxygen_snippet_final] +//! [doxygen_snippet_TOPPexample] diff --git a/doc/doxygen/public/developer_tutorial.doxygen b/doc/doxygen/public/developer_tutorial.doxygen index 8fd1791893b..6e4e3daab35 100644 --- a/doc/doxygen/public/developer_tutorial.doxygen +++ b/doc/doxygen/public/developer_tutorial.doxygen @@ -614,7 +614,7 @@ Since different filter criteria may be introduced in the future, the structure w
      Polish your code - add additional functionality -\snippet Tutorial_Final.cpp doxygen_snippet_final +\snippet Tutorial_Final.cpp doxygen_snippet_TOPPexample @subsection tutorial_pull Open a pull request Afterwards you can commit your changes to a new branch “feature/DatabaseFilter” of your %OpenMS clone on github and submit a pull request on your github page. After a short review process by the %OpenMS Team, the tool will be added the %OpenMS Library. From f1b33c557c43b8c46832727d433ea94ed61071e4 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Wed, 13 Mar 2024 15:24:04 +0100 Subject: [PATCH 203/242] compile all tutorials; move free snippets which do not compile to the doxygen directly. --- doc/code_examples/Tutorial_Logger.cpp | 51 ++++++++++++++----- .../Tutorial_MRMTransitionGroup.cpp | 15 ------ doc/code_examples/Tutorial_Template.cpp | 1 + doc/code_examples/Tutorial_Test.cpp | 11 ---- doc/code_examples/executables.cmake | 21 ++++---- .../public/developer_cpp_guide.doxygen | 16 +++--- doc/doxygen/public/developer_tutorial.doxygen | 37 ++++++++++---- 7 files changed, 85 insertions(+), 67 deletions(-) delete mode 100644 doc/code_examples/Tutorial_MRMTransitionGroup.cpp delete mode 100644 doc/code_examples/Tutorial_Test.cpp diff --git a/doc/code_examples/Tutorial_Logger.cpp b/doc/code_examples/Tutorial_Logger.cpp index 078a89c2210..ceca868d9f7 100644 --- a/doc/code_examples/Tutorial_Logger.cpp +++ b/doc/code_examples/Tutorial_Logger.cpp @@ -1,18 +1,45 @@ -//! [doxygen_snippet_Logger] +// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin +// SPDX-License-Identifier: BSD-3-Clause +// +// -------------------------------------------------------------------------- +// $Maintainer: Chris Bielow $ +// $Authors: Chris Bielow $ +// -------------------------------------------------------------------------- + +#include +#include + +using namespace OpenMS; +using namespace std; + +// just a placeholder for the computations you would do in real code +void someFunction() +{ +} + +int main(int argc, const char** argv) +{ + //! [doxygen_snippet_Logger] ProgressLogger progresslogger; - progresslogger.setLogType(log_type_); // set the log type (command line or a file) + progresslogger.setLogType(ProgressLogger::CMD); // output to the terminal (std::cout) + // Note: within a TOPP tool, you can use + // progresslogger.setLogType(TOPPBase::log_type_); + // to set the log-type (automatically set via commandline options) - // set start progress (0) and end (ms_run.size() = the number of spectra) - progresslogger.startProgress(0, ms_run.size(), "Doing some calculation..."); + const int progress_steps = 200; + // set start progress (0) and end (ms_run.size() = the number of spectra) + progresslogger.startProgress(0, progress_steps, "Doing some calculation..."); - for (PeakMap::Iterator it = ms_run.begin(); it != ms_run.end(); ++it) - { - // update progress - progresslogger.setProgress(ms_run.end() - it); - - // do the actual calculations and processing ... - } - progresslogger.endProgress(); + for (int i = 0; i < progress_steps; ++i) // in real code, iterate over some datastructure, e.g. an MSExperiments' spectra + { + // update progress + progresslogger.setProgress(i); + // do the actual calculations and processing ... + someFunction(); + } + progresslogger.endProgress(); //! [doxygen_snippet_Logger] + +} diff --git a/doc/code_examples/Tutorial_MRMTransitionGroup.cpp b/doc/code_examples/Tutorial_MRMTransitionGroup.cpp deleted file mode 100644 index 81b1d7ad755..00000000000 --- a/doc/code_examples/Tutorial_MRMTransitionGroup.cpp +++ /dev/null @@ -1,15 +0,0 @@ -//! [doxygen_snippet_MRMTransitionGroup] - -typedef MRMTransitionGroup TrGroup; - TrGroup createTransitionGroup() - { - TrGroup tr_group; - tr_group.addChromatogram(MSChromatogram(), “transition1”); - tr_group.addTransition(ReactionMonitoringTransition(), “transition1”); - tr_group.addChromatogram(MSChromatogram(), “transition2”); - tr_group.addTransition(ReactionMonitoringTransition(), “transition2”); - tr_group.setTransitionGroupID(“tr_peptideA”); - return tr_group; - } - -//! [doxygen_snippet_MRMTransitionGroup] diff --git a/doc/code_examples/Tutorial_Template.cpp b/doc/code_examples/Tutorial_Template.cpp index 1d91f8e5229..2c713dcc699 100644 --- a/doc/code_examples/Tutorial_Template.cpp +++ b/doc/code_examples/Tutorial_Template.cpp @@ -75,6 +75,7 @@ class TOPPNewTool : // writing output //------------------------------------------------------------- + return ExitCodes::EXECUTION_OK; } }; diff --git a/doc/code_examples/Tutorial_Test.cpp b/doc/code_examples/Tutorial_Test.cpp deleted file mode 100644 index 2a9ff693ab2..00000000000 --- a/doc/code_examples/Tutorial_Test.cpp +++ /dev/null @@ -1,11 +0,0 @@ -//! [doxygen_snippet_Test] - -# DatabaseFilter test: -add_test("TOPP_DatabaseFilter_1" ${TOPP_BIN_PATH}/DatabaseFilter -test -in ${DATA_DIR_TOPP}/DatabaseFilter_1.fasta -accession ${DATA_DIR_TOPP}/DatabaseFilter_1.idXML -out DatabaseFilter_1_out.fasta.tmp) -add_test("TOPP_DatabaseFilter_1_out" ${DIFF} -in1 DatabaseFilter_1_out.fasta.tmp -in2 ${DATA_DIR_TOPP}/DatabaseFilter_1_out.fasta ) -set_tests_properties("TOPP_DatabaseFilter_1_out" PROPERTIES DEPENDS "TOPP_DatabaseFilter_1") -add_test("TOPP_DatabaseFilter_2" ${TOPP_BIN_PATH}/DatabaseFilter -test -in ${DATA_DIR_TOPP}/DatabaseFilter_1.fasta -accession ${DATA_DIR_TOPP}/DatabaseFilter_1.idXML -out DatabaseFilter_2_out.fasta.tmp -method blacklist) -add_test("TOPP_DatabaseFilter_2_out" ${DIFF} -in1 DatabaseFilter_2_out.fasta.tmp -in2 ${DATA_DIR_TOPP}/DatabaseFilter_2_out.fasta ) -set_tests_properties("TOPP_DatabaseFilter_2_out" PROPERTIES DEPENDS "TOPP_DatabaseFilter_2") - -//! [doxygen_snippet_Test] diff --git a/doc/code_examples/executables.cmake b/doc/code_examples/executables.cmake index 0f2e821580e..c2cab8dd13f 100644 --- a/doc/code_examples/executables.cmake +++ b/doc/code_examples/executables.cmake @@ -10,33 +10,34 @@ Tutorial_Clustering Tutorial_DPosition Tutorial_DRange Tutorial_Element -Tutorial_Enzyme Tutorial_EmpiricalFormula +Tutorial_Enzyme Tutorial_FeatureFinder Tutorial_FeatureMap Tutorial_FileIO -Tutorial_FileIO_mzML Tutorial_FileIO_Consumer -# Tutorial final is ONLY used for snippets in the developer tutorial -Tutorial_Final +Tutorial_FileIO_mzML Tutorial_GaussFilter Tutorial_IdentificationClasses Tutorial_Labeled +Tutorial_Logger +Tutorial_MapAlignment +Tutorial_MetaInfo +Tutorial_MorphologicalFilter Tutorial_MSChromatogram Tutorial_MSExperiment Tutorial_MSSpectrum -Tutorial_MapAlignment -Tutorial_MetaInfo Tutorial_Param Tutorial_Precursor Tutorial_RangeManager Tutorial_Residue Tutorial_ResidueModification Tutorial_SavitzkyGolayFilter +Tutorial_Template ## only used in developer_tutorial.doxygen, but still testing here if it compiles Tutorial_TheoreticalSpectrumGenerator -Tutorial_MorphologicalFilter -Tutorial_Unlabeled +Tutorial_TOPP Tutorial_typeAsString +Tutorial_Unlabeled ) # -------------------------------------------------------------------------- @@ -45,9 +46,9 @@ set(EXAMPLES_executables ${EXAMPLES_executables} ${executables_list}) # -------------------------------------------------------------------------- set(executables_list -Tutorial_GUI_Plot1D -Tutorial_GUI_ParamEditor Tutorial_GUI_ListEditor +Tutorial_GUI_ParamEditor +Tutorial_GUI_Plot1D ) # pass source file list to the upper instance diff --git a/doc/doxygen/public/developer_cpp_guide.doxygen b/doc/doxygen/public/developer_cpp_guide.doxygen index 3c7723164f4..e9888e9461d 100644 --- a/doc/doxygen/public/developer_cpp_guide.doxygen +++ b/doc/doxygen/public/developer_cpp_guide.doxygen @@ -71,17 +71,17 @@ OPENMS_LOG_INFO and OPENMS_LOG_DEBUG @endcode which should be used instead of the less descriptive `std::out` and `std::err` streams. -Furthermore, the OpenMS loggers insert console coloring for their output and have a deduplication cache build in, which prevents repetitive outputs by aggregating and counting their occurence. +Furthermore, the %OpenMS loggers insert console coloring for their output and have a deduplication cache build in, which prevents repetitive outputs by aggregating and counting their occurence. +See the OpenMS::LogStream class for details. -If you are writing an %OpenMS tool, you can also use the ProgressLogger to indicate how many percent of the processing has already been performed: +In a similar vein: If you are writing an %OpenMS tool, you can also use the ProgressLogger to indicate how many percent of the processing has already been performed:

      -Example: Tutorial_Logger.cpp +Example: openms/doc/code_examples/data/Tutorial_Logger.cpp
      Logging the Tool Progress \snippet Tutorial_Logger.cpp doxygen_snippet_Logger - -Depending on how the user configures the ProgressLogger, this output is written to the command line or a log file. +Inspect the`Tutorial_Logger.cpp` for a full example. @section cpp_guide_input_output Input/Output @@ -94,8 +94,8 @@ Write many digits to avoid unnecessary rounding errors. In particular, using sta @section cpp_guide_uint `UInt` vs. `Size` -OpenMS uses some custom type definitions for simple arithmetic types, such as `UInt` (shorthand for `unsigned int`). -When working with STL types (especially vectors), assign the return value of a .size() operation to the OpenMS type Size, which is defined as follows: +%OpenMS uses some custom type definitions for simple arithmetic types, such as `UInt` (shorthand for `unsigned int`). +When working with STL types (especially vectors), assign the return value of a .size() operation to the %OpenMS type Size, which is defined as follows: @code{.cpp} // OpenMS/include/CONCEPT/Types.h @@ -158,6 +158,6 @@ namespace OpenMS } @endcode -@note In OpenMS, Qt headers have to be included with the Qt-library prefix. +@note In %OpenMS, Qt headers have to be included with the Qt-library prefix. */ diff --git a/doc/doxygen/public/developer_tutorial.doxygen b/doc/doxygen/public/developer_tutorial.doxygen index 6e4e3daab35..226cc519454 100644 --- a/doc/doxygen/public/developer_tutorial.doxygen +++ b/doc/doxygen/public/developer_tutorial.doxygen @@ -373,11 +373,21 @@ Retrieve precursor information @subsection tutorial_library_kernelclasses_mrm MRMTransitionGroup The targeted analysis of SRM or DIA (SWATH-MS) type of data requires a set of targeted assays as well as raw data chromatograms. The MRMTransitionGroup class allows users to map these two types of information and store them together with identified features conveniently in a single object.

      -Example: Tutorial_MRMTransitionGroup -
      Create an empty MRMTransitionGroup with two dummy transitions -\snippet Tutorial_MRMTransitionGroup.cpp doxygen_snippet_MRMTransitionGroup +@code +using TrGroup = MRMTransitionGroup; +TrGroup createTransitionGroup() +{ + TrGroup tr_group; + tr_group.addChromatogram(MSChromatogram(), “transition1”); + tr_group.addTransition(ReactionMonitoringTransition(), “transition1”); + tr_group.addChromatogram(MSChromatogram(), “transition2”); + tr_group.addTransition(ReactionMonitoringTransition(), “transition2”); + tr_group.setTransitionGroupID(“tr_peptideA”); + return tr_group; +} +@endcode Note how the identifiers of the chromatograms and the assay information (ReactionMonitoringTransition) are matched so that downstream algorithms can utilize the meta-information stored in the assays for data analysis. @@ -590,14 +600,19 @@ Write the output \snippet Tutorial_Final.cpp doxygen_snippet_output @subsection tutorial_test Adding TOPP tests -Testing your tools is essential and required to promote your experimental util to an official TOPP tool. It is not mandatory to provide a test for a util but appreciated. -For this test a .fasta and a compatible .idXML file have to be added to /src/tests/topp/. Further the test procedure has to be added to CMakeLists.txt in the same folder. -

      -Example: Tutorial_Test.cpp -
      -Add tests - -\snippet Tutorial_Test.cpp doxygen_snippet_Test +Testing your tools is essential and all official TOPP tools need to be tested. +Our particular test requires a .fasta and a compatible .idXML file. We add those to `/src/tests/topp/`. +Furthermore, the actual calls to the TOPP tool using our test data, are added to CMakeLists.txt in the same folder, e.g.: + +@code +# DatabaseFilter test: +add_test("TOPP_DatabaseFilter_1" ${TOPP_BIN_PATH}/DatabaseFilter -test -in ${DATA_DIR_TOPP}/DatabaseFilter_1.fasta -accession ${DATA_DIR_TOPP}/DatabaseFilter_1.idXML -out DatabaseFilter_1_out.fasta.tmp) +add_test("TOPP_DatabaseFilter_1_out" ${DIFF} -in1 DatabaseFilter_1_out.fasta.tmp -in2 ${DATA_DIR_TOPP}/DatabaseFilter_1_out.fasta ) +set_tests_properties("TOPP_DatabaseFilter_1_out" PROPERTIES DEPENDS "TOPP_DatabaseFilter_1") +add_test("TOPP_DatabaseFilter_2" ${TOPP_BIN_PATH}/DatabaseFilter -test -in ${DATA_DIR_TOPP}/DatabaseFilter_1.fasta -accession ${DATA_DIR_TOPP}/DatabaseFilter_1.idXML -out DatabaseFilter_2_out.fasta.tmp -method blacklist) +add_test("TOPP_DatabaseFilter_2_out" ${DIFF} -in1 DatabaseFilter_2_out.fasta.tmp -in2 ${DATA_DIR_TOPP}/DatabaseFilter_2_out.fasta ) +set_tests_properties("TOPP_DatabaseFilter_2_out" PROPERTIES DEPENDS "TOPP_DatabaseFilter_2") +@endcode These tests run the program with the given parameters and then call a diff tool to compare the generated output to the expected output. From a7375953c89e0b12499d30e1ba8994cc1366bf12 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Wed, 13 Mar 2024 16:21:15 +0100 Subject: [PATCH 204/242] modernize OpenMS types to derive from C++11 types instead of using the build system to match types --- src/openms/configh.cmake | 90 +------------------- src/openms/include/OpenMS/CONCEPT/Types.h | 18 ++-- src/openms/include/OpenMS/SYSTEM/StopWatch.h | 2 +- src/openms/include/OpenMS/config.h.in | 14 +-- 4 files changed, 11 insertions(+), 113 deletions(-) diff --git a/src/openms/configh.cmake b/src/openms/configh.cmake index 38643801a50..ced2bc2a20e 100755 --- a/src/openms/configh.cmake +++ b/src/openms/configh.cmake @@ -28,7 +28,7 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # -------------------------------------------------------------------------- -# $Maintainer: Stephan Aiche, Chris Bielow $ +# $Maintainer: Chris Bielow $ # $Authors: Chris Bielow, Stephan Aiche $ # -------------------------------------------------------------------------- @@ -63,94 +63,6 @@ else() set(CF_OPENMS_HASDOXYGENDOT 0) endif() -include(CheckTypeSize) ## Check sizeof a type -CHECK_TYPE_SIZE("unsigned char" SIZE_UCHAR) -CHECK_TYPE_SIZE("unsigned short" SIZE_USHORT) -CHECK_TYPE_SIZE("unsigned int" SIZE_UINT) -CHECK_TYPE_SIZE("unsigned long" SIZE_ULONG) -CHECK_TYPE_SIZE("unsigned long long" SIZE_ULONGLONG) -CHECK_TYPE_SIZE("short" SIZE_SHORT) -CHECK_TYPE_SIZE("int" SIZE_INT) -CHECK_TYPE_SIZE("long" SIZE_LONG) -CHECK_TYPE_SIZE("long long" SIZE_LONGLONG) - -CHECK_TYPE_SIZE("int32_t" SIZE_INT32) -if (HAVE_SIZE_INT32) - set(CF_OPENMS_INT32_TYPE int32_t) -else() - ## search for another Int32 type - if (SIZE_INT MATCHES "4") - set(CF_OPENMS_INT32_TYPE int) - elseif (SIZE_SHORT MATCHES "4") - set(CF_OPENMS_INT32_TYPE short) - elseif (SIZE_LONG MATCHES "4") - set(CF_OPENMS_INT32_TYPE long) - else() - Message(FATAL_ERROR "Cannot find signed 32bit integer type. Please contact the developers!") - endif() -endif() - -CHECK_TYPE_SIZE("int64_t" SIZE_INT64) -if (HAVE_SIZE_INT64) - set(CF_OPENMS_INT64_TYPE int64_t) -else() - ## search for another Int64 type - if (SIZE_INT MATCHES "8") - set(CF_OPENMS_INT64_TYPE int) - elseif (SIZE_LONG MATCHES "8") - set(CF_OPENMS_INT64_TYPE long) - elseif (SIZE_LONGLONG MATCHES "8") - set(CF_OPENMS_INT64_TYPE "long long") - else() - Message(FATAL_ERROR "Cannot find signed 64bit integer type. Please contact the developers!") - endif() -endif() - -CHECK_TYPE_SIZE("uint8_t" SIZE_UINT8) -if (HAVE_SIZE_UINT8) - set(CF_OPENMS_BYTE_TYPE uint8_t) -else() - ## search for another uint8 type - if (SIZE_UCHAR MATCHES "1") - set(CF_OPENMS_BYTE_TYPE "unsigned char") - elseif (SIZE_USHORT MATCHES "1") - set(CF_OPENMS_BYTE_TYPE "unsigned short") - else() - Message(FATAL_ERROR "Cannot find unsigned 8bit integer (byte) type. Please contact the developers!") - endif() -endif() - - -CHECK_TYPE_SIZE("uint32_t" SIZE_UINT32) -if (HAVE_SIZE_UINT32) - set(CF_OPENMS_UINT32_TYPE uint32_t) -else() - ## search for another UInt32 type - if (SIZE_UINT MATCHES "4") - set(CF_OPENMS_UINT32_TYPE "unsigned int") - elseif (SIZE_USHORT MATCHES "4") - set(CF_OPENMS_UINT32_TYPE "unsigned short") - elseif (SIZE_ULONG MATCHES "4") - set(CF_OPENMS_UINT32_TYPE "unsigned long") - else() - Message(FATAL_ERROR "Cannot find unsigned 32bit integer type. Please contact the developers!") - endif() -endif() - -CHECK_TYPE_SIZE("uint64_t" SIZE_UINT64) -if (HAVE_SIZE_UINT64) - set(CF_OPENMS_UINT64_TYPE uint64_t) -else() - ## search for another uint64 type - if (SIZE_ULONG MATCHES "8") - set(CF_OPENMS_UINT64_TYPE "unsigned long") - elseif (SIZE_ULONGLONG MATCHES "8") - set(CF_OPENMS_UINT64_TYPE "unsigned long long") - else() - Message(FATAL_ERROR "Cannot find uint64 type. Please contact the developers!") - endif() -endif() - #------------------------------------------------------------------------------ ## Check if various system headers exist include(CheckIncludeFileCXX) diff --git a/src/openms/include/OpenMS/CONCEPT/Types.h b/src/openms/include/OpenMS/CONCEPT/Types.h index 6bff6fe075e..1dca3483a09 100644 --- a/src/openms/include/OpenMS/CONCEPT/Types.h +++ b/src/openms/include/OpenMS/CONCEPT/Types.h @@ -14,11 +14,7 @@ #include // for size_t & ptrdiff_t #include -// If possible use the ISO C99-compliant header stdint.h -// to define the portable integer types. -#ifdef OPENMS_HAS_STDINT_H -#include -#endif +#include // since C++11 namespace OpenMS { @@ -27,28 +23,28 @@ namespace OpenMS @ingroup Concept */ - typedef OPENMS_INT32_TYPE Int32; + typedef int32_t Int32; /** @brief Unsigned integer type (32bit) @ingroup Concept */ - typedef OPENMS_UINT32_TYPE UInt32; + typedef uint32_t UInt32; /** @brief Signed integer type (64bit) @ingroup Concept */ - typedef OPENMS_INT64_TYPE Int64; + typedef int64_t Int64; /** @brief Unsigned integer type (64bit) @ingroup Concept */ - typedef OPENMS_UINT64_TYPE UInt64; + typedef uint64_t UInt64; /** @brief Time type @@ -82,7 +78,7 @@ namespace OpenMS @ingroup Concept */ - typedef OPENMS_BYTE_TYPE Byte; + typedef uint8_t Byte; /** @brief A unique object ID (as unsigned 64bit type). @@ -91,7 +87,7 @@ namespace OpenMS @ingroup Concept */ - typedef OPENMS_UINT64_TYPE UID; + typedef uint64_t UID; /** @brief Size type e.g. used as variable which can hold result of size() diff --git a/src/openms/include/OpenMS/SYSTEM/StopWatch.h b/src/openms/include/OpenMS/SYSTEM/StopWatch.h index 74cf07c91b2..76393276c69 100644 --- a/src/openms/include/OpenMS/SYSTEM/StopWatch.h +++ b/src/openms/include/OpenMS/SYSTEM/StopWatch.h @@ -187,7 +187,7 @@ namespace OpenMS private: #ifdef OPENMS_WINDOWSPLATFORM - typedef OPENMS_UINT64_TYPE TimeType; ///< do not use clock_t on Windows, since its not big enough for larger time intervals + typedef UInt64 TimeType; ///< do not use clock_t on Windows, since its not big enough for larger time intervals static const long long SecondsTo100Nano_; ///< 10 million; convert from 100 nanosecond ticks to seconds (factor of 1 billion/100 = 10 million) #else typedef clock_t TimeType; diff --git a/src/openms/include/OpenMS/config.h.in b/src/openms/include/OpenMS/config.h.in index e330b03c71f..4da34830b46 100755 --- a/src/openms/include/OpenMS/config.h.in +++ b/src/openms/include/OpenMS/config.h.in @@ -102,23 +102,13 @@ static constexpr cstr past_last_slash(cstr str) // Define on 64 bit architectures #cmakedefine OPENMS_64BIT_ARCHITECTURE -#define OPENMS_INT32_TYPE @CF_OPENMS_INT32_TYPE@ -#define OPENMS_INT64_TYPE @CF_OPENMS_INT64_TYPE@ -#define OPENMS_BYTE_TYPE @CF_OPENMS_BYTE_TYPE@ -#define OPENMS_UINT32_TYPE @CF_OPENMS_UINT32_TYPE@ -#define OPENMS_UINT64_TYPE @CF_OPENMS_UINT64_TYPE@ -//#define OPENMS_SIZE_T_SIGNED @CF_OPENMS_SIZE_T_SIGNED@ - -// if you ever want to do abs() or floor() on this type in VC then use _abs64() and include (no kidding!) -#define PointerSizeInt @CF_OPENMS_INT64_TYPE@ -#define PointerSizeUInt @CF_OPENMS_UINT64_TYPE@ +#define PointerSizeInt int64_t +#define PointerSizeUInt uint64_t #cmakedefine OPENMS_HAS_UNISTD_H #cmakedefine OPENMS_HAS_PROCESS_H -#cmakedefine OPENMS_HAS_STDINT_H #cmakedefine OPENMS_HAS_TIME_H -#cmakedefine OPENMS_HAS_SYS_TYPES_H #cmakedefine OPENMS_HAS_SYS_TIMES_H #cmakedefine OPENMS_HAS_SYS_TIME_H #cmakedefine OPENMS_HAS_SYS_RESOURCE_H From f67a672243bdd4d4c7a6240877698baaa04b6936 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Wed, 13 Mar 2024 16:22:14 +0100 Subject: [PATCH 205/242] remove check for headers which are not used (sys/types) or must be present anyway (since C++11 has cstdint) --- src/openms/configh.cmake | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/openms/configh.cmake b/src/openms/configh.cmake index ced2bc2a20e..96e07e2221c 100755 --- a/src/openms/configh.cmake +++ b/src/openms/configh.cmake @@ -71,11 +71,9 @@ CHECK_INCLUDE_FILE_CXX("unistd.h" OPENMS_HAS_UNISTD_H) CHECK_INCLUDE_FILE_CXX("process.h" OPENMS_HAS_PROCESS_H) CHECK_INCLUDE_FILE_CXX("time.h" OPENMS_HAS_TIME_H) -CHECK_INCLUDE_FILE_CXX("sys/types.h" OPENMS_HAS_SYS_TYPES_H) CHECK_INCLUDE_FILE_CXX("sys/times.h" OPENMS_HAS_SYS_TIMES_H) CHECK_INCLUDE_FILE_CXX("sys/time.h" OPENMS_HAS_SYS_TIME_H) CHECK_INCLUDE_FILE_CXX("sys/resource.h" OPENMS_HAS_SYS_RESOURCE_H) -CHECK_INCLUDE_FILE_CXX("stdint.h" OPENMS_HAS_STDINT_H) #------------------------------------------------------------------------------ # check if certain c++ functions exist From adb5e6b608ce7f49f420aa4f0a0741fb0609e31e Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Wed, 13 Mar 2024 22:37:05 +0100 Subject: [PATCH 206/242] fix normal test --- src/pyOpenMS/addons/MatrixDouble.pyx | 38 ++++++------------------- src/pyOpenMS/tests/unittests/test000.py | 2 ++ 2 files changed, 10 insertions(+), 30 deletions(-) diff --git a/src/pyOpenMS/addons/MatrixDouble.pyx b/src/pyOpenMS/addons/MatrixDouble.pyx index 6a43cc3ac4d..b07de66fbd2 100644 --- a/src/pyOpenMS/addons/MatrixDouble.pyx +++ b/src/pyOpenMS/addons/MatrixDouble.pyx @@ -1,30 +1,19 @@ from Matrix cimport * - +cimport numpy as np # continue with extra code if needed def get_matrix_as_view(self): - """Cython signature: numpy_matrix get_matrix() + """Cython signature: numpy_matrix get_matrix_as_view() """ cdef _Matrix[double] * mat_ = self.inst.get() cdef unsigned int rows = mat_.rows() cdef unsigned int cols = mat_.cols() - cdef unsigned int n = rows * cols - cdef np.ndarray[double, ndim=2] data - data = np.zeros( (rows,cols), dtype=np.float64) - - cdef libcpp_vector[double] * vec_ptr = mat_ - cdef double * raw_ptr = address(deref(vec_ptr)[0]) - - ## # We use a memory view to get the data from the raw data - ## # See https://cython.readthedocs.io/en/latest/src/userguide/memoryviews.html - ## # See https://stackoverflow.com/questions/43021574/cast-c-array-into-numpy-array-cython-typed-memoryview-in-cython-code - cdef double[:] vec_view = raw_ptr # cast to memoryview, refer to the underlying buffer without copy - xarr = np.asarray(vec_view) # numpy array refer to the underlying buffer without copy - xarr = xarr.reshape(rows, cols) - return xarr.transpose() + cdef double* data = mat_.data() + # Create a NumPy array from the buffer, specifying not to copy the data. + return np.array( data, copy=False).reshape(rows, cols) def get_matrix(self): @@ -32,23 +21,12 @@ from Matrix cimport * """ cdef _Matrix[double] * mat_ = self.inst.get() - cdef unsigned int rows = mat_.rows() cdef unsigned int cols = mat_.cols() - cdef unsigned int n = rows * cols - cdef np.ndarray[double, ndim=2] data - data = np.zeros( (rows,cols), dtype=np.float64) - - cdef libcpp_vector[double] * vec_ptr = mat_ - cdef double * raw_ptr = address(deref(vec_ptr)[0]) + cdef double* data = mat_.data() + # Create a NumPy array from the buffer, specifying not to copy the data. + return np.array( data, copy=True).reshape(rows, cols) - ## # We use a memory view to get the data from the raw data - ## # See https://cython.readthedocs.io/en/latest/src/userguide/memoryviews.html - ## # See https://stackoverflow.com/questions/43021574/cast-c-array-into-numpy-array-cython-typed-memoryview-in-cython-code - cdef double[:] vec_view = raw_ptr # cast to memoryview, refer to the underlying buffer without copy - xarr = np.asarray(vec_view) # numpy array refer to the underlying buffer without copy - xarr = xarr.reshape(rows, cols) - return xarr.transpose().copy() # def set_matrix(self, np.ndarray[double, ndim=2, mode="c"] data not None): # """Cython signature: numpy_matrix set_matrix() diff --git a/src/pyOpenMS/tests/unittests/test000.py b/src/pyOpenMS/tests/unittests/test000.py index 7f6f1d4e44c..199f998f554 100644 --- a/src/pyOpenMS/tests/unittests/test000.py +++ b/src/pyOpenMS/tests/unittests/test000.py @@ -3666,7 +3666,9 @@ def testMatrixDouble(): m.setValue(3, 5, 8.0) assert m.getValue(3, 5) == 8.0 + print(m) mat = m.get_matrix_as_view() + print(mat) assert mat[3, 5] == 8.0 mat = m.get_matrix() From 8e06fab1ca8cf289c306e5783a5955d433a65874 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Thu, 14 Mar 2024 09:24:23 +0100 Subject: [PATCH 207/242] why? --- src/pyOpenMS/pxds/Matrix.pxd | 2 +- src/pyOpenMS/tests/unittests/test000.py | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/pyOpenMS/pxds/Matrix.pxd b/src/pyOpenMS/pxds/Matrix.pxd index 5180d558ddf..ee4afc73629 100644 --- a/src/pyOpenMS/pxds/Matrix.pxd +++ b/src/pyOpenMS/pxds/Matrix.pxd @@ -17,7 +17,7 @@ cdef extern from "" namespace "OpenMS": size_t rows() nogil size_t cols() nogil size_t size() nogil - ValueT* data() nogil + ValueT* data() nogil # wrap-ignore ## bool operator==(Matrix & rhs) except + nogil ## bool operator<(Matrix & rhs) except + nogil # TEMPLATE # void setMatrix(ValueType matrix) except + nogil diff --git a/src/pyOpenMS/tests/unittests/test000.py b/src/pyOpenMS/tests/unittests/test000.py index 199f998f554..037e711c238 100644 --- a/src/pyOpenMS/tests/unittests/test000.py +++ b/src/pyOpenMS/tests/unittests/test000.py @@ -3659,21 +3659,21 @@ def testMatrixDouble(): assert sum(sum(matrix_view)) == (N-1)*(N+2)*5 - # Column = 3 / Row = 5 + # Column = 2 / Row = 3 ## Now change a value: - assert m.getValue(3, 5) == 5.0 - m.setValue(3, 5, 8.0) - assert m.getValue(3, 5) == 8.0 + assert m.getValue(2, 3) == 5.0 + m.setValue(2, 3, 8.0) + assert m.getValue(2, 3) == 8.0 print(m) mat = m.get_matrix_as_view() print(mat) - assert mat[3, 5] == 8.0 + assert mat[2, 3] == 8.0 mat = m.get_matrix() - assert m.getValue(3, 5) == 8.0 - assert mat[3, 5] == 8.0 + assert m.getValue(2, 3) == 8.0 + assert mat[2, 3] == 8.0 # Whatever we change here gets changed in the raw data as well matrix_view = m.get_matrix_as_view() @@ -3687,7 +3687,7 @@ def testMatrixDouble(): mat[3, 6] = 9.0 m.set_matrix(mat) - assert m.getValue(3, 5) == 8.0 + assert m.getValue(2, 3) == 8.0 assert m.getValue(3, 6) == 9.0 From f6aafe958d42ab23cd0775e95fb6f61d75d9c29a Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Thu, 14 Mar 2024 09:56:15 +0100 Subject: [PATCH 208/242] 1,2 --- src/pyOpenMS/tests/unittests/test000.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/pyOpenMS/tests/unittests/test000.py b/src/pyOpenMS/tests/unittests/test000.py index 037e711c238..8fb92c67f6c 100644 --- a/src/pyOpenMS/tests/unittests/test000.py +++ b/src/pyOpenMS/tests/unittests/test000.py @@ -3659,21 +3659,21 @@ def testMatrixDouble(): assert sum(sum(matrix_view)) == (N-1)*(N+2)*5 - # Column = 2 / Row = 3 + # Column = 1 / Row = 2 ## Now change a value: - assert m.getValue(2, 3) == 5.0 - m.setValue(2, 3, 8.0) - assert m.getValue(2, 3) == 8.0 + assert m.getValue(1, 2) == 5.0 + m.setValue(1, 2, 8.0) + assert m.getValue(1, 2) == 8.0 print(m) mat = m.get_matrix_as_view() print(mat) - assert mat[2, 3] == 8.0 + assert mat[1, 2] == 8.0 mat = m.get_matrix() - assert m.getValue(2, 3) == 8.0 - assert mat[2, 3] == 8.0 + assert m.getValue(1, 2) == 8.0 + assert mat[1, 2] == 8.0 # Whatever we change here gets changed in the raw data as well matrix_view = m.get_matrix_as_view() @@ -3687,7 +3687,7 @@ def testMatrixDouble(): mat[3, 6] = 9.0 m.set_matrix(mat) - assert m.getValue(2, 3) == 8.0 + assert m.getValue(1, 2) == 8.0 assert m.getValue(3, 6) == 9.0 From 146953c367184d50c1dc1f40b355ea95ca87119c Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Fri, 15 Mar 2024 00:57:37 +0100 Subject: [PATCH 209/242] test --- src/pyOpenMS/addons/MatrixDouble.pyx | 41 ++++++++++++++++++++++--- src/pyOpenMS/tests/unittests/test000.py | 14 +++++++++ 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/src/pyOpenMS/addons/MatrixDouble.pyx b/src/pyOpenMS/addons/MatrixDouble.pyx index b07de66fbd2..47bc287fb67 100644 --- a/src/pyOpenMS/addons/MatrixDouble.pyx +++ b/src/pyOpenMS/addons/MatrixDouble.pyx @@ -1,11 +1,44 @@ from Matrix cimport * cimport numpy as np +from numpy.lib.stride_tricks import as_strided # continue with extra code if needed - def get_matrix_as_view(self): """Cython signature: numpy_matrix get_matrix_as_view() """ + cdef _Matrix[double] * mat_ = self.inst.get() + + cdef unsigned int rows = mat_.rows() + cdef unsigned int cols = mat_.cols() + cdef double* data = mat_.data() + cdef double[:,:] mem_view = data + dtype = 'double' + cdef int itemsize = np.dtype(dtype).itemsize + cdef int row_stride = 1 + cdef int col_stride = 1 + + return as_strided(np.asarray(mem_view, dtype=dtype, order="C"), strides=[row_stride*itemsize, col_stride*itemsize]) + + def get_matrix(self): + """Cython signature: numpy_matrix get_matrix() + """ + cdef _Matrix[double] * mat_ = self.inst.get() + + cdef unsigned int rows = mat_.rows() + cdef unsigned int cols = mat_.cols() + cdef double* data = mat_.data() + cdef double[:,:] mem_view = data + dtype = 'double' + cdef int itemsize = np.dtype(dtype).itemsize + cdef int row_stride = 1 + cdef int col_stride = 1 + + return np.copy(as_strided(np.asarray(mem_view, dtype=dtype, order="C"), strides=[row_stride*itemsize, col_stride*itemsize])) + + + def get_matrix_as_view2(self): + """Cython signature: numpy_matrix get_matrix_as_view() + """ cdef _Matrix[double] * mat_ = self.inst.get() @@ -13,10 +46,10 @@ cimport numpy as np cdef unsigned int cols = mat_.cols() cdef double* data = mat_.data() # Create a NumPy array from the buffer, specifying not to copy the data. - return np.array( data, copy=False).reshape(rows, cols) + return np.array( data, order='C', copy=False).reshape(rows, cols) - def get_matrix(self): + def get_matrix2(self): """Cython signature: numpy_matrix get_matrix() """ @@ -25,7 +58,7 @@ cimport numpy as np cdef unsigned int cols = mat_.cols() cdef double* data = mat_.data() # Create a NumPy array from the buffer, specifying not to copy the data. - return np.array( data, copy=True).reshape(rows, cols) + return np.array( data, order='C', copy=True).reshape(rows, cols) # def set_matrix(self, np.ndarray[double, ndim=2, mode="c"] data not None): diff --git a/src/pyOpenMS/tests/unittests/test000.py b/src/pyOpenMS/tests/unittests/test000.py index 8fb92c67f6c..9f03d134fba 100644 --- a/src/pyOpenMS/tests/unittests/test000.py +++ b/src/pyOpenMS/tests/unittests/test000.py @@ -3631,6 +3631,20 @@ def testMatrixDouble(): MapAlignmentAlgorithmIdentification.__init__ """ + m = pyopenms.MatrixDouble(3, 2, 0.0) + for i in range(3): + for j in range(2): + m.setValue(i, j, i * 10.0 + j) + print(m) + + mv = m.get_matrix_as_view() + print(mv) + + mc = m.get_matrix() + print(mc) + + mat = m.get_matrix_as_view() + N = 90 m = pyopenms.MatrixDouble(N-1, N+2, 5.0) From 47d9374a9afe66433f45ad965480fdab54ea60a6 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Fri, 15 Mar 2024 08:28:03 +0100 Subject: [PATCH 210/242] set order in reshape --- src/pyOpenMS/addons/MatrixDouble.pyx | 69 +++++++--------------------- 1 file changed, 17 insertions(+), 52 deletions(-) diff --git a/src/pyOpenMS/addons/MatrixDouble.pyx b/src/pyOpenMS/addons/MatrixDouble.pyx index 47bc287fb67..11095845f29 100644 --- a/src/pyOpenMS/addons/MatrixDouble.pyx +++ b/src/pyOpenMS/addons/MatrixDouble.pyx @@ -1,42 +1,11 @@ from Matrix cimport * cimport numpy as np -from numpy.lib.stride_tricks import as_strided + # continue with extra code if needed - def get_matrix_as_view(self): - """Cython signature: numpy_matrix get_matrix_as_view() - """ - cdef _Matrix[double] * mat_ = self.inst.get() - - cdef unsigned int rows = mat_.rows() - cdef unsigned int cols = mat_.cols() - cdef double* data = mat_.data() - cdef double[:,:] mem_view = data - dtype = 'double' - cdef int itemsize = np.dtype(dtype).itemsize - cdef int row_stride = 1 - cdef int col_stride = 1 - - return as_strided(np.asarray(mem_view, dtype=dtype, order="C"), strides=[row_stride*itemsize, col_stride*itemsize]) - - def get_matrix(self): - """Cython signature: numpy_matrix get_matrix() - """ - cdef _Matrix[double] * mat_ = self.inst.get() - - cdef unsigned int rows = mat_.rows() - cdef unsigned int cols = mat_.cols() - cdef double* data = mat_.data() - cdef double[:,:] mem_view = data - dtype = 'double' - cdef int itemsize = np.dtype(dtype).itemsize - cdef int row_stride = 1 - cdef int col_stride = 1 - - return np.copy(as_strided(np.asarray(mem_view, dtype=dtype, order="C"), strides=[row_stride*itemsize, col_stride*itemsize])) - def get_matrix_as_view2(self): + def get_matrix_as_view(self): """Cython signature: numpy_matrix get_matrix_as_view() """ @@ -46,10 +15,10 @@ from numpy.lib.stride_tricks import as_strided cdef unsigned int cols = mat_.cols() cdef double* data = mat_.data() # Create a NumPy array from the buffer, specifying not to copy the data. - return np.array( data, order='C', copy=False).reshape(rows, cols) + return np.array( data, order='F', copy=False).reshape(rows, cols, order='F') - def get_matrix2(self): + def get_matrix(self): """Cython signature: numpy_matrix get_matrix() """ @@ -57,25 +26,21 @@ from numpy.lib.stride_tricks import as_strided cdef unsigned int rows = mat_.rows() cdef unsigned int cols = mat_.cols() cdef double* data = mat_.data() - # Create a NumPy array from the buffer, specifying not to copy the data. - return np.array( data, order='C', copy=True).reshape(rows, cols) + return np.array( data, order='F', copy=True).reshape(rows, cols, order='F') + def set_matrix(self, np.ndarray[double, ndim=2, mode="c"] data not None): + """Cython signature: numpy_matrix set_matrix() + """ -# def set_matrix(self, np.ndarray[double, ndim=2, mode="c"] data not None): -# """Cython signature: numpy_matrix set_matrix() -# """ -# -# cdef _Matrix[double] * mat_ = self.inst.get() -# -# cdef unsigned int rows = data.shape[0] -# cdef unsigned int cols = data.shape[1] -# mat_.resize(rows, cols, 0) -# -# cdef int i = 0 -# cdef int j = 0 -# for i in range(int(rows)): -# for j in range(int(cols)): -# mat_.setValue(i,j,data[i][j]) + cdef _Matrix[double] * mat_ = self.inst.get() + cdef unsigned int rows = data.shape[0] + cdef unsigned int cols = data.shape[1] + mat_.resize(rows, cols, 0) + cdef int i = 0 + cdef int j = 0 + for i in range(int(rows)): + for j in range(int(cols)): + mat_.setValue(i,j,data[i][j]) From 02d7a93e4ef07a50a23148cd8820b899eb6c08f4 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Fri, 15 Mar 2024 08:32:25 +0100 Subject: [PATCH 211/242] fix compile errors --- src/pyOpenMS/addons/MatrixDouble.pyx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pyOpenMS/addons/MatrixDouble.pyx b/src/pyOpenMS/addons/MatrixDouble.pyx index 11095845f29..a6314a7343d 100644 --- a/src/pyOpenMS/addons/MatrixDouble.pyx +++ b/src/pyOpenMS/addons/MatrixDouble.pyx @@ -36,7 +36,7 @@ cimport numpy as np cdef unsigned int rows = data.shape[0] cdef unsigned int cols = data.shape[1] - mat_.resize(rows, cols, 0) + mat_.resize(rows, cols) cdef int i = 0 cdef int j = 0 From 48f55af186142ac3a38cfc251b29b96662b4c515 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Fri, 15 Mar 2024 09:37:53 +0100 Subject: [PATCH 212/242] fix --- src/pyOpenMS/addons/MatrixDouble.pyx | 24 ++++++++++++------------ src/pyOpenMS/pxds/Matrix.pxd | 1 + 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/pyOpenMS/addons/MatrixDouble.pyx b/src/pyOpenMS/addons/MatrixDouble.pyx index a6314a7343d..9970f3eeb40 100644 --- a/src/pyOpenMS/addons/MatrixDouble.pyx +++ b/src/pyOpenMS/addons/MatrixDouble.pyx @@ -28,19 +28,19 @@ cimport numpy as np cdef double* data = mat_.data() return np.array( data, order='F', copy=True).reshape(rows, cols, order='F') - def set_matrix(self, np.ndarray[double, ndim=2, mode="c"] data not None): - """Cython signature: numpy_matrix set_matrix() - """ +# def set_matrix(self, np.ndarray[double, ndim=2, mode="c"] data not None): +# """Cython signature: numpy_matrix set_matrix() +# """ - cdef _Matrix[double] * mat_ = self.inst.get() +# cdef _Matrix[double] * mat_ = self.inst.get() - cdef unsigned int rows = data.shape[0] - cdef unsigned int cols = data.shape[1] - mat_.resize(rows, cols) +# cdef unsigned int rows = data.shape[0] +# cdef unsigned int cols = data.shape[1] +# mat_.resize(rows, cols) - cdef int i = 0 - cdef int j = 0 - for i in range(int(rows)): - for j in range(int(cols)): - mat_.setValue(i,j,data[i][j]) +# cdef int i = 0 +# cdef int j = 0 +# for i in range(int(rows)): +# for j in range(int(cols)): +# mat_.setValue(i,j,data[i][j]) diff --git a/src/pyOpenMS/pxds/Matrix.pxd b/src/pyOpenMS/pxds/Matrix.pxd index ee4afc73629..d0057a73c56 100644 --- a/src/pyOpenMS/pxds/Matrix.pxd +++ b/src/pyOpenMS/pxds/Matrix.pxd @@ -17,6 +17,7 @@ cdef extern from "" namespace "OpenMS": size_t rows() nogil size_t cols() nogil size_t size() nogil + #resize(size_t rows, size_t cols) nogil ValueT* data() nogil # wrap-ignore ## bool operator==(Matrix & rhs) except + nogil ## bool operator<(Matrix & rhs) except + nogil From 6b9bbade24aaa3856241d3ba1975add076481e55 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Fri, 15 Mar 2024 14:29:40 +0100 Subject: [PATCH 213/242] silence noisy cmd --- cmake/package_nsis.cmake | 2 -- 1 file changed, 2 deletions(-) diff --git a/cmake/package_nsis.cmake b/cmake/package_nsis.cmake index 0a2cb0bdb8a..878df6ccebb 100644 --- a/cmake/package_nsis.cmake +++ b/cmake/package_nsis.cmake @@ -72,11 +72,9 @@ else() endif() - #### Install System runtime libraries into /bin, so NSIS picks them up; this saves us from shipping a VC-Redist.exe with the installer set(CMAKE_INSTALL_OPENMP_LIBRARIES TRUE) set (CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION ${INSTALL_LIB_DIR}) -message(STATUS "\nInstalling system libs to '${INSTALL_LIB_DIR}'\n") include(InstallRequiredSystemLibraries) From e643bc497ea2aaf47289d7882bba70c0bb05bda1 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Fri, 15 Mar 2024 14:30:17 +0100 Subject: [PATCH 214/242] remove extra argument to tutorial executables when testing --- doc/code_examples/CMakeLists.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/code_examples/CMakeLists.txt b/doc/code_examples/CMakeLists.txt index 1187f17542f..ec885f5912b 100644 --- a/doc/code_examples/CMakeLists.txt +++ b/doc/code_examples/CMakeLists.txt @@ -39,7 +39,7 @@ cmake_minimum_required(VERSION 3.15 FATAL_ERROR) set(EXAMPLES_executables) -# ensure the tutorials got into bin/ +# ensure the tutorials go into bin/ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # get the actual code examples @@ -54,16 +54,18 @@ foreach(i ${EXAMPLES_executables}) # if not GUI and no style tests requested -> add as test if(NOT ENABLE_STYLE_TESTING) add_test(NAME ${i} - COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${i} ${CMAKE_CURRENT_LIST_DIR}) + COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${i}) endif() endforeach(i) +## expect "Tutorial_Template"" to fail, since its a proper TOPP tool invoked without arguments +## i.e. TOPPBase will print a usage() and return an error code +set_tests_properties(Tutorial_Template PROPERTIES WILL_FAIL TRUE) # add collection target add_custom_target(Tutorials_build) add_dependencies(Tutorials_build ${EXAMPLES_executables}) if(WITH_GUI) - # add the GUI tutorials -- no tests foreach(i ${GUI_EXAMPLES_executables}) add_executable(${i} ${CMAKE_CURRENT_LIST_DIR}/${i}.cpp) From 4062da13c67a9e596a6cc63f2b72a1108ae60521 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Fri, 15 Mar 2024 14:30:49 +0100 Subject: [PATCH 215/242] [DOC] minor fixes to dev tutorial --- doc/doxygen/public/developer_tutorial.doxygen | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/doc/doxygen/public/developer_tutorial.doxygen b/doc/doxygen/public/developer_tutorial.doxygen index 226cc519454..2ae0745708e 100644 --- a/doc/doxygen/public/developer_tutorial.doxygen +++ b/doc/doxygen/public/developer_tutorial.doxygen @@ -7,10 +7,6 @@ //########################### Please read this carefully! ########################### -// Sections: -// - to add new pages you have to add them to: -// - doc/doxygen/public/OpenMS_Tutorial_html.doxygen (html output) - // Conventions: // - Please write a short introduction for each chapter that explains // what classes are described and where these classes can be found (folder) @@ -35,7 +31,7 @@ Mass spectrometry (MS) is an essential analytical technique for high-throughput analysis in proteomics and metabolomics. The development of new separation techniques, precise mass analyzers and experimental protocols is a very active field of research. This leads to more complex experimental setups yielding ever increasing amounts of data. Consequently, analysis of the data is currently often the bottleneck for experimental studies. Although software tools for many data analysis tasks are available today, they are often hard to combine with each other or not flexible enough to allow for rapid prototyping of a new analysis workflow.
      -%OpenMS, a software framework for rapid application and method development in mass spectrometry has been designed to be portable, easy-to-use, and robust while offering a rich functionality ranging from basic data structures to sophisticated algorithms for data analysis (https://www.nature.com/nmeth/journal/v13/n9/abs/nmeth.3959.html).
      +%OpenMS, a software framework for rapid application and method development in mass spectrometry has been designed to be portable, easy-to-use, and robust while offering a rich functionality ranging from basic data structures to sophisticated algorithms for data analysis (for OpenMS 3: https://www.nature.com/articles/s41592-024-02197-7 ; and for OpenMS 2: https://www.nature.com/nmeth/journal/v13/n9/abs/nmeth.3959.html).
      Ease of use: %OpenMS follows the object-oriented programming paradigm, which aims at mapping real-world entities to comprehensible data structures and interfaces. %OpenMS enforces @ref developer_coding_conventions that ensure consistent names of classes, methods and member variables which increases the usability as a software library. Another important feature of a software framework is documentation. We decided to use doxygen to generate the class documentation from the source code, which ensures consistency of code and documentation. The documentation is generated in HTML format making it easy to read with a web browser.
      @@ -182,7 +178,7 @@ The extensible %OpenMS library implements common mass spectrometric data process - fast, KD-tree based linking (Tool FeatureLinkerUnlabeledKD) - QT based clustering and linking (Tool FeatureLinkerUnlabeledQT) - Protein inference: - - WIP (currently via third-party tool FIDO and Wrapper FidoAdapter) + - Tool Epiphany - Protein Quantification: - Tool ProteinQuantifier - Targeted data extraction: @@ -216,7 +212,7 @@ The extensible %OpenMS library implements common mass spectrometric data process - General: - Mass decomposition algorithms - Isotope pattern generators - - Quality control (Tools QCCalculator, QCExtractor) metrics and file format (QcML) + - Quality control (Tools QualityControl) metrics and file format (mzQC and its predecessor QcML)
      @@ -342,6 +338,8 @@ The base class of the two-dimensional data points is Peak2D. It provides the sam
      For information on d-dimensional data points see the appendix. +@note All subsequent code snippets are taken from fully self-contained compilation units in `openms/doc/code_examples`, which can be build as executables using the `Tutorials_build` target. + @subsection tutorial_library_kernelclasses_spectra Spectra The most important container for raw/profile data and centroided peaks is MSSpectrum. The elements of a MSSpectrum are peaks (Peak1D). In fact it is so common that it has its own typedef PeakSpectrum. MSSpectrum is derived from SpectrumSettings, a container for the metadata of a spectrum (e.g. precursor information). Here, only MS data handling is explained, SpectrumSettings is described in subsection meta data of a spectrum. In the following example (Tutorial_MSSpectrum.cpp) program, a MSSpectrum is filled with peaks, sorted according to mass-to-charge ratio and a selection of peak positions is displayed as One-dimensional data points:

      From 90ed27c0ef3d4c986f7139c5992b154e79f28773 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Fri, 15 Mar 2024 14:31:01 +0100 Subject: [PATCH 216/242] fix failing tutorials --- doc/code_examples/Tutorial_FileIO_Consumer.cpp | 2 +- doc/code_examples/Tutorial_MSExperiment.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/code_examples/Tutorial_FileIO_Consumer.cpp b/doc/code_examples/Tutorial_FileIO_Consumer.cpp index a1a66dbd663..acf5db32de6 100644 --- a/doc/code_examples/Tutorial_FileIO_Consumer.cpp +++ b/doc/code_examples/Tutorial_FileIO_Consumer.cpp @@ -36,7 +36,7 @@ class TICWritingConsumer : public MSDataWritingConsumer int main(int argc, const char** argv) { - auto file_mzXML = OPENMS_DOC_PATH + String("/code_examples/data/Tutorial_FileIO.mzXML"); + auto file_mzXML = OPENMS_DOC_PATH + String("/code_examples/data/Tutorial_FileIO_indexed.mzML"); // Create the consumer, set output file name, transform TICWritingConsumer consumer("Tutorial_FileIO_output.mzML"); diff --git a/doc/code_examples/Tutorial_MSExperiment.cpp b/doc/code_examples/Tutorial_MSExperiment.cpp index b5e5d661460..e59c5f7b428 100644 --- a/doc/code_examples/Tutorial_MSExperiment.cpp +++ b/doc/code_examples/Tutorial_MSExperiment.cpp @@ -18,7 +18,7 @@ int main() // create a peak map containing 4 dummy spectra and peaks MSExperiment exp; - + // The following examples creates a MSExperiment containing four MSSpectrum instances. for (Size i = 0; i < 4; ++i) { @@ -62,7 +62,7 @@ int main() // Store the spectra to a mzML file with: FileHandler fh; auto tmp_filename = File::getTemporaryFile(); - fh.storeExperiment(tmp_filename, exp); + fh.storeExperiment(tmp_filename, exp, {FileTypes::MZML}); // And load it with fh.loadExperiment(tmp_filename, exp); From f3afaebdd87489e01e7d241c814ed720184b7bb5 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Fri, 15 Mar 2024 14:35:11 +0100 Subject: [PATCH 217/242] [CMAKE] more vebosity to see if C++ tutorials are build --- doc/CMakeLists.txt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 1c2bec2419c..f652e12dd9f 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -377,10 +377,15 @@ if(ENABLE_DOCS) #------------------------------------------------------------------------------ # Examples / Tutorials #------------------------------------------------------------------------------ - option(BUILD_EXAMPLES "Compile OpenMS code examples" ON) + option(BUILD_EXAMPLES "Compile OpenMS code examples (C++ tutorials)" ON) + message(STATUS "Build C++ tutorials: ${BUILD_EXAMPLES} (-DBUILD_EXAMPLES=ON/OFF);") if(BUILD_EXAMPLES AND "${PACKAGE_TYPE}" STREQUAL "none") add_subdirectory(code_examples) - endif(BUILD_EXAMPLES AND "${PACKAGE_TYPE}" STREQUAL "none") + message(STATUS " --> Tutorials in '${PROJECT_SOURCE_DIR}/code_examples' will be build!") + else() + message(STATUS " --> Tutorials in '${PROJECT_SOURCE_DIR}/code_examples' will NOT be build! (since PACKAGE_TYPE=${PACKAGE_TYPE}, but must be 'none')") + endif() + else() message(STATUS "Documentation is not built (-D ENABLE_DOCS=Off).") From 0c19ad3bb4145e480511c013dbe4bd3b1202ec02 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Fri, 15 Mar 2024 16:31:05 +0100 Subject: [PATCH 218/242] why --- .../include/OpenMS/DATASTRUCTURES/Matrix.h | 24 ++++++++++++++- src/pyOpenMS/addons/MatrixDouble.pyx | 29 ++++++++++++++++--- src/pyOpenMS/pxds/Matrix.pxd | 3 ++ 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/src/openms/include/OpenMS/DATASTRUCTURES/Matrix.h b/src/openms/include/OpenMS/DATASTRUCTURES/Matrix.h index 3c95fdd5fb0..81d034c0ec7 100644 --- a/src/openms/include/OpenMS/DATASTRUCTURES/Matrix.h +++ b/src/openms/include/OpenMS/DATASTRUCTURES/Matrix.h @@ -35,8 +35,9 @@ namespace OpenMS * @brief Eigen matrix type. */ using EigenMatrixType = Eigen::Matrix; - using EigenMatrixType::resize; using EigenMatrixType::fill; + using EigenMatrixType::innerStride; + using EigenMatrixType::outerStride; // Default constructor. Creates the "null" matrix. Matrix() = default; @@ -95,6 +96,27 @@ namespace OpenMS this->operator()(i, j) = value; } + // apparently needed for cython + void resize(size_t rows, size_t cols) + { + EigenMatrixType::resize(rows, cols); + } + + int innerStride() const + { + return EigenMatrixType::innerStride(); + } + + int outerStride() const + { + return EigenMatrixType::outerStride(); + } + + bool rowMajor() const + { + return EigenMatrixType::IsRowMajor; + } + /** * @brief Sets the matrix values using a 2D array. * diff --git a/src/pyOpenMS/addons/MatrixDouble.pyx b/src/pyOpenMS/addons/MatrixDouble.pyx index 9970f3eeb40..478aa7c3e0e 100644 --- a/src/pyOpenMS/addons/MatrixDouble.pyx +++ b/src/pyOpenMS/addons/MatrixDouble.pyx @@ -1,5 +1,6 @@ from Matrix cimport * cimport numpy as np +from numpy.lib.stride_tricks import as_strided # continue with extra code if needed @@ -10,12 +11,21 @@ cimport numpy as np """ cdef _Matrix[double] * mat_ = self.inst.get() - cdef unsigned int rows = mat_.rows() cdef unsigned int cols = mat_.cols() cdef double* data = mat_.data() - # Create a NumPy array from the buffer, specifying not to copy the data. - return np.array( data, order='F', copy=False).reshape(rows, cols, order='F') + cdef double[:,:] mem_view = data + dtype = 'double' + cdef int itemsize = np.dtype(dtype).itemsize + cdef unsigned int row_stride, col_stride + if mat_.rowMajor(): + row_stride = mat_.outerStride() if mat_.outerStride() > 0 else cols + col_stride = mat_.innerStride() if mat_.innerStride() > 0 else 1 + else: + row_stride = mat_.innerStride() if mat_.innerStride() > 0 else 1 + col_stride = mat_.outerStride() if mat_.outerStride() > 0 else rows + + return np.lib.stride_tricks.as_strided(np.asarray(mem_view, dtype=dtype, order="F"), strides=[row_stride*itemsize, col_stride*itemsize]) def get_matrix(self): @@ -26,7 +36,18 @@ cimport numpy as np cdef unsigned int rows = mat_.rows() cdef unsigned int cols = mat_.cols() cdef double* data = mat_.data() - return np.array( data, order='F', copy=True).reshape(rows, cols, order='F') + cdef double[:,:] mem_view = data + dtype = 'double' + cdef int itemsize = np.dtype(dtype).itemsize + cdef unsigned int row_stride, col_stride + if mat_.rowMajor(): + row_stride = mat_.outerStride() if mat_.outerStride() > 0 else cols + col_stride = mat_.innerStride() if mat_.innerStride() > 0 else 1 + else: + row_stride = mat_.innerStride() if mat_.innerStride() > 0 else 1 + col_stride = mat_.outerStride() if mat_.outerStride() > 0 else rows + + return np.copy(np.lib.stride_tricks.as_strided(np.asarray(mem_view, dtype=dtype, order="F"), strides=[row_stride*itemsize, col_stride*itemsize])) # def set_matrix(self, np.ndarray[double, ndim=2, mode="c"] data not None): # """Cython signature: numpy_matrix set_matrix() diff --git a/src/pyOpenMS/pxds/Matrix.pxd b/src/pyOpenMS/pxds/Matrix.pxd index d0057a73c56..eaa188a2eb1 100644 --- a/src/pyOpenMS/pxds/Matrix.pxd +++ b/src/pyOpenMS/pxds/Matrix.pxd @@ -17,6 +17,9 @@ cdef extern from "" namespace "OpenMS": size_t rows() nogil size_t cols() nogil size_t size() nogil + int innerStride() nogil # wrap-ignore + int outerStride() nogil # wrap-ignore + bool rowMajor() nogil # wrap-ignore #resize(size_t rows, size_t cols) nogil ValueT* data() nogil # wrap-ignore ## bool operator==(Matrix & rhs) except + nogil From f8da39233b63fa89cc76803ac14627533c97bfc0 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Fri, 15 Mar 2024 16:41:34 +0100 Subject: [PATCH 219/242] yeeeeeeeeeees --- src/pyOpenMS/addons/MatrixDouble.pyx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/pyOpenMS/addons/MatrixDouble.pyx b/src/pyOpenMS/addons/MatrixDouble.pyx index 478aa7c3e0e..f9c5fe922e0 100644 --- a/src/pyOpenMS/addons/MatrixDouble.pyx +++ b/src/pyOpenMS/addons/MatrixDouble.pyx @@ -18,14 +18,17 @@ from numpy.lib.stride_tricks import as_strided dtype = 'double' cdef int itemsize = np.dtype(dtype).itemsize cdef unsigned int row_stride, col_stride + o = 'F' if mat_.rowMajor(): row_stride = mat_.outerStride() if mat_.outerStride() > 0 else cols col_stride = mat_.innerStride() if mat_.innerStride() > 0 else 1 + o = 'F' else: row_stride = mat_.innerStride() if mat_.innerStride() > 0 else 1 col_stride = mat_.outerStride() if mat_.outerStride() > 0 else rows + o = 'C' - return np.lib.stride_tricks.as_strided(np.asarray(mem_view, dtype=dtype, order="F"), strides=[row_stride*itemsize, col_stride*itemsize]) + return np.lib.stride_tricks.as_strided(np.asarray(mem_view, dtype=dtype, order=o), strides=[row_stride*itemsize, col_stride*itemsize]) def get_matrix(self): @@ -40,14 +43,18 @@ from numpy.lib.stride_tricks import as_strided dtype = 'double' cdef int itemsize = np.dtype(dtype).itemsize cdef unsigned int row_stride, col_stride + o = 'F' + if mat_.rowMajor(): row_stride = mat_.outerStride() if mat_.outerStride() > 0 else cols col_stride = mat_.innerStride() if mat_.innerStride() > 0 else 1 + o = 'F' else: row_stride = mat_.innerStride() if mat_.innerStride() > 0 else 1 col_stride = mat_.outerStride() if mat_.outerStride() > 0 else rows + o = 'C' - return np.copy(np.lib.stride_tricks.as_strided(np.asarray(mem_view, dtype=dtype, order="F"), strides=[row_stride*itemsize, col_stride*itemsize])) + return np.copy(np.lib.stride_tricks.as_strided(np.asarray(mem_view, dtype=dtype, order=o), strides=[row_stride*itemsize, col_stride*itemsize])) # def set_matrix(self, np.ndarray[double, ndim=2, mode="c"] data not None): # """Cython signature: numpy_matrix set_matrix() From aa31df00305394ae19c4c98f32086201464a5889 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Fri, 15 Mar 2024 17:05:00 +0100 Subject: [PATCH 220/242] added back set_matrix --- src/pyOpenMS/addons/MatrixDouble.pyx | 24 ++++++++++++------------ src/pyOpenMS/pxds/Matrix.pxd | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/pyOpenMS/addons/MatrixDouble.pyx b/src/pyOpenMS/addons/MatrixDouble.pyx index f9c5fe922e0..abddf6d7eec 100644 --- a/src/pyOpenMS/addons/MatrixDouble.pyx +++ b/src/pyOpenMS/addons/MatrixDouble.pyx @@ -56,19 +56,19 @@ from numpy.lib.stride_tricks import as_strided return np.copy(np.lib.stride_tricks.as_strided(np.asarray(mem_view, dtype=dtype, order=o), strides=[row_stride*itemsize, col_stride*itemsize])) -# def set_matrix(self, np.ndarray[double, ndim=2, mode="c"] data not None): -# """Cython signature: numpy_matrix set_matrix() -# """ + def set_matrix(self, np.ndarray[double, ndim=2] data not None): + """Cython signature: numpy_matrix set_matrix() + """ -# cdef _Matrix[double] * mat_ = self.inst.get() + cdef _Matrix[double] * mat_ = self.inst.get() -# cdef unsigned int rows = data.shape[0] -# cdef unsigned int cols = data.shape[1] -# mat_.resize(rows, cols) + cdef unsigned int rows = data.shape[0] + cdef unsigned int cols = data.shape[1] + mat_.resize(rows, cols) -# cdef int i = 0 -# cdef int j = 0 -# for i in range(int(rows)): -# for j in range(int(cols)): -# mat_.setValue(i,j,data[i][j]) + cdef int i = 0 + cdef int j = 0 + for i in range(int(rows)): + for j in range(int(cols)): + mat_.setValue(i, j, data[i][j]) diff --git a/src/pyOpenMS/pxds/Matrix.pxd b/src/pyOpenMS/pxds/Matrix.pxd index eaa188a2eb1..b289b87eff5 100644 --- a/src/pyOpenMS/pxds/Matrix.pxd +++ b/src/pyOpenMS/pxds/Matrix.pxd @@ -20,7 +20,7 @@ cdef extern from "" namespace "OpenMS": int innerStride() nogil # wrap-ignore int outerStride() nogil # wrap-ignore bool rowMajor() nogil # wrap-ignore - #resize(size_t rows, size_t cols) nogil + void resize(size_t rows, size_t cols) nogil ValueT* data() nogil # wrap-ignore ## bool operator==(Matrix & rhs) except + nogil ## bool operator<(Matrix & rhs) except + nogil From a905b2e4cce600176649abf4018a4c6c4b11fcd3 Mon Sep 17 00:00:00 2001 From: julianuspfeuffer Date: Sat, 16 Mar 2024 10:41:32 +0100 Subject: [PATCH 221/242] docs and refactor --- src/pyOpenMS/addons/MatrixDouble.pyx | 36 +++++++++++----------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/src/pyOpenMS/addons/MatrixDouble.pyx b/src/pyOpenMS/addons/MatrixDouble.pyx index abddf6d7eec..534160b8b9b 100644 --- a/src/pyOpenMS/addons/MatrixDouble.pyx +++ b/src/pyOpenMS/addons/MatrixDouble.pyx @@ -7,7 +7,13 @@ from numpy.lib.stride_tricks import as_strided def get_matrix_as_view(self): - """Cython signature: numpy_matrix get_matrix_as_view() + """get_matrix(self) -> np.ndarray[double, ndim=2] + + Returns a view on the underlying Matrix as a 2D numpy ndarray. + .. caution:: + Future changes to the Matrix will affect the ndarray and vice versa. + Make sure that the Matrix does not go out of scope before the last use + of your ndarray. """ cdef _Matrix[double] * mat_ = self.inst.get() @@ -32,32 +38,18 @@ from numpy.lib.stride_tricks import as_strided def get_matrix(self): - """Cython signature: numpy_matrix get_matrix() + """get_matrix(self) -> np.ndarray[double, ndim=2] + + Returns a copy of the underlying Matrix as a 2D numpy ndarray. """ - cdef _Matrix[double] * mat_ = self.inst.get() - cdef unsigned int rows = mat_.rows() - cdef unsigned int cols = mat_.cols() - cdef double* data = mat_.data() - cdef double[:,:] mem_view = data - dtype = 'double' - cdef int itemsize = np.dtype(dtype).itemsize - cdef unsigned int row_stride, col_stride - o = 'F' - - if mat_.rowMajor(): - row_stride = mat_.outerStride() if mat_.outerStride() > 0 else cols - col_stride = mat_.innerStride() if mat_.innerStride() > 0 else 1 - o = 'F' - else: - row_stride = mat_.innerStride() if mat_.innerStride() > 0 else 1 - col_stride = mat_.outerStride() if mat_.outerStride() > 0 else rows - o = 'C' + return np.copy(self.get_matrix_as_view()) - return np.copy(np.lib.stride_tricks.as_strided(np.asarray(mem_view, dtype=dtype, order=o), strides=[row_stride*itemsize, col_stride*itemsize])) def set_matrix(self, np.ndarray[double, ndim=2] data not None): - """Cython signature: numpy_matrix set_matrix() + """set_matrix(self, data: np.ndarray[double, ndim=2]) -> None + + Copies the values from the numpy ndarray into the Matrix. """ cdef _Matrix[double] * mat_ = self.inst.get() From 65f728755083b7d7a1039fb0e374dded64cdb16d Mon Sep 17 00:00:00 2001 From: Julianus Pfeuffer Date: Sat, 16 Mar 2024 14:41:34 +0100 Subject: [PATCH 222/242] [Fix] GHA MacOS python brew problem --- .github/workflows/openms_ci_matrix_full.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 7142c6f28ab..286c90ed1e1 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -266,12 +266,12 @@ jobs: fi if [[ "${{ matrix.os }}" == macos-* ]]; then - brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache +## Needed for Qt. Install before to overwrite the default softlinks on the GH runners +brew install python3 --force --overwrite brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache brew install libsvm xerces-c boost eigen sqlite coinutils cbc cgl clp qt@5 echo "cmake_prefix=$(brew --prefix qt@5)/lib/cmake;$(brew --prefix qt@5)" >> $GITHUB_OUTPUT echo "Qt5_DIR=$(brew --prefix qt@5)/lib/cmake/Qt5" >> $GITHUB_ENV if [[ "${{ steps.set-vars.outputs.pkg_type }}" != "none" ]]; then - brew install python3 --force --overwrite brew install --quiet doxygen ghostscript graphviz fi fi From cc1e042190feebd1c94e22781d76c1487455930a Mon Sep 17 00:00:00 2001 From: Julianus Pfeuffer Date: Sat, 16 Mar 2024 15:01:52 +0100 Subject: [PATCH 223/242] indent --- .github/workflows/openms_ci_matrix_full.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/openms_ci_matrix_full.yml b/.github/workflows/openms_ci_matrix_full.yml index 286c90ed1e1..9da9679bf0c 100644 --- a/.github/workflows/openms_ci_matrix_full.yml +++ b/.github/workflows/openms_ci_matrix_full.yml @@ -265,9 +265,10 @@ jobs: fi fi - if [[ "${{ matrix.os }}" == macos-* ]]; then -## Needed for Qt. Install before to overwrite the default softlinks on the GH runners -brew install python3 --force --overwrite brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache + if [[ "${{ matrix.os }}" == macos-* ]]; then + ## Needed for Qt. Install before to overwrite the default softlinks on the GH runners + brew install python3 --force --overwrite + brew install --quiet ccache autoconf automake libtool ninja && brew link --overwrite ccache brew install libsvm xerces-c boost eigen sqlite coinutils cbc cgl clp qt@5 echo "cmake_prefix=$(brew --prefix qt@5)/lib/cmake;$(brew --prefix qt@5)" >> $GITHUB_OUTPUT echo "Qt5_DIR=$(brew --prefix qt@5)/lib/cmake/Qt5" >> $GITHUB_ENV From 9643475fbf3023376f34e2b9b46b0733ec3c6bc5 Mon Sep 17 00:00:00 2001 From: Samuel Wein Date: Mon, 18 Mar 2024 01:26:24 +0100 Subject: [PATCH 224/242] Update CMakeLists.txt Fix typos --- doc/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index f652e12dd9f..ca645b28a67 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -323,7 +323,7 @@ if(ENABLE_DOCS) #------------------------------------------------------------------------------ # add virtual dependency of doc_minimal on TOPP # this is not necessary but defers the generation of doc_minimal to a later - # stage to avoid confusion if doc_minimal is build first + # stage to avoid confusion if doc_minimal is built first add_dependencies(doc_minimal TOPP) if (DOXYGEN_DOT_FOUND OR DOXYGEN_DOT_EXECUTABLE) @@ -381,9 +381,9 @@ if(ENABLE_DOCS) message(STATUS "Build C++ tutorials: ${BUILD_EXAMPLES} (-DBUILD_EXAMPLES=ON/OFF);") if(BUILD_EXAMPLES AND "${PACKAGE_TYPE}" STREQUAL "none") add_subdirectory(code_examples) - message(STATUS " --> Tutorials in '${PROJECT_SOURCE_DIR}/code_examples' will be build!") + message(STATUS " --> Tutorials in '${PROJECT_SOURCE_DIR}/code_examples' will be built!") else() - message(STATUS " --> Tutorials in '${PROJECT_SOURCE_DIR}/code_examples' will NOT be build! (since PACKAGE_TYPE=${PACKAGE_TYPE}, but must be 'none')") + message(STATUS " --> Tutorials in '${PROJECT_SOURCE_DIR}/code_examples' will NOT be built! (since PACKAGE_TYPE=${PACKAGE_TYPE}, but must be 'none')") endif() From a929d59f6455c936ff19b07245aa1465648aca28 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Mon, 18 Mar 2024 09:14:21 +0100 Subject: [PATCH 225/242] do not require external arguments to Tutorial data path --- doc/code_examples/Tutorial_Precursor.cpp | 14 ++++++-------- doc/code_examples/Tutorial_SavitzkyGolayFilter.cpp | 9 ++++----- doc/code_examples/Tutorial_Unlabeled.cpp | 5 ++--- 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/doc/code_examples/Tutorial_Precursor.cpp b/doc/code_examples/Tutorial_Precursor.cpp index 3444c9f4d44..67581a25e5c 100644 --- a/doc/code_examples/Tutorial_Precursor.cpp +++ b/doc/code_examples/Tutorial_Precursor.cpp @@ -3,10 +3,12 @@ //! [doxygen_snippet_Precursor] +#include +#include #include #include -#include -#include +#include // exotic header for path to tutorial data + #include using namespace OpenMS; @@ -14,16 +16,12 @@ using namespace std; int main(int argc, const char** argv) { - - if (argc < 2) return 1; - - // the path to the data should be given on the command line - String tutorial_data_path(argv[1]); + auto file_mzML = OPENMS_DOC_PATH + String("/code_examples/data/Tutorial_GaussFilter.mzML"); MSExperiment spectra; // load mzML from code examples folder - FileHandler().loadExperiment(tutorial_data_path + "/data/Tutorial_GaussFilter.mzML", spectra); + FileHandler().loadExperiment(file_mzML, spectra); // iterate over map and output MS2 precursor information for (auto s_it = spectra.begin(); s_it != spectra.end(); ++s_it) diff --git a/doc/code_examples/Tutorial_SavitzkyGolayFilter.cpp b/doc/code_examples/Tutorial_SavitzkyGolayFilter.cpp index 9b81a881bd7..ad0d2de8cfa 100644 --- a/doc/code_examples/Tutorial_SavitzkyGolayFilter.cpp +++ b/doc/code_examples/Tutorial_SavitzkyGolayFilter.cpp @@ -2,10 +2,11 @@ // SPDX-License-Identifier: BSD-3-Clause // -#include #include +#include #include #include +#include // exotic header for path to tutorial data #include using namespace OpenMS; @@ -13,14 +14,12 @@ using namespace std; int main(int argc, const char** argv) { - if (argc < 2) return 1; - // the path to the data should be given on the command line - String tutorial_data_path(argv[1]); + auto file_dta = OPENMS_DOC_PATH + String("/code_examples/data/Tutorial_SavitzkyGolayFilter.dta"); // A DTA file always has exactly one Spectrum, so we get that MSSpectrum spectrum; // Load the dta file into the spectrum - FileHandler().loadSpectrum(tutorial_data_path + "/data/Tutorial_SavitzkyGolayFilter.dta", spectrum); + FileHandler().loadSpectrum(file_dta, spectrum); LinearResampler lr; Param param_lr; diff --git a/doc/code_examples/Tutorial_Unlabeled.cpp b/doc/code_examples/Tutorial_Unlabeled.cpp index 199ff5a8ff1..df5f86c650e 100644 --- a/doc/code_examples/Tutorial_Unlabeled.cpp +++ b/doc/code_examples/Tutorial_Unlabeled.cpp @@ -6,15 +6,14 @@ #include #include +#include // exotic header for path to tutorial data using namespace OpenMS; using namespace std; int main(int argc, const char** argv) { - if (argc < 2) return 1; - // the path to the data should be given on the command line - String tutorial_data_path(argv[1]); + auto tutorial_data_path = OPENMS_DOC_PATH + String("/code_examples/"); vector maps; maps.resize(2); From ce24b39b41baa75dc81b8bbac4cc0da44715d9b5 Mon Sep 17 00:00:00 2001 From: Chris Bielow Date: Mon, 18 Mar 2024 10:36:18 +0100 Subject: [PATCH 226/242] fix doxygen warnings --- doc/doxygen/public/developer_tutorial.doxygen | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/doc/doxygen/public/developer_tutorial.doxygen b/doc/doxygen/public/developer_tutorial.doxygen index 2ae0745708e..6864482cfe7 100644 --- a/doc/doxygen/public/developer_tutorial.doxygen +++ b/doc/doxygen/public/developer_tutorial.doxygen @@ -540,35 +540,35 @@ This creates a manual (doxygen) page with the information –help output of the @subsection tutorial_param_def Define tool parameters Define tool parameters Each TOPP tool defines a set of parameters that will be available from the command line, KNIME, and other workflow systems. This is done in the void registerOptionsAndFlags_() method. In our case we want to read a protein database (fasta format), a file containing identification data (idXML format), and an option to switch between keeping (whitelisting) and removing (blacklisting) entries based on the filter result. This is our input. The reduced database forms the output and should be written to a protein database in fasta format. This is easily done by adding following lines to:

      -Example: Tutorial_Final.cpp +Example: Tutorial_TOPP.cpp
      Registration of tool parameters -\snippet Tutorial_Final.cpp doxygen_snippet_Register +\snippet Tutorial_TOPP.cpp doxygen_snippet_Register Functions, classes and references can be checked in the %OpenMS / TOPP documentation (ftp://ftp.mi.fu-berlin.de/pub/OpenMS/release-documentation/html/index.html) @subsection tutorial_param_read Read tool parameters After a tool is executed, the registered parameters are available in the main_ function of the TOPP tool and can be read using the getStringOption_ method. Special methods for integers, lists and floating point parameters exist and are in the TOPPBase documentation but are not needed for this example.

      -Example: Tutorial_Final.cpp +Example: Tutorial_TOPP.cpp
      -\snippet Tutorial_Final.cpp doxygen_snippet_InputParam +\snippet Tutorial_TOPP.cpp doxygen_snippet_InputParam @subsection tutorial_read Read Input Files First the different file formats and data structures for peptide identifications have to be included at the top of the file.

      -Example: Tutorial_Final.cpp +Example: Tutorial_TOPP.cpp
      Add essential includes -\snippet Tutorial_Final.cpp doxygen_snippet_Includes +\snippet Tutorial_TOPP.cpp doxygen_snippet_Includes Read the input files
      -\snippet Tutorial_Final.cpp doxygen_snippet_InputRead +\snippet Tutorial_TOPP.cpp doxygen_snippet_InputRead Note: both peptide_identifications and protein_identifications contain protein accessions. The difference between them is that protein_identifications only contain the inferred set of protein accessions while peptide_identifications contains all protein accessions the peptides map to. We consider only the larger set of protein accessions stored in the peptide identifications. In principle, it would be easy to add another parameter that adds a filter for the inferred accessions stored in protein_identifications. @@ -577,25 +577,25 @@ First, the accessions are extracted from the IdXML file. Here knowledge of the d To store all proteins accessions in the set id_accessions, we write:

      -Example: Tutorial_Final.cpp +Example: Tutorial_TOPP.cpp
      Store protein accessions -\snippet Tutorial_Final.cpp doxygen_snippet_Functionality_1 +\snippet Tutorial_TOPP.cpp doxygen_snippet_Functionality_1 Now that we assembled the set of all protein accessions we are ready to compare them to the fasta_accessions. If they are similar and the method whitelist or they are different and the method blacklist was chosen, the fasta entries are copied to the new fasta database.

      -Example: Tutorial_Final.cpp +Example: Tutorial_TOPP.cpp
      Add method functionality -\snippet Tutorial_Final.cpp doxygen_snippet_Functionality_2 +\snippet Tutorial_TOPP.cpp doxygen_snippet_Functionality_2 @subsection tutorial_write Write Output Files -Example: Tutorial_Final.cpp +Example: Tutorial_TOPP.cpp
      Write the output -\snippet Tutorial_Final.cpp doxygen_snippet_output +\snippet Tutorial_TOPP.cpp doxygen_snippet_output @subsection tutorial_test Adding TOPP tests Testing your tools is essential and all official TOPP tools need to be tested. @@ -623,11 +623,11 @@ This is how a util should look after code polishing: Here, the support for different formats was extended (idXML and MZIdentML). Since different filter criteria may be introduced in the future, the structure was slightly changed with a function for the filtering by ID (filterByProteinIDs_) - in order to allow higher flexibility when adding new a functionality later on.

      -Example: Tutorial_final.cpp +Example: Tutorial_TOPP.cpp
      Polish your code - add additional functionality -\snippet Tutorial_Final.cpp doxygen_snippet_TOPPexample +\snippet Tutorial_TOPP.cpp doxygen_snippet_TOPPexample @subsection tutorial_pull Open a pull request Afterwards you can commit your changes to a new branch “feature/DatabaseFilter” of your %OpenMS clone on github and submit a pull request on your github page. After a short review process by the %OpenMS Team, the tool will be added the %OpenMS Library. From e2798c5c75e650c8e5f3511f944c878180b6a6eb Mon Sep 17 00:00:00 2001 From: Julianus Pfeuffer Date: Mon, 18 Mar 2024 10:56:01 +0100 Subject: [PATCH 227/242] [FIX] Warn use of bitwise '&' with boolean operands (#7400) --- .../include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openswathalgo/include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h b/src/openswathalgo/include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h index dc25df11f27..17d9de7a704 100644 --- a/src/openswathalgo/include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h +++ b/src/openswathalgo/include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h @@ -109,7 +109,7 @@ namespace OpenSwath while (mz_it != mz_end) { - if ( (drift_start <= *im_it) & (drift_end >= *im_it) ) + if ( (drift_start <= *im_it) && (drift_end >= *im_it) ) { mz_arr_out->data.push_back( *mz_it ); intens_arr_out->data.push_back( *int_it ); From 3743a87733f384e01321e4c92e25c0230452a388 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Tue, 6 Feb 2024 11:54:14 +0100 Subject: [PATCH 228/242] removed 2d basemodel --- .../DefaultParamHandlerDocumenter.cpp | 2 - .../FEATUREFINDER/BaseModel_impl.h | 10 +- .../TRANSFORMATIONS/FEATUREFINDER/EmgModel.h | 1 - .../FEATUREFINDER/ProductModel.h | 258 ----------------- .../FEATUREFINDER/sources.cmake | 1 - .../FEATUREFINDER/BaseModel.cpp | 3 - .../FeatureFinderAlgorithmMRM.cpp | 1 - .../FEATUREFINDER/ProductModel.cpp | 12 - .../FEATUREFINDER/sources.cmake | 1 - .../class_tests/openms/executables.cmake | 1 - .../openms/source/BaseModel_test.cpp | 14 +- .../openms/source/ModelDescription_test.cpp | 6 - .../openms/source/ProductModel_test.cpp | 273 ------------------ tools/pychecker_ignore.yaml | 1 - tools/spellcheck/correct_words.txt | 1 - 15 files changed, 9 insertions(+), 576 deletions(-) delete mode 100644 src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ProductModel.h delete mode 100644 src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ProductModel.cpp delete mode 100644 src/tests/class_tests/openms/source/ProductModel_test.cpp diff --git a/doc/doxygen/parameters/DefaultParamHandlerDocumenter.cpp b/doc/doxygen/parameters/DefaultParamHandlerDocumenter.cpp index 705ccee6e37..fc0246d6720 100644 --- a/doc/doxygen/parameters/DefaultParamHandlerDocumenter.cpp +++ b/doc/doxygen/parameters/DefaultParamHandlerDocumenter.cpp @@ -138,7 +138,6 @@ #include #include #include -#include #include #include #include @@ -483,7 +482,6 @@ int main(int argc, char** argv) DOCME2(FeatureFinderAlgorithmPicked, (FeatureFinderAlgorithmPicked())); DOCME2(FeatureFinderAlgorithmMRM, (FeatureFinderAlgorithmMRM())); DOCME2(FeatureFinderAlgorithm, (FeatureFinderAlgorithmMRM())); //FeatureFinderAlgorithm is a base class, get parameters from subclass FeatureFinderAlgorithmMRM - DOCME2(ProductModel, ProductModel<2>()); DOCME2(SignalToNoiseEstimatorMeanIterative, SignalToNoiseEstimatorMeanIterative<>()); DOCME2(SignalToNoiseEstimatorMedian, SignalToNoiseEstimatorMedian<>()); DOCME2(SignalToNoiseEstimator, SignalToNoiseEstimatorMedian<>()); //SignalToNoiseEstimator is a base class, get parameters from subclass SignalToNoiseEstimatorMedian diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel_impl.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel_impl.h index e38a99f59e6..fcf4f9fff47 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel_impl.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel_impl.h @@ -8,6 +8,7 @@ #pragma once +#include #include // include derived classes here @@ -15,22 +16,13 @@ #include #include #include -#include #include namespace OpenMS { - - template <> - OPENMS_DLLAPI void BaseModel<2>::registerChildren() - { - Factory >::registerProduct(ProductModel<2>::getProductName(), &ProductModel<2>::create); - } - template <> OPENMS_DLLAPI void BaseModel<1>::registerChildren() { - Factory >::registerProduct(GaussModel::getProductName(), &GaussModel::create); Factory >::registerProduct(BiGaussModel::getProductName(), &BiGaussModel::create); Factory >::registerProduct(IsotopeModel::getProductName(), &IsotopeModel::create); diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgModel.h index 254d5b82253..8800307c6a9 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgModel.h @@ -6,7 +6,6 @@ // $Authors: $ // -------------------------------------------------------------------------- - #pragma once #include diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ProductModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ProductModel.h deleted file mode 100644 index adf74882507..00000000000 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ProductModel.h +++ /dev/null @@ -1,258 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Timo Sachsenberg $ -// $Authors: $ -// -------------------------------------------------------------------------- - - -#pragma once - -#include -#include -#include -#include -#include - -namespace OpenMS -{ - - /** - @brief Class for product models i.e. models with D independent dimensions - - The predicted intensity is simply the product of the intensities in each dimension - - @htmlinclude OpenMS_ProductModel.parameters - - @ingroup FeatureFinder - */ - template - class ProductModel; - - /// The class template is only implemented for D=2 because we use Peak2D here. - template <> - class OPENMS_DLLAPI ProductModel<2>: - public BaseModel<2> - { -public: - - /// Number of dimensions - enum {D = 2}; - - typedef double IntensityType; - typedef DPosition PositionType; - typedef BaseModel::SamplesType SamplesType; - - /// Default constructor - ProductModel() : - BaseModel(), - distributions_(D, nullptr) - { - this->setName(this->getProductName()); - - //Register model info - for (UInt dim = 0; dim < D; ++dim) - { - String name = Peak2D::shortDimensionName(dim); - this->subsections_.push_back(name); - this->defaults_.setValue(name, "GaussModel", "Name of the model used for this dimension"); - } - - //defaults - this->defaults_.setValue("intensity_scaling", 1.0, "Scaling factor used to adjust the model distribution to the intensities of the data"); - this->defaultsToParam_(); - } - - /// copy constructor - ProductModel(const ProductModel & source) : - BaseModel(source), - distributions_(D, nullptr), - scale_(source.scale_) - { - for (UInt dim = 0; dim < D; ++dim) - { - // clone source model - if (source.distributions_[dim]) - { - ModelDescription<1> desc(source.distributions_[dim]); - setModel(dim, desc.createModel()); - } - } - updateMembers_(); - } - - /// destructor - ~ProductModel() override - { - for (Size dim = 0; dim < D; ++dim) - { - delete distributions_[dim]; - } - } - - /// assignment operator - virtual ProductModel & operator=(const ProductModel & source) - { - if (&source == this) return *this; - - BaseModel::operator=(source); - scale_ = source.scale_; - - for (UInt dim = 0; dim < D; ++dim) - { - if (source.distributions_[dim]) - { - // clone source model - ModelDescription<1> desc(source.distributions_[dim]); - setModel(dim, desc.createModel()); - } - else - { - distributions_[dim] = nullptr; - } - } - updateMembers_(); - - return *this; - } - - /// intensity equals product of intensities in each dimension - IntensityType getIntensity(const PositionType & pos) const override - { - IntensityType intens(scale_); - for (UInt dim = 0; dim < D; ++dim) - { - if (distributions_[dim] == nullptr) - { - throw Exception::BaseException(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, String("ProductModel: model for dimension ") + dim + " not set.", ""); - } - intens *= distributions_[dim]->getIntensity(pos[dim]); - } - return intens; - } - - /// create new ProductModel object (needed by Factory) - static BaseModel * create() - { - return new ProductModel(); - } - - /// Returns the name of the model - static const String getProductName() - { - return String("ProductModel") + D + "D"; - } - - /** @brief set model @p dist for dimension @p dim - - @p dist is supposed to be allocated by new because it will be freed if - ProductModel is destroyed or the model for that dimensions changes. - For that reason no model @p dist should be assigned to multiple ProductModels.
      - ProductModel parameters are set when calling ProductModel::getParameters(). - */ - ProductModel & setModel(UInt dim, BaseModel<1> * dist) - { - OPENMS_PRECONDITION(dim < D, "ProductModel:getModel(Position): index overflow!"); - if (dist == nullptr || dist == distributions_[dim]) - { - return *this; - } - - delete distributions_[dim]; - distributions_[dim] = dist; - - // Update model info - String name = Peak2D::shortDimensionName(dim); - this->param_.removeAll(name + ':'); - this->param_.insert(name + ':', distributions_[dim]->getParameters()); - this->param_.setValue(name, distributions_[dim]->getName()); - - return *this; - } - - BaseModel<1> * getModel(UInt dim) const - { - OPENMS_PRECONDITION(dim < D, "ProductModel:getModel(Position): index overflow!"); - return distributions_[dim]; - } - - /// return the intensity scaling factor - IntensityType getScale() const - { - return scale_; - } - - /// set the intensity scaling factor - void setScale(IntensityType scale) - { - this->setCutOff(this->getCutOff() / scale_); // remove scaling from cutoff - scale_ = scale; - this->param_.setValue("intensity_scaling", scale); - this->setCutOff(this->getCutOff() * scale_); // scale cutoff - } - - /// get reasonable set of samples from the model (i.e. for printing) - void getSamples(SamplesType & cont) const override - { - cont.clear(); - typedef BaseModel<1>::SamplesType Samples1D; - std::vector samples(D); - // get samples for each dimension - for (Size dim = 0; dim < D; ++dim) - { - distributions_[dim]->getSamples(samples[dim]); - } - - BaseModel::PeakType peak; - std::vector i(D, 0); // index vector - - while (i[D - 1] < samples[D - 1].size()) - { - for (UInt dim = 0; dim < D; ++dim) - { - peak.getPosition()[dim] = samples[dim][i[dim]].getPosition()[0]; - } - fillIntensity(peak); - cont.push_back(peak); - - ++i[0]; - for (Size dim = 0; dim < D - 1; ++dim) - { - if (i[dim] >= samples[dim].size()) - { - i[dim] = 0; - ++i[dim + 1]; - } - } - } - return; - } - -protected: - void updateMembers_() override - { - BaseModel::updateMembers_(); - scale_ = (double)(this->param_.getValue("intensity_scaling")); - for (UInt dim = 0; dim < D; ++dim) - { - String name = Peak2D::shortDimensionName(dim); - if (this->param_.exists(name)) - { - delete distributions_[dim]; - distributions_[dim] = Factory >::create(this->param_.getValue(name).toString()); - Param copy = this->param_.copy(name + ":", true); - distributions_[dim]->setParameters(copy); - if (distributions_[dim]->getName().hasSubstring("IsotopeModel")) - { - static_cast(distributions_[dim])->setSamples(static_cast(distributions_[dim])->getFormula()); - } - } - } - } - - std::vector *> distributions_; - IntensityType scale_; - }; -} - diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/sources.cmake b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/sources.cmake index bab30fe67bb..6bd898db691 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/sources.cmake +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/sources.cmake @@ -45,7 +45,6 @@ MultiplexIsotopicPeakPattern.h MultiplexSatelliteCentroided.h MultiplexSatelliteProfile.h PeakWidthEstimator.h -ProductModel.h SeedListGenerator.h TraceFitter.h ) diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BaseModel.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BaseModel.cpp index 415a5797e08..a5702105e8f 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BaseModel.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BaseModel.cpp @@ -11,7 +11,4 @@ namespace OpenMS { - - - } // namespace OpenMS diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.cpp index c3bd3432a56..832c0261952 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.cpp @@ -7,7 +7,6 @@ #include -#include #include #include #include diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ProductModel.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ProductModel.cpp deleted file mode 100644 index 18c9d19bb40..00000000000 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ProductModel.cpp +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Timo Sachsenberg $ -// $Authors: $ -// -------------------------------------------------------------------------- - -namespace OpenMS -{ - -} diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/sources.cmake b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/sources.cmake index ca65263951e..dd7cea6a87b 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/sources.cmake +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/sources.cmake @@ -43,7 +43,6 @@ MultiplexIsotopicPeakPattern.cpp MultiplexSatelliteCentroided.cpp MultiplexSatelliteProfile.cpp PeakWidthEstimator.cpp -ProductModel.cpp SeedListGenerator.cpp TraceFitter.cpp ) diff --git a/src/tests/class_tests/openms/executables.cmake b/src/tests/class_tests/openms/executables.cmake index 3450c27d12d..85729d0acfd 100644 --- a/src/tests/class_tests/openms/executables.cmake +++ b/src/tests/class_tests/openms/executables.cmake @@ -610,7 +610,6 @@ set(transformations_executables_list PeakPickerIterative_test PeakPickerMaxima_test PeakWidthEstimator_test - ProductModel_test SeedListGenerator_test TraceFitter_test ) diff --git a/src/tests/class_tests/openms/source/BaseModel_test.cpp b/src/tests/class_tests/openms/source/BaseModel_test.cpp index 249b43f9ad4..fb3387ac8ae 100644 --- a/src/tests/class_tests/openms/source/BaseModel_test.cpp +++ b/src/tests/class_tests/openms/source/BaseModel_test.cpp @@ -12,6 +12,7 @@ /////////////////////////// #include +#include #include /////////////////////////// @@ -19,11 +20,13 @@ using namespace OpenMS; using std::stringstream; -class TestModel : public BaseModel<2> +START_TEST(BaseModel, "$Id$") + +class TestModel : public BaseModel<1> { public: TestModel() - : BaseModel<2>() + : BaseModel<1>() { setName(getProductName()); @@ -33,7 +36,7 @@ class TestModel : public BaseModel<2> } TestModel(const TestModel& source) - : BaseModel<2>(source) + : BaseModel<1>(source) { updateMembers_(); } @@ -46,7 +49,7 @@ class TestModel : public BaseModel<2> { if (&source == this) return *this; - BaseModel<2>::operator = (source); + BaseModel<1>::operator = (source); updateMembers_(); return *this; @@ -54,7 +57,7 @@ class TestModel : public BaseModel<2> void updateMembers_() override { - BaseModel<2>::updateMembers_(); + BaseModel<1>::updateMembers_(); } IntensityType getIntensity(const PositionType& pos) const override @@ -78,7 +81,6 @@ class TestModel : public BaseModel<2> }; -START_TEST(BaseModel, "$Id$") // default ctor TestModel* ptr = nullptr; diff --git a/src/tests/class_tests/openms/source/ModelDescription_test.cpp b/src/tests/class_tests/openms/source/ModelDescription_test.cpp index d10957ef1eb..e89e260e29d 100644 --- a/src/tests/class_tests/openms/source/ModelDescription_test.cpp +++ b/src/tests/class_tests/openms/source/ModelDescription_test.cpp @@ -37,12 +37,6 @@ START_SECTION((virtual ~ModelDescription())) delete ptr; END_SECTION -START_SECTION(BaseModel* createModel()) - BaseModel<2>* ptr = ModelDescription<2>().createModel(); - BaseModel<2>* baseModel_nullPointer = nullptr; - TEST_EQUAL(ptr, baseModel_nullPointer) // no name is set, should be zero pointer -END_SECTION - START_SECTION( virtual bool operator==(const ModelDescription &rhs) const ) ModelDescription<2> fp1,fp2; TEST_EQUAL(fp1==fp2,true) diff --git a/src/tests/class_tests/openms/source/ProductModel_test.cpp b/src/tests/class_tests/openms/source/ProductModel_test.cpp deleted file mode 100644 index 490f03be66c..00000000000 --- a/src/tests/class_tests/openms/source/ProductModel_test.cpp +++ /dev/null @@ -1,273 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Timo Sachsenberg $ -// $Authors: $ -// -------------------------------------------------------------------------- - -#include -#include - -/////////////////////////// - -#include -#include -#include -#include -#include - - -/////////////////////////// - -START_TEST(ProductModel<2>, "$Id$") - -///////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////// -using namespace OpenMS; -using namespace std; - -typedef ProductModel<2> ProductModel; - -Param p1; -p1.setValue("bounding_box:min",1.0f); -p1.setValue("bounding_box:max",4.0f); -p1.setValue("statistics:mean",3.0f); -p1.setValue("statistics:variance",0.1f); - -Param p2; -p2.setValue("bounding_box:min",5.0f); -p2.setValue("bounding_box:max",6.0f); -p2.setValue("statistics:mean",7.0f); -p2.setValue("statistics:variance",0.3f); - -TOLERANCE_ABSOLUTE(0.0001) - -// default ctor -ProductModel* ptr = nullptr; -ProductModel* nullPointer = nullptr; -START_SECTION((ProductModel())) - ptr = new ProductModel(); - TEST_EQUAL(ptr->getName(), "ProductModel2D") - TEST_NOT_EQUAL(ptr, nullPointer) -END_SECTION - -// destructor -START_SECTION((virtual ~ProductModel())) -delete ptr; -END_SECTION - -START_SECTION( static const String getProductName() ) - ptr = new ProductModel(); - TEST_EQUAL(ptr->getName(), "ProductModel2D") - TEST_NOT_EQUAL(ptr, nullPointer) -END_SECTION - - -// assignment operator -START_SECTION((virtual ProductModel& operator=(const ProductModel &source))) -GaussModel* gm1 = new GaussModel(); -gm1->setParameters(p1); -GaussModel* gm2 = new GaussModel(); -gm2->setParameters(p2); -GaussModel* gm3 = new GaussModel(); -gm3->setParameters(p1); -GaussModel* gm4 = new GaussModel(); -gm4->setParameters(p2); - -ProductModel pm1; -pm1.setModel(0,gm1); -pm1.setModel(1,gm2); - -ProductModel pm2; -pm2 = pm1; - -ProductModel pm3; -pm3.setModel(0,gm3); -pm3.setModel(1,gm4); - -pm1 = ProductModel(); - -TEST_EQUAL(pm2.getParameters(), pm3.getParameters()) -END_SECTION - - -// copy ctor -START_SECTION((ProductModel(const ProductModel& source))) -GaussModel* gm1 = new GaussModel(); -gm1->setParameters(p1); -GaussModel* gm2 = new GaussModel(); -gm2->setParameters(p2); -GaussModel* gm3 = new GaussModel(); -gm3->setParameters(p1); -GaussModel* gm4 = new GaussModel(); -gm4->setParameters(p2); - -ProductModel pm1; -pm1.setModel(0,gm1); -pm1.setModel(1,gm2); -ProductModel pm2(pm1); - -ProductModel pm3; -pm3.setModel(0,gm3); -pm3.setModel(1,gm4); - -pm1 = ProductModel(); -TEST_EQUAL(pm3.getParameters(), pm2.getParameters()) -END_SECTION - -// ModelDescription -START_SECTION((static BaseModel* create())) -GaussModel* gm1 = new GaussModel(); -GaussModel* gm2 = new GaussModel(); -GaussModel* gm3 = new GaussModel(); -gm3->setParameters(p1); -GaussModel* gm4 = new GaussModel(); -gm4->setParameters(p2); - -ProductModel pm1; -pm1.setModel(0,gm1); -pm1.setModel(1,gm2); -pm1.setScale(4.0); -pm1.setCutOff(0.5); -gm1->setParameters(p1); -gm2->setParameters(p2); - -ModelDescription<2> md(&pm1); -ProductModel* pm2 = static_cast< ProductModel* >(md.createModel()); - -ProductModel pm3; -pm3.setModel(0,gm3); -pm3.setModel(1,gm4); -pm3.setScale(4.0); -pm3.setCutOff(0.5); - -pm1 = ProductModel(); - -//remove fitting data and compare -Param tmp1 = pm3.getParameters(); -tmp1.removeAll("RT:bounding_box:"); -tmp1.removeAll("RT:statistics:"); -tmp1.removeAll("MZ:bounding_box:"); -tmp1.removeAll("MZ:statistics:"); -Param tmp2 = pm2->getParameters(); -tmp2.removeAll("RT:bounding_box:"); -tmp2.removeAll("RT:statistics:"); -tmp2.removeAll("MZ:bounding_box:"); -tmp2.removeAll("MZ:statistics:"); -TEST_EQUAL(tmp1, tmp2) - -DPosition<2> pos; -pos[0] = 3.5; -pos[1] = 7.5; -TEST_REAL_SIMILAR(pm3.getIntensity(pos), pm2->getIntensity(pos)) -delete pm2; -END_SECTION - -START_SECTION( IntensityType getIntensity(const PositionType &pos) const ) - - TOLERANCE_ABSOLUTE(0.1) - GaussModel* gm1 = new GaussModel(); - GaussModel* gm2 = new GaussModel(); - gm1->setParameters(p1); - gm2->setParameters(p2); - - ProductModel pm1; - pm1.setModel(0,gm1); - pm1.setModel(1,gm2); - pm1.setScale(10.0); - pm1.setCutOff(0.01); - - DPosition<2> pos; - pos[0] = 2.5; - pos[1] = 5.9; - TEST_REAL_SIMILAR(pm1.getIntensity(pos), 8.52587) - pos[0] = 2.0; - pos[1] = 5.9; - TEST_REAL_SIMILAR(pm1.getIntensity(pos), 0.200509) - pos[0] = 1.8; - pos[1] = 5.9; - TEST_REAL_SIMILAR(pm1.getIntensity(pos), 0.0222171) -END_SECTION - -START_SECTION( void getSamples(SamplesType &cont) const ) -{ - GaussModel* gm1 = new GaussModel(); - gm1->setParameters(p1); - GaussModel* gm2 = new GaussModel(); - gm2->setParameters(p2); - - ProductModel pm1; - pm1.setModel(0,gm1); - pm1.setModel(1,gm2); - - ProductModel pm2(pm1); - - TEST_EQUAL(pm1.getParameters(),pm2.getParameters()); - TEST_EQUAL(pm1.getModel(0)->getParameters(),pm2.getModel(0)->getParameters()); - TEST_EQUAL(pm1.getModel(1)->getParameters(),pm2.getModel(1)->getParameters()); - TEST_EQUAL(pm1.getModel(0)->getName(),pm2.getModel(0)->getName()); - TEST_EQUAL(pm1.getModel(1)->getName(),pm2.getModel(1)->getName()); - - std::vector dpa1; - std::vector dpa2; - pm1.getSamples(dpa1); - pm2.getSamples(dpa2); - - TEST_EQUAL(dpa1.size(),dpa2.size()); - ABORT_IF(dpa1.size()!=dpa2.size()); - for (Size i=0; i *dist) ) - GaussModel* gm1 = new GaussModel(); - gm1->setParameters(p1); - GaussModel* gm2 = new GaussModel(); - gm2->setParameters(p2); - - ProductModel pm1; - pm1.setModel(0,gm1); - pm1.setModel(1,gm2); - - TEST_EQUAL( pm1.getModel(0) == gm1, true) - TEST_EQUAL( pm1.getModel(1) == gm2, true) - -END_SECTION - -START_SECTION( BaseModel<1>* getModel(UInt dim) const ) - GaussModel* gm1 = new GaussModel(); - gm1->setParameters(p1); - GaussModel* gm2 = new GaussModel(); - gm2->setParameters(p2); - - ProductModel pm1; - pm1.setModel(0,gm1); - pm1.setModel(1,gm2); - - TEST_EQUAL( pm1.getModel(0) == gm1, true) - TEST_EQUAL( pm1.getModel(1) == gm2, true) - -END_SECTION - -delete ptr; - -///////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////// -END_TEST diff --git a/tools/pychecker_ignore.yaml b/tools/pychecker_ignore.yaml index 20503fbc12a..766621116f5 100644 --- a/tools/pychecker_ignore.yaml +++ b/tools/pychecker_ignore.yaml @@ -1148,7 +1148,6 @@ PyOpenMSChecker: - OpenMS::LmaGaussModel - OpenMS::FeatureFinderAlgorithm - OpenMS::FeatureFinderDefs::NoSuccessor - - OpenMS::ProductModel< 2 > - OpenMS::LmaGaussFitter1D - OpenMS::MaxLikeliFitter1D - OpenMS::LmaIsotopeFitter1D diff --git a/tools/spellcheck/correct_words.txt b/tools/spellcheck/correct_words.txt index c4b0e3f71b2..dde4dc2c5d6 100644 --- a/tools/spellcheck/correct_words.txt +++ b/tools/spellcheck/correct_words.txt @@ -1737,7 +1737,6 @@ Phenylalanin PlotWidgets Precomputing Proc -ProductModels ProteinAccession ProteinIDRun ProteinIdentifications From b4b7bf5277bf0c1e3e4d02bcb157fbc9e1029a22 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Tue, 6 Feb 2024 12:07:32 +0100 Subject: [PATCH 229/242] remove template --- src/openms/include/OpenMS/KERNEL/DPeak.h | 9 --------- .../TRANSFORMATIONS/FEATUREFINDER/BaseModel.h | 7 +++---- .../FEATUREFINDER/BaseModel_impl.h | 14 +++++++------- .../FEATUREFINDER/BiGaussModel.h | 2 +- .../TRANSFORMATIONS/FEATUREFINDER/EmgModel.h | 2 +- .../FEATUREFINDER/ExtendedIsotopeModel.h | 2 +- .../TRANSFORMATIONS/FEATUREFINDER/GaussModel.h | 2 +- .../FEATUREFINDER/InterpolationModel.h | 12 ++++++------ .../FEATUREFINDER/IsotopeModel.h | 2 +- .../FEATUREFINDER/ModelDescription.h | 6 +++--- .../FEATUREFINDER/BiGaussFitter1D.cpp | 2 +- .../FEATUREFINDER/EmgFitter1D.cpp | 2 +- .../FEATUREFINDER/ExtendedIsotopeFitter1D.cpp | 4 ++-- .../FEATUREFINDER/GaussFitter1D.cpp | 2 +- .../FEATUREFINDER/IsotopeFitter1D.cpp | 4 ++-- src/pyOpenMS/pxds/BiGaussModel.pxd | 2 +- src/pyOpenMS/pxds/EmgModel.pxd | 2 +- src/pyOpenMS/pxds/IsotopeModel.pxd | 2 +- .../openms/source/BaseModel_test.cpp | 18 +++++++----------- .../openms/source/BiGaussModel_test.cpp | 4 ++-- .../openms/source/EmgModel_test.cpp | 4 ++-- .../source/ExtendedIsotopeModel_test.cpp | 4 ++-- .../openms/source/GaussModel_test.cpp | 4 ++-- .../openms/source/IsotopeModel_test.cpp | 4 ++-- .../openms/source/ModelDescription_test.cpp | 6 +++--- 25 files changed, 54 insertions(+), 68 deletions(-) diff --git a/src/openms/include/OpenMS/KERNEL/DPeak.h b/src/openms/include/OpenMS/KERNEL/DPeak.h index 8a599b2b0a7..287b8ff0b4f 100644 --- a/src/openms/include/OpenMS/KERNEL/DPeak.h +++ b/src/openms/include/OpenMS/KERNEL/DPeak.h @@ -13,7 +13,6 @@ namespace OpenMS { - /** @brief Metafunction to choose among Peak1D respectively Peak2D through a template argument. @@ -21,14 +20,6 @@ namespace OpenMS - @c DPeak<1>::Type is @c Peak1D - @c DPeak<2>::Type is @c Peak2D - Example: - @code - template class BaseModel - { - // BaseModel::PeakType is either Peak1D or Peak2D, depending on D - typedef typename DPeak::Type PeakType; - }; - @endcode */ template struct DPeak diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel.h index a56c7170e9b..3aff4ca1b5a 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel.h @@ -15,19 +15,18 @@ namespace OpenMS { /** - @brief Abstract base class for all D-dimensional models. + @brief Abstract base class for 1-dimensional models. Every derived class has to implement the static functions "T* create()" and "const String getProductName()" (see DefaultParamHandler for details) */ - template class BaseModel : public DefaultParamHandler { public: typedef double IntensityType; typedef double CoordinateType; - typedef DPosition PositionType; - typedef typename DPeak::Type PeakType; + typedef DPosition<1> PositionType; + typedef typename DPeak<1>::Type PeakType; typedef std::vector SamplesType; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel_impl.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel_impl.h index fcf4f9fff47..a2061261ba5 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel_impl.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel_impl.h @@ -20,14 +20,14 @@ namespace OpenMS { - template <> - OPENMS_DLLAPI void BaseModel<1>::registerChildren() + + OPENMS_DLLAPI void BaseModel::registerChildren() { - Factory >::registerProduct(GaussModel::getProductName(), &GaussModel::create); - Factory >::registerProduct(BiGaussModel::getProductName(), &BiGaussModel::create); - Factory >::registerProduct(IsotopeModel::getProductName(), &IsotopeModel::create); - Factory >::registerProduct(ExtendedIsotopeModel::getProductName(), &ExtendedIsotopeModel::create); - Factory >::registerProduct(EmgModel::getProductName(), &EmgModel::create); + Factory::registerProduct(GaussModel::getProductName(), &GaussModel::create); + Factory::registerProduct(BiGaussModel::getProductName(), &BiGaussModel::create); + Factory::registerProduct(IsotopeModel::getProductName(), &IsotopeModel::create); + Factory::registerProduct(ExtendedIsotopeModel::getProductName(), &ExtendedIsotopeModel::create); + Factory::registerProduct(EmgModel::getProductName(), &EmgModel::create); return; } diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussModel.h index 849d24ef3c3..98718d4343a 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussModel.h @@ -41,7 +41,7 @@ namespace OpenMS virtual BiGaussModel & operator=(const BiGaussModel & source); /// create new BiGaussModel object (function needed by Factory) - static BaseModel<1> * create() + static BaseModel * create() { return new BiGaussModel(); } diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgModel.h index 8800307c6a9..3d18b7be6fa 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgModel.h @@ -41,7 +41,7 @@ namespace OpenMS EmgModel & operator=(const EmgModel & source); /// create new EmgModel object (needed by Factory) - static BaseModel<1> * create() + static BaseModel * create() { return new EmgModel(); } diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeModel.h index 4ef4696d274..7eccb7fb7e3 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeModel.h @@ -51,7 +51,7 @@ namespace OpenMS UInt getCharge() const; /// create new ExtendedIsotopeModel object (needed by Factory) - static BaseModel<1> * create() + static BaseModel * create() { return new ExtendedIsotopeModel(); } diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussModel.h index 51c869752b5..98a34323d15 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussModel.h @@ -41,7 +41,7 @@ namespace OpenMS virtual GaussModel & operator=(const GaussModel & source); /// create new GaussModel object (needed by Factory) - static BaseModel<1> * create() + static BaseModel * create() { return new GaussModel(); } diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/InterpolationModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/InterpolationModel.h index 51d8e81febe..5906ee2a2f6 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/InterpolationModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/InterpolationModel.h @@ -26,7 +26,7 @@ namespace OpenMS */ class OPENMS_DLLAPI InterpolationModel : - public BaseModel<1> + public BaseModel { public: @@ -38,7 +38,7 @@ namespace OpenMS /// Default constructor InterpolationModel() : - BaseModel<1>(), + BaseModel(), interpolation_() { this->defaults_.setValue("interpolation_step", 0.1, "Sampling rate for the interpolation of the model function "); @@ -48,7 +48,7 @@ namespace OpenMS /// copy constructor InterpolationModel(const InterpolationModel & source) : - BaseModel<1>(source), + BaseModel(source), interpolation_(source.interpolation_), interpolation_step_(source.interpolation_step_), scaling_(source.scaling_) @@ -64,7 +64,7 @@ namespace OpenMS { if (&source == this) return *this; - BaseModel<1>::operator=(source); + BaseModel::operator=(source); interpolation_step_ = source.interpolation_step_; interpolation_ = source.interpolation_; scaling_ = source.scaling_; @@ -116,7 +116,7 @@ namespace OpenMS void getSamples(SamplesType & cont) const override { cont.clear(); - using PeakT = BaseModel<1>::PeakType; + using PeakT = BaseModel::PeakType; PeakT peak; for (Size i = 0; i < interpolation_.getData().size(); ++i) { @@ -162,7 +162,7 @@ namespace OpenMS void updateMembers_() override { - BaseModel<1>::updateMembers_(); + BaseModel::updateMembers_(); interpolation_step_ = this->param_.getValue("interpolation_step"); scaling_ = this->param_.getValue("intensity_scaling"); } diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeModel.h index c759db7766c..909908e77a2 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeModel.h @@ -54,7 +54,7 @@ namespace OpenMS UInt getCharge() const; /// create new IsotopeModel object (needed by Factory) - static BaseModel<1> * create() + static BaseModel * create() { return new IsotopeModel(); } diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ModelDescription.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ModelDescription.h index ca0c04acc78..1bbc6d3511c 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ModelDescription.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ModelDescription.h @@ -43,7 +43,7 @@ namespace OpenMS } /// constructor provided for convenience - ModelDescription(const BaseModel * model) : + ModelDescription(const BaseModel * model) : name_(model->getName()), parameters_(model->getParameters()) { @@ -67,11 +67,11 @@ namespace OpenMS /// creates model from the parameters defined in this class /// returns 0 if no description is set. - BaseModel * createModel() + BaseModel * createModel() { if (name_.empty()) return nullptr; - BaseModel * model = Factory >::create(name_); + BaseModel * model = Factory::create(name_); model->setParameters(parameters_); return model; } diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.cpp index 0a49abb06b6..7d58cb2c63b 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.cpp @@ -69,7 +69,7 @@ namespace OpenMS // build model - model = std::unique_ptr(dynamic_cast(Factory>::create("BiGaussModel"))); + model = std::unique_ptr(dynamic_cast(Factory::create("BiGaussModel"))); model->setInterpolationStep(interpolation_step_); Param tmp; tmp.setValue("bounding_box:min", min_bb); diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.cpp index 1314d3f5488..f29dc9abfd4 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.cpp @@ -181,7 +181,7 @@ namespace OpenMS retention_ = x_init[3]; // build model - model = std::unique_ptr(dynamic_cast(Factory>::create("EmgModel"))); + model = std::unique_ptr(dynamic_cast(Factory::create("EmgModel"))); model->setInterpolationStep(interpolation_step_); Param tmp; diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.cpp index a486bb46e62..8ac6783546c 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.cpp @@ -76,7 +76,7 @@ namespace OpenMS max_bb += stdev; - model = std::unique_ptr(dynamic_cast(Factory>::create("GaussModel"))); + model = std::unique_ptr(dynamic_cast(Factory::create("GaussModel"))); model->setInterpolationStep(interpolation_step_); Param tmp; @@ -88,7 +88,7 @@ namespace OpenMS } else { - model = std::unique_ptr(dynamic_cast(Factory>::create("ExtendedIsotopeModel"))); + model = std::unique_ptr(dynamic_cast(Factory::create("ExtendedIsotopeModel"))); Param iso_param = this->param_.copy("isotope_model:", true); iso_param.removeAll("stdev"); diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.cpp index 34f4a2f7dae..32b513e3988 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.cpp @@ -67,7 +67,7 @@ namespace OpenMS // build model - model = std::unique_ptr(dynamic_cast(Factory>::create("GaussModel"))); + model = std::unique_ptr(dynamic_cast(Factory::create("GaussModel"))); model->setInterpolationStep(interpolation_step_); Param tmp; diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.cpp index d3e1cbc8361..f05f9ef883e 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.cpp @@ -74,7 +74,7 @@ namespace OpenMS // build model if (charge_ == 0) { - model = std::unique_ptr(dynamic_cast(Factory>::create("GaussModel"))); + model = std::unique_ptr(dynamic_cast(Factory::create("GaussModel"))); model->setInterpolationStep(interpolation_step_); Param tmp; @@ -86,7 +86,7 @@ namespace OpenMS } else { - model = std::unique_ptr(dynamic_cast(Factory>::create("IsotopeModel"))); + model = std::unique_ptr(dynamic_cast(Factory::create("IsotopeModel"))); Param iso_param = this->param_.copy("isotope_model:", true); iso_param.removeAll("stdev"); diff --git a/src/pyOpenMS/pxds/BiGaussModel.pxd b/src/pyOpenMS/pxds/BiGaussModel.pxd index a644b7c707c..c05adeed46f 100644 --- a/src/pyOpenMS/pxds/BiGaussModel.pxd +++ b/src/pyOpenMS/pxds/BiGaussModel.pxd @@ -10,6 +10,6 @@ cdef extern from "" namespa void setOffset(double offset) except + nogil void setSamples() except + nogil double getCenter() except + nogil - # BaseModel[ 1 ] * create() except + nogil + # BaseModel * create() except + nogil String getProductName() except + nogil # wrap-doc:Name of the model (needed by Factory) diff --git a/src/pyOpenMS/pxds/EmgModel.pxd b/src/pyOpenMS/pxds/EmgModel.pxd index 362217dfd80..e33a9ea8e8a 100644 --- a/src/pyOpenMS/pxds/EmgModel.pxd +++ b/src/pyOpenMS/pxds/EmgModel.pxd @@ -8,7 +8,7 @@ cdef extern from "" namespace " # InterpolationModel EmgModel() except + nogil # wrap-doc:Exponentially modified gaussian distribution model for elution profiles EmgModel(EmgModel &) except + nogil - # BaseModel[ 1 ] * create() except + nogil + # BaseModel * create() except + nogil String getProductName() except + nogil # wrap-doc:Name of the model # inherited from parent class - no second definition necessary! diff --git a/src/pyOpenMS/pxds/IsotopeModel.pxd b/src/pyOpenMS/pxds/IsotopeModel.pxd index 81cf69eaa2f..fc707c5aba0 100644 --- a/src/pyOpenMS/pxds/IsotopeModel.pxd +++ b/src/pyOpenMS/pxds/IsotopeModel.pxd @@ -43,7 +43,7 @@ cdef extern from "" namespa # # Useful to determine the number of isotopes that the model contains and their position - # BaseModel[ 1 ] * create() except + nogil + # BaseModel * create() except + nogil String getProductName() except + nogil # wrap-doc:Name of the model (needed by Factory) cdef extern from "" namespace "OpenMS::IsotopeModel": diff --git a/src/tests/class_tests/openms/source/BaseModel_test.cpp b/src/tests/class_tests/openms/source/BaseModel_test.cpp index fb3387ac8ae..d93f3610c2d 100644 --- a/src/tests/class_tests/openms/source/BaseModel_test.cpp +++ b/src/tests/class_tests/openms/source/BaseModel_test.cpp @@ -22,34 +22,30 @@ using std::stringstream; START_TEST(BaseModel, "$Id$") -class TestModel : public BaseModel<1> +class TestModel : public BaseModel { public: TestModel() - : BaseModel<1>() + : BaseModel() { setName(getProductName()); - check_defaults_ = false; - defaultsToParam_(); } TestModel(const TestModel& source) - : BaseModel<1>(source) + : BaseModel(source) { updateMembers_(); } - ~TestModel() override - { - } + ~TestModel() override {} virtual TestModel& operator = (const TestModel& source) { if (&source == this) return *this; - BaseModel<1>::operator = (source); + BaseModel::operator = (source); updateMembers_(); return *this; @@ -57,12 +53,12 @@ class TestModel : public BaseModel<1> void updateMembers_() override { - BaseModel<1>::updateMembers_(); + BaseModel::updateMembers_(); } IntensityType getIntensity(const PositionType& pos) const override { - return pos[0]+pos[1]; + return pos[0] + pos[1]; } bool isContained(const PositionType& pos) const override diff --git a/src/tests/class_tests/openms/source/BiGaussModel_test.cpp b/src/tests/class_tests/openms/source/BiGaussModel_test.cpp index dd498938dd0..60b81a10bcc 100644 --- a/src/tests/class_tests/openms/source/BiGaussModel_test.cpp +++ b/src/tests/class_tests/openms/source/BiGaussModel_test.cpp @@ -44,8 +44,8 @@ START_SECTION((static const String getProductName())) TEST_EQUAL(BiGaussModel().getName(),"BiGaussModel") END_SECTION -START_SECTION( static BaseModel<1>* create() ) - BaseModel<1>* ptr = BiGaussModel::create(); +START_SECTION( static BaseModel* create() ) + BaseModel* ptr = BiGaussModel::create(); TEST_EQUAL(ptr->getName(), "BiGaussModel") TEST_NOT_EQUAL(ptr, nullPointer) delete ptr; diff --git a/src/tests/class_tests/openms/source/EmgModel_test.cpp b/src/tests/class_tests/openms/source/EmgModel_test.cpp index 6c079d02143..01164102851 100644 --- a/src/tests/class_tests/openms/source/EmgModel_test.cpp +++ b/src/tests/class_tests/openms/source/EmgModel_test.cpp @@ -46,8 +46,8 @@ START_SECTION((static const String getProductName())) TEST_EQUAL(EmgModel().getName(),"EmgModel") END_SECTION -START_SECTION((static BaseModel<1>* create())) - BaseModel<1>* ptr = EmgModel::create(); +START_SECTION((static BaseModel* create())) + BaseModel* ptr = EmgModel::create(); TEST_EQUAL(ptr->getName(), "EmgModel") TEST_NOT_EQUAL(ptr, nullPointer) delete ptr; diff --git a/src/tests/class_tests/openms/source/ExtendedIsotopeModel_test.cpp b/src/tests/class_tests/openms/source/ExtendedIsotopeModel_test.cpp index 2f1ca1eb59e..440d7439eb3 100644 --- a/src/tests/class_tests/openms/source/ExtendedIsotopeModel_test.cpp +++ b/src/tests/class_tests/openms/source/ExtendedIsotopeModel_test.cpp @@ -40,8 +40,8 @@ START_SECTION((virtual ~ExtendedIsotopeModel())) delete ptr; END_SECTION -START_SECTION(static BaseModel<1>* create()) - BaseModel<1>* ptr = ExtendedIsotopeModel::create(); +START_SECTION(static BaseModel* create()) + BaseModel* ptr = ExtendedIsotopeModel::create(); TEST_EQUAL(ptr->getName(), "ExtendedIsotopeModel") TEST_NOT_EQUAL(ptr, nullPointer) delete ptr; diff --git a/src/tests/class_tests/openms/source/GaussModel_test.cpp b/src/tests/class_tests/openms/source/GaussModel_test.cpp index 18117d6d0a2..9bfdedf537b 100644 --- a/src/tests/class_tests/openms/source/GaussModel_test.cpp +++ b/src/tests/class_tests/openms/source/GaussModel_test.cpp @@ -43,8 +43,8 @@ START_SECTION((static const String getProductName())) TEST_EQUAL(GaussModel().getProductName(),"GaussModel") END_SECTION -START_SECTION(static BaseModel<1>* create()) - BaseModel<1>* ptr = GaussModel::create(); +START_SECTION(static BaseModel* create()) + BaseModel* ptr = GaussModel::create(); TEST_EQUAL(ptr->getName(), "GaussModel") TEST_NOT_EQUAL(ptr, nullPointer) delete ptr; diff --git a/src/tests/class_tests/openms/source/IsotopeModel_test.cpp b/src/tests/class_tests/openms/source/IsotopeModel_test.cpp index c8ec260291d..4f90383fa98 100644 --- a/src/tests/class_tests/openms/source/IsotopeModel_test.cpp +++ b/src/tests/class_tests/openms/source/IsotopeModel_test.cpp @@ -42,8 +42,8 @@ START_SECTION((virtual ~IsotopeModel())) delete ptr; END_SECTION -START_SECTION(static BaseModel<1>* create()) - BaseModel<1>* ptr = IsotopeModel::create(); +START_SECTION(static BaseModel* create()) + BaseModel* ptr = IsotopeModel::create(); TEST_EQUAL(ptr->getName(), "IsotopeModel") TEST_NOT_EQUAL(ptr, nullPointer) delete ptr; diff --git a/src/tests/class_tests/openms/source/ModelDescription_test.cpp b/src/tests/class_tests/openms/source/ModelDescription_test.cpp index e89e260e29d..c519ca42e8c 100644 --- a/src/tests/class_tests/openms/source/ModelDescription_test.cpp +++ b/src/tests/class_tests/openms/source/ModelDescription_test.cpp @@ -92,12 +92,12 @@ START_SECTION((ModelDescription(const ModelDescription &source))) TEST_EQUAL(tm1==tm2,true) END_SECTION -START_SECTION( ModelDescription(const BaseModel< D > *model) ) - const BaseModel<1> * bm = new IsotopeModel(); +START_SECTION( ModelDescription(const BaseModel *model) ) + const BaseModel * bm = new IsotopeModel(); ModelDescription<1> md(bm); - BaseModel<1>* ptr = md.createModel(); + BaseModel* ptr = md.createModel(); TEST_EQUAL( *ptr == *bm, true) delete bm; delete ptr; From ba350ac692fc4a30c2ab6ff8854634bf8063e917 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Tue, 6 Feb 2024 14:19:43 +0100 Subject: [PATCH 230/242] fix test --- src/tests/class_tests/openms/source/BaseModel_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/class_tests/openms/source/BaseModel_test.cpp b/src/tests/class_tests/openms/source/BaseModel_test.cpp index d93f3610c2d..de53bc59f4f 100644 --- a/src/tests/class_tests/openms/source/BaseModel_test.cpp +++ b/src/tests/class_tests/openms/source/BaseModel_test.cpp @@ -58,7 +58,7 @@ class TestModel : public BaseModel IntensityType getIntensity(const PositionType& pos) const override { - return pos[0] + pos[1]; + return pos[0]; } bool isContained(const PositionType& pos) const override From 8ec50e23a11cc821cbb8c62b31bc95280766aac3 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Wed, 28 Feb 2024 12:41:01 +0100 Subject: [PATCH 231/242] removed some of the crazyness --- .../DefaultParamHandlerDocumenter.cpp | 3 - doc/doxygen/public/TOPP.doxygen | 1 - .../ANALYSIS/MAPMATCHING/BaseGroupFinder.h | 3 +- .../ANALYSIS/MAPMATCHING/BaseSuperimposer.h | 3 +- .../MAPMATCHING/FeatureGroupingAlgorithm.h | 2 +- .../MapAlignmentAlgorithmSpectrumAlignment.h | 310 ------- .../MapAlignmentEvaluationAlgorithm.h | 2 +- .../OpenMS/ANALYSIS/MAPMATCHING/sources.cmake | 1 - .../COMPARISON/CLUSTERING/ClusterFunctor.h | 2 +- .../SPECTRA/BinnedSpectrumCompareFunctor.h | 2 +- .../SPECTRA/PeakSpectrumCompareFunctor.h | 9 - .../SPECTRA/SteinScottImproveScore.h | 5 - src/openms/include/OpenMS/CONCEPT/Factory.h | 2 - .../include/OpenMS/CONCEPT/ProgressLogger.h | 5 +- .../FILTERING/TRANSFORMERS/FilterFunctor.h | 2 +- .../TRANSFORMATIONS/FEATUREFINDER/BaseModel.h | 3 - .../FEATUREFINDER/BaseModel_impl.h | 10 - .../FEATUREFINDER/FeatureFinderAlgorithm.h | 2 +- .../FeatureFinderAlgorithmPicked.h | 2 - .../TRANSFORMATIONS/FEATUREFINDER/Fitter1D.h | 3 +- .../ANALYSIS/MAPMATCHING/BaseGroupFinder.cpp | 12 - .../MAPMATCHING/FeatureGroupingAlgorithm.cpp | 9 - ...MapAlignmentAlgorithmSpectrumAlignment.cpp | 806 ------------------ .../MapAlignmentEvaluationAlgorithm.cpp | 6 - .../source/ANALYSIS/MAPMATCHING/sources.cmake | 1 - src/openms/source/APPLICATIONS/INIUpdater.cpp | 1 - .../source/APPLICATIONS/ToolHandler.cpp | 1 - .../COMPARISON/CLUSTERING/ClusterFunctor.cpp | 7 - .../SPECTRA/BinnedSpectrumCompareFunctor.cpp | 7 - .../SPECTRA/PeakSpectrumCompareFunctor.cpp | 12 +- .../SPECTRA/SteinScottImproveScore.cpp | 2 +- src/openms/source/CONCEPT/ProgressLogger.cpp | 88 +- .../FILTERING/TRANSFORMERS/FilterFunctor.cpp | 10 - .../TRANSFORMERS/PreprocessingFunctor.cpp | 13 - .../FEATUREFINDER/FeatureFinder.cpp | 2 + .../FEATUREFINDER/FeatureFinderAlgorithm.cpp | 14 - .../FeatureFinderAlgorithmPicked.cpp | 5 - .../FEATUREFINDER/Fitter1D.cpp | 9 - src/pyOpenMS/pxds/BaseGroupFinder.pxd | 4 +- .../pxds/FeatureGroupingAlgorithm.pxd | 1 - src/pyOpenMS/pxds/Fitter1D.pxd | 1 - .../data/FIAMS_output/SerumTest_10.mzTab | 4 + .../class_tests/openms/data/test_old.mzMLb | Bin 0 -> 316334 bytes .../class_tests/openms/executables.cmake | 1 - .../BinnedSpectrumCompareFunctor_test.cpp | 14 - .../openms/source/ClusterFunctor_test.cpp | 19 - .../FeatureFinderAlgorithmPicked_test.cpp | 4 - .../source/FeatureGroupingAlgorithm_test.cpp | 8 - .../openms/source/FilterFunctor_test.cpp | 22 - .../openms/source/Fitter1D_test.cpp | 5 - ...ignmentAlgorithmSpectrumAlignment_test.cpp | 106 --- .../MapAlignmentEvaluationAlgorithm_test.cpp | 8 - .../PeakSpectrumCompareFunctor_test.cpp | 19 - .../source/SteinScottImproveScore_test.cpp | 3 - src/tests/topp/CMakeLists.txt | 10 - src/tests/topp/THIRDPARTY/proteins.cnlcp | Bin 642 -> 642 bytes src/tests/topp/THIRDPARTY/proteins.csarr | Bin 2508 -> 2508 bytes src/tests/topp/THIRDPARTY/proteins.cseq | Bin 642 -> 642 bytes src/topp/FeatureFinderCentroided.cpp | 4 +- src/topp/MapAlignerIdentification.cpp | 2 +- src/topp/MapAlignerPoseClustering.cpp | 2 +- src/topp/MapAlignerSpectrum.cpp | 181 ---- src/topp/MapAlignerTreeGuided.cpp | 2 +- src/topp/MapRTTransformer.cpp | 2 +- src/topp/SpecLibSearcher.cpp | 5 +- src/topp/executables.cmake | 1 - 66 files changed, 78 insertions(+), 1727 deletions(-) delete mode 100644 src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentAlgorithmSpectrumAlignment.h delete mode 100644 src/openms/source/ANALYSIS/MAPMATCHING/MapAlignmentAlgorithmSpectrumAlignment.cpp create mode 100644 src/tests/class_tests/openms/data/FIAMS_output/SerumTest_10.mzTab create mode 100644 src/tests/class_tests/openms/data/test_old.mzMLb delete mode 100644 src/tests/class_tests/openms/source/MapAlignmentAlgorithmSpectrumAlignment_test.cpp delete mode 100644 src/topp/MapAlignerSpectrum.cpp diff --git a/doc/doxygen/parameters/DefaultParamHandlerDocumenter.cpp b/doc/doxygen/parameters/DefaultParamHandlerDocumenter.cpp index fc0246d6720..272bb2865ba 100644 --- a/doc/doxygen/parameters/DefaultParamHandlerDocumenter.cpp +++ b/doc/doxygen/parameters/DefaultParamHandlerDocumenter.cpp @@ -34,7 +34,6 @@ #include #include #include -#include #include #include #include @@ -412,7 +411,6 @@ int main(int argc, char** argv) DOCME(LinearResampler); DOCME(MSPFile); DOCME(MapAlignmentAlgorithmPoseClustering); - DOCME(MapAlignmentAlgorithmSpectrumAlignment); DOCME(SpectrumAnnotator); DOCME(TheoreticalSpectrumGeneratorXLMS); DOCME(MRMDecoy); @@ -468,7 +466,6 @@ int main(int argc, char** argv) // workarounds for documenting model parameters in MapAligners: writeParameters("MapAlignerIdentificationModel", MapAlignerBase::getModelDefaults("interpolated"), true); writeParameters("MapAlignerPoseClusteringModel", MapAlignerBase::getModelDefaults("linear"), true); - writeParameters("MapAlignerSpectrumModel", MapAlignerBase::getModelDefaults("interpolated"), true); writeParameters("MapRTTransformerModel", MapAlignerBase::getModelDefaults("none"), true); ////////////////////////////////// diff --git a/doc/doxygen/public/TOPP.doxygen b/doc/doxygen/public/TOPP.doxygen index a79ba4918c6..1f7c45901c1 100755 --- a/doc/doxygen/public/TOPP.doxygen +++ b/doc/doxygen/public/TOPP.doxygen @@ -140,7 +140,6 @@ Map Alignment - @subpage TOPP_MapAlignerIdentification - Corrects RT distortions between maps based on common peptide identifications using one map as reference. - @subpage TOPP_MapAlignerPoseClustering - Corrects RT distortions between maps using a pose clustering approach (not using pep-ids and a linear model). - - @subpage TOPP_MapAlignerSpectrum - Corrects RT distortions between maps by spectrum alignment. - @subpage TOPP_MapAlignerTreeGuided - Corrects RT distortions between maps based on common peptide identifications guided by a similarity tree. - @subpage TOPP_MapRTTransformer - Applies RT transformations to maps. diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/BaseGroupFinder.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/BaseGroupFinder.h index 550aaf72783..3162a1e7623 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/BaseGroupFinder.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/BaseGroupFinder.h @@ -50,8 +50,7 @@ namespace OpenMS */ virtual void run(const std::vector & input, ConsensusMap & result) = 0; - /// Register all derived classes here - static void registerChildren(); + protected: diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/BaseSuperimposer.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/BaseSuperimposer.h index 2276f7e8519..cb4ca4a4da2 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/BaseSuperimposer.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/BaseSuperimposer.h @@ -48,8 +48,7 @@ namespace OpenMS */ virtual void run(const ConsensusMap& map_model, const ConsensusMap& map_scene, TransformationDescription& transformation) = 0; - /// Register all derived classes here - static void registerChildren(); + private: diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithm.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithm.h index 042e6466a21..9b55c96a6b7 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithm.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithm.h @@ -42,7 +42,7 @@ namespace OpenMS void transferSubelements(const std::vector & maps, ConsensusMap & out) const; /// Register all derived classes in this method - static void registerChildren(); + protected: diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentAlgorithmSpectrumAlignment.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentAlgorithmSpectrumAlignment.h deleted file mode 100644 index 52e17c1409a..00000000000 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentAlgorithmSpectrumAlignment.h +++ /dev/null @@ -1,310 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Timo Sachsenberg $ -// $Authors: Vipul Patel $ -// -------------------------------------------------------------------------- - -#pragma once - -#include -#include -#include -#include -#include - -namespace OpenMS -{ - /** - @brief A map alignment algorithm based on spectrum similarity (dynamic programming). - - @htmlinclude OpenMS_MapAlignmentAlgorithmSpectrumAlignment.parameters - - @experimental This algorithm is work in progress and might change. - - @ingroup MapAlignment - */ - class OPENMS_DLLAPI MapAlignmentAlgorithmSpectrumAlignment : - public DefaultParamHandler, - public ProgressLogger - { -public: - /// Default constructor - MapAlignmentAlgorithmSpectrumAlignment(); - - /// Destructor - ~MapAlignmentAlgorithmSpectrumAlignment() override; - - /// Align peak maps - virtual void align(std::vector&, std::vector&); - -private: - /// Copy constructor is not implemented -> private - MapAlignmentAlgorithmSpectrumAlignment(const MapAlignmentAlgorithmSpectrumAlignment&); - /// Assignment operator is not implemented -> private - MapAlignmentAlgorithmSpectrumAlignment & operator=(const MapAlignmentAlgorithmSpectrumAlignment &); - - /** - @brief inner class necessary for using the sort algorithm. - - Defines several overloaded operator() for usage with the std::sort algorithm - - @experimental This algorithm is work in progress and might change. - - */ - class OPENMS_DLLAPI Compare - { - protected: - bool flag; - - public: - - /// Default constructor with an order flag - explicit Compare(bool b = false) : - flag(b) - { - } - - /** - * @brief overloaded operator() for comparing maps of maps std::pair,float>. - * - * If the order flag is false, the second argument of the outer map is - * selected. The output is an ascending order. If the order flag is true, - * the first argument of the inner class is selected to get a descending - * order. - * - */ - inline bool operator()(const std::pair, float>& c1, const std::pair, float>& c2) const - { - if (!flag) - { - return c1.second > c2.second; - } - else - { - return (c1.first).first < (c2.first).first; - } - } - - /** - * @brief overloaded operator() for comparing pairs of float, float std::pair. - * - * If the order flag is false, an ascending order are returned else a - * descending. The comparison is done by the first argument of the map. - * - */ - inline bool operator()(const std::pair& c1, const std::pair& c2) const - { - if (!flag) - { - return c1.first > c2.first; - } - else - { - return c1.first < c2.first; - } - } - - }; - - /** - @brief A function to prepare the sequence for the alignment. It calls intern the main function for the alignment. - - This function takes two arguments. These argument types are two MSExperiments. - The first argument should have been filtered, so that only the type of MSLevel 1 exists in the Sequence. - The second argument doesn't have to fulfill this restriction. It's going to be filtered automatically. - With these two arguments a pre-calculation is done to find some corresponding data points(maximum 4) for building alignment blocks. - After the alignment a re-transformation is done, the new Retention Times appear in the original data. - - The parameters are MSExperiments. - - @param pattern template map. - @param aligned map which has to be aligned. - @param transformation container for rebuilding the alignment only by specific data-points - */ - void prepareAlign_(const std::vector& pattern, PeakMap& aligned, std::vector& transformation); - - /** - @brief filtered the MSLevel to gain only MSLevel 1 - - The alignment works only on MSLevel 1 data, so a filter has to be run. - - @param peakmap map which has to be filtered - @param spectrum_pointer_container output container, where pointers of the MSSpectrum are saved (only with MS level 1) - - @exception Exception::IllegalArgument is thrown if no spectra are contained in @p peakmap - */ - void msFilter_(PeakMap& peakmap, std::vector& spectrum_pointer_container); - - /** - @brief function for the test if cell i,j of the grid is inside the band - - The function returns true if the cell underlie these conditions: - -k<=i-j<=k+n-m - else return false. - @param i coordinate i - @param j coordinate j - @param n size of column - @param m size of row - @param k_ size of k_ - */ - bool insideBand_(Size i, Size j, Size n, Size m, Int k_); - - /** - @brief calculate the size of the band for the alignment for two given Sequence - - This function calculates the size of the band for the alignment. It - takes three samples from the aligned sequence and tries to find the - highscore pairs (matching against the template sequence). The highscore - pair with the worst distance is to be chosen as the size of k. - - @param pattern vector of pointers of the template sequence - @param aligned vector of pointers of the aligned sequence - @param buffer holds the calculated score of index i,j. - @param column_row_orientation indicate the order of the matrix - @param xbegin indicate the beginning of the template sequence - @param xend indicate the end of the template sequence - @param ybegin indicate the beginning of the aligned sequence - @param yend indicate the end of the aligned sequence - */ - Int bestk_(const std::vector& pattern, - std::vector& aligned, std::map >& buffer, - bool column_row_orientation, Size xbegin, Size xend, Size ybegin, Size yend); - - /** - @brief calculate the score of two given MSSpectra calls intern scoring_ - - This function calculates the score from two MSSpectra. These two - MSSpectra are chosen by the coordinates i,j. The two coordinates i,j - indicate the index in the matrix. To find the right index on the - sequence, each beginning is also given to the function. A flag - indicates the labeling of the axes. The buffermatrix stores the result - of the scoring. If the band expands only a lookup of known scores is - done. - - @param i is a index from the matrix. - @param j is a index from the matrix. - @param patternbegin indicate the beginning of the template sequence - @param alignbegin indicate the beginning of the aligned sequence - @param pattern vector of pointers of the template sequence - @param aligned vector of pointers of the aligned sequence - @param buffer holds the calculated score of index i,j. - @param column_row_orientation indicate the order of the matrix - */ - float scoreCalculation_(Size i, Size j, Size patternbegin, Size alignbegin, - const std::vector& pattern, std::vector& aligned, - std::map >& buffer, bool column_row_orientation); - - /** - @brief return the score of two given MSSpectra by calling the scorefunction - */ - float scoring_(const MSSpectrum& a, MSSpectrum& b); - - /** - @brief affine gap cost Alignment - - This Alignment is based on the Needleman Wunsch Algorithm. - To improve the time complexity a banded version was implemented, known as k - alignment. - To save some space, the alignment is going to be calculated by position xbegin to xend of one sequence and ybegin - and yend by another given sequence. The result of the alignment is stored in the second argument. - The first sequence is used as a template for the alignment. - - @param xbegin coordinate for the beginning of the template sequence. - @param ybegin coordinate for the beginning of the aligned sequence . - @param xend coordinate for the end of the template sequence. - @param yend coordinate for the end of the aligned sequence. - @param pattern template map. - @param aligned map to be aligned. - @param xcoordinate save the position of anchor points - @param ycoordinate save the retentiontimes of an anchor points - @param xcoordinatepattern save the reference position of the anchor points from the pattern - - @exception Exception::OutOfRange if a out of bound appear @p pattern or @p aligned - */ - void affineGapalign_(Size xbegin, Size ybegin, Size xend, Size yend, - const std::vector& pattern, - std::vector& aligned, - std::vector& xcoordinate, std::vector& ycoordinate, - std::vector& xcoordinatepattern); - - /** - @brief preparation function of data points to construct later the spline function. - - This function reduced the amount of data values for the next step. The - reduction is done by using a number of buckets, where the data points a - selected. Within the buckets, only defined number a selected, to be - written back as a data point. The selection within the buckets is done - by scoring. - - @param pattern template map. - @param aligned map to be aligned. - @param xcoordinate save the position of anchor points - @param ycoordinate save the retention times of an anchor points - @param xcoordinatepattern save the reference position of the anchor points from the pattern - */ - void bucketFilter_(const std::vector& pattern, - std::vector& aligned, std::vector& xcoordinate, - std::vector& ycoordinate, std::vector& xcoordinatepattern); - - /** - @brief Creates files for the debugging - - This function is only active if the debug_ flag is true. The - debugfileCreator creates following files: - - - debugtraceback.txt(gnuplotScript), - - debugscoreheatmap.r and - - debugRscript. - - Debugscoreheatmap.r contains the scores of the Spectra to each other - from the alignment and also the traceback. DebugRscript is the R script - which reads those data. So both files are only working under R. Start R - and type main(location of debugscoreheatmap.r). The output will be a - heatmap of each sub-alignment. Debugtraceback.txt shows the way of the - Traceback by using gnuplot. - - @param pattern template map. - @param aligned map to be aligned. - */ - void debugFileCreator_(const std::vector& pattern, std::vector& aligned); - - /** - @brief Rounding the score of two spectra, only necessary for debugging - - This function rounded the score of two spectra. This is necessary for some function in the Debug-Mode - */ - void debugscoreDistributionCalculation_(float score); - - ///Represent the gap cost for opening or closing a gap in the alignment - float gap_; - ///Extension cost after a gap is open - float e_; - ///Pointer holds the scoring function, which can be selected - PeakSpectrumCompareFunctor* c1_; - ///This is the minimal score to be count as a mismatch(range 0.0 - 1.0) - float cutoffScore_; - ///Defines the size of one bucket - Size bucketsize_; - ///Defines the amount of anchor points which are selected within one bucket. - Size anchorPoints_; - ///Debug mode flag default: False - bool debug_; - ///Represent the cost of a mismatch in the alignment - float mismatchscore_; - ///This is the minimum score for counting as a match(1-cutoffScore_) - float threshold_; - ///Container holding the score of the matchmatrix and also the insertmatrix - std::vector > debugmatrix_; - ///Container holding the only the score of Spectra - std::vector > debugscorematrix_; - ///Container holding the path of the traceback - std::vector > debugtraceback_; - ///Container holding the score of each cell(matchmatrix,insertmatrix, traceback) - std::vector scoredistribution_; //save the cell i, j , matchscore, insertscore, traceback - //docu in base class - void updateMembers_() override; - }; - -} // namespace OpenMS - diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithm.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithm.h index 0a8f5e35a89..b083783a4a6 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithm.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithm.h @@ -40,7 +40,7 @@ namespace OpenMS bool isSameHandle(const FeatureHandle & lhs, const FeatureHandle & rhs, const double & rt_dev, const double & mz_dev, const Peak2D::IntensityType & int_dev, const bool use_charge); /// Register all derived classes in this method - static void registerChildren(); + private: ///Copy constructor is not implemented -> private diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/sources.cmake b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/sources.cmake index 602ffd4d559..edc69d9e81c 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/sources.cmake +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/sources.cmake @@ -19,7 +19,6 @@ LabeledPairFinder.h MapAlignmentAlgorithmIdentification.h MapAlignmentAlgorithmKD.h MapAlignmentAlgorithmPoseClustering.h -MapAlignmentAlgorithmSpectrumAlignment.h MapAlignmentAlgorithmTreeGuided.h MapAlignmentEvaluationAlgorithm.h MapAlignmentEvaluationAlgorithmPrecision.h diff --git a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterFunctor.h b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterFunctor.h index c09d094745d..f7b59f8a1c9 100644 --- a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterFunctor.h +++ b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterFunctor.h @@ -71,7 +71,7 @@ namespace OpenMS virtual void operator()(DistanceMatrix & original_distance, std::vector & cluster_tree, const float threshold = 1) const = 0; /// registers all derived products - static void registerChildren(); + }; diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.h index 03946b31a6e..263132557e3 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.h @@ -53,7 +53,7 @@ namespace OpenMS virtual double operator()(const BinnedSpectrum& spec) const = 0; /// registers all derived products - static void registerChildren(); + /// get the identifier for a DefaultParamHandler static const String getProductName() diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/PeakSpectrumCompareFunctor.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/PeakSpectrumCompareFunctor.h index 034e6cebb9a..55c17368d2d 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/PeakSpectrumCompareFunctor.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/PeakSpectrumCompareFunctor.h @@ -47,15 +47,6 @@ namespace OpenMS /// calculates self similarity virtual double operator()(const PeakSpectrum & a) const = 0; - /// registers all derived products - static void registerChildren(); - - /// - static const String getProductName() - { - return "PeakSpectrumCompareFunctor"; - } - }; } diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SteinScottImproveScore.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SteinScottImproveScore.h index e9c082195f6..de362509928 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SteinScottImproveScore.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SteinScottImproveScore.h @@ -75,11 +75,6 @@ namespace OpenMS return new SteinScottImproveScore(); } - static const String getProductName() - { - return "SteinScottImproveScore"; - } - }; } diff --git a/src/openms/include/OpenMS/CONCEPT/Factory.h b/src/openms/include/OpenMS/CONCEPT/Factory.h index 2992adb1bcf..14fdc11e4fe 100644 --- a/src/openms/include/OpenMS/CONCEPT/Factory.h +++ b/src/openms/include/OpenMS/CONCEPT/Factory.h @@ -68,8 +68,6 @@ namespace OpenMS // now, attention as ORDER of commands is important here: // first register the Factory SingletonRegistry::registerFactory(myName, instance_ptr_); - // because this call, might use another instance of this factory, but we want the other instance to register the children with "US" - FactoryProduct::registerChildren(); } else { diff --git a/src/openms/include/OpenMS/CONCEPT/ProgressLogger.h b/src/openms/include/OpenMS/CONCEPT/ProgressLogger.h index 5aaf945ed42..2e1dc065f67 100644 --- a/src/openms/include/OpenMS/CONCEPT/ProgressLogger.h +++ b/src/openms/include/OpenMS/CONCEPT/ProgressLogger.h @@ -62,7 +62,7 @@ namespace OpenMS virtual ~ProgressLoggerImpl() {} /// Factory requirements - static void registerChildren(); + }; @@ -100,9 +100,6 @@ namespace OpenMS mutable time_t last_invoke_; static int recursion_depth_; - /// Return the name of the factory product used for this log type - static String logTypeToFactoryName_(LogType type); - mutable ProgressLoggerImpl* current_logger_; }; diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/FilterFunctor.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/FilterFunctor.h index 80f4b500e29..f6ad28bc5e4 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/FilterFunctor.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/FilterFunctor.h @@ -33,7 +33,7 @@ namespace OpenMS FilterFunctor & operator=(const FilterFunctor & source); /// - static void registerChildren(); + /// function call operator template diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel.h index 3aff4ca1b5a..1c8c77a4bd7 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel.h @@ -58,9 +58,6 @@ namespace OpenMS return *this; } - /// register all derived classes here (implemented in file BaseModel_impl.h) - static void registerChildren(); - /// access model predicted intensity at position @p pos virtual IntensityType getIntensity(const PositionType& pos) const = 0; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel_impl.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel_impl.h index a2061261ba5..474454eb68d 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel_impl.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel_impl.h @@ -21,16 +21,6 @@ namespace OpenMS { - OPENMS_DLLAPI void BaseModel::registerChildren() - { - Factory::registerProduct(GaussModel::getProductName(), &GaussModel::create); - Factory::registerProduct(BiGaussModel::getProductName(), &BiGaussModel::create); - Factory::registerProduct(IsotopeModel::getProductName(), &IsotopeModel::create); - Factory::registerProduct(ExtendedIsotopeModel::getProductName(), &ExtendedIsotopeModel::create); - Factory::registerProduct(EmgModel::getProductName(), &EmgModel::create); - - return; - } } // namespace OpenMS diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.h index d488edc59b8..51f18f54c53 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.h @@ -71,7 +71,7 @@ namespace OpenMS } /// register all derived classes here (see FeatureFinderAlgorithm_impl.h) - static void registerChildren(); + /// Main method that implements the actual algorithm virtual void run() = 0; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.h index 3a2511b4b9d..aa12e6f007d 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.h @@ -66,8 +66,6 @@ namespace OpenMS static FeatureFinderAlgorithm* create(); - static const String getProductName(); - protected: /// editable copy of the map MapType map_; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/Fitter1D.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/Fitter1D.h index 489de673ca3..09d22aa10db 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/Fitter1D.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/Fitter1D.h @@ -63,8 +63,7 @@ namespace OpenMS /// return interpolation model virtual QualityType fit1d(const RawDataArrayType& /* range */, std::unique_ptr& /* model */); - /// register all derived classes here - static void registerChildren(); + protected: /// standard derivation in bounding box diff --git a/src/openms/source/ANALYSIS/MAPMATCHING/BaseGroupFinder.cpp b/src/openms/source/ANALYSIS/MAPMATCHING/BaseGroupFinder.cpp index 2d15527199b..3c1dc49dd04 100644 --- a/src/openms/source/ANALYSIS/MAPMATCHING/BaseGroupFinder.cpp +++ b/src/openms/source/ANALYSIS/MAPMATCHING/BaseGroupFinder.cpp @@ -24,18 +24,6 @@ namespace OpenMS BaseGroupFinder::~BaseGroupFinder() = default; - void BaseGroupFinder::registerChildren() - { - Factory::registerProduct( - SimplePairFinder::getProductName(), &SimplePairFinder::create); - Factory::registerProduct( - LabeledPairFinder::getProductName(), &LabeledPairFinder::create); - Factory::registerProduct( - StablePairFinder::getProductName(), &StablePairFinder::create); - Factory::registerProduct( - QTClusterFinder::getProductName(), &QTClusterFinder::create); - } - void BaseGroupFinder::checkIds_(const std::vector& maps) const { std::set used_ids; diff --git a/src/openms/source/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithm.cpp b/src/openms/source/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithm.cpp index 97ec5288db8..77b79944ff0 100644 --- a/src/openms/source/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithm.cpp +++ b/src/openms/source/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithm.cpp @@ -21,15 +21,6 @@ using namespace std; namespace OpenMS { - //register products here - void FeatureGroupingAlgorithm::registerChildren() - { - Factory::registerProduct(FeatureGroupingAlgorithmLabeled::getProductName(), &FeatureGroupingAlgorithmLabeled::create); - Factory::registerProduct(FeatureGroupingAlgorithmUnlabeled::getProductName(), &FeatureGroupingAlgorithmUnlabeled::create); - Factory::registerProduct(FeatureGroupingAlgorithmQT::getProductName(), &FeatureGroupingAlgorithmQT::create); - Factory::registerProduct(FeatureGroupingAlgorithmKD::getProductName(), &FeatureGroupingAlgorithmKD::create); - - } FeatureGroupingAlgorithm::FeatureGroupingAlgorithm() : DefaultParamHandler("FeatureGroupingAlgorithm") diff --git a/src/openms/source/ANALYSIS/MAPMATCHING/MapAlignmentAlgorithmSpectrumAlignment.cpp b/src/openms/source/ANALYSIS/MAPMATCHING/MapAlignmentAlgorithmSpectrumAlignment.cpp deleted file mode 100644 index 9101da22b9f..00000000000 --- a/src/openms/source/ANALYSIS/MAPMATCHING/MapAlignmentAlgorithmSpectrumAlignment.cpp +++ /dev/null @@ -1,806 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Timo Sachsenberg $ -// $Authors: Vipul Patel $ -// -------------------------------------------------------------------------- - -#include -#include - -#include - -#include - -namespace OpenMS -{ - - MapAlignmentAlgorithmSpectrumAlignment::MapAlignmentAlgorithmSpectrumAlignment() : - DefaultParamHandler("MapAlignmentAlgorithmSpectrumAlignment"), - ProgressLogger(), c1_(nullptr) - { - defaults_.setValue("gapcost", 1.0, "This Parameter stands for the cost of opening a gap in the Alignment. A gap means that one spectrum can not be aligned directly to another spectrum in the Map. This happens, when the similarity of both spectra a too low or even not present. Imagine it as a insert or delete of the spectrum in the map (similar to sequence alignment). The gap is necessary for aligning, if we open a gap there is a possibility that an another spectrum can be correct aligned with a higher score as before without gap. But to open a gap is a negative event and needs to carry a punishment, so a gap should only be opened if the benefits outweigh the downsides. The Parameter is to giving as a positive number, the implementation convert it to a negative number."); - defaults_.setMinFloat("gapcost", 0.0); - defaults_.setValue("affinegapcost", 0.5, "This Parameter controls the cost of extension a already open gap. The idea behind the affine gapcost lies under the assumption, that it is better to get a long distance of connected gaps than to have a structure of gaps interspersed with matches (gap match gap match etc.). Therefore the punishment for the extension of a gap generally should be lower than the normal gapcost. If the result of the alignment shows high compression, it is a good idea to lower either the affine gapcost or gap opening cost."); - defaults_.setMinFloat("affinegapcost", 0.0); - defaults_.setValue("cutoff_score", 0.70, "The Parameter defines the threshold which filtered spectra, these spectra are high potential candidate for deciding the interval of a sub-alignment. Only those pair of spectra are selected, which has a score higher or same of the threshold.", {"advanced"}); - defaults_.setMinFloat("cutoff_score", 0.0); - defaults_.setMaxFloat("cutoff_score", 1.0); - defaults_.setValue("bucketsize", 100, "Defines the numbers of buckets. It is a quantize of the interval of those points, which defines the main alignment (match points). These points have to filtered, to reduce the amount of points for the calculating a smoother spline curve.", {"advanced"}); - defaults_.setMinInt("bucketsize", 1); - defaults_.setValue("anchorpoints", 100, "Defines the percent of numbers of match points which a selected from one bucket. The high score pairs are previously selected. The reduction of match points helps to get a smoother spline curve.", {"advanced"}); - defaults_.setMinInt("anchorpoints", 1); - defaults_.setMaxInt("anchorpoints", 100); - defaults_.setValue("debug", "false", "Activate the debug mode, there a files written starting with debug prefix.", {"advanced"}); - defaults_.setValidStrings("debug", {"true","false"}); - defaults_.setValue("mismatchscore", -5.0, "Defines the score of two spectra if they have no similarity to each other. ", {"advanced"}); - defaults_.setMaxFloat("mismatchscore", 0.0); - defaults_.setValue("scorefunction", "SteinScottImproveScore", "The score function is the core of an alignment. The success of an alignment depends mostly of the elected score function. The score function return the similarity of two spectra. The score influence defines later the way of possible traceback. There are multiple spectra similarity scores available.."); - defaults_.setValidStrings("scorefunction", {"SteinScottImproveScore","ZhangSimilarityScore"}); //Factory::registeredProducts()); - defaultsToParam_(); - setLogType(CMD); - } - - MapAlignmentAlgorithmSpectrumAlignment::~MapAlignmentAlgorithmSpectrumAlignment() - { - delete c1_; - } - - void MapAlignmentAlgorithmSpectrumAlignment::align(std::vector& peakmaps, std::vector& transformation) - { - transformation.clear(); - TransformationDescription trafo; - trafo.fitModel("identity"); - transformation.push_back(trafo); // transformation of reference map - try - { - std::vector spectrum_pointers; - msFilter_(peakmaps[0], spectrum_pointers); - startProgress(0, (peakmaps.size() - 1), "Alignment"); - for (Size i = 1; i < peakmaps.size(); ++i) - { - prepareAlign_(spectrum_pointers, peakmaps[i], transformation); - setProgress(i); - } - endProgress(); - } - catch (Exception::OutOfRange&) - { - throw Exception::OutOfRange(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION); - } - } - - void MapAlignmentAlgorithmSpectrumAlignment::prepareAlign_(const std::vector& pattern, PeakMap& aligned, std::vector& transformation) - { - //tempalign -> container for holding only MSSpectrums with MS-Level 1 - std::vector tempalign; - msFilter_(aligned, tempalign); - - //if it is possible, built 4 blocks. These can be aligned individually - std::vector alignpoint; - //saving the first coordinates - alignpoint.push_back(0); - alignpoint.push_back(0); - //4 blocks : 0-0.25 ,0.25-50,0.50-0.75,1 The data points must have a high similarity score - for (float i = 0.25; i <= 0.75; i += 0.25) - { - Size y = (Size)(tempalign.size() * i); - Size x = 0; - float maxi = -999.0; - - for (Size k = 0; k < pattern.size(); ++k) - { - float s = scoring_(*pattern[k], *(tempalign[y])); - if (s > maxi && s > cutoffScore_) - { - x = k; - maxi = s; - } - } - if (x >= alignpoint[alignpoint.size() - 2] + 3 && y >= alignpoint[alignpoint.size() - 1] + 3) - { - alignpoint.push_back(x); - alignpoint.push_back(y); - } - - Size xn = (Size)(pattern.size() * i); - Size yn = 0; - for (Size k = 0; k < tempalign.size(); ++k) - { - float s = scoring_(*pattern[xn], *(tempalign[k])); - if (s > maxi && s > cutoffScore_) - { - yn = k; - maxi = s; - } - } - if (xn >= alignpoint[alignpoint.size() - 2] + 3 && yn >= alignpoint[alignpoint.size() - 1] + 3) - { - alignpoint.push_back(xn); - alignpoint.push_back(yn); - } - //only save possible data points, if they are not already contained - } - //save also the endpoint as a data point - alignpoint.push_back(pattern.size() - 1); - alignpoint.push_back(tempalign.size() - 1); - //the distance of two data points have to be greater than 3, if not the spline would thrown an Exception - //do a affine gap alignment of the block of the data points x1,y1,x2,y2 - - std::vector xcoordinate; - std::vector xcoordinatepattern; - std::vector ycoordinate; - debugmatrix_.clear(); - - for (Size i = 0; i < alignpoint.size() - 2; i += 2) - { - affineGapalign_(alignpoint[i], alignpoint[i + 1], alignpoint[i + 2], alignpoint[i + 3], pattern, tempalign, xcoordinate, ycoordinate, xcoordinatepattern); - } - - //affineGapalign_(0,0,(pattern.size()-1),(tempalign.size()-1), pattern, tempalign,xcoordinate,ycoordinate,xcoordinatepattern); - if (debug_) - { - debugFileCreator_(pattern, tempalign); - } - - /* - for (Size i = 0; i< xcoordinate.size(); ++i) - { - std::cout<< xcoordinate[i] << " " << ycoordinate[i] << " x y anchorpoints " << std::endl; - } - std::cout << std::endl; - */ - bucketFilter_(pattern, tempalign, xcoordinate, ycoordinate, xcoordinatepattern); - /*std::cout << xcoordinate.size()<< std::endl; - for (Size i = 0; i< xcoordinate.size(); ++i) - { - std::cout<< xcoordinate[i] << " " << ycoordinate[i] << " x y anchorpoints " << std::endl; - }*/ - - // store the data points defining the transformation: - TransformationDescription::DataPoints data; - for (Size i = 0; i < xcoordinate.size(); ++i) - { - double rt = tempalign[xcoordinate[i]]->getRT(); - data.push_back(std::make_pair(rt, double(ycoordinate[i]))); - } - transformation.emplace_back(data); - } - - void MapAlignmentAlgorithmSpectrumAlignment::affineGapalign_(Size xbegin, Size ybegin, Size xend, Size yend, const std::vector& pattern, std::vector& aligned, std::vector& xcoordinate, std::vector& ycoordinate, std::vector& xcoordinatepattern) - { - //affine gap alignment needs two matrices - std::map > firstcolummatchmatrix; - std::map > secondcolummatchmatrix; - Size n = std::max((xend - xbegin), (yend - ybegin)) + 1; //column - Size m = std::min((xend - xbegin), (yend - ybegin)) + 1; //row - // std::cout<< n << " n " << m << " m " << xbegin << " " < > buffermatrix; - std::map > traceback; - //calculate the value of k - Int k_ = bestk_(pattern, aligned, buffermatrix, column_row_orientation, xbegin, xend, ybegin, yend) + 2; - float score_ = -99999999.0f; - //flag if we have to calculate again the alignment in step k+1 - bool finish = false; - while (!finish) - { - traceback.clear(); - for (Size i = 0; i <= n; ++i) - { - for (Size j = 0; j <= m; ++j) //if( j >=1 && (Size)j<=m) - { - if (insideBand_(i, j, n, m, k_)) - { - if (i == 0 || j == 0) - { - if (i == 0) - { - firstcolummatchmatrix[i][j] = (-gap_) * j; - //std::cout << firstcolummatchmatrix[i][j] << " i j firstcolum "<< std::endl; - } - else if (j == 0) - { - secondcolummatchmatrix[i][j] = (-gap_) * i; - //std::cout << secondcolummatchmatrix[i][j] << " i j secondcolum "<< std::endl; - } - } - else - { - try - { - double s = scoreCalculation_(i, j, xbegin, ybegin, pattern, aligned, buffermatrix, column_row_orientation); - if (debug_) - { - std::vector ltemp; - if (!column_row_orientation) - { - ltemp.push_back((float)i + xbegin - 1); - ltemp.push_back((float)j + ybegin - 1); - ltemp.push_back(s); - ltemp.push_back(0); - debugscorematrix_.push_back(ltemp); - } - else - { - ltemp.push_back((float)j + xbegin - 1); - ltemp.push_back((float)i + ybegin - 1); - ltemp.push_back(s); - ltemp.push_back(0); - debugscorematrix_.push_back(ltemp); - } - } - float mv = -999.0; - float mh = -999.0; - i = i - 1; - if (insideBand_(i, j, n, m, k_)) - { - mh = firstcolummatchmatrix[i][j] - gap_; - //std::cout <= firstcolummatchmatrix[n][m] || k_ == (Int)n + 2) // || matchmatrix[n][m] >= (2*(k_+1)+n-m)*(-gap_)+(n-(k_+1))*3/*(m-(k_+1))*cutoffScore_ -2* gap_ - (2*(k_) +((Int)m-(Int)n))*e_*/) - { - finish = true; - firstcolummatchmatrix.clear(); - secondcolummatchmatrix.clear(); - } - else - { - score_ = firstcolummatchmatrix[n][m]; - k_ *= 2; - if (k_ > (Int)n + 2) - k_ = (Int)n + 2; - } - } - // matchmatrix.clear(); - /*for(Size i=0; i <=n;++i) - { - for(Size j=0; j<=m;++j) - { - if(insideBand_(i,j,n,m,k_)) - std::cout << i << " "<< j << " i j " << traceback[i][j] << " Match Trace" << std::endl; - } - std::cout<< std::endl; - }*/ - //traceback - bool endtraceback = false; - int i = (int) n; - int j = (int) m; - //float maximum = -999.0; - //container necessary for collecting the positions of both sequence to gain later the correct datapoints for the spline - std::vector xvar; - std::vector xxvar; - std::vector yvar; - - while (!endtraceback) - { - //std::cout << i << " " << j << " i j " << std::endl; - if (i <= 0 || j <= 0) - endtraceback = true; - else - { - if (traceback[i][j] == 0) - { - if (!column_row_orientation) - { - if (debug_) - { - debugtraceback_.emplace_back(float(i + xbegin - 1), float(j + ybegin - 1)); - } - xvar.push_back(j + (int)ybegin - 1); - yvar.push_back((*pattern[i + xbegin - 1]).getRT()); - xxvar.push_back(i + (int)xbegin - 1); - } - else - { - if (debug_) - { - debugtraceback_.emplace_back(float(j + xbegin - 1), float(i + ybegin - 1)); - } - xvar.push_back(i + (int)ybegin - 1); - yvar.push_back((*pattern[j + xbegin - 1]).getRT()); - xxvar.push_back(j + (int)xbegin - 1); - } - i = i - 1; - j = j - 1; - } - else if (traceback[i][j] == 1) - i = i - 1; - else if (traceback[i][j] == 2) - j = j - 1; - } - } - - for (Size k = 0; k < xvar.size(); ++k) - { - if (!xcoordinate.empty()) - { - if (xvar[xvar.size() - 1 - k] != xcoordinate[xcoordinate.size() - 1]) - { - xcoordinate.push_back(xvar[xvar.size() - 1 - k]); - ycoordinate.push_back(yvar[yvar.size() - 1 - k]); - xcoordinatepattern.push_back(xxvar[xxvar.size() - 1 - k]); - } - } - else - { - xcoordinate.push_back(xvar[xvar.size() - 1 - k]); - ycoordinate.push_back(yvar[yvar.size() - 1 - k]); - xcoordinatepattern.push_back(xxvar[xxvar.size() - 1 - k]); - } - } - //std::cout<< xcoordinate.size()<< std::endl; - } - - void MapAlignmentAlgorithmSpectrumAlignment::msFilter_(PeakMap& peakmap, std::vector& spectrum_pointer_container) - { - std::vector pattern; - peakmap.updateRanges(-1); - pattern = peakmap.getMSLevels(); - - if (!pattern.empty()) - { - for (Size i = 0; i < peakmap.size(); ++i) - { - if (peakmap[i].getMSLevel() == 1) - { - spectrum_pointer_container.push_back(&(peakmap[i])); - } - } - } - else - { - throw Exception::IllegalArgument(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "No spectra contained"); - } - } - - inline bool MapAlignmentAlgorithmSpectrumAlignment::insideBand_(Size i, Size j, Size n, Size m, Int k_) - { - if ((Int)(m - n - k_) <= (Int)(i - j) && (Int) (i - j) <= k_) // if((Int)(-k_)<=(Int)(i-j) &&(Int) (i-j) <=(Int)(k_+n-m)) - { - //std::cout << i << " i " << j << " j " << " inside" << std::endl; - return true; - } - else - { - //std::cout << i << " i " << j << " j " << " outside" << std::endl; - return false; - } - } - - inline Int MapAlignmentAlgorithmSpectrumAlignment::bestk_(const std::vector& pattern, std::vector& aligned, std::map >& buffer, bool column_row_orientation, Size xbegin, Size xend, Size ybegin, Size yend) - { - Int ktemp = 2; - for (float i = 0.25; i <= 0.75; i += 0.25) - { - Size temp = (Size)((yend - ybegin) * i); - float maxi = -999.0; - float s = -999.0; - for (Size k = 0; k <= (xend - xbegin); ++k) - { - Size x; - Int y; - if (column_row_orientation) - { - x = temp + 1; - y = (Int)k + 1; - s = scoreCalculation_(x, y, xbegin, ybegin, pattern, aligned, buffer, column_row_orientation); - } - else - { - x = k + 1; - y = (Int)(temp + 1); - s = scoreCalculation_(x, y, xbegin, ybegin, pattern, aligned, buffer, column_row_orientation); - } - if (s > maxi && s > cutoffScore_) - { - maxi = s; - if (ktemp < std::abs((Int)x - y) + 1) - { - ktemp = std::abs((Int)x - y) + 1; - } - } - } - } - return ktemp; - } - - inline float MapAlignmentAlgorithmSpectrumAlignment::scoreCalculation_(Size i, Size j, Size patternbegin, Size alignbegin, const std::vector& pattern, std::vector& aligned, std::map >& buffer, bool column_row_orientation) - { - if (!column_row_orientation) - { - if (buffer[i][j] == 0) - { - float score = scoring_(*pattern[i + patternbegin - 1], *aligned[j + alignbegin - 1]); - if (score > 1) - score = 1; - if (debug_) - { - debugscoreDistributionCalculation_(score); - } - if (score < threshold_) - score = mismatchscore_; - else - score = 2 + score; - buffer[i][j] = score; - } - return buffer[i][j]; - } - else - { - if (buffer[j][i] == 0) - { - float score = scoring_(*pattern[j + patternbegin - 1], *aligned[i + alignbegin - 1]); - if (score > 1) - score = 1; - if (debug_) - { - debugscoreDistributionCalculation_(score); - } - if (score < threshold_) - score = mismatchscore_; - else - score = 2 + score; - buffer[j][i] = score; - } - return buffer[j][i]; - } - } - - inline float MapAlignmentAlgorithmSpectrumAlignment::scoring_(const MSSpectrum& a, MSSpectrum& b) - { - return c1_->operator()(a, b); - } - - inline void MapAlignmentAlgorithmSpectrumAlignment::bucketFilter_(const std::vector& pattern, std::vector& aligned, std::vector& xcoordinate, std::vector& ycoordinate, std::vector& xcoordinatepattern) - { - std::vector, float> > tempxy; - Size size = 0; - //std::cout <= xcoordinate.size()) - { - bucketsize_ = xcoordinate.size() - 1; - size = 1; - } - else - size = xcoordinate.size() / bucketsize_; - - if (size == 1) - bucketsize_ = xcoordinate.size() - 1; - //std::cout << size << " size "<< xcoordinate.size() << " xcoordinate.size() " << std::endl; - for (Size i = 0; i < size; ++i) - { - std::vector, float> > temp; - for (Size j = 0; j < bucketsize_; ++j) - { - //std::cout<< j << " j " << std::endl; - float score = scoring_(*pattern[xcoordinatepattern[(i * bucketsize_) + j]], *aligned[xcoordinate[(i * bucketsize_) + j]]); - //modification only view as a possible data point if the score is higher than 0 - if (score >= threshold_) - { - temp.emplace_back(std::make_pair(xcoordinate[(i * bucketsize_) + j], ycoordinate[(i * bucketsize_) + j]), score); - } - } - /*for(Size i=0; i < temp.size();++i) - { - std::cout<< (temp[i].first).first << " " << (temp[i].first).second << " in temp"<< std::endl; - } - std::cout << std::endl; - */ - std::sort(temp.begin(), temp.end(), Compare(false)); - //Int anchor=(Int)(size*anchorPoints_/100); - float anchor = temp.size() * anchorPoints_ / 100.0f; - if (anchor <= 0 && !temp.empty()) - { - anchor = 1; - } - - //std::cout << anchor << " anchorpoints " << anchorPoints_<< std::endl; - /*for(UInt i=0; i< temp.size();++i) - { - std::cout<< (temp[i].first).first << "first" << (temp[i].first).second << " second" <& pattern, std::vector& aligned) - { - //plotting scores of the alignment - /*std::ofstream tempfile3; - float maximum=2.0; - tempfile3.open("debugscore.txt",std::ios::trunc); - tempfile3 << "set xrange[0:"<< pattern.size()-1<< "]" << "\n set yrange[0:"<< aligned.size()-1 << "]" << "\n set zrange[0:" - << maximum << "] \n set view 45,20,1.0,2.5 \n"<< "splot \'-\'" < > debugbuffermatrix; - - float scoremaximum = -2; - //precalculation for the heatmap - //getting the maximum score - for (Size i = 0; i < debugscorematrix_.size(); ++i) - { - if (scoremaximum < debugscorematrix_[i][2] + 2) - scoremaximum = debugscorematrix_[i][2] + 2; - //shift all score about 2 (to get 0, the default score in the debugbuffermatrix is -2 ) - debugscorematrix_[i][2] += 2; - } - //to get the intvall [0,1] divide all score to the global maximum - for (Size i = 0; i < debugscorematrix_.size(); ++i) - { - if (debugscorematrix_[i][2] != 0) - debugscorematrix_[i][2] /= scoremaximum; - } - //write the score in a file - /* - for (Size i=0; i < debugscorematrix_.size();++i) - { - debugbuffermatrix[(UInt)debugscorematrix_[i][0]][(UInt)debugscorematrix_[i][1]]=debugscorematrix_[i][2]; - } - */ - std::ofstream scorefile; - scorefile.open("debugscoreheatmap.r", std::ios::trunc); - /* - for (Size i=0; i < debugbuffermatrix.size();++i) - { - for (Size j=0; j< debugbuffermatrix[i].size(); ++j) - { - scorefile<< i << " "<< j << " "<< debugbuffermatrix[i][j] << std::endl; - } - } - */ - for (Size i = 0; i < debugscorematrix_.size(); ++i) - { - scorefile << debugscorematrix_[i][0] << " " << debugscorematrix_[i][1] << " " << debugscorematrix_[i][2] << " " << debugscorematrix_[i][3] << "\n"; - } - scorefile.close(); - - std::ofstream rscript; - rscript.open("debugRscript.r", std::ios::trunc); - - rscript << "#Name: LoadFile \n #transfer data from file into a matrix \n #Input: Filename \n #Output Matrix \n LoadFile<-function(fname){\n temp<-read.table(fname); \n temp<-as.matrix(temp); \n return(temp); \n } \n"; - rscript << "#Name: ScoreHeatmapPlot \n #plot the score in a way of a heatmap \n #Input: Scorematrix \n #Output Heatmap \n ScoreHeatmapPlot<-function(matrix) { \n xcord<-as.vector(matrix[,1]); \n ycord<-as.vector(matrix[,2]); \n color<-rgb(as.vector(matrix[,4]),as.vector(matrix[,3]),0);\n plot(xcord,ycord,col=color, main =\"Heatplot of scores included the traceback\" , xlab= \" Template-sequence \", ylab=\" Aligned-sequence \", type=\"p\" ,phc=22)\n } \n main<-function(filenamea) { \n a<-Loadfile(filenamea) \n X11() \n ScoreHeatmapPlot(a) \n \n"; - rscript.close(); - /* - float matchmaximum=-999.0; - float insertmaximum=-999.0; - for (Size i =0; i< debugmatrix_.size();++i) - { - debugbuffermatrix[debugmatrix_[i][0]][debugmatrix_[i][1]]=(float)debugmatrix_[i][2]; - if(matchmaximum getName() != param_.getValue("scorefunction")) - { - c1_ = Factory::create(param_.getValue("scorefunction").toString()); - } - - cutoffScore_ = (float)param_.getValue("cutoff_score"); - bucketsize_ = (Int)param_.getValue("bucketsize"); - mismatchscore_ = (float)param_.getValue("mismatchscore"); - anchorPoints_ = (Int)param_.getValue("anchorpoints"); - - // this is a percentage, should always be between 0 and 100 - if (anchorPoints_ > 100) - { - anchorPoints_ = 100; - } - - debug_ = param_.getValue("debug").toBool(); - threshold_ = 1 - cutoffScore_; - } - -} diff --git a/src/openms/source/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithm.cpp b/src/openms/source/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithm.cpp index 5172ab421df..65373bbeb09 100644 --- a/src/openms/source/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithm.cpp +++ b/src/openms/source/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithm.cpp @@ -16,12 +16,6 @@ namespace OpenMS { - //register products here - void MapAlignmentEvaluationAlgorithm::registerChildren() - { - Factory::registerProduct(MapAlignmentEvaluationAlgorithmPrecision::getProductName(), &MapAlignmentEvaluationAlgorithmPrecision::create); - Factory::registerProduct(MapAlignmentEvaluationAlgorithmRecall::getProductName(), &MapAlignmentEvaluationAlgorithmRecall::create); - } // TODO consider using (RT,MZ,IT) as a unique identifier ? bool MapAlignmentEvaluationAlgorithm::isSameHandle(const FeatureHandle& lhs, const FeatureHandle& rhs, const double& rt_dev, const double& mz_dev, const Peak2D::IntensityType& int_dev, const bool use_charge) diff --git a/src/openms/source/ANALYSIS/MAPMATCHING/sources.cmake b/src/openms/source/ANALYSIS/MAPMATCHING/sources.cmake index 5191a4249c7..dd7917d9bbc 100644 --- a/src/openms/source/ANALYSIS/MAPMATCHING/sources.cmake +++ b/src/openms/source/ANALYSIS/MAPMATCHING/sources.cmake @@ -20,7 +20,6 @@ MapAlignmentAlgorithmIdentification.cpp MapAlignmentAlgorithmKD.cpp MapAlignmentAlgorithmPoseClustering.cpp MapAlignmentAlgorithmTreeGuided.cpp -MapAlignmentAlgorithmSpectrumAlignment.cpp MapAlignmentEvaluationAlgorithm.cpp MapAlignmentEvaluationAlgorithmPrecision.cpp MapAlignmentEvaluationAlgorithmRecall.cpp diff --git a/src/openms/source/APPLICATIONS/INIUpdater.cpp b/src/openms/source/APPLICATIONS/INIUpdater.cpp index d5c312eec40..dd6ff8c19c1 100644 --- a/src/openms/source/APPLICATIONS/INIUpdater.cpp +++ b/src/openms/source/APPLICATIONS/INIUpdater.cpp @@ -55,7 +55,6 @@ namespace OpenMS map_[TDE("MapAligner", ListUtils::create("apply_given_trafo"))] = TDE("MapRTTransformer", ListUtils::create("")); map_[TDE("MapAligner", ListUtils::create("identification"))] = TDE("MapAlignerIdentification", ListUtils::create("")); map_[TDE("MapAligner", ListUtils::create("pose_clustering"))] = TDE("MapAlignerPoseClustering", ListUtils::create("")); - map_[TDE("MapAligner", ListUtils::create("spectrum_alignment"))] = TDE("MapAlignerSpectrum", ListUtils::create("")); // SpectraFilter ... diff --git a/src/openms/source/APPLICATIONS/ToolHandler.cpp b/src/openms/source/APPLICATIONS/ToolHandler.cpp index c89f9d7f164..050385c750a 100644 --- a/src/openms/source/APPLICATIONS/ToolHandler.cpp +++ b/src/openms/source/APPLICATIONS/ToolHandler.cpp @@ -107,7 +107,6 @@ namespace OpenMS tools_map["LuciphorAdapter"] = Internal::ToolDescription("LuciphorAdapter", cat_ID_search); tools_map["MapAlignerIdentification"] = Internal::ToolDescription("MapAlignerIdentification", cat_map_align); tools_map["MapAlignerPoseClustering"] = Internal::ToolDescription("MapAlignerPoseClustering", cat_map_align); - tools_map["MapAlignerSpectrum"] = Internal::ToolDescription("MapAlignerSpectrum", cat_map_align); tools_map["MapAlignerTreeGuided"] = Internal::ToolDescription("MapAlignerTreeGuided", cat_map_align); tools_map["MapNormalizer"] = Internal::ToolDescription("MapNormalizer", cat_signal_proc_smooth_normalize); tools_map["MapRTTransformer"] = Internal::ToolDescription("MapRTTransformer", cat_map_align); diff --git a/src/openms/source/COMPARISON/CLUSTERING/ClusterFunctor.cpp b/src/openms/source/COMPARISON/CLUSTERING/ClusterFunctor.cpp index 4f2355834a6..786d0915569 100644 --- a/src/openms/source/COMPARISON/CLUSTERING/ClusterFunctor.cpp +++ b/src/openms/source/COMPARISON/CLUSTERING/ClusterFunctor.cpp @@ -25,13 +25,6 @@ namespace OpenMS ClusterFunctor & ClusterFunctor::operator=(const ClusterFunctor & /*source*/) = default; - void ClusterFunctor::registerChildren() - { - Factory::registerProduct(SingleLinkage::getProductName(), &SingleLinkage::create); - Factory::registerProduct(CompleteLinkage::getProductName(), &CompleteLinkage::create); - Factory::registerProduct(AverageLinkage::getProductName(), &AverageLinkage::create); - } - ClusterFunctor::InsufficientInput::InsufficientInput(const char * file, int line, const char * function, const char * message) throw() : BaseException(file, line, function, "ClusterFunctor::InsufficentInput", message) { diff --git a/src/openms/source/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.cpp b/src/openms/source/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.cpp index 224ab7f0423..a463ef16edf 100644 --- a/src/openms/source/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.cpp +++ b/src/openms/source/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.cpp @@ -36,11 +36,4 @@ namespace OpenMS return *this; } - void BinnedSpectrumCompareFunctor::registerChildren() - { - Factory::registerProduct(BinnedSharedPeakCount::getProductName(), &BinnedSharedPeakCount::create); - Factory::registerProduct(BinnedSpectralContrastAngle::getProductName(), &BinnedSpectralContrastAngle::create); - Factory::registerProduct(BinnedSumAgreeingIntensities::getProductName(), &BinnedSumAgreeingIntensities::create); - } - } diff --git a/src/openms/source/COMPARISON/SPECTRA/PeakSpectrumCompareFunctor.cpp b/src/openms/source/COMPARISON/SPECTRA/PeakSpectrumCompareFunctor.cpp index 846ac8fbee5..e6c57992b85 100644 --- a/src/openms/source/COMPARISON/SPECTRA/PeakSpectrumCompareFunctor.cpp +++ b/src/openms/source/COMPARISON/SPECTRA/PeakSpectrumCompareFunctor.cpp @@ -21,7 +21,7 @@ using namespace std; namespace OpenMS { PeakSpectrumCompareFunctor::PeakSpectrumCompareFunctor() : - DefaultParamHandler(PeakSpectrumCompareFunctor::getProductName()) + DefaultParamHandler("PeakSpectrumCompareFunctor") { } @@ -38,14 +38,4 @@ namespace OpenMS return *this; } - void PeakSpectrumCompareFunctor::registerChildren() - { - Factory::registerProduct(SpectrumCheapDPCorr::getProductName(), &SpectrumCheapDPCorr::create); - Factory::registerProduct(SpectrumPrecursorComparator::getProductName(), &SpectrumPrecursorComparator::create); - Factory::registerProduct(ZhangSimilarityScore::getProductName(), &ZhangSimilarityScore::create); - Factory::registerProduct(SpectrumAlignmentScore::getProductName(), &SpectrumAlignmentScore::create); - Factory::registerProduct(SteinScottImproveScore::getProductName(), &SteinScottImproveScore::create); - Factory::registerProduct(PeakAlignment::getProductName(), &PeakAlignment::create); - } - } diff --git a/src/openms/source/COMPARISON/SPECTRA/SteinScottImproveScore.cpp b/src/openms/source/COMPARISON/SPECTRA/SteinScottImproveScore.cpp index bad24b47902..abd7ea0672a 100644 --- a/src/openms/source/COMPARISON/SPECTRA/SteinScottImproveScore.cpp +++ b/src/openms/source/COMPARISON/SPECTRA/SteinScottImproveScore.cpp @@ -17,7 +17,7 @@ namespace OpenMS SteinScottImproveScore::SteinScottImproveScore() : PeakSpectrumCompareFunctor() { - setName(SteinScottImproveScore::getProductName()); + setName("SteinScottImproveScore"); defaults_.setValue("tolerance", 0.2, "defines the absolute error of the mass spectrometer"); defaults_.setValue("threshold", 0.2, "if the calculated score is smaller than the threshold, a zero is given back"); defaultsToParam_(); diff --git a/src/openms/source/CONCEPT/ProgressLogger.cpp b/src/openms/source/CONCEPT/ProgressLogger.cpp index 1238eda72e7..36aa221dd73 100644 --- a/src/openms/source/CONCEPT/ProgressLogger.cpp +++ b/src/openms/source/CONCEPT/ProgressLogger.cpp @@ -9,12 +9,13 @@ #include #include -#include +//#include #include #include #include +//#include #include @@ -131,56 +132,36 @@ namespace OpenMS }; + int ProgressLogger::recursion_depth_ = 0; - - void ProgressLogger::ProgressLoggerImpl::registerChildren() + ProgressLogger::ProgressLogger() : + type_(NONE), + last_invoke_() { - Factory::registerProduct(CMDProgressLoggerImpl::getProductName(), &CMDProgressLoggerImpl::create); - // this will only be registered by GUI base app in OpenMS_GUI - // Factory::registerProduct(GUIProgressLoggerImpl::getProductName(), &GUIProgressLoggerImpl::create); - Factory::registerProduct(NoProgressLoggerImpl::getProductName(), &NoProgressLoggerImpl::create); + current_logger_ = NoProgressLoggerImpl::create(); } - int ProgressLogger::recursion_depth_ = 0; - - String ProgressLogger::logTypeToFactoryName_(ProgressLogger::LogType type) + ProgressLogger::ProgressLogger(const ProgressLogger& other) : + type_(other.type_), + last_invoke_(other.last_invoke_) { - switch (type) + switch (type_) { case NONE: { - return "NONE"; + current_logger_ = NoProgressLoggerImpl::create(); + break; } case CMD: { - return "CMD"; + current_logger_ = CMDProgressLoggerImpl::create(); + break; } case GUI: { - return "GUI"; + //current_logger_ = GUIProgressLoggerImpl(); } } - -// should never happen but gcc emits a warning/error -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunreachable-code-return" - return ""; -#pragma clang diagnostic pop - } - - ProgressLogger::ProgressLogger() : - type_(NONE), - last_invoke_() - { - current_logger_ = Factory::create(logTypeToFactoryName_(type_)); - } - - ProgressLogger::ProgressLogger(const ProgressLogger& other) : - type_(other.type_), - last_invoke_(other.last_invoke_) - { - // recreate our logger - current_logger_ = Factory::create(logTypeToFactoryName_(type_)); } ProgressLogger& ProgressLogger::operator=(const ProgressLogger& other) @@ -197,7 +178,24 @@ namespace OpenMS delete current_logger_; // .. and get a new one - current_logger_ = Factory::create(logTypeToFactoryName_(type_)); + switch (type_) + { + case NONE: + { + current_logger_ = NoProgressLoggerImpl::create(); + break; + } + case CMD: + { + current_logger_ = CMDProgressLoggerImpl::create(); + break; + } + case GUI: + { + // current_logger_ = GUIProgressLoggerImpl::create(); + break; + } + } return *this; } @@ -213,7 +211,23 @@ namespace OpenMS // remove the old logger delete current_logger_; - current_logger_ = Factory::create(logTypeToFactoryName_(type_)); + switch (type) + { + case NONE: + { + current_logger_ = NoProgressLoggerImpl::create(); + break; + } + case CMD: + { + current_logger_ = CMDProgressLoggerImpl::create(); + break; + } + case GUI: + { + // current_logger_ = GUIProgressLoggerImpl::create(); + } + } } ProgressLogger::LogType ProgressLogger::getLogType() const diff --git a/src/openms/source/FILTERING/TRANSFORMERS/FilterFunctor.cpp b/src/openms/source/FILTERING/TRANSFORMERS/FilterFunctor.cpp index caa3a528d44..3979c395d0d 100644 --- a/src/openms/source/FILTERING/TRANSFORMERS/FilterFunctor.cpp +++ b/src/openms/source/FILTERING/TRANSFORMERS/FilterFunctor.cpp @@ -38,14 +38,4 @@ namespace OpenMS FilterFunctor::~FilterFunctor() = default; - void FilterFunctor::registerChildren() - { - Factory::registerProduct(ComplementFilter::getProductName(), &ComplementFilter::create); - Factory::registerProduct(GoodDiffFilter::getProductName(), &GoodDiffFilter::create); - Factory::registerProduct(IntensityBalanceFilter::getProductName(), &IntensityBalanceFilter::create); - Factory::registerProduct(NeutralLossDiffFilter::getProductName(), &NeutralLossDiffFilter::create); - Factory::registerProduct(IsotopeDiffFilter::getProductName(), &IsotopeDiffFilter::create); - Factory::registerProduct(TICFilter::getProductName(), &TICFilter::create); - } - } diff --git a/src/openms/source/FILTERING/TRANSFORMERS/PreprocessingFunctor.cpp b/src/openms/source/FILTERING/TRANSFORMERS/PreprocessingFunctor.cpp index 31faec2a58e..09d971aa0be 100644 --- a/src/openms/source/FILTERING/TRANSFORMERS/PreprocessingFunctor.cpp +++ b/src/openms/source/FILTERING/TRANSFORMERS/PreprocessingFunctor.cpp @@ -35,19 +35,6 @@ namespace OpenMS { } - void PreprocessingFunctor::registerChildren() - { - Factory::registerProduct(ThresholdMower::getProductName(), &ThresholdMower::create); - Factory::registerProduct(WindowMower::getProductName(), &WindowMower::create); - Factory::registerProduct(Scaler::getProductName(), &Scaler::create); - Factory::registerProduct(NLargest::getProductName(), &NLargest::create); - Factory::registerProduct(MarkerMower::getProductName(), &MarkerMower::create); - Factory::registerProduct(SqrtMower::getProductName(), &SqrtMower::create); - Factory::registerProduct(Normalizer::getProductName(), &Normalizer::create); - Factory::registerProduct(ParentPeakMower::getProductName(), &ParentPeakMower::create); - Factory::registerProduct(BernNorm::getProductName(), &BernNorm::create); - } - PreprocessingFunctor & PreprocessingFunctor::operator=(const PreprocessingFunctor & source) { if (this != &source) diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinder.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinder.cpp index 270555da909..6c4d050d26a 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinder.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinder.cpp @@ -86,6 +86,8 @@ namespace OpenMS } } + // SERIOUSLY??? why having a base class/interface in the first place if everywhere I see this kind of code? + // do the work if (algorithm_name != "none") { diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.cpp index e7fbc668838..66964e6e0f7 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.cpp @@ -14,19 +14,5 @@ namespace OpenMS { - void FeatureFinderAlgorithm::registerChildren() - { - Factory::registerProduct - ( - FeatureFinderAlgorithmPicked::getProductName(), - &FeatureFinderAlgorithmPicked::create - ); - Factory::registerProduct - ( - FeatureFinderAlgorithmMRM::getProductName(), - &FeatureFinderAlgorithmMRM::create - ); - - } } diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.cpp index 3672ea77888..c7d841d733a 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.cpp @@ -1037,11 +1037,6 @@ namespace OpenMS return new FeatureFinderAlgorithmPicked(); } - const String FeatureFinderAlgorithmPicked::getProductName() - { - return "centroided"; - } - void FeatureFinderAlgorithmPicked::updateMembers_() { pattern_tolerance_ = param_.getValue("mass_trace:mz_tolerance"); diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/Fitter1D.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/Fitter1D.cpp index 2227851b2e4..a35c37a09a3 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/Fitter1D.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/Fitter1D.cpp @@ -52,15 +52,6 @@ namespace OpenMS return *this; } - void Fitter1D::registerChildren() - { - Factory::registerProduct(GaussFitter1D::getProductName(), &GaussFitter1D::create); - Factory::registerProduct(BiGaussFitter1D::getProductName(), &BiGaussFitter1D::create); - Factory::registerProduct(IsotopeFitter1D::getProductName(), &IsotopeFitter1D::create); - Factory::registerProduct(ExtendedIsotopeFitter1D::getProductName(), &ExtendedIsotopeFitter1D::create); - Factory::registerProduct(EmgFitter1D::getProductName(), &EmgFitter1D::create); - } - void Fitter1D::updateMembers_() { tolerance_stdev_box_ = param_.getValue("tolerance_stdev_bounding_box"); diff --git a/src/pyOpenMS/pxds/BaseGroupFinder.pxd b/src/pyOpenMS/pxds/BaseGroupFinder.pxd index f008be2452b..9b605c669ad 100644 --- a/src/pyOpenMS/pxds/BaseGroupFinder.pxd +++ b/src/pyOpenMS/pxds/BaseGroupFinder.pxd @@ -15,6 +15,4 @@ cdef extern from "" namespace "Op # ProgressLogger BaseGroupFinder() except + nogil BaseGroupFinder(BaseGroupFinder &) except + nogil # compiler - # void run(libcpp_vector[ ConsensusMap ] & input_, ConsensusMap & result) except + nogil - void registerChildren() except + nogil # wrap-doc:Register all derived classes here - + diff --git a/src/pyOpenMS/pxds/FeatureGroupingAlgorithm.pxd b/src/pyOpenMS/pxds/FeatureGroupingAlgorithm.pxd index f1fda820056..424887c34cf 100644 --- a/src/pyOpenMS/pxds/FeatureGroupingAlgorithm.pxd +++ b/src/pyOpenMS/pxds/FeatureGroupingAlgorithm.pxd @@ -18,4 +18,3 @@ cdef extern from "" name # since this is a base class, cannot have overloaded methods # void group(libcpp_vector[ FeatureMap ] & maps, ConsensusMap & out) # void group(libcpp_vector[ ConsensusMap ] & maps, ConsensusMap & out) - void registerChildren() except + nogil # wrap-doc:Register all derived classes in this method diff --git a/src/pyOpenMS/pxds/Fitter1D.pxd b/src/pyOpenMS/pxds/Fitter1D.pxd index 71331489eff..63c15a297ef 100644 --- a/src/pyOpenMS/pxds/Fitter1D.pxd +++ b/src/pyOpenMS/pxds/Fitter1D.pxd @@ -18,4 +18,3 @@ cdef extern from "" namespace " Fitter1D(Fitter1D &) except + nogil # QualityType fit1d(RawDataArrayType &, InterpolationModel *&) except + nogil - void registerChildren() except + nogil # wrap-doc:Register all derived classes here diff --git a/src/tests/class_tests/openms/data/FIAMS_output/SerumTest_10.mzTab b/src/tests/class_tests/openms/data/FIAMS_output/SerumTest_10.mzTab new file mode 100644 index 00000000000..d144e3fe0c4 --- /dev/null +++ b/src/tests/class_tests/openms/data/FIAMS_output/SerumTest_10.mzTab @@ -0,0 +1,4 @@ +MTD mzTab-version 1.0.0 +MTD mzTab-mode null +MTD mzTab-type null +MTD description null diff --git a/src/tests/class_tests/openms/data/test_old.mzMLb b/src/tests/class_tests/openms/data/test_old.mzMLb new file mode 100644 index 0000000000000000000000000000000000000000..144aa9c406a543208ab344d9112284ede3c9ac61 GIT binary patch literal 316334 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 z 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 MQHDeN@5::create("BinnedSharedPeakCount"); - TEST_EQUAL(c1->getName(), "BinnedSharedPeakCount") - delete c1; - c1 = Factory::create("BinnedSpectralContrastAngle"); - TEST_EQUAL(c1->getName(), "BinnedSpectralContrastAngle") - delete c1; - c1 = Factory::create("BinnedSumAgreeingIntensities"); - TEST_EQUAL(c1->getName(), "BinnedSumAgreeingIntensities") - delete c1; -} -END_SECTION - START_SECTION((static const String getProductName())) { TEST_EQUAL(BinnedSpectrumCompareFunctor::getProductName(), "BinnedSpectrumCompareFunctor") diff --git a/src/tests/class_tests/openms/source/ClusterFunctor_test.cpp b/src/tests/class_tests/openms/source/ClusterFunctor_test.cpp index 31ba97a6b9d..d8b869a972c 100644 --- a/src/tests/class_tests/openms/source/ClusterFunctor_test.cpp +++ b/src/tests/class_tests/openms/source/ClusterFunctor_test.cpp @@ -54,25 +54,6 @@ START_SECTION((virtual void operator()(DistanceMatrix< float > &original_distanc } END_SECTION -START_SECTION((static void registerChildren())) -{ - ClusterFunctor* cfp = Factory::create("AverageLinkage"); - AverageLinkage* avl_nullPointer = nullptr; - TEST_NOT_EQUAL( dynamic_cast(cfp) , avl_nullPointer) - delete cfp; - - cfp = Factory::create("SingleLinkage"); - SingleLinkage* sl_nullPointer = nullptr; - TEST_NOT_EQUAL( dynamic_cast(cfp) , sl_nullPointer) - delete cfp; - - cfp = Factory::create("CompleteLinkage"); - CompleteLinkage* cl_nullPointer = nullptr; - TEST_NOT_EQUAL( dynamic_cast(cfp) , cl_nullPointer) - delete cfp; -} -END_SECTION - START_SECTION(([ClusterFunctor::InsufficientInput] InsufficientInput(const char *file, int line, const char *function, const char *message="not enough data points to cluster anything"))) { NOT_TESTABLE diff --git a/src/tests/class_tests/openms/source/FeatureFinderAlgorithmPicked_test.cpp b/src/tests/class_tests/openms/source/FeatureFinderAlgorithmPicked_test.cpp index e9365a2b16e..46744c143c9 100644 --- a/src/tests/class_tests/openms/source/FeatureFinderAlgorithmPicked_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureFinderAlgorithmPicked_test.cpp @@ -48,10 +48,6 @@ START_SECTION((static FeatureFinderAlgorithm* create())) delete ptr2; END_SECTION -START_SECTION((static const String getProductName())) - TEST_EQUAL(FFPP::getProductName(),"centroided") -END_SECTION - START_SECTION((virtual void run())) //input and output PeakMap input; diff --git a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithm_test.cpp b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithm_test.cpp index 2e5464ed04b..559a040cd99 100644 --- a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithm_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithm_test.cpp @@ -60,14 +60,6 @@ START_SECTION((virtual void group(const vector< FeatureMap > &maps, ConsensusMap TEST_EQUAL(map.getColumnHeaders()[0].filename, "bla") END_SECTION -START_SECTION((static void registerChildren())) -{ - TEST_STRING_EQUAL(Factory::registeredProducts()[0],FeatureGroupingAlgorithmLabeled::getProductName()); - TEST_STRING_EQUAL(Factory::registeredProducts()[1],FeatureGroupingAlgorithmUnlabeled::getProductName()); - TEST_EQUAL(Factory::registeredProducts().size(), 4) -} -END_SECTION - START_SECTION((void transferSubelements(const vector& maps, ConsensusMap& out) const)) { vector maps(2); diff --git a/src/tests/class_tests/openms/source/FilterFunctor_test.cpp b/src/tests/class_tests/openms/source/FilterFunctor_test.cpp index b19dbd9447b..16cbeb0e228 100644 --- a/src/tests/class_tests/openms/source/FilterFunctor_test.cpp +++ b/src/tests/class_tests/openms/source/FilterFunctor_test.cpp @@ -45,28 +45,6 @@ START_SECTION(FilterFunctor& operator = (const FilterFunctor& source)) NOT_TESTABLE END_SECTION -START_SECTION(static void registerChildren()) - FilterFunctor* ff = Factory::create("ComplementFilter"); - TEST_EQUAL(ff->getName(), "ComplementFilter") - delete ff; - - ff = Factory::create("IntensityBalanceFilter"); - TEST_EQUAL(ff->getName(), "IntensityBalanceFilter") - delete ff; - - ff = Factory::create("NeutralLossDiffFilter"); - TEST_EQUAL(ff->getName(), "NeutralLossDiffFilter") - delete ff; - - ff = Factory::create("IsotopeDiffFilter"); - TEST_EQUAL(ff->getName(), "IsotopeDiffFilter") - delete ff; - - ff = Factory::create("TICFilter"); - TEST_EQUAL(ff->getName(), "TICFilter") - delete ff; -END_SECTION - START_SECTION(template double apply(SpectrumType&)) NOT_TESTABLE END_SECTION diff --git a/src/tests/class_tests/openms/source/Fitter1D_test.cpp b/src/tests/class_tests/openms/source/Fitter1D_test.cpp index a912f528abc..4430eaa5044 100644 --- a/src/tests/class_tests/openms/source/Fitter1D_test.cpp +++ b/src/tests/class_tests/openms/source/Fitter1D_test.cpp @@ -115,11 +115,6 @@ START_SECTION((virtual QualityType fit1d(const RawDataArrayType &, Interpolatio TEST_EXCEPTION(Exception::NotImplemented,f1d.fit1d(rft,ipm)); END_SECTION -START_SECTION((void registerChildren())) - // dummy subtest - TEST_EQUAL(1,1) -END_SECTION - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/MapAlignmentAlgorithmSpectrumAlignment_test.cpp b/src/tests/class_tests/openms/source/MapAlignmentAlgorithmSpectrumAlignment_test.cpp deleted file mode 100644 index 20741e5d7f1..00000000000 --- a/src/tests/class_tests/openms/source/MapAlignmentAlgorithmSpectrumAlignment_test.cpp +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Timo Sachsenberg $ -// $Authors: Vipul Patel $ -// -------------------------------------------------------------------------- - -#include -#include - -#include -#include - -using namespace std; -using namespace OpenMS; - -///////////////////////////////////////////////////////////// - -START_TEST(MapAlignmentAlgorithmSpectrumAlignment, "$Id$") - -///////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////// - - -MapAlignmentAlgorithmSpectrumAlignment* ptr = nullptr; -MapAlignmentAlgorithmSpectrumAlignment* nullPointer = nullptr; -START_SECTION((MapAlignmentAlgorithmSpectrumAlignment())) - ptr = new MapAlignmentAlgorithmSpectrumAlignment(); - TEST_NOT_EQUAL(ptr, nullPointer) -END_SECTION - -START_SECTION((virtual ~MapAlignmentAlgorithmSpectrumAlignment())) - delete ptr; -END_SECTION - -START_SECTION((virtual void align(std::vector&, std::vector&))) -{ - MapAlignmentAlgorithmSpectrumAlignment ma; - std::vector maps; - PeakMap map1; - PeakMap map2; - for (UInt i = 0; i < 15; ++i) - { - for (UInt j = 1 ; j < 5; ++j) - { - PeakSpectrum spectrum; - spectrum.setRT(i); - spectrum.setMSLevel(j); - - for (float mz = 500.0; mz <= 900; mz += 100.0) - { - Peak1D peak; - peak.setMZ(mz + i); - peak.setIntensity(mz + i); - spectrum.push_back(peak); - } - map1.addSpectrum(spectrum); - } - } - for (UInt i = 0; i < 15; ++i) - { - for (UInt j = 1 ; j < 5; ++j) - { - PeakSpectrum spectrum; - spectrum.setRT(i * 1.2 + 200); - spectrum.setMSLevel(j); - - for (float mz = 500.0; mz <= 900; mz += 100.0) - { - Peak1D peak; - peak.setMZ(mz + i); - peak.setIntensity(mz + i); - spectrum.push_back(peak); - } - map2.addSpectrum(spectrum); - } - } - - maps.push_back(map1); - maps.push_back(map2); - std::vector transformations; - ma.align(maps, transformations); - String model_type = "interpolated"; - Param params; - params.setValue("interpolation_type", "cspline"); - transformations[0].fitModel(model_type, params); - transformations[1].fitModel(model_type, params); - MapAlignmentTransformer::transformRetentionTimes(maps[0], transformations[0]); - MapAlignmentTransformer::transformRetentionTimes(maps[1], transformations[1]); - maps[0].updateRanges(-1); - maps[1].updateRanges(-1); - for (Size i = 0; i < maps[0].size(); ++i) - { - if (maps[0][i].getMSLevel() < 2) - { - TEST_REAL_SIMILAR(maps[0][i].getRT(), maps[1][i].getRT()); - } - } -} -END_SECTION - -///////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////// -END_TEST - diff --git a/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithm_test.cpp b/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithm_test.cpp index 032627a30b4..730bad1a8ce 100644 --- a/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithm_test.cpp +++ b/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithm_test.cpp @@ -97,14 +97,6 @@ START_SECTION((bool isSameHandle(const FeatureHandle &lhs, const FeatureHandle & } END_SECTION -START_SECTION((static void registerChildren())) -{ - TEST_STRING_EQUAL(Factory::registeredProducts()[0],MapAlignmentEvaluationAlgorithmPrecision::getProductName()); - TEST_STRING_EQUAL(Factory::registeredProducts()[1],MapAlignmentEvaluationAlgorithmRecall::getProductName()); - TEST_EQUAL(Factory::registeredProducts().size(),2) -} -END_SECTION - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// END_TEST diff --git a/src/tests/class_tests/openms/source/PeakSpectrumCompareFunctor_test.cpp b/src/tests/class_tests/openms/source/PeakSpectrumCompareFunctor_test.cpp index 9021ebc4100..158dc975195 100644 --- a/src/tests/class_tests/openms/source/PeakSpectrumCompareFunctor_test.cpp +++ b/src/tests/class_tests/openms/source/PeakSpectrumCompareFunctor_test.cpp @@ -50,25 +50,6 @@ START_SECTION(double operator () (const PeakSpectrum& a) const) NOT_TESTABLE END_SECTION -START_SECTION(static void registerChildren()) - PeakSpectrumCompareFunctor* c1 = Factory::create("SpectrumCheapDPCorr"); - delete c1; - c1 = Factory::create("SpectrumPrecursorComparator"); - TEST_EQUAL(c1->getName(), "SpectrumPrecursorComparator") - delete c1; - c1 = Factory::create("ZhangSimilarityScore"); - TEST_EQUAL(c1->getName(), "ZhangSimilarityScore") - delete c1; - c1 = Factory::create("SteinScottImproveScore"); - TEST_EQUAL(c1->getName(), "SteinScottImproveScore"); - delete c1; -END_SECTION - -START_SECTION(static const String getProductName()) - TEST_EQUAL(PeakSpectrumCompareFunctor::getProductName(), "PeakSpectrumCompareFunctor") -END_SECTION - - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// END_TEST diff --git a/src/tests/class_tests/openms/source/SteinScottImproveScore_test.cpp b/src/tests/class_tests/openms/source/SteinScottImproveScore_test.cpp index 475bb86fa9c..d2ca961167b 100644 --- a/src/tests/class_tests/openms/source/SteinScottImproveScore_test.cpp +++ b/src/tests/class_tests/openms/source/SteinScottImproveScore_test.cpp @@ -103,9 +103,6 @@ START_SECTION(static PeakSpectrumCompareFunctor* create()) delete psf; END_SECTION -START_SECTION(static const String getProductName()) - TEST_EQUAL(ptr->getProductName(), "SteinScottImproveScore") -END_SECTION delete ptr; diff --git a/src/tests/topp/CMakeLists.txt b/src/tests/topp/CMakeLists.txt index de612f3e21a..99c6352a847 100644 --- a/src/tests/topp/CMakeLists.txt +++ b/src/tests/topp/CMakeLists.txt @@ -1212,16 +1212,6 @@ add_test("TOPP_MapAlignerIdentification_8" ${TOPP_BIN_PATH}/MapAlignerIdentifica add_test("TOPP_MapAlignerIdentification_8_out1" ${DIFF} -in1 MapAlignerIdentification_8_output1.tmp.trafoXML -in2 ${DATA_DIR_TOPP}/MapAlignerIdentification_8_output1.trafoXML) set_tests_properties("TOPP_MapAlignerIdentification_8_out1" PROPERTIES DEPENDS "TOPP_MapAlignerIdentification_8") -#------------------------------------------------------------------------------ -# MapAlignerSpectrum tests: -add_test("TOPP_MapAlignerSpectrum_1" ${TOPP_BIN_PATH}/MapAlignerSpectrum -test -ini ${DATA_DIR_TOPP}/MapAlignerSpectrum_parameters.ini -in ${DATA_DIR_TOPP}/MapAlignerSpectrum_1_input1.mzML ${DATA_DIR_TOPP}/MapAlignerSpectrum_1_input2.mzML ${DATA_DIR_TOPP}/MapAlignerSpectrum_1_input3.mzML -out MapAlignerSpectrum_1_output1.tmp.mzML MapAlignerSpectrum_1_output2.tmp.mzML MapAlignerSpectrum_1_output3.tmp.mzML) -add_test("TOPP_MapAlignerSpectrum_1_out1" ${DIFF} -whitelist ${INDEX_WHITELIST} -in1 MapAlignerSpectrum_1_output1.tmp.mzML -in2 ${DATA_DIR_TOPP}/MapAlignerSpectrum_1_output1.mzML ) -set_tests_properties("TOPP_MapAlignerSpectrum_1_out1" PROPERTIES DEPENDS "TOPP_MapAlignerSpectrum_1") -add_test("TOPP_MapAlignerSpectrum_1_out2" ${DIFF} -whitelist ${INDEX_WHITELIST} -in1 MapAlignerSpectrum_1_output2.tmp.mzML -in2 ${DATA_DIR_TOPP}/MapAlignerSpectrum_1_output2.mzML ) -set_tests_properties("TOPP_MapAlignerSpectrum_1_out2" PROPERTIES DEPENDS "TOPP_MapAlignerSpectrum_1") -add_test("TOPP_MapAlignerSpectrum_1_out3" ${DIFF} -whitelist ${INDEX_WHITELIST} -in1 MapAlignerSpectrum_1_output3.tmp.mzML -in2 ${DATA_DIR_TOPP}/MapAlignerSpectrum_1_output3.mzML ) -set_tests_properties("TOPP_MapAlignerSpectrum_1_out3" PROPERTIES DEPENDS "TOPP_MapAlignerSpectrum_1") - #------------------------------------------------------------------------------ # MapAlignerTreeGuided tests: add_test("TOPP_MapAlignerTreeGuided_1" ${TOPP_BIN_PATH}/MapAlignerTreeGuided -test -ini ${DATA_DIR_TOPP}/MapAlignerTreeGuided_parameters.ini -in ${DATA_DIR_TOPP}/MapAlignerTreeGuided_1_input1.featureXML ${DATA_DIR_TOPP}/MapAlignerTreeGuided_1_input2.featureXML ${DATA_DIR_TOPP}/MapAlignerTreeGuided_1_input3.featureXML -out MapAlignerTreeGuided_1_output1.tmp.featureXML MapAlignerTreeGuided_1_output2.tmp.featureXML MapAlignerTreeGuided_1_output3.tmp.featureXML) diff --git a/src/tests/topp/THIRDPARTY/proteins.cnlcp b/src/tests/topp/THIRDPARTY/proteins.cnlcp index 851fcb3ce4cfcd5a588d44879ce6026aebe95d76..44ffe0b021a5684babd995b5bf454f289241cf6b 100644 GIT binary patch delta 27 icmZo-ZDQqMU|`C7-5a!fBS#? diff --git a/src/tests/topp/THIRDPARTY/proteins.csarr b/src/tests/topp/THIRDPARTY/proteins.csarr index 8b6af9f473228a9db935d40c14cd27c6d27957d2..a4ae7fea76f089a9dfab1a2cca69b0f210a7a3fd 100644 GIT binary patch delta 27 jcmX>jd`6gqfq^OSb#Kt_jU2ljd`6gqfq^N{dH>@z8##7!ayH(5r2U?OK_LwQi+u_% diff --git a/src/tests/topp/THIRDPARTY/proteins.cseq b/src/tests/topp/THIRDPARTY/proteins.cseq index 2abc63cff373cd3ff29d5859276a7ce7784537cd..bc1e3147083b0f18c8eefe1293233d1cec777301 100644 GIT binary patch delta 34 qcmZo-ZDJK=U|`B)U{IU*x;JPy0|R5v->1s543qg73pTd?Wds1Bk_yED delta 34 qcmZo-ZDJK=U|`B)U{IUry#MhU1_s8)yN|TrGfd`VEZErkmk|J`l?#0U diff --git a/src/topp/FeatureFinderCentroided.cpp b/src/topp/FeatureFinderCentroided.cpp index 82feb1659fe..550e78e14bf 100644 --- a/src/topp/FeatureFinderCentroided.cpp +++ b/src/topp/FeatureFinderCentroided.cpp @@ -147,7 +147,7 @@ class TOPPFeatureFinderCentroided : Param getSubsectionDefaults_(const String& /*section*/) const override { - return FeatureFinder().getParameters(FeatureFinderAlgorithmPicked::getProductName()); + return FeatureFinder().getParameters("centroided"); } ExitCodes main_(int, const char**) override @@ -218,7 +218,7 @@ class TOPPFeatureFinderCentroided : writeDebug_("Parameters passed to FeatureFinder", feafi_param, 3); // Apply the feature finder - ff.run(FeatureFinderAlgorithmPicked::getProductName(), exp, features, feafi_param, seeds); + ff.run("centroided", exp, features, feafi_param, seeds); features.applyMemberFunction(&UniqueIdInterface::setUniqueId); // DEBUG diff --git a/src/topp/MapAlignerIdentification.cpp b/src/topp/MapAlignerIdentification.cpp index ab44a541447..7e2b7e6b572 100644 --- a/src/topp/MapAlignerIdentification.cpp +++ b/src/topp/MapAlignerIdentification.cpp @@ -57,7 +57,7 @@ All map alignment tools (MapAligner...) collect retention time data from the inp The map alignment tools differ in how they obtain retention time data for the modeling of transformations, and consequently what types of data they can be applied to. The alignment algorithm implemented here is based on peptide identifications, and thus applicable to files containing peptide IDs (idXML, annotated featureXML/consensusXML). It finds peptide sequences that different input files have in common and uses them as points of correspondence between the inputs. For more details and algorithm-specific parameters (set in the INI file) see "Detailed Description" in the @ref OpenMS::MapAlignmentAlgorithmIdentification "algorithm documentation". -@see @ref TOPP_MapAlignerPoseClustering @ref TOPP_MapAlignerSpectrum @ref TOPP_MapRTTransformer +@see @ref TOPP_MapAlignerPoseClustering @ref TOPP_MapRTTransformer Note that alignment is based on the sequence including modifications, thus an exact match is required. I.e., a peptide with oxidised methionine will not be matched to its unmodified version. This behavior is generally desired since (some) modifications can cause retention time shifts. diff --git a/src/topp/MapAlignerPoseClustering.cpp b/src/topp/MapAlignerPoseClustering.cpp index eff0089ebbf..f7fa9a4344a 100644 --- a/src/topp/MapAlignerPoseClustering.cpp +++ b/src/topp/MapAlignerPoseClustering.cpp @@ -66,7 +66,7 @@ step. This algorithm can be applied to features (featureXML) and peaks details and algorithm-specific parameters (set in the INI file) see "Detailed Description" in the @ref OpenMS::MapAlignmentAlgorithmPoseClustering "algorithm documentation". -@see @ref TOPP_MapAlignerPoseClustering @ref TOPP_MapAlignerSpectrum @ref TOPP_MapRTTransformer +@see @ref TOPP_MapAlignerPoseClustering @ref TOPP_MapRTTransformer This algorithm uses an affine transformation model. diff --git a/src/topp/MapAlignerSpectrum.cpp b/src/topp/MapAlignerSpectrum.cpp deleted file mode 100644 index 259a7ee234c..00000000000 --- a/src/topp/MapAlignerSpectrum.cpp +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Timo Sachsenberg $ -// $Authors: Marc Sturm, Clemens Groepl $ -// -------------------------------------------------------------------------- - -#include -#include -#include -#include - -using namespace OpenMS; -using namespace std; - -//------------------------------------------------------------- -// Doxygen docu -//------------------------------------------------------------- - -/** -@page TOPP_MapAlignerSpectrum MapAlignerSpectrum - -@brief Corrects retention time distortions between maps by aligning spectra. - -

      -
      - - - - - - - -
      potential predecessor tools - → MapAlignerSpectrum → potential successor tools -
      @ref TOPP_FileConverter @ref TOPP_FeatureFinderCentroided @n (or another feature finding algorithm)
      - - -This tool provides an algorithm to align the retention time scales of multiple input files, correcting shifts and distortions between them. Retention time adjustment may be necessary to correct for chromatography differences e.g. before data from multiple LC-MS runs can be combined (feature grouping), or when one run should be annotated with peptide identifications obtained in a different run. - - All map alignment tools (MapAligner...) collect retention time data from the input files and - by fitting a model to this data - compute transformations that map all runs to a common retention time scale. They can apply the transformations right away and return output files with aligned time scales (parameter @p out), and/or return descriptions of the transformations in trafoXML format (parameter @p trafo_out). Transformations stored as trafoXML can be applied to arbitrary files with the @ref TOPP_MapRTTransformer tool. - -The map alignment tools differ in how they obtain retention time data for the modeling of transformations, and consequently what types of data they can be applied to. Here, an experimental algorithm based on spectrum alignment is implemented. It is only applicable to peak maps (mzML format). -For more details and algorithm-specific parameters (set in the INI file) see "Detailed Description" in the @ref OpenMS::MapAlignmentAlgorithmSpectrumAlignment "algorithm documentation". - -@see @ref TOPP_MapAlignerIdentification @ref TOPP_MapAlignerPoseClustering @ref TOPP_MapRTTransformer - -Since %OpenMS 1.8, the extraction of data for the alignment has been separate from the modeling of RT transformations based on that data. It is now possible to use different models independently of the chosen algorithm. This algorithm has been tested mostly with the "interpolated" model. The different available models are: -- @ref OpenMS::TransformationModelLinear "linear": Linear model. -- @ref OpenMS::TransformationModelInterpolated "interpolated": Smoothing spline (non-linear). - -The following parameters control the modeling of RT transformations (they can be set in the "model" section of the INI file): -@htmlinclude OpenMS_MapAlignerSpectrumModel.parameters @n - -The command line parameters of this tool are: @n -@verbinclude TOPP_MapAlignerSpectrum.cli -INI file documentation of this tool: -@htmlinclude TOPP_MapAlignerSpectrum.html - -*/ - -// We do not want this class to show up in the docu: -/// @cond TOPPCLASSES - -class TOPPMapAlignerSpectrum : - public TOPPMapAlignerBase -{ - -public: - TOPPMapAlignerSpectrum() : - TOPPMapAlignerBase("MapAlignerSpectrum", "Corrects retention time distortions between maps by spectrum alignment.") - { - } - -protected: - void registerOptionsAndFlags_() override - { - String formats = "mzML"; - // no support for a reference file yet: - TOPPMapAlignerBase::registerOptionsAndFlagsMapAligners_(formats, REF_NONE); - registerSubsection_("algorithm", "Algorithm parameters section"); - registerSubsection_("model", "Options to control the modeling of retention time transformations from data"); - } - - Param getSubsectionDefaults_(const String& section) const override - { - if (section == "algorithm") - { - MapAlignmentAlgorithmSpectrumAlignment algo; - return algo.getParameters(); - } - if (section == "model") - { - return getModelDefaults("interpolated"); - } - return Param(); // shouldn't happen - } - - ExitCodes main_(int, const char**) override - { - ExitCodes ret = checkParameters_(); - if (ret != EXECUTION_OK) return ret; - - MapAlignmentAlgorithmSpectrumAlignment algorithm; - Param algo_params = getParam_().copy("algorithm:", true); - algorithm.setParameters(algo_params); - algorithm.setLogType(log_type_); - - StringList ins = getStringList_("in"); - StringList outs = getStringList_("out"); - StringList trafos = getStringList_("trafo_out"); - Param model_params = getParam_().copy("model:", true); - String model_type = model_params.getValue("type").toString(); - model_params = model_params.copy(model_type + ":", true); - std::vector transformations; - - //------------------------------------------------------------- - // perform peak alignment - //------------------------------------------------------------- - ProgressLogger progresslogger; - progresslogger.setLogType(log_type_); - - // load input - std::vector peak_maps(ins.size()); - FileHandler f; - progresslogger.startProgress(0, ins.size(), "loading input files"); - for (Size i = 0; i < ins.size(); ++i) - { - progresslogger.setProgress(i); - f.loadExperiment(ins[i], peak_maps[i], {FileTypes::MZML}, log_type_); - } - progresslogger.endProgress(); - - // try to align - algorithm.align(peak_maps, transformations); - if (model_type != "none") - { - for (TransformationDescription& tra : transformations) - { - tra.fitModel(model_type, model_params); - } - } - - // write output - progresslogger.startProgress(0, outs.size(), "applying RT transformations and writing output files"); - for (Size i = 0; i < outs.size(); ++i) - { - progresslogger.setProgress(i); - - MapAlignmentTransformer::transformRetentionTimes(peak_maps[i], - transformations[i]); - // annotate output with data processing info - addDataProcessing_(peak_maps[i], - getProcessingInfo_(DataProcessing::ALIGNMENT)); - - f.storeExperiment(outs[i], peak_maps[i],{FileTypes::MZML}, log_type_); - } - progresslogger.endProgress(); - - if (!trafos.empty()) - { - for (Size i = 0; i < transformations.size(); ++i) - { - FileHandler().storeTransformations(trafos[i], transformations[i], {FileTypes::TRANSFORMATIONXML}); - } - } - - return EXECUTION_OK; - } - -}; - - -int main(int argc, const char** argv) -{ - TOPPMapAlignerSpectrum tool; - return tool.main(argc, argv); -} - -/// @endcond diff --git a/src/topp/MapAlignerTreeGuided.cpp b/src/topp/MapAlignerTreeGuided.cpp index 76e2b6d3e4c..56b8a6bd31b 100644 --- a/src/topp/MapAlignerTreeGuided.cpp +++ b/src/topp/MapAlignerTreeGuided.cpp @@ -60,7 +60,7 @@ maps for hierarchical clustering. Tree based, the alignment of each cluster pair @ref OpenMS::MapAlignmentAlgorithmIdentification. For more details and algorithm-specific parameters (set in the INI file) see "Detailed Description" in the @ref OpenMS::MapAlignmentAlgorithmTreeGuided "algorithm documentation". -@see @ref TOPP_MapAlignerIdentification @ref TOPP_MapAlignerPoseClustering @ref TOPP_MapAlignerSpectrum @ref TOPP_MapRTTransformer +@see @ref TOPP_MapAlignerIdentification @ref TOPP_MapAlignerPoseClustering @ref TOPP_MapRTTransformer Note that alignment is based on the sequence including modifications, thus an exact match is required. I.e., a peptide with oxidised methionine will not be matched to its unmodified version. This behavior is generally desired since (some) modifications can cause retention time shifts. diff --git a/src/topp/MapRTTransformer.cpp b/src/topp/MapRTTransformer.cpp index 20b071c3831..d5141c6eb3f 100644 --- a/src/topp/MapRTTransformer.cpp +++ b/src/topp/MapRTTransformer.cpp @@ -41,7 +41,7 @@ The transformations might have been generated by a previous invocation of one of However, the trafoXML file format is not very complicated, so it is relatively easy to write (or generate) your own files. Each input file will give rise to one output file. -@see @ref TOPP_MapAlignerIdentification @ref TOPP_MapAlignerPoseClustering @ref TOPP_MapAlignerSpectrum +@see @ref TOPP_MapAlignerIdentification @ref TOPP_MapAlignerPoseClustering With this tool it is also possible to invert transformations, or to fit a different model than originally specified to the retention time data in the transformation files. To fit a new model, choose a value other than "none" for the model type (see below). diff --git a/src/topp/SpecLibSearcher.cpp b/src/topp/SpecLibSearcher.cpp index 14fd93356d1..fa0861007d6 100644 --- a/src/topp/SpecLibSearcher.cpp +++ b/src/topp/SpecLibSearcher.cpp @@ -110,9 +110,8 @@ class TOPPSpecLibSearcher : // registerStringOption_("fragment:mass_tolerance_unit", "", "ppm", "Unit of fragment m", false, false); // setValidStrings_("fragment:mass_tolerance_unit", fragment_mass_tolerance_unit_valid_strings); - registerStringOption_("compare_function", "", "ZhangSimilarityScore", "function for similarity comparison", false); - PeakSpectrumCompareFunctor::registerChildren(); - setValidStrings_("compare_function", Factory::registeredProducts()); +// registerStringOption_("compare_function", "", "ZhangSimilarityScore", "function for similarity comparison", false); +// setValidStrings_("compare_function", Factory::registeredProducts()); registerTOPPSubsection_("report", "Reporting Options"); registerIntOption_("report:top_hits", "", 10, "Maximum number of top scoring hits per spectrum that are reported.", false, true); diff --git a/src/topp/executables.cmake b/src/topp/executables.cmake index 157cadff9ce..c059a9ad6f3 100644 --- a/src/topp/executables.cmake +++ b/src/topp/executables.cmake @@ -63,7 +63,6 @@ JSONExporter LuciphorAdapter MapAlignerIdentification MapAlignerPoseClustering -MapAlignerSpectrum MapAlignerTreeGuided MapNormalizer MapRTTransformer From 386aa624137404cddb551086e51668917b33b520 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Wed, 28 Feb 2024 17:07:05 +0100 Subject: [PATCH 232/242] some more fixes --- doc/code_examples/Tutorial_FeatureFinder.cpp | 6 +- .../FEATUREFINDER/BiGaussModel.h | 3 +- .../FEATUREFINDER/FeatureFinder.h | 2 +- .../FEATUREFINDER/FeatureFinderAlgorithm.h | 3 +- .../FEATUREFINDER/FeatureFinderAlgorithmMRM.h | 6 +- .../FeatureFinderAlgorithmPicked.h | 2 +- .../ANALYSIS/MAPMATCHING/BaseGroupFinder.cpp | 2 - .../MAPMATCHING/FeatureGroupingAlgorithm.cpp | 1 - .../MapAlignmentEvaluationAlgorithm.cpp | 2 - .../ANALYSIS/OPENSWATH/SONARScoring.cpp | 2 +- .../COMPARISON/CLUSTERING/ClusterFunctor.cpp | 1 - .../SPECTRA/BinnedSpectrumCompareFunctor.cpp | 3 - .../SPECTRA/PeakSpectrumCompareFunctor.cpp | 1 - src/openms/source/CONCEPT/ProgressLogger.cpp | 1 - .../FILTERING/TRANSFORMERS/FilterFunctor.cpp | 2 - .../TRANSFORMERS/PreprocessingFunctor.cpp | 1 - .../FEATUREFINDER/BiGaussFitter1D.cpp | 4 +- .../FEATUREFINDER/EmgFitter1D.cpp | 5 +- .../FEATUREFINDER/ExtendedIsotopeFitter1D.cpp | 7 +- .../FEATUREFINDER/FeatureFinder.cpp | 13 ++-- .../FEATUREFINDER/FeatureFinderAlgorithm.cpp | 4 -- .../FeatureFinderAlgorithmMRM.cpp | 26 ++++--- .../FeatureFinderAlgorithmPicked.cpp | 69 ++++++++++++++++++- .../FEATUREFINDER/Fitter1D.cpp | 2 - .../FEATUREFINDER/GaussFitter1D.cpp | 5 +- .../FEATUREFINDER/IsotopeFitter1D.cpp | 7 +- .../APPLICATIONS/MISC/QApplicationTOPP.cpp | 3 +- src/pyOpenMS/pxds/FilterFunctor.pxd | 1 - .../pxds/MapAlignmentEvaluationAlgorithm.pxd | 1 - .../class_tests/openms/executables.cmake | 1 - .../openms/source/BaseGroupFinder_test.cpp | 3 - .../openms/source/BaseModel_test.cpp | 10 --- .../openms/source/BaseSuperimposer_test.cpp | 4 -- .../openms/source/BiGaussModel_test.cpp | 2 +- .../BinnedSpectrumCompareFunctor_test.cpp | 1 - .../openms/source/ClusterFunctor_test.cpp | 1 - .../openms/source/Factory_test.cpp | 10 --- .../source/FeatureFinderAlgorithmMRM_test.cpp | 14 ++-- .../FeatureFinderAlgorithmPicked_test.cpp | 9 +-- .../source/FeatureFinderAlgorithm_test.cpp | 3 +- .../openms/source/FeatureFinder_test.cpp | 58 ---------------- .../source/FeatureGroupingAlgorithm_test.cpp | 5 +- .../openms/source/FilterFunctor_test.cpp | 1 - ...pAlignmentAlgorithmPoseClustering_test.cpp | 2 - .../MapAlignmentEvaluationAlgorithm_test.cpp | 1 - .../PeakSpectrumCompareFunctor_test.cpp | 1 - .../openms/source/SingletonRegistry_test.cpp | 5 +- .../openms_gui/source/GUI/TOPPView_test.cpp | 3 +- src/topp/FeatureFinderCentroided.cpp | 12 ++-- src/topp/FeatureFinderMRM.cpp | 8 +-- src/topp/FileFilter.cpp | 3 +- src/topp/GenericWrapper.cpp | 1 - src/topp/SpecLibSearcher.cpp | 16 ++++- 53 files changed, 157 insertions(+), 202 deletions(-) diff --git a/doc/code_examples/Tutorial_FeatureFinder.cpp b/doc/code_examples/Tutorial_FeatureFinder.cpp index ee1d3a0c719..b7876c15a92 100644 --- a/doc/code_examples/Tutorial_FeatureFinder.cpp +++ b/doc/code_examples/Tutorial_FeatureFinder.cpp @@ -2,14 +2,14 @@ // SPDX-License-Identifier: BSD-3-Clause // -#include +#include using namespace OpenMS; using namespace std; Int main() { - FeatureFinder ff; + FeatureFinderAlgorithmPicked ff; // ... set parameters (e.g. from INI file) Param parameters; // ... set input data (e.g. from mzML file) @@ -19,6 +19,6 @@ Int main() // ... set user-specified seeds, if needed FeatureMap seeds; - ff.run("simple", input, output, parameters, seeds); + ff.run(input, output, parameters, seeds); } //end of main diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussModel.h index 98718d4343a..78ed6cd6de7 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussModel.h @@ -40,12 +40,13 @@ namespace OpenMS /// assignment operator virtual BiGaussModel & operator=(const BiGaussModel & source); +/* /// create new BiGaussModel object (function needed by Factory) static BaseModel * create() { return new BiGaussModel(); } - +*/ /// name of the model (needed by Factory) static const String getProductName() { diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinder.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinder.h index 1f2d72d8ae2..a912a4d1475 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinder.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinder.h @@ -57,7 +57,7 @@ as this will disturb most algorithms. Implemented in FeatureFinder_impl.h */ - void run(const String& algorithm_name, PeakMap& input_map, FeatureMap& features, const Param& param, const FeatureMap& seeds); + //void run(const String& algorithm_name, PeakMap& input_map, FeatureMap& features, const Param& param, const FeatureMap& seeds); /// Returns a non-mutable reference to a peak flag const Flag& getPeakFlag(const IndexPair& index) const diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.h index 51f18f54c53..0b195c91702 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.h @@ -87,11 +87,10 @@ namespace OpenMS } /// Sets a reference to the calling FeatureFinder - void setData(const MapType& map, FeatureMap& features, FeatureFinder& ff) + void setData(const MapType& map, FeatureMap& features) { map_ = ↦ features_ = &features; - ff_ = &ff; } /** diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.h index cf2a6bce9ef..09fa3e32e69 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.h @@ -62,10 +62,8 @@ namespace OpenMS /// Main method for actual FeatureFinder void run() override; - static FeatureFinderAlgorithm* create(); - - static const String getProductName(); - + void run(PeakMap& input_map, FeatureMap& features, const Param& param, const FeatureMap& seeds); + protected: double fitRT_(std::vector& rt_input_data, std::unique_ptr& model) const; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.h index aa12e6f007d..a2bf25b92b8 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.h @@ -64,7 +64,7 @@ namespace OpenMS /// Main method for actual FeatureFinder void run() override; - static FeatureFinderAlgorithm* create(); + void run(PeakMap& input_map, FeatureMap& features, const Param& param, const FeatureMap& seeds); protected: /// editable copy of the map diff --git a/src/openms/source/ANALYSIS/MAPMATCHING/BaseGroupFinder.cpp b/src/openms/source/ANALYSIS/MAPMATCHING/BaseGroupFinder.cpp index 3c1dc49dd04..e1ced7986e9 100644 --- a/src/openms/source/ANALYSIS/MAPMATCHING/BaseGroupFinder.cpp +++ b/src/openms/source/ANALYSIS/MAPMATCHING/BaseGroupFinder.cpp @@ -12,8 +12,6 @@ #include #include -#include - namespace OpenMS { diff --git a/src/openms/source/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithm.cpp b/src/openms/source/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithm.cpp index 77b79944ff0..bc788c1a681 100644 --- a/src/openms/source/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithm.cpp +++ b/src/openms/source/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithm.cpp @@ -15,7 +15,6 @@ #include #include -#include using namespace std; diff --git a/src/openms/source/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithm.cpp b/src/openms/source/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithm.cpp index 65373bbeb09..7020c8e9d01 100644 --- a/src/openms/source/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithm.cpp +++ b/src/openms/source/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithm.cpp @@ -12,8 +12,6 @@ #include #include -#include - namespace OpenMS { diff --git a/src/openms/source/ANALYSIS/OPENSWATH/SONARScoring.cpp b/src/openms/source/ANALYSIS/OPENSWATH/SONARScoring.cpp index 0a557726e0b..6ba307fa890 100644 --- a/src/openms/source/ANALYSIS/OPENSWATH/SONARScoring.cpp +++ b/src/openms/source/ANALYSIS/OPENSWATH/SONARScoring.cpp @@ -51,7 +51,7 @@ namespace OpenMS /// Cross Correlation array typedef OpenSwath::Scoring::XCorrArrayType XCorrArrayType; /// Cross Correlation matrix - typedef std::vector > XCorrMatrixType; + typedef std::vector> XCorrMatrixType; XCorrMatrixType xcorr_matrix; xcorr_matrix.resize(sonar_profiles.size()); diff --git a/src/openms/source/COMPARISON/CLUSTERING/ClusterFunctor.cpp b/src/openms/source/COMPARISON/CLUSTERING/ClusterFunctor.cpp index 786d0915569..4a2d14d34e9 100644 --- a/src/openms/source/COMPARISON/CLUSTERING/ClusterFunctor.cpp +++ b/src/openms/source/COMPARISON/CLUSTERING/ClusterFunctor.cpp @@ -11,7 +11,6 @@ #include #include #include -#include using namespace std; diff --git a/src/openms/source/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.cpp b/src/openms/source/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.cpp index a463ef16edf..7e96737d51d 100644 --- a/src/openms/source/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.cpp +++ b/src/openms/source/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.cpp @@ -10,9 +10,6 @@ #include #include #include -#include - - using namespace std; diff --git a/src/openms/source/COMPARISON/SPECTRA/PeakSpectrumCompareFunctor.cpp b/src/openms/source/COMPARISON/SPECTRA/PeakSpectrumCompareFunctor.cpp index e6c57992b85..c0d5ac2d1d8 100644 --- a/src/openms/source/COMPARISON/SPECTRA/PeakSpectrumCompareFunctor.cpp +++ b/src/openms/source/COMPARISON/SPECTRA/PeakSpectrumCompareFunctor.cpp @@ -14,7 +14,6 @@ #include #include #include -#include using namespace std; diff --git a/src/openms/source/CONCEPT/ProgressLogger.cpp b/src/openms/source/CONCEPT/ProgressLogger.cpp index 36aa221dd73..a1343696307 100644 --- a/src/openms/source/CONCEPT/ProgressLogger.cpp +++ b/src/openms/source/CONCEPT/ProgressLogger.cpp @@ -9,7 +9,6 @@ #include #include -//#include #include #include diff --git a/src/openms/source/FILTERING/TRANSFORMERS/FilterFunctor.cpp b/src/openms/source/FILTERING/TRANSFORMERS/FilterFunctor.cpp index 3979c395d0d..6491c4aadb1 100644 --- a/src/openms/source/FILTERING/TRANSFORMERS/FilterFunctor.cpp +++ b/src/openms/source/FILTERING/TRANSFORMERS/FilterFunctor.cpp @@ -16,8 +16,6 @@ #include #include -#include - namespace OpenMS { FilterFunctor::FilterFunctor() : diff --git a/src/openms/source/FILTERING/TRANSFORMERS/PreprocessingFunctor.cpp b/src/openms/source/FILTERING/TRANSFORMERS/PreprocessingFunctor.cpp index 09d971aa0be..6611ffadd27 100644 --- a/src/openms/source/FILTERING/TRANSFORMERS/PreprocessingFunctor.cpp +++ b/src/openms/source/FILTERING/TRANSFORMERS/PreprocessingFunctor.cpp @@ -16,7 +16,6 @@ #include #include #include -#include namespace OpenMS { diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.cpp index 7d58cb2c63b..1532b49f2dc 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.cpp @@ -8,8 +8,8 @@ #include -#include #include +#include namespace OpenMS { @@ -69,7 +69,7 @@ namespace OpenMS // build model - model = std::unique_ptr(dynamic_cast(Factory::create("BiGaussModel"))); + model = std::unique_ptr(new BiGaussModel()); model->setInterpolationStep(interpolation_step_); Param tmp; tmp.setValue("bounding_box:min", min_bb); diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.cpp index f29dc9abfd4..20ddc94b1ee 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.cpp @@ -8,9 +8,10 @@ #include #include +#include + #include #include -#include #include @@ -181,7 +182,7 @@ namespace OpenMS retention_ = x_init[3]; // build model - model = std::unique_ptr(dynamic_cast(Factory::create("EmgModel"))); + model = std::unique_ptr(new EmgModel()); model->setInterpolationStep(interpolation_step_); Param tmp; diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.cpp index 8ac6783546c..650c388581b 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.cpp @@ -10,7 +10,8 @@ #include #include -#include +#include +#include namespace OpenMS { @@ -76,7 +77,7 @@ namespace OpenMS max_bb += stdev; - model = std::unique_ptr(dynamic_cast(Factory::create("GaussModel"))); + model = std::unique_ptr(new GaussModel()); model->setInterpolationStep(interpolation_step_); Param tmp; @@ -88,7 +89,7 @@ namespace OpenMS } else { - model = std::unique_ptr(dynamic_cast(Factory::create("ExtendedIsotopeModel"))); + model = std::unique_ptr(new ExtendedIsotopeModel()); Param iso_param = this->param_.copy("isotope_model:", true); iso_param.removeAll("stdev"); diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinder.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinder.cpp index 6c4d050d26a..5b081ec4b6d 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinder.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinder.cpp @@ -9,7 +9,6 @@ #include #include -#include namespace OpenMS { @@ -20,8 +19,8 @@ namespace OpenMS FeatureFinder::~FeatureFinder() = default; - Param FeatureFinder::getParameters(const String& algorithm_name) const - { + Param FeatureFinder::getParameters(const String& /*algorithm_name*/) const + {/* TODO: remove? Param tmp; if (algorithm_name != "none") { @@ -30,8 +29,12 @@ namespace OpenMS delete(a); } return tmp; + */ + std::cerr << "TODO: remove" << std::endl; + return Param(); } +/* most of that stuff doesn't belong in a base class!!! and 100% no type checks via strings!!! void FeatureFinder::run(const String& algorithm_name, PeakMap& input_map, FeatureMap& features, const Param& param, const FeatureMap& seeds) { // Nothing to do if there is no data @@ -93,12 +96,13 @@ namespace OpenMS { FeatureFinderAlgorithm* algorithm = Factory::create(algorithm_name); algorithm->setParameters(param); - algorithm->setData(input_map, features, *this); + algorithm->setData(input_map, features); algorithm->setSeeds(seeds); algorithm->run(); delete(algorithm); } + // *facepalm* if (algorithm_name != "mrm") // mrm works on chromatograms; the next section is only for conventional data { //report RT apex spectrum index and native ID for each feature @@ -121,5 +125,6 @@ namespace OpenMS } } } +*/ } diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.cpp index 66964e6e0f7..a981293dbcf 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.cpp @@ -7,10 +7,6 @@ // -------------------------------------------------------------------------- #include -#include -#include - -#include namespace OpenMS { diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.cpp index 832c0261952..363dcc7fdab 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.cpp @@ -350,16 +350,6 @@ namespace OpenMS } } - FeatureFinderAlgorithm* FeatureFinderAlgorithmMRM::create() - { - return new FeatureFinderAlgorithmMRM(); - } - - const String FeatureFinderAlgorithmMRM::getProductName() - { - return "mrm"; - } - double FeatureFinderAlgorithmMRM::fitRT_(std::vector& rt_input_data, std::unique_ptr& model) const { double quality; @@ -394,4 +384,20 @@ param.setValue( "deltaRelError", deltaRelError_); { } + void FeatureFinderAlgorithmMRM::run(PeakMap& input_map, FeatureMap& features, const Param& param, const FeatureMap& seeds) + { + // Nothing to do if there is no data + if (input_map.getChromatograms().empty()) + { + features.clear(true); + return; + } + + // do the work + setParameters(param); + setData(input_map, features); + setSeeds(seeds); // TODO: needed for MRM????? was in old code + run(); + } + } diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.cpp index c7d841d733a..97bec966fff 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.cpp @@ -1032,9 +1032,74 @@ namespace OpenMS } - FeatureFinderAlgorithm* FeatureFinderAlgorithmPicked::create() + void FeatureFinderAlgorithmPicked::run(PeakMap& input_map, FeatureMap& features, const Param& param, const FeatureMap& seeds) { - return new FeatureFinderAlgorithmPicked(); + // Nothing to do if there is no data + if (input_map.empty()) + { + features.clear(true); + return; + } + + // check input + { + // We need updated ranges => check number of peaks + if (input_map.getSize() == 0) + { + throw Exception::IllegalArgument(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "FeatureFinder needs updated ranges on input map. Aborting."); + } + + // We need MS1 data only => check levels + if (input_map.getMSLevels().size() != 1 || input_map.getMSLevels()[0] != 1) + { + throw Exception::IllegalArgument(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "FeatureFinder can only operate on MS level 1 data. Please do not use MS/MS data. Aborting."); + } + + //Check if the peaks are sorted according to m/z + if (!input_map.isSorted(true)) + { + OPENMS_LOG_WARN << "Input map is not sorted by RT and m/z! This is done now, before applying the algorithm!" << std::endl; + input_map.sortSpectra(true); + input_map.sortChromatograms(true); + } + + for (Size s = 0; s < input_map.size(); ++s) + { + if (input_map[s].empty()) + { + continue; + } + if (input_map[s][0].getMZ() < 0) + { + throw Exception::IllegalArgument(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "FeatureFinder can only operate on spectra that contain peaks with positive m/z values. Filter the data accordingly beforehand! Aborting."); + } + } + } + + // do the work + setParameters(param); + setData(input_map, features); + setSeeds(seeds); + run(); + + //report RT apex spectrum index and native ID for each feature + for (Size i = 0; i < features.size(); ++i) + { + //index + Size spectrum_index = input_map.RTBegin(features[i].getRT()) - input_map.begin(); + features[i].setMetaValue("spectrum_index", spectrum_index); + //native id + if (spectrum_index < input_map.size()) + { + String native_id = input_map[spectrum_index].getNativeID(); + features[i].setMetaValue("spectrum_native_id", native_id); + } + else + { + /// @todo that happens sometimes using IsotopeWaveletFeatureFinder (Rene, Marc, Andreas, Clemens) + std::cerr << "FeatureFinderAlgorithm_impl, line=" << __LINE__ << "; FixMe this cannot be, but happens" << std::endl; + } + } } void FeatureFinderAlgorithmPicked::updateMembers_() diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/Fitter1D.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/Fitter1D.cpp index a35c37a09a3..83e3a1d9b31 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/Fitter1D.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/Fitter1D.cpp @@ -15,8 +15,6 @@ #include #include -#include - namespace OpenMS { Fitter1D::Fitter1D() : diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.cpp index 32b513e3988..ab5e543b9ae 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.cpp @@ -8,8 +8,8 @@ #include -#include #include +#include namespace OpenMS { @@ -67,7 +67,8 @@ namespace OpenMS // build model - model = std::unique_ptr(dynamic_cast(Factory::create("GaussModel"))); + model = std::unique_ptr(new GaussModel()); + model->setInterpolationStep(interpolation_step_); Param tmp; diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.cpp index f05f9ef883e..a2036e8b6d6 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.cpp @@ -8,7 +8,8 @@ #include #include -#include +#include + #include namespace OpenMS @@ -74,7 +75,7 @@ namespace OpenMS // build model if (charge_ == 0) { - model = std::unique_ptr(dynamic_cast(Factory::create("GaussModel"))); + model = std::unique_ptr(new GaussModel()); model->setInterpolationStep(interpolation_step_); Param tmp; @@ -86,7 +87,7 @@ namespace OpenMS } else { - model = std::unique_ptr(dynamic_cast(Factory::create("IsotopeModel"))); + model = std::unique_ptr(new IsotopeModel()); Param iso_param = this->param_.copy("isotope_model:", true); iso_param.removeAll("stdev"); diff --git a/src/openms_gui/source/VISUAL/APPLICATIONS/MISC/QApplicationTOPP.cpp b/src/openms_gui/source/VISUAL/APPLICATIONS/MISC/QApplicationTOPP.cpp index 03e9c361baa..0eb50aa243d 100644 --- a/src/openms_gui/source/VISUAL/APPLICATIONS/MISC/QApplicationTOPP.cpp +++ b/src/openms_gui/source/VISUAL/APPLICATIONS/MISC/QApplicationTOPP.cpp @@ -10,7 +10,6 @@ #include #include -#include #include #include #include @@ -36,7 +35,7 @@ namespace OpenMS QApplication(argc, argv) { // register GUI ProgressLogger that can be used in GUI tools - Factory::registerProduct(GUIProgressLoggerImpl::getProductName(), &GUIProgressLoggerImpl::create); + // TODO: Factory::registerProduct(GUIProgressLoggerImpl::getProductName(), &GUIProgressLoggerImpl::create); // set plastique style unless windows / mac style is available if (QStyleFactory::keys().contains("windowsxp", Qt::CaseInsensitive)) diff --git a/src/pyOpenMS/pxds/FilterFunctor.pxd b/src/pyOpenMS/pxds/FilterFunctor.pxd index e2aa47a7629..e22d4dc720f 100644 --- a/src/pyOpenMS/pxds/FilterFunctor.pxd +++ b/src/pyOpenMS/pxds/FilterFunctor.pxd @@ -13,4 +13,3 @@ cdef extern from "" namespace "Op FilterFunctor(FilterFunctor &) except + nogil # double apply(MSSpectrum & ) except + nogil - void registerChildren() except + nogil diff --git a/src/pyOpenMS/pxds/MapAlignmentEvaluationAlgorithm.pxd b/src/pyOpenMS/pxds/MapAlignmentEvaluationAlgorithm.pxd index b26ccdd5191..5fff5b16c6d 100644 --- a/src/pyOpenMS/pxds/MapAlignmentEvaluationAlgorithm.pxd +++ b/src/pyOpenMS/pxds/MapAlignmentEvaluationAlgorithm.pxd @@ -14,4 +14,3 @@ cdef extern from " &input, ConsensusMap &result)=0)) NOT_TESTABLE diff --git a/src/tests/class_tests/openms/source/BaseModel_test.cpp b/src/tests/class_tests/openms/source/BaseModel_test.cpp index de53bc59f4f..1cc7e9be467 100644 --- a/src/tests/class_tests/openms/source/BaseModel_test.cpp +++ b/src/tests/class_tests/openms/source/BaseModel_test.cpp @@ -179,10 +179,6 @@ START_SECTION([EXTRA] DefaultParmHandler::setParameters(...)) TEST_REAL_SIMILAR(m.getParameters().getValue("cutoff"), 17.0) END_SECTION -START_SECTION((static void registerChildren())) - // TODO -END_SECTION - START_SECTION((virtual IntensityType getCutOff() const)) TestModel s; s.setCutOff(4.4); @@ -197,12 +193,6 @@ START_SECTION((virtual void getSamples(std::ostream &os))) NOT_TESTABLE; END_SECTION -START_SECTION((template void registerChildren())) -{ - NOT_TESTABLE; -} -END_SECTION - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/BaseSuperimposer_test.cpp b/src/tests/class_tests/openms/source/BaseSuperimposer_test.cpp index 681e78c49e9..482c24ab38a 100644 --- a/src/tests/class_tests/openms/source/BaseSuperimposer_test.cpp +++ b/src/tests/class_tests/openms/source/BaseSuperimposer_test.cpp @@ -65,10 +65,6 @@ START_SECTION((virtual void run(const ConsensusMap& map_model, const ConsensusMa } END_SECTION -START_SECTION((static void registerChildren())) - NOT_TESTABLE -END_SECTION - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// END_TEST diff --git a/src/tests/class_tests/openms/source/BiGaussModel_test.cpp b/src/tests/class_tests/openms/source/BiGaussModel_test.cpp index 60b81a10bcc..c7512640e20 100644 --- a/src/tests/class_tests/openms/source/BiGaussModel_test.cpp +++ b/src/tests/class_tests/openms/source/BiGaussModel_test.cpp @@ -45,7 +45,7 @@ START_SECTION((static const String getProductName())) END_SECTION START_SECTION( static BaseModel* create() ) - BaseModel* ptr = BiGaussModel::create(); + BaseModel* ptr = new BiGaussModel(); TEST_EQUAL(ptr->getName(), "BiGaussModel") TEST_NOT_EQUAL(ptr, nullPointer) delete ptr; diff --git a/src/tests/class_tests/openms/source/BinnedSpectrumCompareFunctor_test.cpp b/src/tests/class_tests/openms/source/BinnedSpectrumCompareFunctor_test.cpp index a957904fbf5..745248cba26 100644 --- a/src/tests/class_tests/openms/source/BinnedSpectrumCompareFunctor_test.cpp +++ b/src/tests/class_tests/openms/source/BinnedSpectrumCompareFunctor_test.cpp @@ -11,7 +11,6 @@ /////////////////////////// #include -#include using namespace OpenMS; using namespace std; diff --git a/src/tests/class_tests/openms/source/ClusterFunctor_test.cpp b/src/tests/class_tests/openms/source/ClusterFunctor_test.cpp index d8b869a972c..b64487e8f46 100644 --- a/src/tests/class_tests/openms/source/ClusterFunctor_test.cpp +++ b/src/tests/class_tests/openms/source/ClusterFunctor_test.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include #include diff --git a/src/tests/class_tests/openms/source/Factory_test.cpp b/src/tests/class_tests/openms/source/Factory_test.cpp index f2072e82f41..a46f4d990f2 100644 --- a/src/tests/class_tests/openms/source/Factory_test.cpp +++ b/src/tests/class_tests/openms/source/Factory_test.cpp @@ -41,16 +41,6 @@ START_SECTION( static void registerProduct(const String& name, const FunctionTyp delete ext; END_SECTION -START_SECTION(static bool isRegistered(const String& name)) - TEST_EQUAL(Factory::isRegistered("TICFilter"), true) - TEST_EQUAL(Factory::isRegistered("TICFilter_bla_bluff"), false) -END_SECTION - -START_SECTION(static std::vector registeredProducts()) - vector list = Factory::registeredProducts(); - TEST_EQUAL(list.size(),6) -END_SECTION - START_SECTION([EXTRA] multithreaded example) { diff --git a/src/tests/class_tests/openms/source/FeatureFinderAlgorithmMRM_test.cpp b/src/tests/class_tests/openms/source/FeatureFinderAlgorithmMRM_test.cpp index 9372bf7f5ee..12f43b1578c 100644 --- a/src/tests/class_tests/openms/source/FeatureFinderAlgorithmMRM_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureFinderAlgorithmMRM_test.cpp @@ -45,15 +45,15 @@ ptr = new FeatureFinderAlgorithmMRM(); START_SECTION((virtual void run())) { - FeatureFinder ff; - ff.setLogType(ProgressLogger::NONE); + FeatureFinderAlgorithmMRM ff; + //ff.setLogType(ProgressLogger::NONE); // TODO: readd PeakMap exp; MzMLFile().load(OPENMS_GET_TEST_DATA_PATH("FeatureFinderAlgorithmMRM_input.mzML"), exp); FeatureMap features, seeds; Param ff_param(ptr->getParameters()); - ff.run("mrm", exp, features, ff_param, seeds); + ff.run(exp, features, ff_param, seeds); TEST_EQUAL(exp.getChromatograms().size(), 3) @@ -78,18 +78,12 @@ END_SECTION START_SECTION((static FeatureFinderAlgorithm* create())) { FeatureFinderAlgorithm* ptr2 = nullptr; - ptr2 = FeatureFinderAlgorithmMRM::create(); + ptr2 = new FeatureFinderAlgorithmMRM(); TEST_NOT_EQUAL(ptr2, ffA_nullPointer) delete ptr2; } END_SECTION -START_SECTION((static const String getProductName())) -{ - TEST_STRING_EQUAL(ptr->getProductName(), "mrm") -} -END_SECTION - delete ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/FeatureFinderAlgorithmPicked_test.cpp b/src/tests/class_tests/openms/source/FeatureFinderAlgorithmPicked_test.cpp index 46744c143c9..88c543ba441 100644 --- a/src/tests/class_tests/openms/source/FeatureFinderAlgorithmPicked_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureFinderAlgorithmPicked_test.cpp @@ -31,7 +31,6 @@ typedef FeatureFinderAlgorithmPicked FFPP; FFPP* ptr = nullptr; FFPP* nullPointer = nullptr; -FeatureFinderAlgorithm* ffA_nullPointer = nullptr; START_SECTION((FeatureFinderAlgorithmPicked())) ptr = new FFPP; @@ -42,12 +41,6 @@ START_SECTION((~FeatureFinderAlgorithmPicked())) delete ptr; END_SECTION -START_SECTION((static FeatureFinderAlgorithm* create())) - FeatureFinderAlgorithm* ptr2 = FFPP::create(); - TEST_NOT_EQUAL(ptr2,ffA_nullPointer) - delete ptr2; -END_SECTION - START_SECTION((virtual void run())) //input and output PeakMap input; @@ -67,7 +60,7 @@ START_SECTION((virtual void run())) FFPP ffpp; ffpp.setParameters(param); - ffpp.setData(input, output, ff); + ffpp.setData(input, output); ffpp.run(); TEST_EQUAL(output.size(), 8); diff --git a/src/tests/class_tests/openms/source/FeatureFinderAlgorithm_test.cpp b/src/tests/class_tests/openms/source/FeatureFinderAlgorithm_test.cpp index fc910fd7e54..89c3a8c67ff 100644 --- a/src/tests/class_tests/openms/source/FeatureFinderAlgorithm_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureFinderAlgorithm_test.cpp @@ -100,11 +100,10 @@ START_SECTION((void setData(const MapType& map, FeatureMap features, FeatureFind PeakMap map; FeatureMap features; FeatureFinder ff; - ffa.setData(map, features, ff); + ffa.setData(map, features); TEST_NOT_EQUAL(ffa.getMap(),map_nullPointer) TEST_NOT_EQUAL(ffa.getFeatures(),featureMap_nullPointer) - TEST_NOT_EQUAL(ffa.getFF(),ff_nullPointer) END_SECTION START_SECTION((virtual void setSeeds(const FeatureMap& seeds))) diff --git a/src/tests/class_tests/openms/source/FeatureFinder_test.cpp b/src/tests/class_tests/openms/source/FeatureFinder_test.cpp index 646290a71ef..a27e9215057 100644 --- a/src/tests/class_tests/openms/source/FeatureFinder_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureFinder_test.cpp @@ -38,64 +38,6 @@ START_SECTION((virtual ~FeatureFinder())) delete ptr; END_SECTION -START_SECTION((template void run(const String &algorithm_name, MSExperiment< PeakType > const &input_map, FeatureMap< FeatureType > &features, const Param ¶m, const FeatureMap& seeds))) - FeatureFinder ff; - FeatureMap features; - - //empty map works -> nothing to do - PeakMap map; - ff.run("none", map, features, Param(), FeatureMap()); - - //no updateRanges -> exception - map.resize(2); - map[0].resize(1); - map[1].resize(1); - TEST_EXCEPTION(Exception::IllegalArgument, ff.run("none", map, features, Param(), FeatureMap())) - - //updateRanges -> it works again - map.updateRanges(); - ff.run("none", map, features, Param(), FeatureMap()); - - //MS2 scans -> exception - map[0].setMSLevel(1); - map[0].setMSLevel(2); - map.updateRanges(); - TEST_EXCEPTION(Exception::IllegalArgument, ff.run("none", map, features, Param(), FeatureMap())) -END_SECTION - -START_SECTION((const Flag& getPeakFlag(const IndexPair& index) const)) - FeatureFinder ff; - FeatureMap features; - PeakMap map; - map.resize(2); - map[0].resize(1); - map[1].resize(1); - map.updateRanges(); - ff.run("none", map, features, Param(), FeatureMap()); - TEST_EQUAL(ff.getPeakFlag(make_pair(0,0)),FeatureFinderDefs::UNUSED) - TEST_EQUAL(ff.getPeakFlag(make_pair(1,0)),FeatureFinderDefs::UNUSED) -END_SECTION - -START_SECTION((Flag& getPeakFlag(const IndexPair& index))) - FeatureFinder ff; - FeatureMap features; - PeakMap map; - map.resize(2); - map[0].resize(1); - map[1].resize(1); - map.updateRanges(); - ff.run("none", map, features, Param(), FeatureMap()); - ff.getPeakFlag(make_pair(0,0)) = FeatureFinderDefs::USED; - TEST_EQUAL(ff.getPeakFlag(make_pair(0,0)),FeatureFinderDefs::USED) - TEST_EQUAL(ff.getPeakFlag(make_pair(1,0)),FeatureFinderDefs::UNUSED) -END_SECTION - -START_SECTION((Param getParameters(const String& algorithm_name) const)) - FeatureFinder ff; - TEST_EQUAL(ff.getParameters("none").empty(),true) - TEST_EQUAL(ff.getParameters("centroided").empty(),false) -END_SECTION - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// END_TEST diff --git a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithm_test.cpp b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithm_test.cpp index 559a040cd99..196b3103000 100644 --- a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithm_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithm_test.cpp @@ -17,8 +17,6 @@ #include #include -#include - using namespace OpenMS; using namespace std; @@ -94,8 +92,7 @@ START_SECTION((void transferSubelements(const vector& maps, Consen out[0].insert(handle6); // need an instance of FeatureGroupingAlgorithm: - String algo_name = Factory::registeredProducts()[0]; - FeatureGroupingAlgorithm* algo = Factory::create(algo_name); + FeatureGroupingAlgorithm* algo = new FeatureGroupingAlgorithmKD(); algo->transferSubelements(maps, out); diff --git a/src/tests/class_tests/openms/source/FilterFunctor_test.cpp b/src/tests/class_tests/openms/source/FilterFunctor_test.cpp index 16cbeb0e228..1c960a07b0d 100644 --- a/src/tests/class_tests/openms/source/FilterFunctor_test.cpp +++ b/src/tests/class_tests/openms/source/FilterFunctor_test.cpp @@ -14,7 +14,6 @@ #include /////////////////////////// -#include #include /////////////////////////// diff --git a/src/tests/class_tests/openms/source/MapAlignmentAlgorithmPoseClustering_test.cpp b/src/tests/class_tests/openms/source/MapAlignmentAlgorithmPoseClustering_test.cpp index 98ee2134331..40a1806ff43 100644 --- a/src/tests/class_tests/openms/source/MapAlignmentAlgorithmPoseClustering_test.cpp +++ b/src/tests/class_tests/openms/source/MapAlignmentAlgorithmPoseClustering_test.cpp @@ -13,8 +13,6 @@ #include #include -#include - using namespace std; using namespace OpenMS; diff --git a/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithm_test.cpp b/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithm_test.cpp index 730bad1a8ce..8609cd2f741 100644 --- a/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithm_test.cpp +++ b/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithm_test.cpp @@ -16,7 +16,6 @@ #include #include -#include #include using namespace OpenMS; diff --git a/src/tests/class_tests/openms/source/PeakSpectrumCompareFunctor_test.cpp b/src/tests/class_tests/openms/source/PeakSpectrumCompareFunctor_test.cpp index 158dc975195..353b67f0c7c 100644 --- a/src/tests/class_tests/openms/source/PeakSpectrumCompareFunctor_test.cpp +++ b/src/tests/class_tests/openms/source/PeakSpectrumCompareFunctor_test.cpp @@ -9,7 +9,6 @@ #include #include -#include /////////////////////////// diff --git a/src/tests/class_tests/openms/source/SingletonRegistry_test.cpp b/src/tests/class_tests/openms/source/SingletonRegistry_test.cpp index 19f8a3862d6..06b004e1a3d 100644 --- a/src/tests/class_tests/openms/source/SingletonRegistry_test.cpp +++ b/src/tests/class_tests/openms/source/SingletonRegistry_test.cpp @@ -12,8 +12,6 @@ /////////////////////////// #include -#include - #include @@ -27,6 +25,7 @@ START_TEST(, "$Id$") ///////////////////////////////////////////////////////////// FactoryBase* nullPointer = nullptr; +/* START_SECTION(static FactoryBase* getFactory(const String& name)) auto ptr = Factory::create("TICFilter"); String myName = typeid(Factory).name(); @@ -34,7 +33,7 @@ START_SECTION(static FactoryBase* getFactory(const String& name)) TEST_NOT_EQUAL(SingletonRegistry::getFactory(myName), nullPointer) delete ptr; END_SECTION - +*/ START_SECTION(static void registerFactory(const String& name, FactoryBase* instance)) String myName = typeid(FactoryBase).name(); diff --git a/src/tests/class_tests/openms_gui/source/GUI/TOPPView_test.cpp b/src/tests/class_tests/openms_gui/source/GUI/TOPPView_test.cpp index 1f172313893..e26705ae868 100644 --- a/src/tests/class_tests/openms_gui/source/GUI/TOPPView_test.cpp +++ b/src/tests/class_tests/openms_gui/source/GUI/TOPPView_test.cpp @@ -15,7 +15,6 @@ #include #include -#include #include @@ -96,7 +95,7 @@ void TestTOPPView::simulateClick_() void TestTOPPView::testGui() { // register a GUI logger - Factory::registerProduct(GUIProgressLoggerImpl::getProductName(), &GUIProgressLoggerImpl::create); + // TODO: readd Factory::registerProduct(GUIProgressLoggerImpl::getProductName(), &GUIProgressLoggerImpl::create); TOPPViewBase tv(TOPPViewBase::TOOL_SCAN::SKIP_SCAN); tv.show(); diff --git a/src/topp/FeatureFinderCentroided.cpp b/src/topp/FeatureFinderCentroided.cpp index 550e78e14bf..7fc061cd8ff 100644 --- a/src/topp/FeatureFinderCentroided.cpp +++ b/src/topp/FeatureFinderCentroided.cpp @@ -145,11 +145,13 @@ class TOPPFeatureFinderCentroided : registerSubsection_("algorithm", "Algorithm section"); } - Param getSubsectionDefaults_(const String& /*section*/) const override + + Param getSubsectionDefaults_(const String& ) const override { - return FeatureFinder().getParameters("centroided"); + return FeatureFinderAlgorithmPicked().getDefaultParameters(); } + ExitCodes main_(int, const char**) override { //input file names @@ -197,8 +199,8 @@ class TOPPFeatureFinderCentroided : } //setup of FeatureFinder - FeatureFinder ff; - ff.setLogType(log_type_); + FeatureFinderAlgorithmPicked ff; + //ff.setLogType(log_type_); TODO // A map for the resulting features FeatureMap features; @@ -218,7 +220,7 @@ class TOPPFeatureFinderCentroided : writeDebug_("Parameters passed to FeatureFinder", feafi_param, 3); // Apply the feature finder - ff.run("centroided", exp, features, feafi_param, seeds); + ff.run(exp, features, feafi_param, seeds); features.applyMemberFunction(&UniqueIdInterface::setUniqueId); // DEBUG diff --git a/src/topp/FeatureFinderMRM.cpp b/src/topp/FeatureFinderMRM.cpp index 046b72540e6..fabae442270 100644 --- a/src/topp/FeatureFinderMRM.cpp +++ b/src/topp/FeatureFinderMRM.cpp @@ -90,7 +90,7 @@ class TOPPFeatureFinderMRM : Param getSubsectionDefaults_(const String& /*section*/) const override { - return FeatureFinder().getParameters(FeatureFinderAlgorithmMRM::getProductName()); + return FeatureFinderAlgorithmMRM().getDefaultParameters(); } ExitCodes main_(int, const char**) override @@ -104,8 +104,8 @@ class TOPPFeatureFinderMRM : writeDebug_("Parameters passed to FeatureFinder", feafi_param, 3); //setup of FeatureFinder - FeatureFinder ff; - ff.setLogType(log_type_); + FeatureFinderAlgorithmMRM ff; + //ff.setLogType(log_type_); // TODO: add back //reading input data PeakMap exp; @@ -133,7 +133,7 @@ class TOPPFeatureFinderMRM : } // Apply the feature finder - ff.run(FeatureFinderAlgorithmMRM::getProductName(), exp, features, feafi_param, seeds); + ff.run(exp, features, feafi_param, seeds); features.applyMemberFunction(&UniqueIdInterface::setUniqueId); // DEBUG diff --git a/src/topp/FileFilter.cpp b/src/topp/FileFilter.cpp index 29bab313b4f..e8578080663 100644 --- a/src/topp/FileFilter.cpp +++ b/src/topp/FileFilter.cpp @@ -22,7 +22,6 @@ #include #include -#include #include @@ -1381,7 +1380,7 @@ class TOPPFileFilter : const bool enable_rt_check = (rt_tol >= 0); const bool enable_sim_check = (sim_tol > -1); - std::unique_ptr comp_function(Factory::create("ZhangSimilarityScore")); + auto comp_function= std::unique_ptr(new (ZhangSimilarityScore)); set list_idx; diff --git a/src/topp/GenericWrapper.cpp b/src/topp/GenericWrapper.cpp index 13d2a4caf09..8e92e88179c 100644 --- a/src/topp/GenericWrapper.cpp +++ b/src/topp/GenericWrapper.cpp @@ -11,7 +11,6 @@ #include #include -#include #include #include #include diff --git a/src/topp/SpecLibSearcher.cpp b/src/topp/SpecLibSearcher.cpp index fa0861007d6..5d3a907e456 100644 --- a/src/topp/SpecLibSearcher.cpp +++ b/src/topp/SpecLibSearcher.cpp @@ -10,7 +10,6 @@ #include #include -#include #include #include #include @@ -328,7 +327,20 @@ class TOPPSpecLibSearcher : OPENMS_LOG_INFO << "Time needed for preprocessing data: " << (end_build_time - start_build_time) << "\n"; //compare function - std::unique_ptr comparator(Factory::create(compare_function)); + std::unique_ptr comparator; + if (compare_function == "SpectraSTSimilarityScore") + { + comparator.reset(new SpectraSTSimilarityScore()); + } + else if (compare_function == "ZhangSimilarityScore") + { + comparator.reset(new ZhangSimilarityScore()); + } + else + { + writeLogError_("Unknown compare function"); + return ILLEGAL_PARAMETERS; + } //------------------------------------------------------------- // calculations From e40890c91657548eee393ffb29c6229f239908c7 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Mon, 4 Mar 2024 12:26:24 +0100 Subject: [PATCH 233/242] remove static factories --- src/openms/include/OpenMS/CONCEPT/Factory.h | 146 ------------------ .../include/OpenMS/CONCEPT/FactoryBase.h | 30 ---- .../include/OpenMS/CONCEPT/ProgressLogger.h | 4 + .../OpenMS/CONCEPT/SingletonRegistry.h | 97 ------------ .../include/OpenMS/CONCEPT/sources.cmake | 3 - .../FEATUREFINDER/BaseModel_impl.h | 1 - .../FEATUREFINDER/FeatureFinderAlgorithm.h | 12 +- .../FEATUREFINDER/FeatureFinderAlgorithmMRM.h | 1 - .../FeatureFinderAlgorithmPicked.h | 1 - .../FEATUREFINDER/ModelDescription.h | 12 -- src/openms/source/CONCEPT/ProgressLogger.cpp | 7 +- .../source/CONCEPT/SingletonRegistry.cpp | 17 -- src/openms/source/CONCEPT/sources.cmake | 1 - .../FeatureFinderAlgorithmMRM.cpp | 4 +- .../FeatureFinderAlgorithmPicked.cpp | 40 ++--- .../class_tests/openms/executables.cmake | 2 - .../openms/source/BaseModel_test.cpp | 12 +- .../openms/source/FactoryBase_test.cpp | 43 ------ .../openms/source/Factory_test.cpp | 65 -------- .../source/FeatureFinderAlgorithmMRM_test.cpp | 51 +++--- .../FeatureFinderAlgorithmPicked_test.cpp | 4 +- .../source/FeatureFinderAlgorithm_test.cpp | 7 - .../openms/source/ModelDescription_test.cpp | 11 -- .../openms/source/SingletonRegistry_test.cpp | 53 ------- .../openms_gui/source/GUI/TOPPView_test.cpp | 4 - src/topp/SpecLibSearcher.cpp | 4 +- tools/pychecker_ignore.yaml | 2 - 27 files changed, 68 insertions(+), 566 deletions(-) delete mode 100644 src/openms/include/OpenMS/CONCEPT/Factory.h delete mode 100644 src/openms/include/OpenMS/CONCEPT/FactoryBase.h delete mode 100644 src/openms/include/OpenMS/CONCEPT/SingletonRegistry.h delete mode 100644 src/openms/source/CONCEPT/SingletonRegistry.cpp delete mode 100644 src/tests/class_tests/openms/source/FactoryBase_test.cpp delete mode 100644 src/tests/class_tests/openms/source/Factory_test.cpp delete mode 100644 src/tests/class_tests/openms/source/SingletonRegistry_test.cpp diff --git a/src/openms/include/OpenMS/CONCEPT/Factory.h b/src/openms/include/OpenMS/CONCEPT/Factory.h deleted file mode 100644 index 14fdc11e4fe..00000000000 --- a/src/openms/include/OpenMS/CONCEPT/Factory.h +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Chris Bielow $ -// $Authors: Chris Bielow $ -// -------------------------------------------------------------------------- - -#pragma once - -#include -#include -#include -#include - -#include -#include -#include - -namespace OpenMS -{ - class String; - - /** - @brief Returns FactoryProduct* based on the name of the desired concrete FactoryProduct - - Every factory product base class T has to implement the static function registerChildren that registers all classes S derived from T at Factory. - - Every class S derived from T has to implement the function "static T* create()" which is going to be registered at Factory. - Additionally the function "static String getProductName()" is required, which returns the name the class is registered by. - - @ingroup Concept - */ - template - class Factory : - public FactoryBase - { - friend class singletonsNeedNoFriends; //some versions of gcc would warn otherwise - -private: - /// Function signature of creator function - typedef FactoryProduct * (*FunctionType)(); - typedef std::map Map; - typedef typename Map::const_iterator MapIterator; - typedef Factory FactoryType; - - /// Destructor - ~Factory() override{} - - /// Constructor - Factory() - { - } - - /// singleton access to Factory - static Factory * instance_() - { - if (!instance_ptr_) - { - // name of this Factory - String myName = typeid(FactoryType).name(); - - //check if an instance of this kind of Factory already registered - if (!SingletonRegistry::isRegistered(myName)) - { - // if not registered yet ... add it - instance_ptr_ = new Factory(); - // now, attention as ORDER of commands is important here: - // first register the Factory - SingletonRegistry::registerFactory(myName, instance_ptr_); - } - else - { - // get instance of this factory from registry - instance_ptr_ = static_cast(SingletonRegistry::getFactory(myName)); - } - } - return instance_ptr_; - } - -public: - - /// return FactoryProduct according to unique identifier @p name - static FactoryProduct * create(const String & name) - { - - // unique lock (make sure we only create one instance) - // -> Since we may call Factory::create for another - // FactoryProduct during initialization, we have to implement locking - // per template class specialization. - static std::mutex factory_create_mutex; - std::lock_guard lock(factory_create_mutex); - - MapIterator it = instance_()->inventory_.find(name); - if (it != instance_()->inventory_.end()) - { - return (*(it->second))(); - } - else - { - throw Exception::InvalidValue(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "This FactoryProduct is not registered!", name.c_str()); - } - } - - /** - @brief register new concrete FactoryProduct - - @param name unique name for concrete FactoryProduct - @param creator default constructor for concrete FactoryProduct - */ - static void registerProduct(const String & name, const FunctionType creator) - { - instance_()->inventory_[name] = creator; - } - - /// Returns if a factory product is registered - static bool isRegistered(const String & name) - { - if (instance_()->inventory_.find(name) != instance_()->inventory_.end()) - { - return true; - } - return false; - } - - /// Returns a list of registered products - static std::vector registeredProducts() - { - std::vector list; - for (MapIterator it = instance_()->inventory_.begin(); it != instance_()->inventory_.end(); ++it) - { - list.push_back(it->first); - } - return list; - } - -private: - - Map inventory_; - static Factory * instance_ptr_; - }; - - template - Factory * Factory::instance_ptr_ = nullptr; - -} diff --git a/src/openms/include/OpenMS/CONCEPT/FactoryBase.h b/src/openms/include/OpenMS/CONCEPT/FactoryBase.h deleted file mode 100644 index 63045583aeb..00000000000 --- a/src/openms/include/OpenMS/CONCEPT/FactoryBase.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Chris Bielow $ -// $Authors: $ -// -------------------------------------------------------------------------- - -#pragma once - -#include - -namespace OpenMS -{ - /** - @brief Base class for Factory - - Just be able to use dynamic_cast on a pointer - - @ingroup Concept - */ - class OPENMS_DLLAPI FactoryBase - { -public: - /// destructor - virtual ~FactoryBase(){} - - }; - -} diff --git a/src/openms/include/OpenMS/CONCEPT/ProgressLogger.h b/src/openms/include/OpenMS/CONCEPT/ProgressLogger.h index 2e1dc065f67..b6e50c7e7ec 100644 --- a/src/openms/include/OpenMS/CONCEPT/ProgressLogger.h +++ b/src/openms/include/OpenMS/CONCEPT/ProgressLogger.h @@ -72,6 +72,10 @@ namespace OpenMS /// Returns the type of progress log being used. LogType getLogType() const; + /// @brief Sets the logger to be used for progress logging + /// @param logger + void setLogger(ProgressLoggerImpl* logger); + /** @brief Initializes the progress display diff --git a/src/openms/include/OpenMS/CONCEPT/SingletonRegistry.h b/src/openms/include/OpenMS/CONCEPT/SingletonRegistry.h deleted file mode 100644 index d8b94d6b2e3..00000000000 --- a/src/openms/include/OpenMS/CONCEPT/SingletonRegistry.h +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Chris Bielow $ -// $Authors: $ -// -------------------------------------------------------------------------- - -#pragma once - -#include -#include - -#include - -namespace OpenMS -{ - class String; - class FactoryBase; - - /** - @brief Holds pointers to unique instance of a singleton factory. - - @note: NEVER(!) include this file anywhere (except for the SingletonRegistry.cpp)! :D - - @ingroup Concept - */ - class OPENMS_DLLAPI SingletonRegistry - { - friend class singletonsNeedNoFriends; //some versions of gcc would warn otherwise - -private: - /// Function signature of creator function - typedef std::map Map; - typedef Map::const_iterator MapIterator; - - /// destructor - virtual ~SingletonRegistry(){} - - /// C'Tor - SingletonRegistry(){} - - /// singleton access to SingletonRegistry - static SingletonRegistry * instance_() - { - if (!singletonRegistryInstance_) - { - singletonRegistryInstance_ = new SingletonRegistry(); - } - return singletonRegistryInstance_; - } - -public: - - /// return DefaultParamHandler according to unique identifier @p name - static FactoryBase * getFactory(const String & name) - { - MapIterator it = instance_()->inventory_.find(name); - if (it != instance_()->inventory_.end()) - { - return it->second; - } - else - { - throw Exception::InvalidValue(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "This Factory is not registered with SingletonRegistry!", name.c_str()); - } - } - - /** - @brief register new concrete Factory - - \param name unique name for Factory of certain type - \param instance pointer to this Factory - */ - static void registerFactory(const String & name, FactoryBase * instance) - { - instance_()->inventory_[name] = instance; - } - - /// Returns if a factory is registered - static bool isRegistered(String name) - { - if (instance_()->inventory_.find(name) != instance_()->inventory_.end()) - { - return true; - } - return false; - } - -private: - - Map inventory_; - static SingletonRegistry * singletonRegistryInstance_; - }; - - -} diff --git a/src/openms/include/OpenMS/CONCEPT/sources.cmake b/src/openms/include/OpenMS/CONCEPT/sources.cmake index 0bcf02ef51c..4e1428a2b61 100644 --- a/src/openms/include/OpenMS/CONCEPT/sources.cmake +++ b/src/openms/include/OpenMS/CONCEPT/sources.cmake @@ -9,8 +9,6 @@ CommonEnums.h Constants.h EnumHelpers.h Exception.h -Factory.h -FactoryBase.h FuzzyStringComparator.h GlobalExceptionHandler.h Helpers.h @@ -22,7 +20,6 @@ MacrosTest.h PrecisionWrapper.h ProgressLogger.h RAIICleanup.h -SingletonRegistry.h StreamHandler.h Types.h TypeAsString.h diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel_impl.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel_impl.h index 474454eb68d..1139946b960 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel_impl.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel_impl.h @@ -8,7 +8,6 @@ #pragma once -#include #include // include derived classes here diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.h index 0b195c91702..ac0a74ed15e 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithm.h @@ -13,12 +13,13 @@ #include #include #include +#include + namespace OpenMS { // forward declaration - class FeatureFinder; class FeatureMap; /// Summary of fitting results @@ -46,7 +47,8 @@ namespace OpenMS */ class FeatureFinderAlgorithm : - public DefaultParamHandler + public DefaultParamHandler, + public ProgressLogger { public: /// Input map type @@ -60,8 +62,7 @@ namespace OpenMS FeatureFinderAlgorithm() : DefaultParamHandler("FeatureFinderAlgorithm"), map_(nullptr), - features_(nullptr), - ff_(nullptr) + features_(nullptr) { } @@ -114,9 +115,6 @@ namespace OpenMS /// Output data pointer FeatureMap* features_; - /// Pointer to the calling FeatureFinder that is used to access the feature flags - FeatureFinder* ff_; - private: /// Not implemented diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.h index 09fa3e32e69..f8b7eda1b64 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.h @@ -44,7 +44,6 @@ namespace OpenMS using FeatureFinderAlgorithm::param_; using FeatureFinderAlgorithm::features_; - using FeatureFinderAlgorithm::ff_; using FeatureFinderAlgorithm::defaults_; using FeatureFinderAlgorithm::map_; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.h index a2bf25b92b8..28f55949100 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.h @@ -43,7 +43,6 @@ namespace OpenMS using FeatureFinderAlgorithm::param_; using FeatureFinderAlgorithm::features_; - using FeatureFinderAlgorithm::ff_; using FeatureFinderAlgorithm::defaults_; protected: diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ModelDescription.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ModelDescription.h index 1bbc6d3511c..f4788af9d06 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ModelDescription.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ModelDescription.h @@ -10,7 +10,6 @@ #include #include -#include #include @@ -65,17 +64,6 @@ namespace OpenMS return *this; } - /// creates model from the parameters defined in this class - /// returns 0 if no description is set. - BaseModel * createModel() - { - if (name_.empty()) return nullptr; - - BaseModel * model = Factory::create(name_); - model->setParameters(parameters_); - return model; - } - /** Accessors */ //@{ /// Non-mutable access to model name diff --git a/src/openms/source/CONCEPT/ProgressLogger.cpp b/src/openms/source/CONCEPT/ProgressLogger.cpp index a1343696307..7d9f135213f 100644 --- a/src/openms/source/CONCEPT/ProgressLogger.cpp +++ b/src/openms/source/CONCEPT/ProgressLogger.cpp @@ -14,7 +14,6 @@ #include #include -//#include #include @@ -229,6 +228,12 @@ namespace OpenMS } } + void ProgressLogger::setLogger(ProgressLoggerImpl* logger) + { + delete current_logger_; + current_logger_ = logger; + } + ProgressLogger::LogType ProgressLogger::getLogType() const { return type_; diff --git a/src/openms/source/CONCEPT/SingletonRegistry.cpp b/src/openms/source/CONCEPT/SingletonRegistry.cpp deleted file mode 100644 index fd8acd42bee..00000000000 --- a/src/openms/source/CONCEPT/SingletonRegistry.cpp +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Chris Bielow $ -// $Authors: Clemens Groepl, Chris Bielow $ -// -------------------------------------------------------------------------- - -#include - -namespace OpenMS -{ - - // unique instance of the SingletonRegistry! - SingletonRegistry * SingletonRegistry::singletonRegistryInstance_ = nullptr; - -} // namespace openms diff --git a/src/openms/source/CONCEPT/sources.cmake b/src/openms/source/CONCEPT/sources.cmake index 6e39d4ffa46..fadaaad2b94 100644 --- a/src/openms/source/CONCEPT/sources.cmake +++ b/src/openms/source/CONCEPT/sources.cmake @@ -16,7 +16,6 @@ LogStream.cpp PrecisionWrapper.cpp ProgressLogger.cpp RAIICleanup.cpp -SingletonRegistry.cpp StreamHandler.cpp TypeAsString.cpp Types.cpp diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.cpp index 363dcc7fdab..fb264843326 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmMRM.cpp @@ -49,7 +49,7 @@ namespace OpenMS LinearResampler resampler; // Split the whole map into traces (== MRM transitions) - ff_->startProgress(0, map_->getChromatograms().size(), "Finding features in traces."); + startProgress(0, map_->getChromatograms().size(), "Finding features in traces."); Size counter(0); double min_rt_distance(param_.getValue("min_rt_distance")); double min_signal_to_noise_ratio(param_.getValue("min_signal_to_noise_ratio")); @@ -346,7 +346,7 @@ namespace OpenMS } } - ff_->setProgress(++counter); + setProgress(++counter); } } diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.cpp index 97bec966fff..28a752abfc0 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinderAlgorithmPicked.cpp @@ -241,7 +241,7 @@ namespace OpenMS if (debug_) log_ << "Precalculating intensity thresholds ..." << std::endl; //new scope to make local variables disappear { - ff_->startProgress(0, intensity_bins_ * intensity_bins_, "Precalculating intensity scores"); + startProgress(0, intensity_bins_ * intensity_bins_, "Precalculating intensity scores"); double rt_start = map_.getMinRT(); double mz_start = map_.getMinMZ(); intensity_rt_step_ = (map_.getMaxRT() - rt_start) / (double)intensity_bins_; @@ -255,7 +255,7 @@ namespace OpenMS std::vector tmp; for (Size mz = 0; mz < intensity_bins_; ++mz) { - ff_->setProgress(rt * intensity_bins_ + mz); + setProgress(rt * intensity_bins_ + mz); double min_mz = mz_start + mz * intensity_mz_step_; double max_mz = mz_start + (mz + 1) * intensity_mz_step_; //std::cout << "rt range: " << min_rt << " - " << max_rt << std::endl; @@ -288,7 +288,7 @@ namespace OpenMS map_[s].getFloatDataArrays()[1][p] = intensityScore_(s, p); } } - ff_->endProgress(); + endProgress(); } //--------------------------------------------------------------------------- @@ -298,11 +298,11 @@ namespace OpenMS //new scope to make local variables disappear { Size end_iteration = map_.size() - std::min((Size)min_spectra_, map_.size()); - ff_->startProgress(min_spectra_, end_iteration, "Precalculating mass trace scores"); + startProgress(min_spectra_, end_iteration, "Precalculating mass trace scores"); // skip first and last scans since we cannot extend the mass traces there for (Size s = min_spectra_; s < end_iteration; ++s) { - ff_->setProgress(s); + setProgress(s); SpectrumType& spectrum = map_[s]; //iterate over all peaks of the scan for (Size p = 0; p < spectrum.size(); ++p) @@ -347,7 +347,7 @@ namespace OpenMS spectrum.getFloatDataArrays()[2][p] = is_max_peak; } } - ff_->endProgress(); + endProgress(); } //--------------------------------------------------------------------------- @@ -358,7 +358,7 @@ namespace OpenMS { double max_mass = map_.getMaxMZ() * charge_high; Size num_isotopes = std::ceil(max_mass / mass_window_width_) + 1; - ff_->startProgress(0, num_isotopes, "Precalculating isotope distributions"); + startProgress(0, num_isotopes, "Precalculating isotope distributions"); //reserve enough space isotope_distributions_.resize(num_isotopes); @@ -429,7 +429,7 @@ namespace OpenMS //if(debug_) log_ << " - optional begin/end:" << begin << " / " << end << std::endl; } - ff_->endProgress(); + endProgress(); } //------------------------------------------------------------------------- @@ -449,10 +449,10 @@ namespace OpenMS //----------------------------------------------------------- // Step 3.1: Precalculate IsotopePattern score //----------------------------------------------------------- - ff_->startProgress(0, map_.size(), String("Calculating isotope pattern scores for charge ") + String(c)); + startProgress(0, map_.size(), String("Calculating isotope pattern scores for charge ") + String(c)); for (Size s = 0; s < map_.size(); ++s) { - ff_->setProgress(s); + setProgress(s); const SpectrumType& spectrum = map_[s]; for (Size p = 0; p < spectrum.size(); ++p) { @@ -487,19 +487,19 @@ namespace OpenMS } } } - ff_->endProgress(); + endProgress(); //----------------------------------------------------------- // Step 3.2: // Find seeds for this charge //----------------------------------------------------------- Size end_of_iteration = map_.size() - std::min((Size)min_spectra_, map_.size()); - ff_->startProgress(min_spectra_, end_of_iteration, String("Finding seeds for charge ") + String(c)); + startProgress(min_spectra_, end_of_iteration, String("Finding seeds for charge ") + String(c)); double min_seed_score = param_.getValue("seed:min_score"); //do nothing for the first few and last few spectra as the scans required to search for traces are missing for (Size s = min_spectra_; s < end_of_iteration; ++s) { - ff_->setProgress(s); + setProgress(s); //iterate over peaks for (Size p = 0; p < map_[s].size(); ++p) @@ -572,7 +572,7 @@ namespace OpenMS FileHandler().storeFeatures(String("debug/seeds_") + String(c) + ".featureXML", seed_map); } - ff_->endProgress(); + endProgress(); std::cout << "Found " << seeds.size() << " seeds for charge " << c << "." << std::endl; //------------------------------------------------------------------ @@ -592,7 +592,7 @@ namespace OpenMS typedef std::map FeatureMapType; FeatureMapType tmp_feature_map; int gl_progress = 0; - ff_->startProgress(0, seeds.size(), String("Extending seeds for charge ") + String(c)); + startProgress(0, seeds.size(), String("Extending seeds for charge ") + String(c)); #pragma omp parallel for for (SignedSize i = 0; i < (SignedSize)seeds.size(); ++i) @@ -607,7 +607,7 @@ namespace OpenMS IF_MASTERTHREAD { - ff_->setProgress(gl_progress++); + setProgress(gl_progress++); if (debug_) { @@ -853,7 +853,7 @@ namespace OpenMS } } - IF_MASTERTHREAD ff_->endProgress(); + IF_MASTERTHREAD endProgress(); std::cout << "Found " << feature_candidates << " feature candidates for charge " << c << "." << std::endl; } // END OPENMP @@ -862,7 +862,7 @@ namespace OpenMS //Step 4: //Resolve contradicting and overlapping features //------------------------------------------------------------------ - ff_->startProgress(0, features_->size() * features_->size(), "Resolving overlapping features"); + startProgress(0, features_->size() * features_->size(), "Resolving overlapping features"); if (debug_) log_ << "Resolving intersecting features (" << features_->size() << " candidates)" << std::endl; //sort features according to m/z in order to speed up the resolution features_->sortByMZ(); @@ -886,7 +886,7 @@ namespace OpenMS Feature& f1((*features_)[i]); for (Size j = i + 1; j < features_->size(); ++j) { - ff_->setProgress(i * features_->size() + j); + setProgress(i * features_->size() + j); Feature& f2((*features_)[j]); //features that are more than 2 times the maximum m/z span apart do not overlap => abort if (f2.getMZ() - f1.getMZ() > 2.0 * max_mz_span) @@ -991,7 +991,7 @@ namespace OpenMS tmp.swapFeaturesOnly(*features_); // sort features by intensity features_->sortByIntensity(true); - ff_->endProgress(); + endProgress(); // Abort reasons OPENMS_LOG_INFO << '\n'; diff --git a/src/tests/class_tests/openms/executables.cmake b/src/tests/class_tests/openms/executables.cmake index 1a9526962db..b7aed4a98f2 100644 --- a/src/tests/class_tests/openms/executables.cmake +++ b/src/tests/class_tests/openms/executables.cmake @@ -2,8 +2,6 @@ set(concept_executables_list ClassTest_test Colorizer_test Exception_Base_test - FactoryBase_test - Factory_test FuzzyStringComparator_test #GlobalExceptionHandler_test StreamHandler_test diff --git a/src/tests/class_tests/openms/source/BaseModel_test.cpp b/src/tests/class_tests/openms/source/BaseModel_test.cpp index 1cc7e9be467..e4e6e1adc5c 100644 --- a/src/tests/class_tests/openms/source/BaseModel_test.cpp +++ b/src/tests/class_tests/openms/source/BaseModel_test.cpp @@ -122,17 +122,17 @@ START_SECTION((virtual void setCutOff(IntensityType cut_off))) END_SECTION START_SECTION(([EXTRA]const String& getName() const)) - TestModel s; + TestModel s; TEST_EQUAL(s.getName(), "TestModel") END_SECTION START_SECTION((virtual IntensityType getIntensity(const PositionType &pos) const =0)) { - const TestModel s; + const TestModel s; TestModel::PositionType pos; pos[0]=0.1; pos[1]=0.2; - TEST_REAL_SIMILAR(s.getIntensity(pos), 0.3); + TEST_REAL_SIMILAR(s.getIntensity(pos), 0.1); } END_SECTION @@ -147,13 +147,13 @@ START_SECTION((virtual bool isContained(const PositionType &pos) const)) END_SECTION START_SECTION((template void fillIntensity(PeakType &peak) const)) - const TestModel t; + const TestModel t; TestModel::PeakType p; p.getPosition()[0]=0.1; p.getPosition()[1]=0.2; p.setIntensity(0.1f); t.fillIntensity(p); - TEST_REAL_SIMILAR(p.getIntensity(), 0.3) + TEST_REAL_SIMILAR(p.getIntensity(), 0.1) END_SECTION START_SECTION((template void fillIntensities(PeakIterator begin, PeakIterator end) const)) @@ -163,7 +163,7 @@ START_SECTION((template void fillIntensities(PeakIterator b { vec[i].setIntensity(-0.5); vec[i].getPosition()[0] = i; - } + } t.fillIntensities(vec.begin()+1, vec.end()-1); TEST_EQUAL(vec[0].getIntensity(), -0.5) TEST_EQUAL(vec[1].getIntensity(), 1.0) diff --git a/src/tests/class_tests/openms/source/FactoryBase_test.cpp b/src/tests/class_tests/openms/source/FactoryBase_test.cpp deleted file mode 100644 index 91f56403318..00000000000 --- a/src/tests/class_tests/openms/source/FactoryBase_test.cpp +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Chris Bielow $ -// $Authors: $ -// -------------------------------------------------------------------------- - -#include -#include - -/////////////////////////// -#include -/////////////////////////// - -using namespace OpenMS; -using namespace std; - -START_TEST(FactoryBase, "$Id$") - -///////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////// - -FactoryBase* ptr = nullptr; -FactoryBase* nullPointer = nullptr; -START_SECTION(FactoryBase()) -{ - ptr = new FactoryBase(); - TEST_NOT_EQUAL(ptr, nullPointer) -} -END_SECTION - -START_SECTION(~FactoryBase()) -{ - delete ptr; -} -END_SECTION - - -///////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////// -END_TEST - diff --git a/src/tests/class_tests/openms/source/Factory_test.cpp b/src/tests/class_tests/openms/source/Factory_test.cpp deleted file mode 100644 index a46f4d990f2..00000000000 --- a/src/tests/class_tests/openms/source/Factory_test.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Chris Bielow $ -// $Authors: $ -// -------------------------------------------------------------------------- - -#include -#include - -/////////////////////////// - -#include - -#include - -/////////////////////////// - -using namespace OpenMS; -using namespace std; - -START_TEST(, "$Id$") - -///////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////// - -// Factory is singleton, therefore we don't test the constructor -START_SECTION(static FactoryProduct* create(const String& name)) - FilterFunctor* p = Factory::create("TICFilter"); - TICFilter reducer; - TEST_EQUAL(*p==reducer,true); - delete p; -END_SECTION - -START_SECTION( static void registerProduct(const String& name, const FunctionType creator) ) - Factory::registerProduct(TICFilter::getProductName(), &TICFilter::create); - FilterFunctor* ext = Factory::create("TICFilter"); - FilterFunctor* nullPointer = nullptr; - TEST_NOT_EQUAL(ext, nullPointer) - delete ext; -END_SECTION - -START_SECTION([EXTRA] multithreaded example) -{ - - int nr_iterations (1e2); - int test = 0; -#pragma omp parallel for reduction (+: test) - for (int k = 1; k < nr_iterations + 1; k++) - { - FilterFunctor* p = Factory::create("TICFilter"); - TICFilter reducer; - test += (*p == reducer); - delete p; - } - TEST_EQUAL(test, nr_iterations) -} -END_SECTION - -///////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////// -END_TEST - - diff --git a/src/tests/class_tests/openms/source/FeatureFinderAlgorithmMRM_test.cpp b/src/tests/class_tests/openms/source/FeatureFinderAlgorithmMRM_test.cpp index 12f43b1578c..92ad15f7d57 100644 --- a/src/tests/class_tests/openms/source/FeatureFinderAlgorithmMRM_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureFinderAlgorithmMRM_test.cpp @@ -13,8 +13,8 @@ #include /////////////////////////// -#include #include +#include using namespace OpenMS; using namespace std; @@ -26,18 +26,17 @@ START_TEST(FeatureFinderAlgorithmMRM, "$Id$") FeatureFinderAlgorithmMRM* ptr = nullptr; FeatureFinderAlgorithmMRM* nullPointer = nullptr; -FeatureFinderAlgorithm* ffA_nullPointer = nullptr; START_SECTION(FeatureFinderAlgorithmMRM()) { ptr = new FeatureFinderAlgorithmMRM(); - TEST_NOT_EQUAL(ptr, nullPointer) + TEST_NOT_EQUAL(ptr, nullPointer) } END_SECTION START_SECTION(~FeatureFinderAlgorithmMRM()) { - delete ptr; + delete ptr; } END_SECTION @@ -46,40 +45,37 @@ ptr = new FeatureFinderAlgorithmMRM(); START_SECTION((virtual void run())) { FeatureFinderAlgorithmMRM ff; - //ff.setLogType(ProgressLogger::NONE); // TODO: readd + ff.setLogType(ProgressLogger::NONE); PeakMap exp; - MzMLFile().load(OPENMS_GET_TEST_DATA_PATH("FeatureFinderAlgorithmMRM_input.mzML"), exp); + MzMLFile().load(OPENMS_GET_TEST_DATA_PATH("FeatureFinderAlgorithmMRM_input.mzML"), exp); - FeatureMap features, seeds; - Param ff_param(ptr->getParameters()); - ff.run(exp, features, ff_param, seeds); + FeatureMap features, seeds; + Param ff_param(ptr->getParameters()); + ff.run(exp, features, ff_param, seeds); - TEST_EQUAL(exp.getChromatograms().size(), 3) + TEST_EQUAL(exp.getChromatograms().size(), 3) - FeatureMap new_features; - for (Size i = 0; i != features.size(); ++i) - { - if (features[i].getQuality(0) > 0.99) - { - new_features.push_back(features[i]); - } - } + FeatureMap new_features; + for (Size i = 0; i != features.size(); ++i) + { + if (features[i].getQuality(0) > 0.99) { new_features.push_back(features[i]); } + } - TEST_EQUAL(new_features.size(), 3) + TEST_EQUAL(new_features.size(), 3) - for (Size i = 0; i != new_features.size(); ++i) - { - TEST_EQUAL(new_features[i].getIntensity() > 100000, true) - } + for (Size i = 0; i != new_features.size(); ++i) + { + TEST_EQUAL(new_features[i].getIntensity() > 100000, true) + } } END_SECTION -START_SECTION((static FeatureFinderAlgorithm* create())) +START_SECTION((static FeatureFinderAlgorithm * create())) { - FeatureFinderAlgorithm* ptr2 = nullptr; + FeatureFinderAlgorithmMRM* ptr2 = nullptr; ptr2 = new FeatureFinderAlgorithmMRM(); - TEST_NOT_EQUAL(ptr2, ffA_nullPointer) + TEST_NOT_EQUAL(ptr2, nullptr) delete ptr2; } END_SECTION @@ -89,6 +85,3 @@ delete ptr; ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// END_TEST - - - diff --git a/src/tests/class_tests/openms/source/FeatureFinderAlgorithmPicked_test.cpp b/src/tests/class_tests/openms/source/FeatureFinderAlgorithmPicked_test.cpp index 88c543ba441..7f55ac10b4d 100644 --- a/src/tests/class_tests/openms/source/FeatureFinderAlgorithmPicked_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureFinderAlgorithmPicked_test.cpp @@ -54,9 +54,7 @@ START_SECTION((virtual void run())) Param param; ParamXMLFile paramFile; paramFile.load(OPENMS_GET_TEST_DATA_PATH("FeatureFinderAlgorithmPicked.ini"), param); - param = param.copy("FeatureFinder:1:algorithm:",true); - //Dummy featurefinder - FeatureFinder ff; + param = param.copy("FeatureFinder:1:algorithm:", true); FFPP ffpp; ffpp.setParameters(param); diff --git a/src/tests/class_tests/openms/source/FeatureFinderAlgorithm_test.cpp b/src/tests/class_tests/openms/source/FeatureFinderAlgorithm_test.cpp index 89c3a8c67ff..7bb54efa38c 100644 --- a/src/tests/class_tests/openms/source/FeatureFinderAlgorithm_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureFinderAlgorithm_test.cpp @@ -52,11 +52,6 @@ namespace OpenMS { return this->features_; } - - const FeatureFinder* getFF() - { - return this->ff_; - } }; } @@ -70,7 +65,6 @@ FFA* nullPointer = nullptr; PeakMap* map_nullPointer = nullptr; FeatureMap* featureMap_nullPointer = nullptr; -FeatureFinder* ff_nullPointer = nullptr; START_SECTION((FeatureFinderAlgorithm())) ptr = new FFA(); @@ -95,7 +89,6 @@ START_SECTION((void setData(const MapType& map, FeatureMap features, FeatureFind FFA ffa; TEST_EQUAL(ffa.getMap(),map_nullPointer) TEST_EQUAL(ffa.getFeatures(),featureMap_nullPointer) - TEST_EQUAL(ffa.getFF(),ff_nullPointer) PeakMap map; FeatureMap features; diff --git a/src/tests/class_tests/openms/source/ModelDescription_test.cpp b/src/tests/class_tests/openms/source/ModelDescription_test.cpp index c519ca42e8c..16c401771cd 100644 --- a/src/tests/class_tests/openms/source/ModelDescription_test.cpp +++ b/src/tests/class_tests/openms/source/ModelDescription_test.cpp @@ -92,17 +92,6 @@ START_SECTION((ModelDescription(const ModelDescription &source))) TEST_EQUAL(tm1==tm2,true) END_SECTION -START_SECTION( ModelDescription(const BaseModel *model) ) - const BaseModel * bm = new IsotopeModel(); - - ModelDescription<1> md(bm); - - BaseModel* ptr = md.createModel(); - TEST_EQUAL( *ptr == *bm, true) - delete bm; - delete ptr; -END_SECTION - START_SECTION((const String& getName() const )) const ModelDescription<2> m; TEST_EQUAL(m.getName(), "") diff --git a/src/tests/class_tests/openms/source/SingletonRegistry_test.cpp b/src/tests/class_tests/openms/source/SingletonRegistry_test.cpp deleted file mode 100644 index 06b004e1a3d..00000000000 --- a/src/tests/class_tests/openms/source/SingletonRegistry_test.cpp +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Chris Bielow $ -// $Authors: $ -// -------------------------------------------------------------------------- - -#include -#include - -/////////////////////////// - -#include - -#include - -/////////////////////////// - -using namespace OpenMS; -using namespace std; - - -START_TEST(, "$Id$") -///////////////////////////////////////////////////////////// -FactoryBase* nullPointer = nullptr; - -/* -START_SECTION(static FactoryBase* getFactory(const String& name)) - auto ptr = Factory::create("TICFilter"); - String myName = typeid(Factory).name(); - - TEST_NOT_EQUAL(SingletonRegistry::getFactory(myName), nullPointer) - delete ptr; -END_SECTION -*/ - -START_SECTION(static void registerFactory(const String& name, FactoryBase* instance)) - String myName = typeid(FactoryBase).name(); - FactoryBase* fb = new FactoryBase; - SingletonRegistry::registerFactory(myName, fb); - TEST_NOT_EQUAL(SingletonRegistry::getFactory(myName), nullPointer) - delete fb; -END_SECTION - -START_SECTION(static bool isRegistered(String name)) - TEST_EQUAL(SingletonRegistry::isRegistered(typeid(Factory).name()), true) -END_SECTION -///////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////// -END_TEST - - diff --git a/src/tests/class_tests/openms_gui/source/GUI/TOPPView_test.cpp b/src/tests/class_tests/openms_gui/source/GUI/TOPPView_test.cpp index e26705ae868..9ef1f19474a 100644 --- a/src/tests/class_tests/openms_gui/source/GUI/TOPPView_test.cpp +++ b/src/tests/class_tests/openms_gui/source/GUI/TOPPView_test.cpp @@ -17,7 +17,6 @@ #include #include - using namespace OpenMS; void TestTOPPView::scheduleModalWidget_(const QString& key_sequence, const QString& title, const int delay) @@ -94,9 +93,6 @@ void TestTOPPView::simulateClick_() void TestTOPPView::testGui() { - // register a GUI logger - // TODO: readd Factory::registerProduct(GUIProgressLoggerImpl::getProductName(), &GUIProgressLoggerImpl::create); - TOPPViewBase tv(TOPPViewBase::TOOL_SCAN::SKIP_SCAN); tv.show(); QApplication::processEvents(); diff --git a/src/topp/SpecLibSearcher.cpp b/src/topp/SpecLibSearcher.cpp index 5d3a907e456..44a83f5a34a 100644 --- a/src/topp/SpecLibSearcher.cpp +++ b/src/topp/SpecLibSearcher.cpp @@ -109,8 +109,8 @@ class TOPPSpecLibSearcher : // registerStringOption_("fragment:mass_tolerance_unit", "", "ppm", "Unit of fragment m", false, false); // setValidStrings_("fragment:mass_tolerance_unit", fragment_mass_tolerance_unit_valid_strings); -// registerStringOption_("compare_function", "", "ZhangSimilarityScore", "function for similarity comparison", false); -// setValidStrings_("compare_function", Factory::registeredProducts()); + registerStringOption_("compare_function", "", "ZhangSimilarityScore", "function for similarity comparison", false); + setValidStrings_("compare_function", {"ZhangSimilarityScore", "SpectraSTSimilarityScore"}); registerTOPPSubsection_("report", "Reporting Options"); registerIntOption_("report:top_hits", "", 10, "Maximum number of top scoring hits per spectrum that are reported.", false, true); diff --git a/tools/pychecker_ignore.yaml b/tools/pychecker_ignore.yaml index 766621116f5..33d2901bc49 100644 --- a/tools/pychecker_ignore.yaml +++ b/tools/pychecker_ignore.yaml @@ -1116,11 +1116,9 @@ PyOpenMSChecker: - OpenMS::StringListUtils # CONCEPT - - OpenMS::SingletonRegistry - OpenMS::StreamHandler - OpenMS::Factory - OpenMS::UniqueIdIndexer - - OpenMS::FactoryBase # METADATA - OpenMS::MetaInfoDescription From e1c8aede9e25a79d80831e8ff6ea0670b85a51de Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Mon, 4 Mar 2024 17:26:13 +0100 Subject: [PATCH 234/242] remove factory getProductName --- .../MAPMATCHING/FeatureGroupingAlgorithmKD.h | 6 ----- .../FeatureGroupingAlgorithmLabeled.h | 6 ----- .../MAPMATCHING/FeatureGroupingAlgorithmQT.h | 6 ----- .../FeatureGroupingAlgorithmUnlabeled.h | 6 ----- .../ANALYSIS/MAPMATCHING/LabeledPairFinder.h | 6 ----- ...MapAlignmentEvaluationAlgorithmPrecision.h | 6 ----- .../MapAlignmentEvaluationAlgorithmRecall.h | 8 +------ .../PoseClusteringAffineSuperimposer.h | 6 ----- .../ANALYSIS/MAPMATCHING/QTClusterFinder.h | 6 ----- .../ANALYSIS/MAPMATCHING/SimplePairFinder.h | 6 ----- .../ANALYSIS/MAPMATCHING/StablePairFinder.h | 6 ----- .../COMPARISON/CLUSTERING/AverageLinkage.h | 3 --- .../COMPARISON/CLUSTERING/CompleteLinkage.h | 2 -- .../COMPARISON/CLUSTERING/SingleLinkage.h | 2 -- .../SPECTRA/BinnedSharedPeakCount.h | 3 --- .../SPECTRA/BinnedSpectralContrastAngle.h | 6 ----- .../SPECTRA/BinnedSpectrumCompareFunctor.h | 9 ------- .../SPECTRA/BinnedSumAgreeingIntensities.h | 6 ----- .../OpenMS/COMPARISON/SPECTRA/PeakAlignment.h | 6 ----- .../SPECTRA/SpectraSTSimilarityScore.h | 6 ----- .../SPECTRA/SpectrumAlignmentScore.h | 6 ----- .../COMPARISON/SPECTRA/SpectrumCheapDPCorr.h | 8 +------ .../SPECTRA/SpectrumPrecursorComparator.h | 6 ----- .../COMPARISON/SPECTRA/ZhangSimilarityScore.h | 6 ----- .../FILTERING/TRANSFORMERS/ComplementFilter.h | 6 ----- .../FILTERING/TRANSFORMERS/ComplementMarker.h | 6 ----- .../FILTERING/TRANSFORMERS/GoodDiffFilter.h | 6 ----- .../TRANSFORMERS/IntensityBalanceFilter.h | 6 ----- .../TRANSFORMERS/IsotopeDiffFilter.h | 6 ----- .../FILTERING/TRANSFORMERS/IsotopeMarker.h | 6 ----- .../FILTERING/TRANSFORMERS/MarkerMower.h | 7 +----- .../TRANSFORMERS/NeutralLossDiffFilter.h | 6 ----- .../TRANSFORMERS/NeutralLossMarker.h | 6 ----- .../FILTERING/TRANSFORMERS/PeakMarker.h | 6 ----- .../OpenMS/FILTERING/TRANSFORMERS/TICFilter.h | 8 +------ .../TRANSFORMATIONS/FEATUREFINDER/BaseModel.h | 2 +- .../FEATUREFINDER/BiGaussFitter1D.h | 6 ----- .../FEATUREFINDER/BiGaussModel.h | 13 ---------- .../FEATUREFINDER/EmgFitter1D.h | 6 ----- .../TRANSFORMATIONS/FEATUREFINDER/EmgModel.h | 6 ----- .../FEATUREFINDER/ExtendedIsotopeFitter1D.h | 6 ----- .../FEATUREFINDER/ExtendedIsotopeModel.h | 6 ----- .../TRANSFORMATIONS/FEATUREFINDER/Fitter1D.h | 3 --- .../FEATUREFINDER/GaussFitter1D.h | 6 ----- .../FEATUREFINDER/GaussModel.h | 6 ----- .../FEATUREFINDER/IsotopeFitter1D.h | 7 ------ .../FEATUREFINDER/IsotopeModel.h | 6 ----- .../PoseClusteringAffineSuperimposer.cpp | 2 +- .../PoseClusteringShiftSuperimposer.cpp | 2 +- .../ANALYSIS/MAPMATCHING/QTClusterFinder.cpp | 2 +- .../ANALYSIS/MAPMATCHING/SimplePairFinder.cpp | 2 +- .../ANALYSIS/MAPMATCHING/StablePairFinder.cpp | 2 +- .../COMPARISON/CLUSTERING/AverageLinkage.cpp | 6 ----- .../COMPARISON/CLUSTERING/CompleteLinkage.cpp | 5 ---- .../COMPARISON/CLUSTERING/SingleLinkage.cpp | 5 ---- .../SPECTRA/BinnedSharedPeakCount.cpp | 2 +- .../SPECTRA/BinnedSpectralContrastAngle.cpp | 2 +- .../SPECTRA/BinnedSpectrumCompareFunctor.cpp | 2 +- .../SPECTRA/BinnedSumAgreeingIntensities.cpp | 2 +- .../SPECTRA/SpectraSTSimilarityScore.cpp | 2 +- .../SPECTRA/SpectrumAlignmentScore.cpp | 2 +- .../SPECTRA/SpectrumCheapDPCorr.cpp | 2 +- .../SPECTRA/SpectrumPrecursorComparator.cpp | 2 +- .../SPECTRA/ZhangSimilarityScore.cpp | 2 +- .../TRANSFORMERS/ComplementFilter.cpp | 2 +- .../TRANSFORMERS/ComplementMarker.cpp | 2 +- .../FILTERING/TRANSFORMERS/GoodDiffFilter.cpp | 2 +- .../TRANSFORMERS/IntensityBalanceFilter.cpp | 2 +- .../TRANSFORMERS/IsotopeDiffFilter.cpp | 2 +- .../FILTERING/TRANSFORMERS/IsotopeMarker.cpp | 2 +- .../TRANSFORMERS/NeutralLossDiffFilter.cpp | 2 +- .../TRANSFORMERS/NeutralLossMarker.cpp | 2 +- .../FILTERING/TRANSFORMERS/PeakMarker.cpp | 2 +- .../FILTERING/TRANSFORMERS/TICFilter.cpp | 2 +- .../FEATUREFINDER/BiGaussFitter1D.cpp | 2 +- .../FEATUREFINDER/BiGaussModel.cpp | 2 +- .../FEATUREFINDER/EmgFitter1D.cpp | 2 +- .../FEATUREFINDER/EmgModel.cpp | 2 +- .../FEATUREFINDER/ExtendedIsotopeFitter1D.cpp | 2 +- .../FEATUREFINDER/ExtendedIsotopeModel.cpp | 2 +- .../FEATUREFINDER/GaussFitter1D.cpp | 2 +- .../FEATUREFINDER/GaussModel.cpp | 2 +- .../FEATUREFINDER/IsotopeFitter1D.cpp | 2 +- .../FEATUREFINDER/IsotopeModel.cpp | 2 +- src/pyOpenMS/pxds/AverageLinkage.pxd | 3 +-- src/pyOpenMS/pxds/BiGaussFitter1D.pxd | 3 +-- src/pyOpenMS/pxds/BiGaussModel.pxd | 3 +-- src/pyOpenMS/pxds/ComplementFilter.pxd | 2 +- src/pyOpenMS/pxds/ComplementMarker.pxd | 1 - src/pyOpenMS/pxds/EmgFitter1D.pxd | 3 +-- src/pyOpenMS/pxds/EmgModel.pxd | 3 +-- .../pxds/FeatureFinderAlgorithmPicked.pxd | 7 ------ .../pxds/FeatureGroupingAlgorithmKD.pxd | 3 +-- .../pxds/FeatureGroupingAlgorithmLabeled.pxd | 2 +- .../pxds/FeatureGroupingAlgorithmQT.pxd | 2 -- .../FeatureGroupingAlgorithmUnlabeled.pxd | 1 - src/pyOpenMS/pxds/GoodDiffFilter.pxd | 2 +- src/pyOpenMS/pxds/IntensityBalanceFilter.pxd | 1 - src/pyOpenMS/pxds/IsotopeDiffFilter.pxd | 1 - src/pyOpenMS/pxds/IsotopeFitter1D.pxd | 1 - src/pyOpenMS/pxds/IsotopeMarker.pxd | 3 +-- src/pyOpenMS/pxds/IsotopeModel.pxd | 3 +-- src/pyOpenMS/pxds/LabeledPairFinder.pxd | 2 +- ...pAlignmentEvaluationAlgorithmPrecision.pxd | 3 +-- .../MapAlignmentEvaluationAlgorithmRecall.pxd | 3 +-- src/pyOpenMS/pxds/MarkerMower.pxd | 2 -- src/pyOpenMS/pxds/NeutralLossDiffFilter.pxd | 3 +-- src/pyOpenMS/pxds/NeutralLossMarker.pxd | 3 +-- src/pyOpenMS/pxds/PeakMarker.pxd | 3 +-- src/pyOpenMS/pxds/QTClusterFinder.pxd | 1 - src/pyOpenMS/pxds/SimplePairFinder.pxd | 2 +- .../pxds/SpectraSTSimilarityScore.pxd | 2 +- src/pyOpenMS/pxds/StablePairFinder.pxd | 2 +- src/pyOpenMS/pxds/TICFilter.pxd | 1 - .../pyTOPP/FeatureFinderCentroided.py | 6 ++--- src/pyOpenMS/tests/unittests/test000.py | 24 ------------------- .../openms/source/AverageLinkage_test.cpp | 9 ------- .../openms/source/BaseModel_test.cpp | 7 +----- .../openms/source/BiGaussFitter1D_test.cpp | 8 ------- .../openms/source/BiGaussModel_test.cpp | 5 ---- .../source/BinnedSharedPeakCount_test.cpp | 6 ----- .../BinnedSpectralContrastAngle_test.cpp | 6 ----- .../BinnedSpectrumCompareFunctor_test.cpp | 6 ----- .../BinnedSumAgreeingIntensities_test.cpp | 6 ----- .../openms/source/ComplementFilter_test.cpp | 4 ---- .../openms/source/ComplementMarker_test.cpp | 4 ---- .../openms/source/CompleteLinkage_test.cpp | 8 ------- .../openms/source/EmgFitter1D_test.cpp | 8 ------- .../openms/source/EmgModel_test.cpp | 5 ---- .../source/ExtendedIsotopeFitter1D_test.cpp | 6 ----- .../source/ExtendedIsotopeModel_test.cpp | 5 ---- .../FeatureGroupingAlgorithmKD_test.cpp | 4 ---- .../FeatureGroupingAlgorithmLabeled_test.cpp | 4 ---- .../FeatureGroupingAlgorithmQT_test.cpp | 4 ---- ...FeatureGroupingAlgorithmUnlabeled_test.cpp | 4 ---- .../openms/source/Fitter1D_test.cpp | 22 +---------------- .../openms/source/GaussFitter1D_test.cpp | 7 ------ .../openms/source/GaussModel_test.cpp | 5 ---- .../openms/source/GoodDiffFilter_test.cpp | 4 ---- .../source/IntensityBalanceFilter_test.cpp | 4 ---- .../openms/source/InterpolationModel_test.cpp | 7 +----- .../openms/source/IsotopeDiffFilter_test.cpp | 4 ---- .../openms/source/IsotopeFitter1D_test.cpp | 6 ----- .../openms/source/IsotopeMarker_test.cpp | 4 ---- .../openms/source/IsotopeModel_test.cpp | 5 ---- .../openms/source/LabeledPairFinder_test.cpp | 6 ----- .../openms/source/LevMarqFitter1D_test.cpp | 12 +--------- ...nmentEvaluationAlgorithmPrecision_test.cpp | 4 ---- ...lignmentEvaluationAlgorithmRecall_test.cpp | 4 ---- .../openms/source/MaxLikeliFitter1D_test.cpp | 11 +-------- .../source/NeutralLossDiffFilter_test.cpp | 4 ---- .../openms/source/NeutralLossMarker_test.cpp | 4 ---- .../openms/source/PeakAlignment_test.cpp | 6 ----- .../openms/source/PeakMarker_test.cpp | 4 ---- .../PoseClusteringAffineSuperimposer_test.cpp | 7 ------ .../PoseClusteringShiftSuperimposer_test.cpp | 6 ----- .../openms/source/QTClusterFinder_test.cpp | 7 ------ .../openms/source/SimplePairFinder_test.cpp | 6 ----- .../openms/source/SingleLinkage_test.cpp | 8 ------- .../source/SpectraSTSimilarityScore_test.cpp | 4 ---- .../source/SpectrumAlignmentScore_test.cpp | 4 ---- .../source/SpectrumCheapDPCorr_test.cpp | 4 ---- .../SpectrumPrecursorComparator_test.cpp | 4 ---- .../openms/source/StablePairFinder_test.cpp | 6 ----- .../openms/source/TICFilter_test.cpp | 4 ---- .../source/ZhangSimilarityScore_test.cpp | 4 ---- 166 files changed, 66 insertions(+), 694 deletions(-) diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmKD.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmKD.h index 9a87e3fee53..7488a23790f 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmKD.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmKD.h @@ -183,12 +183,6 @@ class OPENMS_DLLAPI ClusterProxyKD return new FeatureGroupingAlgorithmKD(); } - /// Returns the product name (for the Factory) - static String getProductName() - { - return "unlabeled_kd"; - } - private: /// Copy constructor intentionally not implemented -> private diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmLabeled.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmLabeled.h index 7daa0133ca3..c8755cea679 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmLabeled.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmLabeled.h @@ -48,12 +48,6 @@ namespace OpenMS return new FeatureGroupingAlgorithmLabeled(); } - ///Returns the product name (for the Factory) - static String getProductName() - { - return "labeled"; - } - private: ///Copy constructor is not implemented -> private diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmQT.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmQT.h index 65bf9f7ccdb..6aaa73ac97b 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmQT.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmQT.h @@ -59,12 +59,6 @@ namespace OpenMS return new FeatureGroupingAlgorithmQT(); } - /// Returns the product name (for the Factory) - static String getProductName() - { - return "unlabeled_qt"; - } - private: /// Copy constructor intentionally not implemented -> private diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmUnlabeled.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmUnlabeled.h index fba3319a2b1..be6c584e229 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmUnlabeled.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmUnlabeled.h @@ -88,12 +88,6 @@ namespace OpenMS return new FeatureGroupingAlgorithmUnlabeled(); } - /// Returns the product name (for the Factory) - static String getProductName() - { - return "unlabeled"; - } - private: // This vector should always have 2 elements diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/LabeledPairFinder.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/LabeledPairFinder.h index e1f9cec2bd0..7f77aa6c6bc 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/LabeledPairFinder.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/LabeledPairFinder.h @@ -46,12 +46,6 @@ namespace OpenMS return new LabeledPairFinder(); } - /// Returns the name of this module - static const String getProductName() - { - return "labeled_pair_finder"; - } - /** @brief Run the algorithm diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithmPrecision.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithmPrecision.h index 19da351981f..6d42d80ac75 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithmPrecision.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithmPrecision.h @@ -40,12 +40,6 @@ namespace OpenMS return new MapAlignmentEvaluationAlgorithmPrecision(); } - /// Returns the product name (for the Factory) - static String getProductName() - { - return "precision"; - } - private: /// Copy constructor intentionally not implemented -> private diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithmRecall.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithmRecall.h index 5b7e08c9877..031a920bc65 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithmRecall.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithmRecall.h @@ -39,13 +39,7 @@ namespace OpenMS { return new MapAlignmentEvaluationAlgorithmRecall(); } - - /// Returns the product name (for the Factory) - static String getProductName() - { - return "recall"; - } - + private: /// Copy constructor intentionally not implemented -> private diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/PoseClusteringAffineSuperimposer.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/PoseClusteringAffineSuperimposer.h index 29a33417bd0..9808866cefd 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/PoseClusteringAffineSuperimposer.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/PoseClusteringAffineSuperimposer.h @@ -80,12 +80,6 @@ namespace OpenMS return new PoseClusteringAffineSuperimposer(); } - /// Returns the name of this module - static const String getProductName() - { - return "poseclustering_affine"; - } - }; } // namespace OpenMS diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/QTClusterFinder.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/QTClusterFinder.h index 24969fd5d00..6734e203346 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/QTClusterFinder.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/QTClusterFinder.h @@ -258,12 +258,6 @@ namespace OpenMS /// Destructor ~QTClusterFinder() override; - /// Returns the name of the product - static const String getProductName() - { - return "qt"; - } - /** @brief Runs the algorithm on consensus maps diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/SimplePairFinder.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/SimplePairFinder.h index b8d489b7a7a..f70f4f9a4fe 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/SimplePairFinder.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/SimplePairFinder.h @@ -72,12 +72,6 @@ namespace OpenMS return new SimplePairFinder(); } - /// returns the name of this module - static const String getProductName() - { - return "simple"; - } - /** @brief Run the algorithm diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/StablePairFinder.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/StablePairFinder.h index 186fde9eeed..8656da639a8 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/StablePairFinder.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/StablePairFinder.h @@ -102,12 +102,6 @@ namespace OpenMS return new StablePairFinder(); } - /// Returns the name of this module - static const String getProductName() - { - return "stable"; - } - /** @brief Run the algorithm diff --git a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/AverageLinkage.h b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/AverageLinkage.h index 2730703811e..38706baf249 100644 --- a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/AverageLinkage.h +++ b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/AverageLinkage.h @@ -60,9 +60,6 @@ namespace OpenMS /// creates a new instance of a AverageLinkage object static ClusterFunctor * create(); - /// get the identifier for this object - static const String getProductName(); - }; } diff --git a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/CompleteLinkage.h b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/CompleteLinkage.h index 259536a2138..52c6110e9f6 100644 --- a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/CompleteLinkage.h +++ b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/CompleteLinkage.h @@ -66,8 +66,6 @@ class OPENMS_DLLAPI CompleteLinkage : public ClusterFunctor, public ProgressLogg /// creates a new instance of a CompleteLinkage object static ClusterFunctor* create(); - /// get the identifier for this object - static const String getProductName(); }; } // namespace OpenMS diff --git a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/SingleLinkage.h b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/SingleLinkage.h index d4a9789bf0e..7de2708749a 100644 --- a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/SingleLinkage.h +++ b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/SingleLinkage.h @@ -58,8 +58,6 @@ namespace OpenMS /// creates a new instance of a SingleLinkage object static ClusterFunctor * create(); - /// get the identifier for this object - static const String getProductName(); }; diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSharedPeakCount.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSharedPeakCount.h index a739c4174a3..89601ca1621 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSharedPeakCount.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSharedPeakCount.h @@ -62,9 +62,6 @@ namespace OpenMS /// static BinnedSpectrumCompareFunctor* create() { return new BinnedSharedPeakCount(); } - /// get the identifier for this DefaultParamHandler - static const String getProductName() { return "BinnedSharedPeakCount"; } - protected: void updateMembers_() override; double precursor_mass_tolerance_; diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSpectralContrastAngle.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSpectralContrastAngle.h index 3621086a679..ea4602e5234 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSpectralContrastAngle.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSpectralContrastAngle.h @@ -60,12 +60,6 @@ namespace OpenMS /// static BinnedSpectrumCompareFunctor* create() { return new BinnedSpectralContrastAngle(); } - /// get the identifier for this DefaultParamHandler - static const String getProductName() - { - return "BinnedSpectralContrastAngle"; - } - protected: void updateMembers_() override; double precursor_mass_tolerance_; diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.h index 263132557e3..17d7587e801 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.h @@ -52,15 +52,6 @@ namespace OpenMS /// function call operator, calculates self similarity virtual double operator()(const BinnedSpectrum& spec) const = 0; - /// registers all derived products - - - /// get the identifier for a DefaultParamHandler - static const String getProductName() - { - return "BinnedSpectrumCompareFunctor"; - } - }; } diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSumAgreeingIntensities.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSumAgreeingIntensities.h index 27d969027a2..d23df6114a3 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSumAgreeingIntensities.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSumAgreeingIntensities.h @@ -66,12 +66,6 @@ namespace OpenMS /// static BinnedSpectrumCompareFunctor* create() { return new BinnedSumAgreeingIntensities(); } - /// get the identifier for this DefaultParamHandler - static const String getProductName() - { - return "BinnedSumAgreeingIntensities"; - } - protected: void updateMembers_() override; double precursor_mass_tolerance_; diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/PeakAlignment.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/PeakAlignment.h index 38f6b01758f..da7aa1c318d 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/PeakAlignment.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/PeakAlignment.h @@ -54,12 +54,6 @@ namespace OpenMS /// static PeakSpectrumCompareFunctor * create() { return new PeakAlignment(); } - /// get the identifier for this DefaultParamHandler - static const String getProductName() - { - return "PeakAlignment"; - } - /// make alignment and get the traceback std::vector > getAlignmentTraceback(const PeakSpectrum & spec1, const PeakSpectrum & spec2) const; diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectraSTSimilarityScore.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectraSTSimilarityScore.h index 0120ff004c3..994ace496de 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectraSTSimilarityScore.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectraSTSimilarityScore.h @@ -116,12 +116,6 @@ namespace OpenMS /// static PeakSpectrumCompareFunctor * create() { return new SpectraSTSimilarityScore(); } - ///Reimplemented from PeakSpectrumCompareFunctor. - static const String getProductName() - { - return "SpectraSTSimilarityScore"; - } - protected: diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumAlignmentScore.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumAlignmentScore.h index 794764e9dfd..692a06be339 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumAlignmentScore.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumAlignmentScore.h @@ -72,12 +72,6 @@ namespace OpenMS /// static PeakSpectrumCompareFunctor * create() { return new SpectrumAlignmentScore(); } - /// - static const String getProductName() - { - return "SpectrumAlignmentScore"; - } - // @} }; diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumCheapDPCorr.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumCheapDPCorr.h index 9b163c77d2a..024314150f9 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumCheapDPCorr.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumCheapDPCorr.h @@ -63,13 +63,7 @@ namespace OpenMS // @{ /// static PeakSpectrumCompareFunctor * create() { return new SpectrumCheapDPCorr(); } - - /// - static const String getProductName() - { - return "SpectrumCheapDPCorr"; - } - + /// return consensus spectrum from last function call operator const PeakSpectrum & lastconsensus() const; diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumPrecursorComparator.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumPrecursorComparator.h index 0051af1720e..e5b946a7509 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumPrecursorComparator.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumPrecursorComparator.h @@ -52,12 +52,6 @@ namespace OpenMS /// static PeakSpectrumCompareFunctor * create() { return new SpectrumPrecursorComparator(); } - /// - static const String getProductName() - { - return "SpectrumPrecursorComparator"; - } - // @} }; diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/ZhangSimilarityScore.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/ZhangSimilarityScore.h index a91611e9cb7..9a48124337b 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/ZhangSimilarityScore.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/ZhangSimilarityScore.h @@ -58,12 +58,6 @@ namespace OpenMS /// static PeakSpectrumCompareFunctor * create() { return new ZhangSimilarityScore(); } - /// - static const String getProductName() - { - return "ZhangSimilarityScore"; - } - // @} protected: diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/ComplementFilter.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/ComplementFilter.h index f5c5b1bea5a..417369021d4 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/ComplementFilter.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/ComplementFilter.h @@ -91,12 +91,6 @@ namespace OpenMS return result; } - /// returns the name for registration at the factory - static const String getProductName() - { - return "ComplementFilter"; - } - //@} }; diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/ComplementMarker.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/ComplementMarker.h index dd30fedb675..d9bd347e072 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/ComplementMarker.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/ComplementMarker.h @@ -94,12 +94,6 @@ namespace OpenMS } } - /// returns the name to register at the factory - static const String getProductName() - { - return "ComplementMarker"; - } - //@} }; diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/GoodDiffFilter.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/GoodDiffFilter.h index d6a8bccbe4e..1c254f3baca 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/GoodDiffFilter.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/GoodDiffFilter.h @@ -103,12 +103,6 @@ namespace OpenMS return gooddiff / totaldiff; } - /// - static const String getProductName() - { - return "GoodDiffFilter"; - } - // @} diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IntensityBalanceFilter.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IntensityBalanceFilter.h index 4d00d83b370..34d3cc699bc 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IntensityBalanceFilter.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IntensityBalanceFilter.h @@ -95,12 +95,6 @@ namespace OpenMS return (twobiggest - sevensmallest) / total_intensity; } - /// - static const String getProductName() - { - return "IntensityBalanceFilter"; - } - // @} }; diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IsotopeDiffFilter.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IsotopeDiffFilter.h index 084b454268b..29d95cfc984 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IsotopeDiffFilter.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IsotopeDiffFilter.h @@ -79,12 +79,6 @@ namespace OpenMS return isodiff; } - /// - static const String getProductName() - { - return "IsotopeDiffFilter"; - } - // @} private: diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IsotopeMarker.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IsotopeMarker.h index 67ef86730e8..387894c8047 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IsotopeMarker.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IsotopeMarker.h @@ -107,12 +107,6 @@ namespace OpenMS return; } - /// - static const String getProductName() - { - return "IsotopeMarker"; - } - // @} }; diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/MarkerMower.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/MarkerMower.h index 0f25e14131d..78f01e6430b 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/MarkerMower.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/MarkerMower.h @@ -81,12 +81,7 @@ namespace OpenMS void filterPeakSpectrum(PeakSpectrum & spectrum); void filterPeakMap(PeakMap & exp); - - static const String getProductName() - { - return "MarkerMower"; - } - + /// insert new Marker (violates the DefaultParamHandler interface) void insertmarker(PeakMarker * peak_marker); diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/NeutralLossDiffFilter.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/NeutralLossDiffFilter.h index 4eaebb3ccd8..479134a47c9 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/NeutralLossDiffFilter.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/NeutralLossDiffFilter.h @@ -79,12 +79,6 @@ namespace OpenMS return isodiff; } - /// - static const String getProductName() - { - return "NeutralLossDiffFilter"; - } - // @} }; diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/NeutralLossMarker.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/NeutralLossMarker.h index b76d2bab93d..9f2b824b076 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/NeutralLossMarker.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/NeutralLossMarker.h @@ -101,12 +101,6 @@ namespace OpenMS return; } - /// - static const String getProductName() - { - return "NeutralLossMarker"; - } - // @} }; diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/PeakMarker.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/PeakMarker.h index 3f1864b5353..b8f5b5567d8 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/PeakMarker.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/PeakMarker.h @@ -39,12 +39,6 @@ namespace OpenMS template void apply(std::map & /* marked */, SpectrumType & /* spectrum */) {} - /// - static const String getProductName() - { - return "PeakMarker"; - } - }; } diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/TICFilter.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/TICFilter.h index 95d95a614a5..bb9264aadef 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/TICFilter.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/TICFilter.h @@ -61,13 +61,7 @@ namespace OpenMS } return TIC; } - - /// - static const String getProductName() - { - return "TICFilter"; - } - + // @} }; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel.h index 1c8c77a4bd7..fd1dac3da34 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel.h @@ -18,7 +18,7 @@ namespace OpenMS @brief Abstract base class for 1-dimensional models. Every derived class has to implement the static functions - "T* create()" and "const String getProductName()" (see DefaultParamHandler for details) + "T* create()" (see DefaultParamHandler for details) */ class BaseModel : public DefaultParamHandler { diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.h index 438cebd4da0..ee743bf12e0 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.h @@ -46,12 +46,6 @@ namespace OpenMS /// return interpolation model QualityType fit1d(const RawDataArrayType & range, std::unique_ptr& model) override; - /// name of the model (needed by Factory) - static const String getProductName() - { - return "BiGaussFitter1D"; - } - protected: /// statistics for first peak site diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussModel.h index 78ed6cd6de7..3bcf47f3ad6 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussModel.h @@ -40,19 +40,6 @@ namespace OpenMS /// assignment operator virtual BiGaussModel & operator=(const BiGaussModel & source); -/* - /// create new BiGaussModel object (function needed by Factory) - static BaseModel * create() - { - return new BiGaussModel(); - } -*/ - /// name of the model (needed by Factory) - static const String getProductName() - { - return "BiGaussModel"; - } - /** @brief set the offset of the model The whole model will be shifted to the new offset without being computing all over diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.h index 568353256b8..d399dfe43e1 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.h @@ -41,12 +41,6 @@ namespace OpenMS return new EmgFitter1D(); } - /// name of the model (needed by Factory) - static const String getProductName() - { - return "EmgFitter1D"; - } - /// return interpolation model QualityType fit1d(const RawDataArrayType& range, std::unique_ptr& model) override; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgModel.h index 3d18b7be6fa..415b10449d6 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgModel.h @@ -46,12 +46,6 @@ namespace OpenMS return new EmgModel(); } - /// name of the model (needed by Factory) - static const String getProductName() - { - return "EmgModel"; - } - /// set offset without being computing all over and without any discrepancy void setOffset(CoordinateType offset) override; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.h index 95aad17b3f4..607e44b1f82 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.h @@ -40,12 +40,6 @@ namespace OpenMS return new ExtendedIsotopeFitter1D(); } - /// name of the model (needed by Factory) - static const String getProductName() - { - return "ExtendedIsotopeFitter1D"; - } - /// return interpolation model QualityType fit1d(const RawDataArrayType & range, std::unique_ptr& model) override; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeModel.h index 7eccb7fb7e3..1d7e870f4df 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeModel.h @@ -56,12 +56,6 @@ namespace OpenMS return new ExtendedIsotopeModel(); } - /// name of the model (needed by Factory) - static const String getProductName() - { - return "ExtendedIsotopeModel"; - } - /** @brief set the offset of the model The whole model will be shifted to the new offset without being computing all over. diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/Fitter1D.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/Fitter1D.h index 09d22aa10db..ca044d62aaa 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/Fitter1D.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/Fitter1D.h @@ -23,9 +23,6 @@ namespace OpenMS /** @brief Abstract base class for all 1D-dimensional model fitter. - Every derived class has to implement the static functions - "T* create()" and "const String getProductName()" (see DefaultParamHandler for details) - @htmlinclude OpenMS_Fitter1D.parameters @ingroup FeatureFinder diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.h index ae165576c70..df03b111410 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.h @@ -44,12 +44,6 @@ namespace OpenMS /// return interpolation model QualityType fit1d(const RawDataArrayType & range, std::unique_ptr& model) override; - /// name of the model (needed by Factory) - static const String getProductName() - { - return "GaussFitter1D"; - } - protected: void updateMembers_() override; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussModel.h index 98a34323d15..3348003deb8 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussModel.h @@ -46,12 +46,6 @@ namespace OpenMS return new GaussModel(); } - /// name of the model (needed by Factory) - static const String getProductName() - { - return "GaussModel"; - } - /** @brief set the offset of the model The whole model will be shifted to the new offset without being computing all over. diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.h index a5215ff0af7..d812dd323c9 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.h @@ -39,13 +39,6 @@ namespace OpenMS { return new IsotopeFitter1D(); } - - /// name of the model (needed by Factory) - static const String getProductName() - { - return "IsotopeFitter1D"; - } - /// return interpolation model QualityType fit1d(const RawDataArrayType & range, std::unique_ptr& model) override; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeModel.h index 909908e77a2..36ba96a6fab 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeModel.h @@ -59,12 +59,6 @@ namespace OpenMS return new IsotopeModel(); } - /// name of the model (needed by Factory) - static const String getProductName() - { - return "IsotopeModel"; - } - /** @brief set the offset of the model The whole model will be shifted to the new offset without being computing all over. diff --git a/src/openms/source/ANALYSIS/MAPMATCHING/PoseClusteringAffineSuperimposer.cpp b/src/openms/source/ANALYSIS/MAPMATCHING/PoseClusteringAffineSuperimposer.cpp index bb6e9380b98..041e4ed40e3 100644 --- a/src/openms/source/ANALYSIS/MAPMATCHING/PoseClusteringAffineSuperimposer.cpp +++ b/src/openms/source/ANALYSIS/MAPMATCHING/PoseClusteringAffineSuperimposer.cpp @@ -21,7 +21,7 @@ namespace OpenMS PoseClusteringAffineSuperimposer::PoseClusteringAffineSuperimposer() : BaseSuperimposer() { - setName(getProductName()); + setName("PoseClusteringAffineSuperimposer"); defaults_.setValue("mz_pair_max_distance", 0.5, "Maximum of m/z deviation of corresponding elements in different maps. " "This condition applies to the pairs considered in hashing."); diff --git a/src/openms/source/ANALYSIS/MAPMATCHING/PoseClusteringShiftSuperimposer.cpp b/src/openms/source/ANALYSIS/MAPMATCHING/PoseClusteringShiftSuperimposer.cpp index d956be1bd71..c24575cdbc1 100644 --- a/src/openms/source/ANALYSIS/MAPMATCHING/PoseClusteringShiftSuperimposer.cpp +++ b/src/openms/source/ANALYSIS/MAPMATCHING/PoseClusteringShiftSuperimposer.cpp @@ -26,7 +26,7 @@ namespace OpenMS PoseClusteringShiftSuperimposer::PoseClusteringShiftSuperimposer() : BaseSuperimposer() { - setName(getProductName()); + setName("PoseClusteringShiftSuperimposer"); defaults_.setValue("mz_pair_max_distance", 0.5, "Maximum of m/z deviation of corresponding elements in different maps. " "This condition applies to the pairs considered in hashing."); diff --git a/src/openms/source/ANALYSIS/MAPMATCHING/QTClusterFinder.cpp b/src/openms/source/ANALYSIS/MAPMATCHING/QTClusterFinder.cpp index 45ed1f2ca20..f72e8742e5c 100644 --- a/src/openms/source/ANALYSIS/MAPMATCHING/QTClusterFinder.cpp +++ b/src/openms/source/ANALYSIS/MAPMATCHING/QTClusterFinder.cpp @@ -29,7 +29,7 @@ namespace OpenMS QTClusterFinder::QTClusterFinder() : BaseGroupFinder(), feature_distance_(FeatureDistance()) { - setName(getProductName()); + setName("QTClusterFinder"); defaults_.setValue("use_identifications", "false", "Never link features that are annotated with different peptides (only the best hit per peptide identification is taken into account)."); defaults_.setValidStrings("use_identifications", {"true","false"}); diff --git a/src/openms/source/ANALYSIS/MAPMATCHING/SimplePairFinder.cpp b/src/openms/source/ANALYSIS/MAPMATCHING/SimplePairFinder.cpp index 0f314671364..d0d4516ee1e 100644 --- a/src/openms/source/ANALYSIS/MAPMATCHING/SimplePairFinder.cpp +++ b/src/openms/source/ANALYSIS/MAPMATCHING/SimplePairFinder.cpp @@ -14,7 +14,7 @@ namespace OpenMS Base() { //set the name for DefaultParamHandler error messages - setName(getProductName()); + setName("SimplePairFinder"); defaults_.setValue("similarity:diff_intercept:RT", 1.0, "This parameter controls the asymptotic decay rate for large differences (for more details see the similarity measurement).", {"advanced"}); defaults_.setValue("similarity:diff_intercept:MZ", 0.1, "This parameter controls the asymptotic decay rate for large differences (for more details see the similarity measurement).", {"advanced"}); diff --git a/src/openms/source/ANALYSIS/MAPMATCHING/StablePairFinder.cpp b/src/openms/source/ANALYSIS/MAPMATCHING/StablePairFinder.cpp index 577b323ed32..67a399ec706 100644 --- a/src/openms/source/ANALYSIS/MAPMATCHING/StablePairFinder.cpp +++ b/src/openms/source/ANALYSIS/MAPMATCHING/StablePairFinder.cpp @@ -27,7 +27,7 @@ namespace OpenMS Base() { //set the name for DefaultParamHandler error messages - Base::setName(getProductName()); + Base::setName("StablePairFinder"); defaults_.setValue("second_nearest_gap", 2.0, "Only link features whose distance to the second nearest neighbors (for both sides) is larger by 'second_nearest_gap' than the distance between the matched pair itself."); defaults_.setMinFloat("second_nearest_gap", 1.0); diff --git a/src/openms/source/COMPARISON/CLUSTERING/AverageLinkage.cpp b/src/openms/source/COMPARISON/CLUSTERING/AverageLinkage.cpp index 5159a2aeb1d..ab95a7aeb30 100644 --- a/src/openms/source/COMPARISON/CLUSTERING/AverageLinkage.cpp +++ b/src/openms/source/COMPARISON/CLUSTERING/AverageLinkage.cpp @@ -19,12 +19,6 @@ namespace OpenMS return new AverageLinkage(); } - /// get the identifier for this object - const String AverageLinkage::getProductName() - { - return "AverageLinkage"; - } - AverageLinkage::AverageLinkage() : ClusterFunctor(), ProgressLogger() { diff --git a/src/openms/source/COMPARISON/CLUSTERING/CompleteLinkage.cpp b/src/openms/source/COMPARISON/CLUSTERING/CompleteLinkage.cpp index 61159ab354b..12e60ead945 100644 --- a/src/openms/source/COMPARISON/CLUSTERING/CompleteLinkage.cpp +++ b/src/openms/source/COMPARISON/CLUSTERING/CompleteLinkage.cpp @@ -18,11 +18,6 @@ namespace OpenMS return new CompleteLinkage(); } - const String CompleteLinkage::getProductName() - { - return "CompleteLinkage"; - } - CompleteLinkage::CompleteLinkage() : ClusterFunctor(), ProgressLogger() { diff --git a/src/openms/source/COMPARISON/CLUSTERING/SingleLinkage.cpp b/src/openms/source/COMPARISON/CLUSTERING/SingleLinkage.cpp index 5ffba98c8e4..df221888f15 100644 --- a/src/openms/source/COMPARISON/CLUSTERING/SingleLinkage.cpp +++ b/src/openms/source/COMPARISON/CLUSTERING/SingleLinkage.cpp @@ -17,11 +17,6 @@ namespace OpenMS return new SingleLinkage(); } - const String SingleLinkage::getProductName() - { - return "SingleLinkage"; - } - SingleLinkage::SingleLinkage() : ClusterFunctor(), ProgressLogger() { diff --git a/src/openms/source/COMPARISON/SPECTRA/BinnedSharedPeakCount.cpp b/src/openms/source/COMPARISON/SPECTRA/BinnedSharedPeakCount.cpp index cd6836d065e..3033bc03701 100644 --- a/src/openms/source/COMPARISON/SPECTRA/BinnedSharedPeakCount.cpp +++ b/src/openms/source/COMPARISON/SPECTRA/BinnedSharedPeakCount.cpp @@ -18,7 +18,7 @@ namespace OpenMS BinnedSharedPeakCount::BinnedSharedPeakCount() : BinnedSpectrumCompareFunctor() { - setName(BinnedSharedPeakCount::getProductName()); + setName("BinnedSharedPeakCount"); defaultsToParam_(); } diff --git a/src/openms/source/COMPARISON/SPECTRA/BinnedSpectralContrastAngle.cpp b/src/openms/source/COMPARISON/SPECTRA/BinnedSpectralContrastAngle.cpp index 3aaaba8e3d4..405f7c7aacf 100644 --- a/src/openms/source/COMPARISON/SPECTRA/BinnedSpectralContrastAngle.cpp +++ b/src/openms/source/COMPARISON/SPECTRA/BinnedSpectralContrastAngle.cpp @@ -18,7 +18,7 @@ namespace OpenMS BinnedSpectralContrastAngle::BinnedSpectralContrastAngle() : BinnedSpectrumCompareFunctor() { - setName(BinnedSpectralContrastAngle::getProductName()); + setName("BinnedSpectralContrastAngle"); defaultsToParam_(); } diff --git a/src/openms/source/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.cpp b/src/openms/source/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.cpp index 7e96737d51d..3a6a0fa0cd3 100644 --- a/src/openms/source/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.cpp +++ b/src/openms/source/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.cpp @@ -16,7 +16,7 @@ using namespace std; namespace OpenMS { BinnedSpectrumCompareFunctor::BinnedSpectrumCompareFunctor() : - DefaultParamHandler(BinnedSpectrumCompareFunctor::getProductName()) + DefaultParamHandler("BinnedSpectrumCompareFunctor") { } diff --git a/src/openms/source/COMPARISON/SPECTRA/BinnedSumAgreeingIntensities.cpp b/src/openms/source/COMPARISON/SPECTRA/BinnedSumAgreeingIntensities.cpp index d98f386dec7..52f86165b23 100644 --- a/src/openms/source/COMPARISON/SPECTRA/BinnedSumAgreeingIntensities.cpp +++ b/src/openms/source/COMPARISON/SPECTRA/BinnedSumAgreeingIntensities.cpp @@ -18,7 +18,7 @@ namespace OpenMS BinnedSumAgreeingIntensities::BinnedSumAgreeingIntensities() : BinnedSpectrumCompareFunctor() { - setName(BinnedSumAgreeingIntensities::getProductName()); + setName("BinnedSumAgreeingIntensities"); defaultsToParam_(); } diff --git a/src/openms/source/COMPARISON/SPECTRA/SpectraSTSimilarityScore.cpp b/src/openms/source/COMPARISON/SPECTRA/SpectraSTSimilarityScore.cpp index 1bcb0ddab2a..8c589b9ab02 100644 --- a/src/openms/source/COMPARISON/SPECTRA/SpectraSTSimilarityScore.cpp +++ b/src/openms/source/COMPARISON/SPECTRA/SpectraSTSimilarityScore.cpp @@ -18,7 +18,7 @@ namespace OpenMS SpectraSTSimilarityScore::SpectraSTSimilarityScore() : PeakSpectrumCompareFunctor() { - setName(SpectraSTSimilarityScore::getProductName()); + setName("SpectraSTSimilarityScore"); } SpectraSTSimilarityScore::SpectraSTSimilarityScore(const SpectraSTSimilarityScore & source) = default; diff --git a/src/openms/source/COMPARISON/SPECTRA/SpectrumAlignmentScore.cpp b/src/openms/source/COMPARISON/SPECTRA/SpectrumAlignmentScore.cpp index 19c5f1b3227..e8d7173546b 100644 --- a/src/openms/source/COMPARISON/SPECTRA/SpectrumAlignmentScore.cpp +++ b/src/openms/source/COMPARISON/SPECTRA/SpectrumAlignmentScore.cpp @@ -15,7 +15,7 @@ namespace OpenMS SpectrumAlignmentScore::SpectrumAlignmentScore() : PeakSpectrumCompareFunctor() { - setName(SpectrumAlignmentScore::getProductName()); + setName("SpectrumAlignmentScore"); defaults_.setValue("tolerance", 0.3, "Defines the absolute (in Da) or relative (in ppm) tolerance"); defaults_.setValue("is_relative_tolerance", "false", "if true, the tolerance value is interpreted as ppm"); defaults_.setValidStrings("is_relative_tolerance", {"true","false"}); diff --git a/src/openms/source/COMPARISON/SPECTRA/SpectrumCheapDPCorr.cpp b/src/openms/source/COMPARISON/SPECTRA/SpectrumCheapDPCorr.cpp index b21ee68963d..28149cc8248 100644 --- a/src/openms/source/COMPARISON/SPECTRA/SpectrumCheapDPCorr.cpp +++ b/src/openms/source/COMPARISON/SPECTRA/SpectrumCheapDPCorr.cpp @@ -26,7 +26,7 @@ namespace OpenMS PeakSpectrumCompareFunctor(), lastconsensus_() { - setName(SpectrumCheapDPCorr::getProductName()); + setName("SpectrumCheapDPCorr"); defaults_.setValue("variation", 0.001, "Maximum difference in position (in percent of the current m/z).\nNote that big values of variation ( 1 being the maximum ) result in consideration of all possible pairings which has a running time of O(n*n)"); defaults_.setValue("int_cnt", 0, "How the peak heights are used in the score.\n0 = product\n1 = sqrt(product)\n2 = sum\n3 = agreeing intensity\n"); defaults_.setValue("keeppeaks", 0, "Flag that states if peaks without alignment partner are kept in the consensus spectrum."); diff --git a/src/openms/source/COMPARISON/SPECTRA/SpectrumPrecursorComparator.cpp b/src/openms/source/COMPARISON/SPECTRA/SpectrumPrecursorComparator.cpp index 5bb9ba8410f..a700181c870 100644 --- a/src/openms/source/COMPARISON/SPECTRA/SpectrumPrecursorComparator.cpp +++ b/src/openms/source/COMPARISON/SPECTRA/SpectrumPrecursorComparator.cpp @@ -18,7 +18,7 @@ namespace OpenMS SpectrumPrecursorComparator::SpectrumPrecursorComparator() : PeakSpectrumCompareFunctor() { - setName(SpectrumPrecursorComparator::getProductName()); + setName("SpectrumPrecursorComparator"); defaults_.setValue("window", 2, "Allowed deviation between precursor peaks."); defaultsToParam_(); } diff --git a/src/openms/source/COMPARISON/SPECTRA/ZhangSimilarityScore.cpp b/src/openms/source/COMPARISON/SPECTRA/ZhangSimilarityScore.cpp index 24525826582..b151a038efb 100644 --- a/src/openms/source/COMPARISON/SPECTRA/ZhangSimilarityScore.cpp +++ b/src/openms/source/COMPARISON/SPECTRA/ZhangSimilarityScore.cpp @@ -20,7 +20,7 @@ namespace OpenMS ZhangSimilarityScore::ZhangSimilarityScore() : PeakSpectrumCompareFunctor() { - setName(ZhangSimilarityScore::getProductName()); + setName("ZhangSimilarityScore"); defaults_.setValue("tolerance", 0.2, "defines the absolute (in Da) or relative (in ppm) tolerance"); defaults_.setValue("is_relative_tolerance", "false", "If set to true, the tolerance is interpreted as relative"); defaults_.setValidStrings("is_relative_tolerance", {"true","false"}); diff --git a/src/openms/source/FILTERING/TRANSFORMERS/ComplementFilter.cpp b/src/openms/source/FILTERING/TRANSFORMERS/ComplementFilter.cpp index 40d1a3d3159..4d08f5d80d7 100644 --- a/src/openms/source/FILTERING/TRANSFORMERS/ComplementFilter.cpp +++ b/src/openms/source/FILTERING/TRANSFORMERS/ComplementFilter.cpp @@ -15,7 +15,7 @@ namespace OpenMS ComplementFilter::ComplementFilter() : FilterFunctor() { - setName(ComplementFilter::getProductName()); + setName("ComplementFilter"); //value from Bioinformatics, Bern 2004 defaults_.setValue("tolerance", 0.37, "Tolerance value as defined by Bern et al."); defaultsToParam_(); diff --git a/src/openms/source/FILTERING/TRANSFORMERS/ComplementMarker.cpp b/src/openms/source/FILTERING/TRANSFORMERS/ComplementMarker.cpp index f6c1fb9276d..2531922ac1b 100644 --- a/src/openms/source/FILTERING/TRANSFORMERS/ComplementMarker.cpp +++ b/src/openms/source/FILTERING/TRANSFORMERS/ComplementMarker.cpp @@ -15,7 +15,7 @@ namespace OpenMS ComplementMarker::ComplementMarker() : PeakMarker() { - setName(ComplementMarker::getProductName()); + setName("ComplementMarker"); defaults_.setValue("tolerance", 1.0, "Tolerance value as defined by Bern et al."); defaults_.setValue("marks", 1, "How often a peak needs to be marked to be returned"); defaultsToParam_(); diff --git a/src/openms/source/FILTERING/TRANSFORMERS/GoodDiffFilter.cpp b/src/openms/source/FILTERING/TRANSFORMERS/GoodDiffFilter.cpp index 26539509dca..24eb02cd387 100644 --- a/src/openms/source/FILTERING/TRANSFORMERS/GoodDiffFilter.cpp +++ b/src/openms/source/FILTERING/TRANSFORMERS/GoodDiffFilter.cpp @@ -15,7 +15,7 @@ namespace OpenMS GoodDiffFilter::GoodDiffFilter() : FilterFunctor() { - setName(GoodDiffFilter::getProductName()); + setName("GoodDiffFilter"); //values from kinter sherman diff --git a/src/openms/source/FILTERING/TRANSFORMERS/IntensityBalanceFilter.cpp b/src/openms/source/FILTERING/TRANSFORMERS/IntensityBalanceFilter.cpp index 4c7863bdf7d..ffa13dcb33b 100644 --- a/src/openms/source/FILTERING/TRANSFORMERS/IntensityBalanceFilter.cpp +++ b/src/openms/source/FILTERING/TRANSFORMERS/IntensityBalanceFilter.cpp @@ -16,7 +16,7 @@ namespace OpenMS FilterFunctor() { check_defaults_ = false; - setName(IntensityBalanceFilter::getProductName()); + setName("IntensityBalanceFilter"); defaultsToParam_(); } diff --git a/src/openms/source/FILTERING/TRANSFORMERS/IsotopeDiffFilter.cpp b/src/openms/source/FILTERING/TRANSFORMERS/IsotopeDiffFilter.cpp index 079bd25e409..0ab72c1f36c 100644 --- a/src/openms/source/FILTERING/TRANSFORMERS/IsotopeDiffFilter.cpp +++ b/src/openms/source/FILTERING/TRANSFORMERS/IsotopeDiffFilter.cpp @@ -17,7 +17,7 @@ namespace OpenMS IsotopeDiffFilter::IsotopeDiffFilter() : FilterFunctor() { - setName(IsotopeDiffFilter::getProductName()); + setName("IsotopeDiffFilter"); //value from Bioinformatics, Bern 2004 defaults_.setValue("tolerance", 0.37, "Tolerance value defined by Bern et al."); defaultsToParam_(); diff --git a/src/openms/source/FILTERING/TRANSFORMERS/IsotopeMarker.cpp b/src/openms/source/FILTERING/TRANSFORMERS/IsotopeMarker.cpp index f2cf5187e95..a716c716d3b 100644 --- a/src/openms/source/FILTERING/TRANSFORMERS/IsotopeMarker.cpp +++ b/src/openms/source/FILTERING/TRANSFORMERS/IsotopeMarker.cpp @@ -16,7 +16,7 @@ namespace OpenMS IsotopeMarker::IsotopeMarker() : PeakMarker() { - setName(IsotopeMarker::getProductName()); + setName("IsotopeMarker"); defaults_.setValue("marks", 1, "How often a peak must be marked to be reported"); defaults_.setValue("mz_variation", 0.1, "variation in m/z direction"); defaults_.setValue("in_variation", 0.5, "variation in intensity"); diff --git a/src/openms/source/FILTERING/TRANSFORMERS/NeutralLossDiffFilter.cpp b/src/openms/source/FILTERING/TRANSFORMERS/NeutralLossDiffFilter.cpp index 830c9a3d87b..717ae2b167c 100644 --- a/src/openms/source/FILTERING/TRANSFORMERS/NeutralLossDiffFilter.cpp +++ b/src/openms/source/FILTERING/TRANSFORMERS/NeutralLossDiffFilter.cpp @@ -15,7 +15,7 @@ namespace OpenMS NeutralLossDiffFilter::NeutralLossDiffFilter() : FilterFunctor() { - setName(NeutralLossDiffFilter::getProductName()); + setName("NeutralLossDiffFilter"); //value from Bioinformatics, Bern 2004 defaults_.setValue("tolerance", 0.37, "Tolerance value defined by Bern et al."); defaultsToParam_(); diff --git a/src/openms/source/FILTERING/TRANSFORMERS/NeutralLossMarker.cpp b/src/openms/source/FILTERING/TRANSFORMERS/NeutralLossMarker.cpp index 9f761c7e5ca..13b65ebdeaf 100644 --- a/src/openms/source/FILTERING/TRANSFORMERS/NeutralLossMarker.cpp +++ b/src/openms/source/FILTERING/TRANSFORMERS/NeutralLossMarker.cpp @@ -16,7 +16,7 @@ namespace OpenMS NeutralLossMarker::NeutralLossMarker() : PeakMarker() { - setName(NeutralLossMarker::getProductName()); + setName("NeutralLossMarker"); defaults_.setValue("marks", 1, "How often a peak must be marked to be reported"); defaults_.setValue("tolerance", 0.2, "Tolerance in m/z direction"); defaultsToParam_(); diff --git a/src/openms/source/FILTERING/TRANSFORMERS/PeakMarker.cpp b/src/openms/source/FILTERING/TRANSFORMERS/PeakMarker.cpp index 371ed366f75..93670b385a7 100644 --- a/src/openms/source/FILTERING/TRANSFORMERS/PeakMarker.cpp +++ b/src/openms/source/FILTERING/TRANSFORMERS/PeakMarker.cpp @@ -10,7 +10,7 @@ namespace OpenMS { PeakMarker::PeakMarker() : - DefaultParamHandler(PeakMarker::getProductName()) + DefaultParamHandler("PeakMarker") { } diff --git a/src/openms/source/FILTERING/TRANSFORMERS/TICFilter.cpp b/src/openms/source/FILTERING/TRANSFORMERS/TICFilter.cpp index f073ac23a08..267b9b6fd0b 100644 --- a/src/openms/source/FILTERING/TRANSFORMERS/TICFilter.cpp +++ b/src/openms/source/FILTERING/TRANSFORMERS/TICFilter.cpp @@ -16,7 +16,7 @@ namespace OpenMS TICFilter::TICFilter() : FilterFunctor() { - setName(TICFilter::getProductName()); + setName("TICFilter"); defaults_.setValue("window", 5, "Windowing parameter which defines the windows size"); defaultsToParam_(); } diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.cpp index 1532b49f2dc..1591e82f553 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.cpp @@ -16,7 +16,7 @@ namespace OpenMS BiGaussFitter1D::BiGaussFitter1D() : MaxLikeliFitter1D() { - setName(getProductName()); + setName("BiGaussFitter1D"); defaults_.setValue("statistics:variance1", 1.0, "Variance of the first gaussian, used for the lower half of the model.", {"advanced"}); defaults_.setValue("statistics:variance2", 1.0, "Variance of the second gaussian, used for the upper half of the model.", {"advanced"}); diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BiGaussModel.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BiGaussModel.cpp index 49dc2e674ea..39a17d71133 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BiGaussModel.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/BiGaussModel.cpp @@ -13,7 +13,7 @@ namespace OpenMS BiGaussModel::BiGaussModel() : InterpolationModel(), statistics1_(), statistics2_() { - setName(getProductName()); + setName("BiGaussModel"); defaults_.setValue("bounding_box:min", 0.0, "Lower end of bounding box enclosing the data used to fit the model.", {"advanced"}); defaults_.setValue("bounding_box:max", 1.0, "Upper end of bounding box enclosing the data used to fit the model.", {"advanced"}); diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.cpp index 20ddc94b1ee..26122982aee 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.cpp @@ -102,7 +102,7 @@ namespace OpenMS EmgFitter1D::EmgFitter1D() : LevMarqFitter1D() { - setName(getProductName()); + setName("EmgFitter1D"); defaults_.setValue("init_mom", "false", "Initialize parameters using method of moments estimators.", {"advanced"}); defaults_.setValidStrings("init_mom", {"true","false"}); defaults_.setValue("statistics:variance", 1.0, "Variance of the model.", {"advanced"}); diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/EmgModel.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/EmgModel.cpp index 3dbc07f4efa..cab8a200d16 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/EmgModel.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/EmgModel.cpp @@ -15,7 +15,7 @@ namespace OpenMS EmgModel::EmgModel() : InterpolationModel() { - setName(getProductName()); + setName("EmgModel"); defaults_.setValue("bounding_box:min", 0.0f, "Lower end of bounding box enclosing the data used to fit the model.", {"advanced"}); defaults_.setValue("bounding_box:max", 1.0f, "Upper end of bounding box enclosing the data used to fit the model.", {"advanced"}); diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.cpp index 650c388581b..65dfe6fed80 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.cpp @@ -19,7 +19,7 @@ namespace OpenMS ExtendedIsotopeFitter1D::ExtendedIsotopeFitter1D() : MaxLikeliFitter1D() { - setName(getProductName()); + setName("ExtendedIsotopeFitter1D"); defaults_.setValue("statistics:variance", 1.0, "Variance of the model.", {"advanced"}); defaults_.setValue("charge", 1, "Charge state of the model.", {"advanced"}); diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeModel.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeModel.cpp index 882d0d88c46..18fe429d3bf 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeModel.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeModel.cpp @@ -19,7 +19,7 @@ namespace OpenMS charge_(0), monoisotopic_mz_(0.0) { - setName(getProductName()); + setName("ExtendedIsotopeModel"); defaults_.setValue("averagines:C", 0.04443989f, "Number of C atoms per Dalton of mass.", {"advanced"}); defaults_.setValue("averagines:H", 0.06981572f, "Number of H atoms per Dalton of mass.", {"advanced"}); diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.cpp index ab5e543b9ae..7003282d0e7 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.cpp @@ -16,7 +16,7 @@ namespace OpenMS GaussFitter1D::GaussFitter1D() : MaxLikeliFitter1D() { - setName(getProductName()); + setName("GaussFitter1D"); defaults_.setValue("statistics:variance", 1.0, "Variance of the model.", {"advanced"}); defaults_.setValue("statistics:mean", 1.0, "Mean value of the model.", {"advanced"}); diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/GaussModel.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/GaussModel.cpp index 1edb5f567e0..8c843730117 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/GaussModel.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/GaussModel.cpp @@ -14,7 +14,7 @@ namespace OpenMS InterpolationModel(), statistics_() { - setName(getProductName()); + setName("GaussModel"); defaults_.setValue("bounding_box:min", 0.0, "Lower end of bounding box enclosing the data used to fit the model.", {"advanced"}); defaults_.setValue("bounding_box:max", 1.0, "Upper end of bounding box enclosing the data used to fit the model.", {"advanced"}); diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.cpp index a2036e8b6d6..4b3bba3e4ae 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.cpp @@ -18,7 +18,7 @@ namespace OpenMS IsotopeFitter1D::IsotopeFitter1D() : MaxLikeliFitter1D() { - setName(getProductName()); + setName("IsotopeFitter1D"); defaults_.setValue("statistics:variance", 1.0, "Variance of the model.", {"advanced"}); defaults_.setValue("charge", 1, "Charge state of the model.", {"advanced"}); diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/IsotopeModel.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/IsotopeModel.cpp index 443056274b1..9571023f674 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/IsotopeModel.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/IsotopeModel.cpp @@ -19,7 +19,7 @@ namespace OpenMS charge_(0), monoisotopic_mz_(0.0) { - setName(getProductName()); + setName("IsotopeModel"); defaults_.setValue("averagines:C", 0.04443989f, "Number of C atoms per Dalton of mass.", {"advanced"}); defaults_.setValue("averagines:H", 0.06981572f, "Number of H atoms per Dalton of mass.", {"advanced"}); diff --git a/src/pyOpenMS/pxds/AverageLinkage.pxd b/src/pyOpenMS/pxds/AverageLinkage.pxd index 6799e07c9f9..e646bdb4854 100644 --- a/src/pyOpenMS/pxds/AverageLinkage.pxd +++ b/src/pyOpenMS/pxds/AverageLinkage.pxd @@ -10,5 +10,4 @@ cdef extern from "" namespace "Op AverageLinkage(AverageLinkage &) except + nogil # void operator()(DistanceMatrix[ float ] &original_distance, libcpp_vector[ BinaryTreeNode ] &cluster_tree, float threshold) except + nogil # ClusterFunctor * create() except + nogil - String getProductName() except + nogil - + \ No newline at end of file diff --git a/src/pyOpenMS/pxds/BiGaussFitter1D.pxd b/src/pyOpenMS/pxds/BiGaussFitter1D.pxd index c372c89ecbd..cb1eae4bb61 100644 --- a/src/pyOpenMS/pxds/BiGaussFitter1D.pxd +++ b/src/pyOpenMS/pxds/BiGaussFitter1D.pxd @@ -9,5 +9,4 @@ cdef extern from "" name BiGaussFitter1D(BiGaussFitter1D &) except + nogil # QualityType fit1d(RawDataArrayType &range, InterpolationModel *&model) except + nogil # Fitter1D * create() except + nogil - String getProductName() except + nogil # wrap-doc:Name of the model (needed by Factory) - + diff --git a/src/pyOpenMS/pxds/BiGaussModel.pxd b/src/pyOpenMS/pxds/BiGaussModel.pxd index c05adeed46f..21c9221a1ec 100644 --- a/src/pyOpenMS/pxds/BiGaussModel.pxd +++ b/src/pyOpenMS/pxds/BiGaussModel.pxd @@ -11,5 +11,4 @@ cdef extern from "" namespa void setSamples() except + nogil double getCenter() except + nogil # BaseModel * create() except + nogil - String getProductName() except + nogil # wrap-doc:Name of the model (needed by Factory) - + \ No newline at end of file diff --git a/src/pyOpenMS/pxds/ComplementFilter.pxd b/src/pyOpenMS/pxds/ComplementFilter.pxd index ca0f984872b..248da6dca23 100644 --- a/src/pyOpenMS/pxds/ComplementFilter.pxd +++ b/src/pyOpenMS/pxds/ComplementFilter.pxd @@ -12,4 +12,4 @@ cdef extern from "" namespace double apply(MSSpectrum & ) except + nogil # wrap-doc:Returns the total intensity of peak pairs which could result from complementing fragments # POINTER # FilterFunctor * create() except + nogil - String getProductName() except + nogil # wrap-doc:Returns the name for registration at the factory + \ No newline at end of file diff --git a/src/pyOpenMS/pxds/ComplementMarker.pxd b/src/pyOpenMS/pxds/ComplementMarker.pxd index a34c6d67311..98cc7fe8739 100644 --- a/src/pyOpenMS/pxds/ComplementMarker.pxd +++ b/src/pyOpenMS/pxds/ComplementMarker.pxd @@ -14,4 +14,3 @@ cdef extern from "" namespace void apply(libcpp_map[ double, bool ] & , MSSpectrum & ) except + nogil PeakMarker * create() except + nogil # wrap-ignore - # String getProductName() except + nogil diff --git a/src/pyOpenMS/pxds/EmgFitter1D.pxd b/src/pyOpenMS/pxds/EmgFitter1D.pxd index d8d20c5b8fd..db1877ee891 100644 --- a/src/pyOpenMS/pxds/EmgFitter1D.pxd +++ b/src/pyOpenMS/pxds/EmgFitter1D.pxd @@ -11,5 +11,4 @@ cdef extern from "" namespac EmgFitter1D(EmgFitter1D &) except + nogil # float fit1d(libcpp_vector[Peak1D] range_, InterpolationModel * & model) except + nogil # wrap-ignore # Fitter1D * create() except + nogil - String getProductName() except + nogil # wrap-doc:Name of the model (needed by Factory) - + diff --git a/src/pyOpenMS/pxds/EmgModel.pxd b/src/pyOpenMS/pxds/EmgModel.pxd index e33a9ea8e8a..82758ffb139 100644 --- a/src/pyOpenMS/pxds/EmgModel.pxd +++ b/src/pyOpenMS/pxds/EmgModel.pxd @@ -9,8 +9,7 @@ cdef extern from "" namespace " EmgModel() except + nogil # wrap-doc:Exponentially modified gaussian distribution model for elution profiles EmgModel(EmgModel &) except + nogil # BaseModel * create() except + nogil - String getProductName() except + nogil # wrap-doc:Name of the model - + # inherited from parent class - no second definition necessary! # void setOffset(CoordinateType offset) # wrap-ignore # void setSamples() # wrap-ignore diff --git a/src/pyOpenMS/pxds/FeatureFinderAlgorithmPicked.pxd b/src/pyOpenMS/pxds/FeatureFinderAlgorithmPicked.pxd index 5aea47ae331..029425bf400 100644 --- a/src/pyOpenMS/pxds/FeatureFinderAlgorithmPicked.pxd +++ b/src/pyOpenMS/pxds/FeatureFinderAlgorithmPicked.pxd @@ -25,10 +25,3 @@ cdef extern from "" namespace "OpenMS::FeatureFinderAlgorithmPicked": - - String getProductName() except + nogil # wrap-attach:FeatureFinderAlgorithmPicked diff --git a/src/pyOpenMS/pxds/FeatureGroupingAlgorithmKD.pxd b/src/pyOpenMS/pxds/FeatureGroupingAlgorithmKD.pxd index 37fc1ff1294..db71459a98e 100644 --- a/src/pyOpenMS/pxds/FeatureGroupingAlgorithmKD.pxd +++ b/src/pyOpenMS/pxds/FeatureGroupingAlgorithmKD.pxd @@ -17,5 +17,4 @@ cdef extern from "" na void group(libcpp_vector[ FeatureMap ] & maps, ConsensusMap & out) except + nogil void group(libcpp_vector[ ConsensusMap ] & maps, ConsensusMap & out) except + nogil # POINTER # FeatureGroupingAlgorithm * create() except + nogil - String getProductName() except + nogil # wrap-doc:Returns the product name (for the Factory) - + \ No newline at end of file diff --git a/src/pyOpenMS/pxds/FeatureGroupingAlgorithmLabeled.pxd b/src/pyOpenMS/pxds/FeatureGroupingAlgorithmLabeled.pxd index 7e0e1c647c2..22b1eb70816 100644 --- a/src/pyOpenMS/pxds/FeatureGroupingAlgorithmLabeled.pxd +++ b/src/pyOpenMS/pxds/FeatureGroupingAlgorithmLabeled.pxd @@ -12,5 +12,5 @@ cdef extern from "" na # Creates a new instance of this class (for Factory) # FeatureGroupingAlgorithm * create() except + nogil - # Returns the product name (for the Factory) - String getProductName() except + nogil diff --git a/src/pyOpenMS/pxds/FeatureGroupingAlgorithmUnlabeled.pxd b/src/pyOpenMS/pxds/FeatureGroupingAlgorithmUnlabeled.pxd index e040943d48f..3403a445a4a 100644 --- a/src/pyOpenMS/pxds/FeatureGroupingAlgorithmUnlabeled.pxd +++ b/src/pyOpenMS/pxds/FeatureGroupingAlgorithmUnlabeled.pxd @@ -13,7 +13,6 @@ cdef extern from "" namespace "O double apply(MSSpectrum & ) except + nogil # POINTER # FilterFunctor * create() except + nogil - String getProductName() except + nogil # wrap-doc:Returns the final product name + \ No newline at end of file diff --git a/src/pyOpenMS/pxds/IntensityBalanceFilter.pxd b/src/pyOpenMS/pxds/IntensityBalanceFilter.pxd index 067cff1199b..2375539be73 100644 --- a/src/pyOpenMS/pxds/IntensityBalanceFilter.pxd +++ b/src/pyOpenMS/pxds/IntensityBalanceFilter.pxd @@ -11,5 +11,4 @@ cdef extern from "" name double apply(MSSpectrum & ) except + nogil # POINTER # FilterFunctor * create() except + nogil - String getProductName() except + nogil diff --git a/src/pyOpenMS/pxds/IsotopeDiffFilter.pxd b/src/pyOpenMS/pxds/IsotopeDiffFilter.pxd index aec0542ffe8..a24971af496 100644 --- a/src/pyOpenMS/pxds/IsotopeDiffFilter.pxd +++ b/src/pyOpenMS/pxds/IsotopeDiffFilter.pxd @@ -11,5 +11,4 @@ cdef extern from "" namespace double apply(MSSpectrum & ) except + nogil # TODO # POINTER # FilterFunctor * create() except + nogil - String getProductName() except + nogil # TODO diff --git a/src/pyOpenMS/pxds/IsotopeFitter1D.pxd b/src/pyOpenMS/pxds/IsotopeFitter1D.pxd index 892417f9302..478c49da5c5 100644 --- a/src/pyOpenMS/pxds/IsotopeFitter1D.pxd +++ b/src/pyOpenMS/pxds/IsotopeFitter1D.pxd @@ -10,5 +10,4 @@ cdef extern from "" name # QualityType fit1d(RawDataArrayType &range, InterpolationModel *&model) except + nogil # Fitter1D * create() except + nogil - String getProductName() except + nogil # wrap-doc:Name of the model (needed by Factory) diff --git a/src/pyOpenMS/pxds/IsotopeMarker.pxd b/src/pyOpenMS/pxds/IsotopeMarker.pxd index 81740b50510..b453713db4d 100644 --- a/src/pyOpenMS/pxds/IsotopeMarker.pxd +++ b/src/pyOpenMS/pxds/IsotopeMarker.pxd @@ -14,6 +14,5 @@ cdef extern from "" namespace "Op void apply(libcpp_map[ double, bool ] & , MSSpectrum & ) except + nogil PeakMarker * create() except + nogil # wrap-ignore - # TODO - #String getProductName() except + nogil + diff --git a/src/pyOpenMS/pxds/IsotopeModel.pxd b/src/pyOpenMS/pxds/IsotopeModel.pxd index fc707c5aba0..a82476fcef7 100644 --- a/src/pyOpenMS/pxds/IsotopeModel.pxd +++ b/src/pyOpenMS/pxds/IsotopeModel.pxd @@ -44,8 +44,7 @@ cdef extern from "" namespa # Useful to determine the number of isotopes that the model contains and their position # BaseModel * create() except + nogil - String getProductName() except + nogil # wrap-doc:Name of the model (needed by Factory) - + cdef extern from "" namespace "OpenMS::IsotopeModel": cdef enum Averagines "OpenMS::IsotopeModel::Averagines": #wrap-attach: diff --git a/src/pyOpenMS/pxds/LabeledPairFinder.pxd b/src/pyOpenMS/pxds/LabeledPairFinder.pxd index 2404d6a90aa..58a669ad4e3 100644 --- a/src/pyOpenMS/pxds/LabeledPairFinder.pxd +++ b/src/pyOpenMS/pxds/LabeledPairFinder.pxd @@ -17,4 +17,4 @@ cdef extern from "" namespace " LabeledPairFinder(LabeledPairFinder &) except + nogil # wrap-ignore void run(libcpp_vector[ ConsensusMap ] & input_maps, ConsensusMap & result_map) except + nogil # wrap-doc:Runs the LabeledPairFinder algorithm # POINTER # BaseGroupFinder * create() except + nogil - String getProductName() except + nogil # wrap-doc:Returns the name of this module + \ No newline at end of file diff --git a/src/pyOpenMS/pxds/MapAlignmentEvaluationAlgorithmPrecision.pxd b/src/pyOpenMS/pxds/MapAlignmentEvaluationAlgorithmPrecision.pxd index e2388961325..be072e7dfa1 100644 --- a/src/pyOpenMS/pxds/MapAlignmentEvaluationAlgorithmPrecision.pxd +++ b/src/pyOpenMS/pxds/MapAlignmentEvaluationAlgorithmPrecision.pxd @@ -13,5 +13,4 @@ cdef extern from "" namespace "Open void filterPeakSpectrum(MSSpectrum & spec) except + nogil void filterPeakMap(MSExperiment & exp) except + nogil - String getProductName() except + nogil # wrap-doc:Returns the product name - void insertmarker(PeakMarker * peak_marker) except + nogil # wrap-doc:Insert new Marker (violates the DefaultParamHandler interface) diff --git a/src/pyOpenMS/pxds/NeutralLossDiffFilter.pxd b/src/pyOpenMS/pxds/NeutralLossDiffFilter.pxd index af4e43f5d4f..2c5e71cb4b1 100644 --- a/src/pyOpenMS/pxds/NeutralLossDiffFilter.pxd +++ b/src/pyOpenMS/pxds/NeutralLossDiffFilter.pxd @@ -14,5 +14,4 @@ cdef extern from "" names NeutralLossDiffFilter(NeutralLossDiffFilter &) except + nogil double apply(MSSpectrum & ) except + nogil # POINTER # FilterFunctor * create() except + nogil - String getProductName() except + nogil - + \ No newline at end of file diff --git a/src/pyOpenMS/pxds/NeutralLossMarker.pxd b/src/pyOpenMS/pxds/NeutralLossMarker.pxd index 2be7c40a3ec..9620d0f1301 100644 --- a/src/pyOpenMS/pxds/NeutralLossMarker.pxd +++ b/src/pyOpenMS/pxds/NeutralLossMarker.pxd @@ -15,5 +15,4 @@ cdef extern from "" namespace NeutralLossMarker(NeutralLossMarker &) except + nogil void apply(libcpp_map[ double, bool ] & , MSSpectrum & ) except + nogil PeakMarker * create() except + nogil # wrap-ignore - # String getProductName() except + nogil - + diff --git a/src/pyOpenMS/pxds/PeakMarker.pxd b/src/pyOpenMS/pxds/PeakMarker.pxd index 619e3edcf89..883019e7e63 100644 --- a/src/pyOpenMS/pxds/PeakMarker.pxd +++ b/src/pyOpenMS/pxds/PeakMarker.pxd @@ -17,5 +17,4 @@ cdef extern from "" namespace "OpenM PeakMarker(PeakMarker &) except + nogil # see child classes # void apply(libcpp_map[ double, bool ] & , MSSpectrum & ) except + nogil - String getProductName() except + nogil # wrap-doc:Returns the product name - + diff --git a/src/pyOpenMS/pxds/QTClusterFinder.pxd b/src/pyOpenMS/pxds/QTClusterFinder.pxd index 51a0e9deda9..7b53baa9341 100644 --- a/src/pyOpenMS/pxds/QTClusterFinder.pxd +++ b/src/pyOpenMS/pxds/QTClusterFinder.pxd @@ -17,5 +17,4 @@ cdef extern from "" namespace "Op QTClusterFinder(QTClusterFinder &) except + nogil # wrap-ignore void run(libcpp_vector[ ConsensusMap ] & input_maps, ConsensusMap & result_map) except + nogil void run(libcpp_vector[ FeatureMap ] & input_maps, ConsensusMap & result_map) except + nogil - String getProductName() except + nogil # wrap-doc:Returns the name of the product # POINTER # BaseGroupFinder * create() except + nogil diff --git a/src/pyOpenMS/pxds/SimplePairFinder.pxd b/src/pyOpenMS/pxds/SimplePairFinder.pxd index 20d81501b61..77b737305fc 100644 --- a/src/pyOpenMS/pxds/SimplePairFinder.pxd +++ b/src/pyOpenMS/pxds/SimplePairFinder.pxd @@ -19,4 +19,4 @@ cdef extern from "" namespace "O void run(libcpp_vector[ ConsensusMap ] & input_maps, ConsensusMap & result_map) except + nogil # POINTER # BaseGroupFinder * create() except + nogil - String getProductName() except + nogil # wrap-doc:Returns the name of this module + \ No newline at end of file diff --git a/src/pyOpenMS/pxds/SpectraSTSimilarityScore.pxd b/src/pyOpenMS/pxds/SpectraSTSimilarityScore.pxd index e68c56fdcfa..13762e8cd4e 100644 --- a/src/pyOpenMS/pxds/SpectraSTSimilarityScore.pxd +++ b/src/pyOpenMS/pxds/SpectraSTSimilarityScore.pxd @@ -52,4 +52,4 @@ cdef extern from "" namesp # :returns: The SpectraST similarity score # POINTER # MSSpectrumCompareFunctor * create() except + nogil - String getProductName() except + nogil # wrap-doc:Reimplemented from PeakSpectrumCompareFunctor + \ No newline at end of file diff --git a/src/pyOpenMS/pxds/StablePairFinder.pxd b/src/pyOpenMS/pxds/StablePairFinder.pxd index cb41684cc2b..2600678a44d 100644 --- a/src/pyOpenMS/pxds/StablePairFinder.pxd +++ b/src/pyOpenMS/pxds/StablePairFinder.pxd @@ -12,4 +12,4 @@ cdef extern from "" namespace "O StablePairFinder(StablePairFinder &) except + nogil # wrap-ignore void run(libcpp_vector[ ConsensusMap ] & input_maps, ConsensusMap & result_map) except + nogil # POINTER # BaseGroupFinder * create() except + nogil - String getProductName() except + nogil + diff --git a/src/pyOpenMS/pxds/TICFilter.pxd b/src/pyOpenMS/pxds/TICFilter.pxd index 0b372100ea5..5e77174f1f8 100644 --- a/src/pyOpenMS/pxds/TICFilter.pxd +++ b/src/pyOpenMS/pxds/TICFilter.pxd @@ -10,4 +10,3 @@ cdef extern from "" namespace "OpenMS TICFilter(TICFilter &) except + nogil double apply(MSSpectrum & ) except + nogil # POINTER # FilterFunctor * create() except + nogil - String getProductName() except + nogil diff --git a/src/pyOpenMS/pyTOPP/FeatureFinderCentroided.py b/src/pyOpenMS/pyTOPP/FeatureFinderCentroided.py index ce8a659d4d6..a137f0b1334 100644 --- a/src/pyOpenMS/pyTOPP/FeatureFinderCentroided.py +++ b/src/pyOpenMS/pyTOPP/FeatureFinderCentroided.py @@ -17,8 +17,7 @@ def run_featurefinder_centroided(input_path, params, seeds, out_path): ff.setLogType(pms.LogType.CMD) features = pms.FeatureMap() - name = pms.FeatureFinderAlgorithmPicked.getProductName() - ff.run(name, input_map, features, params, seeds) + ff.run("centroided", input_map, features, params, seeds) features.setUniqueIds() addDataProcessing(features, params, pms.DataProcessing.ProcessingAction.QUANTITATION) @@ -84,8 +83,7 @@ def main(): "the peakpicker\nor -write(dict)ini for creating std " "ini file") - name = pms.FeatureFinderAlgorithmPicked.getProductName() - defaults = pms.FeatureFinder().getParameters(name) + defaults = pms.FeatureFinder().getParameters("centroided") write_requested = writeParamsIfRequested(args, defaults) diff --git a/src/pyOpenMS/tests/unittests/test000.py b/src/pyOpenMS/tests/unittests/test000.py index 9f03d134fba..d063b1b6e02 100644 --- a/src/pyOpenMS/tests/unittests/test000.py +++ b/src/pyOpenMS/tests/unittests/test000.py @@ -1294,29 +1294,6 @@ def testFeature(): f.setPeptideIdentifications(p) -@report -def testFeatureFinder(): - """ - @tests: FeatureFinder - FeatureFinder.__init__ - FeatureFinder.endProgress - FeatureFinder.getLogType - FeatureFinder.getParameters - FeatureFinder.run - FeatureFinder.setLogType - FeatureFinder.setProgress - FeatureFinder.startProgress - """ - ff = pyopenms.FeatureFinder() - name = pyopenms.FeatureFinderAlgorithmPicked.getProductName() - ff.run(name, pyopenms.MSExperiment(), pyopenms.FeatureMap() , - pyopenms.Param(), pyopenms.FeatureMap()) - - _testProgressLogger(ff) - - p = ff.getParameters(name) - _testParam(p) - @report def testFeatureFileOptions(): """ @@ -1485,7 +1462,6 @@ def testFeatureFinderAlgorithmPicked(): _testParam(ff.getParameters()) assert ff.getName() == "FeatureFinderAlgorithm" - assert pyopenms.FeatureFinderAlgorithmPicked.getProductName() == "centroided" ff.setParameters(pyopenms.Param()) diff --git a/src/tests/class_tests/openms/source/AverageLinkage_test.cpp b/src/tests/class_tests/openms/source/AverageLinkage_test.cpp index b3fc1cb4814..11aff9aebc5 100644 --- a/src/tests/class_tests/openms/source/AverageLinkage_test.cpp +++ b/src/tests/class_tests/openms/source/AverageLinkage_test.cpp @@ -44,7 +44,6 @@ START_SECTION((AverageLinkage(const AverageLinkage &source))) { AverageLinkage al1; AverageLinkage copy(al1); - TEST_EQUAL(copy.getProductName(), al1.getProductName()); } END_SECTION @@ -52,7 +51,6 @@ START_SECTION((AverageLinkage& operator=(const AverageLinkage &source))) { AverageLinkage copy,al2; copy = al2; - TEST_EQUAL(copy.getProductName(), al2.getProductName()); } END_SECTION @@ -120,13 +118,6 @@ START_SECTION((void operator()(DistanceMatrix< float > &original_distance, std:: } END_SECTION -START_SECTION((static const String getProductName())) -{ - AverageLinkage al5; - TEST_EQUAL(al5.getProductName(), "AverageLinkage") -} -END_SECTION - START_SECTION((static ClusterFunctor* create())) { ClusterFunctor* cf = AverageLinkage::create(); diff --git a/src/tests/class_tests/openms/source/BaseModel_test.cpp b/src/tests/class_tests/openms/source/BaseModel_test.cpp index e4e6e1adc5c..535c5247f88 100644 --- a/src/tests/class_tests/openms/source/BaseModel_test.cpp +++ b/src/tests/class_tests/openms/source/BaseModel_test.cpp @@ -28,7 +28,7 @@ class TestModel : public BaseModel TestModel() : BaseModel() { - setName(getProductName()); + setName("TestModel"); check_defaults_ = false; defaultsToParam_(); } @@ -70,11 +70,6 @@ class TestModel : public BaseModel { } - static const String getProductName() - { - return "TestModel"; - } - }; diff --git a/src/tests/class_tests/openms/source/BiGaussFitter1D_test.cpp b/src/tests/class_tests/openms/source/BiGaussFitter1D_test.cpp index c82eaeb48fa..b20a7419746 100644 --- a/src/tests/class_tests/openms/source/BiGaussFitter1D_test.cpp +++ b/src/tests/class_tests/openms/source/BiGaussFitter1D_test.cpp @@ -100,14 +100,6 @@ START_SECTION((Fitter1D* create())) } END_SECTION -START_SECTION((const String getProductName())) -{ - TEST_EQUAL(BiGaussFitter1D::getProductName(),"BiGaussFitter1D") - TEST_EQUAL(BiGaussFitter1D().getName(),"BiGaussFitter1D") -} -END_SECTION - - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// END_TEST diff --git a/src/tests/class_tests/openms/source/BiGaussModel_test.cpp b/src/tests/class_tests/openms/source/BiGaussModel_test.cpp index c7512640e20..fec43d1fa8f 100644 --- a/src/tests/class_tests/openms/source/BiGaussModel_test.cpp +++ b/src/tests/class_tests/openms/source/BiGaussModel_test.cpp @@ -39,11 +39,6 @@ START_SECTION((virtual ~BiGaussModel())) delete ptr; END_SECTION -START_SECTION((static const String getProductName())) - TEST_EQUAL(BiGaussModel::getProductName(),"BiGaussModel") - TEST_EQUAL(BiGaussModel().getName(),"BiGaussModel") -END_SECTION - START_SECTION( static BaseModel* create() ) BaseModel* ptr = new BiGaussModel(); TEST_EQUAL(ptr->getName(), "BiGaussModel") diff --git a/src/tests/class_tests/openms/source/BinnedSharedPeakCount_test.cpp b/src/tests/class_tests/openms/source/BinnedSharedPeakCount_test.cpp index 0d6667d887c..7b22e9c773b 100644 --- a/src/tests/class_tests/openms/source/BinnedSharedPeakCount_test.cpp +++ b/src/tests/class_tests/openms/source/BinnedSharedPeakCount_test.cpp @@ -94,12 +94,6 @@ START_SECTION((static BinnedSpectrumCompareFunctor* create())) } END_SECTION -START_SECTION((static const String getProductName())) -{ - TEST_EQUAL(ptr->getProductName(), "BinnedSharedPeakCount") -} -END_SECTION - delete ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/BinnedSpectralContrastAngle_test.cpp b/src/tests/class_tests/openms/source/BinnedSpectralContrastAngle_test.cpp index 345c07a6ce2..db662e4831b 100644 --- a/src/tests/class_tests/openms/source/BinnedSpectralContrastAngle_test.cpp +++ b/src/tests/class_tests/openms/source/BinnedSpectralContrastAngle_test.cpp @@ -90,12 +90,6 @@ START_SECTION((static BinnedSpectrumCompareFunctor* create())) } END_SECTION -START_SECTION((static const String getProductName())) -{ - TEST_EQUAL(ptr->getProductName(), "BinnedSpectralContrastAngle") -} -END_SECTION - delete ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/BinnedSpectrumCompareFunctor_test.cpp b/src/tests/class_tests/openms/source/BinnedSpectrumCompareFunctor_test.cpp index 745248cba26..684f182daf3 100644 --- a/src/tests/class_tests/openms/source/BinnedSpectrumCompareFunctor_test.cpp +++ b/src/tests/class_tests/openms/source/BinnedSpectrumCompareFunctor_test.cpp @@ -58,12 +58,6 @@ START_SECTION((virtual double operator()(const BinnedSpectrum &spec) const =0)) } END_SECTION -START_SECTION((static const String getProductName())) -{ - TEST_EQUAL(BinnedSpectrumCompareFunctor::getProductName(), "BinnedSpectrumCompareFunctor") -} -END_SECTION - START_SECTION(([BinnedSpectrumCompareFunctor::IncompatibleBinning] IncompatibleBinning(const char *file, int line, const char *function, const char *message="compared spectra have different settings in binsize and/or binspread"))) { NOT_TESTABLE diff --git a/src/tests/class_tests/openms/source/BinnedSumAgreeingIntensities_test.cpp b/src/tests/class_tests/openms/source/BinnedSumAgreeingIntensities_test.cpp index d75e9dda226..45122adbeb7 100644 --- a/src/tests/class_tests/openms/source/BinnedSumAgreeingIntensities_test.cpp +++ b/src/tests/class_tests/openms/source/BinnedSumAgreeingIntensities_test.cpp @@ -94,12 +94,6 @@ START_SECTION((static BinnedSpectrumCompareFunctor* create())) } END_SECTION -START_SECTION((static const String getProductName())) -{ - TEST_EQUAL(ptr->getProductName(), "BinnedSumAgreeingIntensities") -} -END_SECTION - delete ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/ComplementFilter_test.cpp b/src/tests/class_tests/openms/source/ComplementFilter_test.cpp index 8e23d445647..41d4d86f2ed 100644 --- a/src/tests/class_tests/openms/source/ComplementFilter_test.cpp +++ b/src/tests/class_tests/openms/source/ComplementFilter_test.cpp @@ -78,10 +78,6 @@ START_SECTION((static FilterFunctor* create())) delete ff; END_SECTION -START_SECTION((static const String getProductName())) - TEST_EQUAL(e_ptr->getProductName(), "ComplementFilter") -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/ComplementMarker_test.cpp b/src/tests/class_tests/openms/source/ComplementMarker_test.cpp index f18b17985d5..2abe397ec65 100644 --- a/src/tests/class_tests/openms/source/ComplementMarker_test.cpp +++ b/src/tests/class_tests/openms/source/ComplementMarker_test.cpp @@ -84,10 +84,6 @@ START_SECTION((static PeakMarker* create())) delete pm; END_SECTION -START_SECTION((static const String getProductName())) - TEST_EQUAL(e_ptr->getProductName(), "ComplementMarker") -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/CompleteLinkage_test.cpp b/src/tests/class_tests/openms/source/CompleteLinkage_test.cpp index c61b665555e..001b3b79ae3 100644 --- a/src/tests/class_tests/openms/source/CompleteLinkage_test.cpp +++ b/src/tests/class_tests/openms/source/CompleteLinkage_test.cpp @@ -44,7 +44,6 @@ ptr = new CompleteLinkage(); START_SECTION((CompleteLinkage(const CompleteLinkage &source))) { CompleteLinkage copy(*ptr); - TEST_EQUAL(copy.getProductName(), ptr->getProductName()); } END_SECTION @@ -52,7 +51,6 @@ START_SECTION((CompleteLinkage& operator=(const CompleteLinkage &source))) { CompleteLinkage copy; copy = *ptr; - TEST_EQUAL(copy.getProductName(), ptr->getProductName()); } END_SECTION @@ -121,12 +119,6 @@ START_SECTION((void operator()(DistanceMatrix< float > &original_distance, std:: } END_SECTION -START_SECTION((static const String getProductName())) -{ - TEST_EQUAL(ptr->getProductName(), "CompleteLinkage") -} -END_SECTION - START_SECTION((static ClusterFunctor* create())) { ClusterFunctor* cf = CompleteLinkage::create(); diff --git a/src/tests/class_tests/openms/source/EmgFitter1D_test.cpp b/src/tests/class_tests/openms/source/EmgFitter1D_test.cpp index 0ac667cbbb6..0bc7367f941 100644 --- a/src/tests/class_tests/openms/source/EmgFitter1D_test.cpp +++ b/src/tests/class_tests/openms/source/EmgFitter1D_test.cpp @@ -147,14 +147,6 @@ START_SECTION((Fitter1D* create())) } END_SECTION -START_SECTION((const String getProductName())) -{ - TEST_EQUAL(EmgFitter1D::getProductName(),"EmgFitter1D") - TEST_EQUAL(EmgFitter1D().getName(),"EmgFitter1D") -} -END_SECTION - - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// END_TEST diff --git a/src/tests/class_tests/openms/source/EmgModel_test.cpp b/src/tests/class_tests/openms/source/EmgModel_test.cpp index 01164102851..59dfa56b426 100644 --- a/src/tests/class_tests/openms/source/EmgModel_test.cpp +++ b/src/tests/class_tests/openms/source/EmgModel_test.cpp @@ -41,11 +41,6 @@ START_SECTION((virtual ~EmgModel())) delete ptr; END_SECTION -START_SECTION((static const String getProductName())) - TEST_EQUAL(EmgModel::getProductName(),"EmgModel") - TEST_EQUAL(EmgModel().getName(),"EmgModel") -END_SECTION - START_SECTION((static BaseModel* create())) BaseModel* ptr = EmgModel::create(); TEST_EQUAL(ptr->getName(), "EmgModel") diff --git a/src/tests/class_tests/openms/source/ExtendedIsotopeFitter1D_test.cpp b/src/tests/class_tests/openms/source/ExtendedIsotopeFitter1D_test.cpp index d0922cfa75b..a5c0a284e5f 100644 --- a/src/tests/class_tests/openms/source/ExtendedIsotopeFitter1D_test.cpp +++ b/src/tests/class_tests/openms/source/ExtendedIsotopeFitter1D_test.cpp @@ -93,12 +93,6 @@ START_SECTION((Fitter1D* create())) delete ptr; END_SECTION -START_SECTION((const String getProductName())) - TEST_EQUAL(ExtendedIsotopeFitter1D::getProductName(),"ExtendedIsotopeFitter1D") - TEST_EQUAL(ExtendedIsotopeFitter1D().getName(),"ExtendedIsotopeFitter1D") -END_SECTION - - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// END_TEST diff --git a/src/tests/class_tests/openms/source/ExtendedIsotopeModel_test.cpp b/src/tests/class_tests/openms/source/ExtendedIsotopeModel_test.cpp index 440d7439eb3..1b7f27d1fca 100644 --- a/src/tests/class_tests/openms/source/ExtendedIsotopeModel_test.cpp +++ b/src/tests/class_tests/openms/source/ExtendedIsotopeModel_test.cpp @@ -47,11 +47,6 @@ START_SECTION(static BaseModel* create()) delete ptr; END_SECTION -START_SECTION((static const String getProductName())) - TEST_EQUAL(ExtendedIsotopeModel::getProductName(),"ExtendedIsotopeModel") - TEST_EQUAL(ExtendedIsotopeModel().getName(),"ExtendedIsotopeModel") -END_SECTION - // assignment operator START_SECTION((virtual ExtendedIsotopeModel& operator=(const ExtendedIsotopeModel &source))) ExtendedIsotopeModel im1; diff --git a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmKD_test.cpp b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmKD_test.cpp index d7c9d898641..00759133343 100644 --- a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmKD_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmKD_test.cpp @@ -38,10 +38,6 @@ START_SECTION((static FeatureGroupingAlgorithm* create())) delete ptr2; END_SECTION -START_SECTION((static String getProductName())) - TEST_EQUAL(FeatureGroupingAlgorithmKD::getProductName(), "unlabeled_kd") -END_SECTION - START_SECTION((virtual void group(const std::vector& maps, ConsensusMap& out))) // This is tested in the tool NOT_TESTABLE; diff --git a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmLabeled_test.cpp b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmLabeled_test.cpp index 1c1db8f5359..9cd3c2aaa29 100644 --- a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmLabeled_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmLabeled_test.cpp @@ -42,10 +42,6 @@ START_SECTION((static FeatureGroupingAlgorithm* create())) delete ptr2; END_SECTION -START_SECTION((static String getProductName())) - TEST_EQUAL(FeatureGroupingAlgorithmLabeled::getProductName(),"labeled") -END_SECTION - START_SECTION((virtual void group(const std::vector< FeatureMap > &maps, ConsensusMap &out))) TOLERANCE_ABSOLUTE(0.001) diff --git a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmQT_test.cpp b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmQT_test.cpp index 6f217c442a2..775265ca944 100644 --- a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmQT_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmQT_test.cpp @@ -42,10 +42,6 @@ START_SECTION((static FeatureGroupingAlgorithm* create())) delete ptr2; END_SECTION -START_SECTION((static String getProductName())) - TEST_EQUAL(FeatureGroupingAlgorithmQT::getProductName(), "unlabeled_qt") -END_SECTION - START_SECTION((virtual void group(const std::vector< FeatureMap >& maps, ConsensusMap& out))) // This is tested extensively in TEST/TOPP NOT_TESTABLE; diff --git a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmUnlabeled_test.cpp b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmUnlabeled_test.cpp index 4d9b92d2dbb..183cc4fb3b3 100644 --- a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmUnlabeled_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmUnlabeled_test.cpp @@ -42,10 +42,6 @@ START_SECTION((static FeatureGroupingAlgorithm* create())) delete ptr2; END_SECTION -START_SECTION((static String getProductName())) - TEST_EQUAL(FeatureGroupingAlgorithmUnlabeled::getProductName(),"unlabeled") -END_SECTION - START_SECTION((virtual void group(const std::vector< FeatureMap > &maps, ConsensusMap &out))) // This is tested extensively in TEST/TOPP NOT_TESTABLE; diff --git a/src/tests/class_tests/openms/source/Fitter1D_test.cpp b/src/tests/class_tests/openms/source/Fitter1D_test.cpp index 4430eaa5044..beae9677444 100644 --- a/src/tests/class_tests/openms/source/Fitter1D_test.cpp +++ b/src/tests/class_tests/openms/source/Fitter1D_test.cpp @@ -21,7 +21,7 @@ class TestModel : public Fitter1D TestModel() : Fitter1D() { - setName(getProductName()); + setName("TestModel"); check_defaults_ = false; @@ -60,11 +60,6 @@ class TestModel : public Fitter1D return 1.0; } - static const String getProductName() - { - return "TestModel"; - } - }; @@ -89,25 +84,10 @@ START_SECTION(Fitter1D()) } END_SECTION -START_SECTION((Fitter1D(const Fitter1D &source))) - TestModel tm1; - - TestModel tm2(tm1); - TEST_EQUAL(tm1.getProductName(),tm2.getProductName()) -END_SECTION - START_SECTION((virtual ~Fitter1D())) delete ptr; END_SECTION -START_SECTION((virtual Fitter1D& operator=(const Fitter1D &source))) - TestModel tm1; - TestModel tm2; - - tm2 = tm1; - TEST_EQUAL(tm1.getProductName(),tm2.getProductName()) -END_SECTION - START_SECTION((virtual QualityType fit1d(const RawDataArrayType &, InterpolationModel *&))) Fitter1D f1d; Fitter1D::RawDataArrayType rft; diff --git a/src/tests/class_tests/openms/source/GaussFitter1D_test.cpp b/src/tests/class_tests/openms/source/GaussFitter1D_test.cpp index 23201583456..5aafbfc2ce9 100644 --- a/src/tests/class_tests/openms/source/GaussFitter1D_test.cpp +++ b/src/tests/class_tests/openms/source/GaussFitter1D_test.cpp @@ -88,13 +88,6 @@ START_SECTION((Fitter1D* create())) } END_SECTION -START_SECTION((const String getProductName())) -{ - TEST_EQUAL(GaussFitter1D::getProductName(),"GaussFitter1D") - TEST_EQUAL(GaussFitter1D().getName(),"GaussFitter1D") -} -END_SECTION - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/GaussModel_test.cpp b/src/tests/class_tests/openms/source/GaussModel_test.cpp index 9bfdedf537b..c99bddaf3cd 100644 --- a/src/tests/class_tests/openms/source/GaussModel_test.cpp +++ b/src/tests/class_tests/openms/source/GaussModel_test.cpp @@ -38,11 +38,6 @@ START_SECTION((virtual ~GaussModel())) delete ptr; END_SECTION -START_SECTION((static const String getProductName())) - TEST_EQUAL(GaussModel::getProductName(),"GaussModel") - TEST_EQUAL(GaussModel().getProductName(),"GaussModel") -END_SECTION - START_SECTION(static BaseModel* create()) BaseModel* ptr = GaussModel::create(); TEST_EQUAL(ptr->getName(), "GaussModel") diff --git a/src/tests/class_tests/openms/source/GoodDiffFilter_test.cpp b/src/tests/class_tests/openms/source/GoodDiffFilter_test.cpp index f33b45cb31e..40bea0f86f4 100644 --- a/src/tests/class_tests/openms/source/GoodDiffFilter_test.cpp +++ b/src/tests/class_tests/openms/source/GoodDiffFilter_test.cpp @@ -80,10 +80,6 @@ START_SECTION((static FilterFunctor* create())) delete ff; END_SECTION -START_SECTION((static const String getProductName())) - TEST_EQUAL(e_ptr->getProductName(), "GoodDiffFilter") -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/IntensityBalanceFilter_test.cpp b/src/tests/class_tests/openms/source/IntensityBalanceFilter_test.cpp index 168aa0eff78..29d6a475fd3 100644 --- a/src/tests/class_tests/openms/source/IntensityBalanceFilter_test.cpp +++ b/src/tests/class_tests/openms/source/IntensityBalanceFilter_test.cpp @@ -72,10 +72,6 @@ START_SECTION((static FilterFunctor* create())) delete ff; END_SECTION -START_SECTION((static const String getProductName())) - TEST_EQUAL(e_ptr->getProductName(), "IntensityBalanceFilter") -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/InterpolationModel_test.cpp b/src/tests/class_tests/openms/source/InterpolationModel_test.cpp index dba9b540fa0..52e922a2373 100644 --- a/src/tests/class_tests/openms/source/InterpolationModel_test.cpp +++ b/src/tests/class_tests/openms/source/InterpolationModel_test.cpp @@ -25,7 +25,7 @@ class TestModel : public InterpolationModel TestModel() : InterpolationModel() { - setName(getProductName()); + setName("TestModel"); check_defaults_ = false; @@ -91,11 +91,6 @@ class TestModel : public InterpolationModel return 10.0; } - static const String getProductName() - { - return "TestModel"; - } - }; diff --git a/src/tests/class_tests/openms/source/IsotopeDiffFilter_test.cpp b/src/tests/class_tests/openms/source/IsotopeDiffFilter_test.cpp index 88a064387c2..46418ca180a 100644 --- a/src/tests/class_tests/openms/source/IsotopeDiffFilter_test.cpp +++ b/src/tests/class_tests/openms/source/IsotopeDiffFilter_test.cpp @@ -77,10 +77,6 @@ START_SECTION((static FilterFunctor* create())) delete ff; END_SECTION -START_SECTION((static const String getProductName())) - TEST_EQUAL(e_ptr->getProductName(), "IsotopeDiffFilter") -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/IsotopeFitter1D_test.cpp b/src/tests/class_tests/openms/source/IsotopeFitter1D_test.cpp index 5a370dca27a..c6c88f81382 100644 --- a/src/tests/class_tests/openms/source/IsotopeFitter1D_test.cpp +++ b/src/tests/class_tests/openms/source/IsotopeFitter1D_test.cpp @@ -94,12 +94,6 @@ START_SECTION((Fitter1D* create())) delete ptr; END_SECTION -START_SECTION((const String getProductName())) - TEST_EQUAL(IsotopeFitter1D::getProductName(),"IsotopeFitter1D") - TEST_EQUAL(IsotopeFitter1D().getName(),"IsotopeFitter1D") -END_SECTION - - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// END_TEST diff --git a/src/tests/class_tests/openms/source/IsotopeMarker_test.cpp b/src/tests/class_tests/openms/source/IsotopeMarker_test.cpp index aeb2b81b0b5..5f947225099 100644 --- a/src/tests/class_tests/openms/source/IsotopeMarker_test.cpp +++ b/src/tests/class_tests/openms/source/IsotopeMarker_test.cpp @@ -82,10 +82,6 @@ START_SECTION((static PeakMarker* create())) delete pm; END_SECTION -START_SECTION((static const String getProductName())) - TEST_EQUAL(e_ptr->getProductName(), "IsotopeMarker") -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/IsotopeModel_test.cpp b/src/tests/class_tests/openms/source/IsotopeModel_test.cpp index 4f90383fa98..138dedc02ea 100644 --- a/src/tests/class_tests/openms/source/IsotopeModel_test.cpp +++ b/src/tests/class_tests/openms/source/IsotopeModel_test.cpp @@ -49,11 +49,6 @@ START_SECTION(static BaseModel* create()) delete ptr; END_SECTION -START_SECTION((static const String getProductName())) - TEST_EQUAL(IsotopeModel::getProductName(),"IsotopeModel") - TEST_EQUAL(IsotopeModel().getName(),"IsotopeModel") -END_SECTION - // assignment operator START_SECTION((virtual IsotopeModel& operator=(const IsotopeModel &source))) IsotopeModel im1; diff --git a/src/tests/class_tests/openms/source/LabeledPairFinder_test.cpp b/src/tests/class_tests/openms/source/LabeledPairFinder_test.cpp index 8efcf4c367a..239e4bb61f4 100644 --- a/src/tests/class_tests/openms/source/LabeledPairFinder_test.cpp +++ b/src/tests/class_tests/openms/source/LabeledPairFinder_test.cpp @@ -45,12 +45,6 @@ START_SECTION((static BaseGroupFinder* create())) delete base_ptr; END_SECTION -START_SECTION((static const String getProductName())) - LabeledPairFinder spf; - - TEST_STRING_EQUAL(spf.getProductName(),"labeled_pair_finder") -END_SECTION - FeatureMap features; features.resize(10); //start diff --git a/src/tests/class_tests/openms/source/LevMarqFitter1D_test.cpp b/src/tests/class_tests/openms/source/LevMarqFitter1D_test.cpp index cf2fa932cfc..f4c031a2e05 100644 --- a/src/tests/class_tests/openms/source/LevMarqFitter1D_test.cpp +++ b/src/tests/class_tests/openms/source/LevMarqFitter1D_test.cpp @@ -27,7 +27,7 @@ class TestModel : public LevMarqFitter1D { public: TestModel() : LevMarqFitter1D() { - setName(getProductName()); + setName("TestModel"); check_defaults_ = false; defaultsToParam_(); } @@ -68,12 +68,6 @@ class TestModel : public LevMarqFitter1D void optimize_() { } - - static const String getProductName() - { - return "TestModel"; - } - }; ///////////////////////////////////////////////////////////// @@ -95,9 +89,7 @@ END_SECTION START_SECTION((LevMarqFitter1D(const LevMarqFitter1D &source))) TestModel tm1; - TestModel tm2(tm1); - TEST_EQUAL(tm1.getProductName(),tm2.getProductName()) END_SECTION START_SECTION((virtual ~LevMarqFitter1D())) @@ -107,9 +99,7 @@ END_SECTION START_SECTION((virtual LevMarqFitter1D& operator=(const LevMarqFitter1D &source))) TestModel tm1; TestModel tm2; - tm2 = tm1; - TEST_EQUAL(tm1.getProductName(),tm2.getProductName()) END_SECTION diff --git a/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithmPrecision_test.cpp b/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithmPrecision_test.cpp index 8eae5642c04..f90dc645687 100644 --- a/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithmPrecision_test.cpp +++ b/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithmPrecision_test.cpp @@ -45,10 +45,6 @@ START_SECTION((static MapAlignmentEvaluationAlgorithm* create())) delete ptr2; END_SECTION -START_SECTION((static String getProductName())) - TEST_EQUAL(MapAlignmentEvaluationAlgorithmPrecision::getProductName(),"precision") -END_SECTION - START_SECTION((virtual void evaluate(const ConsensusMap &consensus_map_in, const ConsensusMap &consensus_map_gt, const double &rt_dev, const double &mz_dev, const Peak2D::IntensityType &int_dev, const bool use_charge, double &out))) MapAlignmentEvaluationAlgorithmPrecision maea; ConsensusMap in; diff --git a/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithmRecall_test.cpp b/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithmRecall_test.cpp index a381ee2308e..37174fb0333 100644 --- a/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithmRecall_test.cpp +++ b/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithmRecall_test.cpp @@ -45,10 +45,6 @@ START_SECTION((static MapAlignmentEvaluationAlgorithm* create())) delete ptr2; END_SECTION -START_SECTION((static String getProductName())) - TEST_EQUAL(MapAlignmentEvaluationAlgorithmRecall::getProductName(),"recall") -END_SECTION - START_SECTION((virtual void evaluate(const ConsensusMap &consensus_map_in, const ConsensusMap &consensus_map_gt, const double &rt_dev, const double &mz_dev, const Peak2D::IntensityType &int_dev, const bool use_charge, double &out))) MapAlignmentEvaluationAlgorithmRecall maea; ConsensusMap in; diff --git a/src/tests/class_tests/openms/source/MaxLikeliFitter1D_test.cpp b/src/tests/class_tests/openms/source/MaxLikeliFitter1D_test.cpp index 1399d08977e..0913f64cd5c 100644 --- a/src/tests/class_tests/openms/source/MaxLikeliFitter1D_test.cpp +++ b/src/tests/class_tests/openms/source/MaxLikeliFitter1D_test.cpp @@ -23,7 +23,7 @@ class TestModel : public MaxLikeliFitter1D { public: TestModel() : MaxLikeliFitter1D() { - setName(getProductName()); + setName("TestModel"); check_defaults_ = false; defaultsToParam_(); } @@ -76,11 +76,6 @@ class TestModel : public MaxLikeliFitter1D return 1.0; } - static const String getProductName() - { - return "TestModel"; - } - }; ///////////////////////////////////////////////////////////// @@ -100,9 +95,7 @@ END_SECTION START_SECTION((MaxLikeliFitter1D(const MaxLikeliFitter1D &source))) TestModel tm1; - TestModel tm2(tm1); - TEST_EQUAL(tm1.getProductName(),tm2.getProductName()) END_SECTION START_SECTION((virtual ~MaxLikeliFitter1D())) @@ -112,9 +105,7 @@ END_SECTION START_SECTION((virtual MaxLikeliFitter1D& operator=(const MaxLikeliFitter1D &source))) TestModel tm1; TestModel tm2; - tm2 = tm1; - TEST_EQUAL(tm1.getProductName(),tm2.getProductName()) END_SECTION diff --git a/src/tests/class_tests/openms/source/NeutralLossDiffFilter_test.cpp b/src/tests/class_tests/openms/source/NeutralLossDiffFilter_test.cpp index 13ccf01f475..5ecd34a035e 100644 --- a/src/tests/class_tests/openms/source/NeutralLossDiffFilter_test.cpp +++ b/src/tests/class_tests/openms/source/NeutralLossDiffFilter_test.cpp @@ -77,10 +77,6 @@ START_SECTION((static FilterFunctor* create())) delete ff; END_SECTION -START_SECTION((static const String getProductName())) - TEST_EQUAL(e_ptr->getProductName(), "NeutralLossDiffFilter"); -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/NeutralLossMarker_test.cpp b/src/tests/class_tests/openms/source/NeutralLossMarker_test.cpp index 56e4537cb60..3b6e4e981c8 100644 --- a/src/tests/class_tests/openms/source/NeutralLossMarker_test.cpp +++ b/src/tests/class_tests/openms/source/NeutralLossMarker_test.cpp @@ -84,10 +84,6 @@ START_SECTION((static PeakMarker* create())) delete pm; END_SECTION -START_SECTION((static const String getProductName())) - TEST_EQUAL(e_ptr->getProductName(), "NeutralLossMarker") -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/PeakAlignment_test.cpp b/src/tests/class_tests/openms/source/PeakAlignment_test.cpp index a53b063cb40..87baaebcb55 100644 --- a/src/tests/class_tests/openms/source/PeakAlignment_test.cpp +++ b/src/tests/class_tests/openms/source/PeakAlignment_test.cpp @@ -117,12 +117,6 @@ START_SECTION((static PeakSpectrumCompareFunctor* create())) } END_SECTION -START_SECTION((static const String getProductName())) -{ - TEST_EQUAL(ptr->getProductName(), "PeakAlignment") -} -END_SECTION - delete ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/PeakMarker_test.cpp b/src/tests/class_tests/openms/source/PeakMarker_test.cpp index 9c526e31ff9..02bf495faea 100644 --- a/src/tests/class_tests/openms/source/PeakMarker_test.cpp +++ b/src/tests/class_tests/openms/source/PeakMarker_test.cpp @@ -50,10 +50,6 @@ START_SECTION((template void apply(std::map NOT_TESTABLE END_SECTION -START_SECTION(static const String getProductName()) - TEST_EQUAL(e_ptr->getProductName(), "PeakMarker") -END_SECTION - START_SECTION((PeakMarker& operator = (const PeakMarker& source))) PeakMarker copy; copy = *e_ptr; diff --git a/src/tests/class_tests/openms/source/PoseClusteringAffineSuperimposer_test.cpp b/src/tests/class_tests/openms/source/PoseClusteringAffineSuperimposer_test.cpp index 5bd9ad6a14d..64a48e27076 100644 --- a/src/tests/class_tests/openms/source/PoseClusteringAffineSuperimposer_test.cpp +++ b/src/tests/class_tests/openms/source/PoseClusteringAffineSuperimposer_test.cpp @@ -52,13 +52,6 @@ START_SECTION((static BaseSuperimposer* create())) } END_SECTION -START_SECTION((static const String getProductName())) -{ - PoseClusteringAffineSuperimposer pcat; - TEST_EQUAL(pcat.getName() == "poseclustering_affine",true) -} -END_SECTION - START_SECTION((virtual void run(const ConsensusMap& map_model, const ConsensusMap& map_scene, TransformationDescription& transformation))) { std::vector input(2); diff --git a/src/tests/class_tests/openms/source/PoseClusteringShiftSuperimposer_test.cpp b/src/tests/class_tests/openms/source/PoseClusteringShiftSuperimposer_test.cpp index 939dc18be8c..9a0bc59a549 100644 --- a/src/tests/class_tests/openms/source/PoseClusteringShiftSuperimposer_test.cpp +++ b/src/tests/class_tests/openms/source/PoseClusteringShiftSuperimposer_test.cpp @@ -46,12 +46,6 @@ START_SECTION((static BaseSuperimposer* create())) delete (base_ptr); END_SECTION -START_SECTION((static const String getProductName())) - PoseClusteringShiftSuperimposer pcsi; - - TEST_EQUAL(pcsi.getName() == "poseclustering_shift",true) -END_SECTION - START_SECTION((virtual void run(const ConsensusMap& map_model, const ConsensusMap& map_scene, TransformationDescription& transformation))) std::vector input(2); diff --git a/src/tests/class_tests/openms/source/QTClusterFinder_test.cpp b/src/tests/class_tests/openms/source/QTClusterFinder_test.cpp index 62661efe4f4..a15fd2b5376 100644 --- a/src/tests/class_tests/openms/source/QTClusterFinder_test.cpp +++ b/src/tests/class_tests/openms/source/QTClusterFinder_test.cpp @@ -52,13 +52,6 @@ START_SECTION((static BaseGroupFinder* create())) } END_SECTION -START_SECTION((static const String getProductName())) -{ - QTClusterFinder finder; - TEST_EQUAL(finder.getName() == "qt", true); -} -END_SECTION - START_SECTION((void run(const std::vector& input_maps, ConsensusMap& result_map))) { vector input(2); diff --git a/src/tests/class_tests/openms/source/SimplePairFinder_test.cpp b/src/tests/class_tests/openms/source/SimplePairFinder_test.cpp index 3a1b22b42b6..cf3be7698bd 100644 --- a/src/tests/class_tests/openms/source/SimplePairFinder_test.cpp +++ b/src/tests/class_tests/openms/source/SimplePairFinder_test.cpp @@ -47,12 +47,6 @@ START_SECTION((static BaseGroupFinder* create())) delete base_ptr; END_SECTION -START_SECTION((static const String getProductName())) - SimplePairFinder spf; - - TEST_EQUAL(spf.getName() == "simple",true) -END_SECTION - START_SECTION((virtual void run(const std::vector< ConsensusMap > &input_maps, ConsensusMap &result_map))) FeatureMap scene; Feature feat1; diff --git a/src/tests/class_tests/openms/source/SingleLinkage_test.cpp b/src/tests/class_tests/openms/source/SingleLinkage_test.cpp index 5f07a59994c..4dca94b8f1e 100644 --- a/src/tests/class_tests/openms/source/SingleLinkage_test.cpp +++ b/src/tests/class_tests/openms/source/SingleLinkage_test.cpp @@ -44,7 +44,6 @@ ptr = new SingleLinkage(); START_SECTION((SingleLinkage(const SingleLinkage &source))) { SingleLinkage copy(*ptr); - TEST_EQUAL(copy.getProductName(), ptr->getProductName()); } END_SECTION @@ -52,7 +51,6 @@ START_SECTION((SingleLinkage& operator=(const SingleLinkage &source))) { SingleLinkage copy; copy = *ptr; - TEST_EQUAL(copy.getProductName(), ptr->getProductName()); } END_SECTION @@ -115,12 +113,6 @@ START_SECTION((void operator()(DistanceMatrix< float > &original_distance, std:: } END_SECTION -START_SECTION((static const String getProductName())) -{ - TEST_EQUAL(ptr->getProductName(), "SingleLinkage") -} -END_SECTION - START_SECTION((static ClusterFunctor* create())) { ClusterFunctor* cf = SingleLinkage::create(); diff --git a/src/tests/class_tests/openms/source/SpectraSTSimilarityScore_test.cpp b/src/tests/class_tests/openms/source/SpectraSTSimilarityScore_test.cpp index 80b65551772..f1640172476 100644 --- a/src/tests/class_tests/openms/source/SpectraSTSimilarityScore_test.cpp +++ b/src/tests/class_tests/openms/source/SpectraSTSimilarityScore_test.cpp @@ -212,10 +212,6 @@ START_SECTION(static PeakSpectrumCompareFunctor* create()) delete psf; END_SECTION -START_SECTION(static const String getProductName()) - TEST_EQUAL(ptr->getProductName(), "SpectraSTSimilarityScore") -END_SECTION - START_SECTION(double delta_D(double top_hit, double runner_up)) SpectraSTSimilarityScore spectrast; TEST_EXCEPTION( Exception::DivisionByZero, spectrast.delta_D(0,5)) diff --git a/src/tests/class_tests/openms/source/SpectrumAlignmentScore_test.cpp b/src/tests/class_tests/openms/source/SpectrumAlignmentScore_test.cpp index 4d84ee75b70..67472be9d07 100644 --- a/src/tests/class_tests/openms/source/SpectrumAlignmentScore_test.cpp +++ b/src/tests/class_tests/openms/source/SpectrumAlignmentScore_test.cpp @@ -118,10 +118,6 @@ START_SECTION(static PeakSpectrumCompareFunctor* create()) delete pscf; END_SECTION -START_SECTION(static const String getProductName()) - TEST_STRING_EQUAL(SpectrumAlignmentScore::getProductName(), "SpectrumAlignmentScore") -END_SECTION - delete ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/SpectrumCheapDPCorr_test.cpp b/src/tests/class_tests/openms/source/SpectrumCheapDPCorr_test.cpp index c0765f790d9..346dbf64a45 100644 --- a/src/tests/class_tests/openms/source/SpectrumCheapDPCorr_test.cpp +++ b/src/tests/class_tests/openms/source/SpectrumCheapDPCorr_test.cpp @@ -105,10 +105,6 @@ START_SECTION(static PeakSpectrumCompareFunctor* create()) delete cf; END_SECTION -START_SECTION(static const String getProductName()) - TEST_EQUAL(SpectrumCheapDPCorr::getProductName(), "SpectrumCheapDPCorr") -END_SECTION - START_SECTION(void setFactor(double f)) e_ptr->setFactor(0.3); diff --git a/src/tests/class_tests/openms/source/SpectrumPrecursorComparator_test.cpp b/src/tests/class_tests/openms/source/SpectrumPrecursorComparator_test.cpp index 63744a01f52..2fb6a43031b 100644 --- a/src/tests/class_tests/openms/source/SpectrumPrecursorComparator_test.cpp +++ b/src/tests/class_tests/openms/source/SpectrumPrecursorComparator_test.cpp @@ -87,10 +87,6 @@ START_SECTION(static PeakSpectrumCompareFunctor* create()) delete cf; END_SECTION -START_SECTION(static const String getProductName()) - TEST_EQUAL(e_ptr->getProductName(), "SpectrumPrecursorComparator") -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/StablePairFinder_test.cpp b/src/tests/class_tests/openms/source/StablePairFinder_test.cpp index 341d1054dd6..cbad580fcd1 100644 --- a/src/tests/class_tests/openms/source/StablePairFinder_test.cpp +++ b/src/tests/class_tests/openms/source/StablePairFinder_test.cpp @@ -44,12 +44,6 @@ START_SECTION((static BaseGroupFinder* create())) delete base_ptr; END_SECTION -START_SECTION((static const String getProductName())) - StablePairFinder spf; - - TEST_EQUAL(spf.getName() == "stable", true) -END_SECTION - START_SECTION((void run(const std::vector& input_maps, ConsensusMap &result_map))) { std::vector input(2); diff --git a/src/tests/class_tests/openms/source/TICFilter_test.cpp b/src/tests/class_tests/openms/source/TICFilter_test.cpp index 593bee73681..789ceb75378 100644 --- a/src/tests/class_tests/openms/source/TICFilter_test.cpp +++ b/src/tests/class_tests/openms/source/TICFilter_test.cpp @@ -66,10 +66,6 @@ START_SECTION((static FilterFunctor* create())) NOT_TESTABLE END_SECTION -START_SECTION((static const String getProductName())) - TEST_EQUAL(e_ptr->getProductName(), "TICFilter") -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/ZhangSimilarityScore_test.cpp b/src/tests/class_tests/openms/source/ZhangSimilarityScore_test.cpp index 623dfa95794..91c06051e88 100644 --- a/src/tests/class_tests/openms/source/ZhangSimilarityScore_test.cpp +++ b/src/tests/class_tests/openms/source/ZhangSimilarityScore_test.cpp @@ -101,10 +101,6 @@ START_SECTION(static PeakSpectrumCompareFunctor* create()) delete psf; END_SECTION -START_SECTION(static const String getProductName()) - TEST_EQUAL(ptr->getProductName(), "ZhangSimilarityScore") -END_SECTION - delete ptr; ///////////////////////////////////////////////////////////// From bf643759557a10392cc51cd807cf7f858c037a52 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Mon, 4 Mar 2024 18:20:18 +0100 Subject: [PATCH 235/242] linker error: undefined referene to OpenMS::make_gui_progress_logger --- .../include/OpenMS/CONCEPT/ProgressLogger.h | 4 +++ src/openms/source/CONCEPT/ProgressLogger.cpp | 33 +++++++------------ .../OpenMS/VISUAL/GUIProgressLoggerImpl.h | 3 -- .../APPLICATIONS/MISC/QApplicationTOPP.cpp | 7 ++-- .../source/VISUAL/GUIProgressLoggerImpl.cpp | 6 ---- .../openms_gui/source/GUI/TOPPView_test.cpp | 4 +++ 6 files changed, 24 insertions(+), 33 deletions(-) diff --git a/src/openms/include/OpenMS/CONCEPT/ProgressLogger.h b/src/openms/include/OpenMS/CONCEPT/ProgressLogger.h index b6e50c7e7ec..7d34ea9d06d 100644 --- a/src/openms/include/OpenMS/CONCEPT/ProgressLogger.h +++ b/src/openms/include/OpenMS/CONCEPT/ProgressLogger.h @@ -108,5 +108,9 @@ namespace OpenMS }; + // Function pointer for injecting the GUI progress logger implementation + typedef ProgressLogger::ProgressLoggerImpl* (*MakeGUIProgressLoggerFunc)(); + extern MakeGUIProgressLoggerFunc make_gui_progress_logger; + } // namespace OpenMS diff --git a/src/openms/source/CONCEPT/ProgressLogger.cpp b/src/openms/source/CONCEPT/ProgressLogger.cpp index 7d9f135213f..73644356280 100644 --- a/src/openms/source/CONCEPT/ProgressLogger.cpp +++ b/src/openms/source/CONCEPT/ProgressLogger.cpp @@ -21,15 +21,12 @@ using namespace std; namespace OpenMS { + class CMDProgressLoggerImpl : public ProgressLogger::ProgressLoggerImpl { public: - CMDProgressLoggerImpl() : - stop_watch_() - - { - } + CMDProgressLoggerImpl() = default; /// create new object (needed by Factory) static ProgressLogger::ProgressLoggerImpl* create() @@ -37,12 +34,6 @@ namespace OpenMS return new CMDProgressLoggerImpl(); } - /// name of the model (needed by Factory) - static const String getProductName() - { - return "CMD"; - } - void startProgress(const SignedSize begin, const SignedSize end, const String& label, const int current_recursion_depth) const override { begin_ = begin; @@ -105,12 +96,6 @@ namespace OpenMS return new NoProgressLoggerImpl(); } - /// name of the model (needed by Factory) - static const String getProductName() - { - return "NONE"; - } - void startProgress(const SignedSize /* begin */, const SignedSize /* end */, const String& /* label */, const int /* current_recursion_depth */) const override { } @@ -130,6 +115,12 @@ namespace OpenMS }; + // Simple runtime plugin system for GUI progress logger. + // An external library (e.g., OpenMS_GUI) can set this function to provide a GUI logger. + // As default, it just uses the NonProgressLoggerImpl. + MakeGUIProgressLoggerFunc make_gui_progress_logger = + []() -> ProgressLogger::ProgressLoggerImpl* { return NoProgressLoggerImpl::create(); }; + int ProgressLogger::recursion_depth_ = 0; ProgressLogger::ProgressLogger() : @@ -157,7 +148,7 @@ namespace OpenMS } case GUI: { - //current_logger_ = GUIProgressLoggerImpl(); + current_logger_ = make_gui_progress_logger(); } } } @@ -190,8 +181,7 @@ namespace OpenMS } case GUI: { - // current_logger_ = GUIProgressLoggerImpl::create(); - break; + current_logger_ = make_gui_progress_logger(); } } @@ -223,7 +213,7 @@ namespace OpenMS } case GUI: { - // current_logger_ = GUIProgressLoggerImpl::create(); + current_logger_ = make_gui_progress_logger(); } } } @@ -279,5 +269,4 @@ namespace OpenMS current_logger_->endProgress(recursion_depth_, bytes_processed); } - } //namespace OpenMS diff --git a/src/openms_gui/include/OpenMS/VISUAL/GUIProgressLoggerImpl.h b/src/openms_gui/include/OpenMS/VISUAL/GUIProgressLoggerImpl.h index 71cec58c497..26d0f827438 100644 --- a/src/openms_gui/include/OpenMS/VISUAL/GUIProgressLoggerImpl.h +++ b/src/openms_gui/include/OpenMS/VISUAL/GUIProgressLoggerImpl.h @@ -26,9 +26,6 @@ namespace OpenMS /// create new object (needed by Factory) static ProgressLogger::ProgressLoggerImpl* create(); - /// name of the model (needed by Factory) - static const String getProductName(); - /// default c'tor. GUIProgressLoggerImpl(); diff --git a/src/openms_gui/source/VISUAL/APPLICATIONS/MISC/QApplicationTOPP.cpp b/src/openms_gui/source/VISUAL/APPLICATIONS/MISC/QApplicationTOPP.cpp index 0eb50aa243d..61f2cf18e27 100644 --- a/src/openms_gui/source/VISUAL/APPLICATIONS/MISC/QApplicationTOPP.cpp +++ b/src/openms_gui/source/VISUAL/APPLICATIONS/MISC/QApplicationTOPP.cpp @@ -14,6 +14,8 @@ #include #include #include + +#include #include //Qt @@ -34,8 +36,9 @@ namespace OpenMS QApplicationTOPP::QApplicationTOPP(int& argc, char** argv) : QApplication(argc, argv) { - // register GUI ProgressLogger that can be used in GUI tools - // TODO: Factory::registerProduct(GUIProgressLoggerImpl::getProductName(), &GUIProgressLoggerImpl::create); + // inject the GUIProgressLoggerImpl to be used by OpenMS lib via an extern variable + make_gui_progress_logger = + []() -> ProgressLogger::ProgressLoggerImpl* { return new GUIProgressLoggerImpl(); }; // set plastique style unless windows / mac style is available if (QStyleFactory::keys().contains("windowsxp", Qt::CaseInsensitive)) diff --git a/src/openms_gui/source/VISUAL/GUIProgressLoggerImpl.cpp b/src/openms_gui/source/VISUAL/GUIProgressLoggerImpl.cpp index f0f8ba56013..ec51cb6446c 100644 --- a/src/openms_gui/source/VISUAL/GUIProgressLoggerImpl.cpp +++ b/src/openms_gui/source/VISUAL/GUIProgressLoggerImpl.cpp @@ -22,12 +22,6 @@ namespace OpenMS return new GUIProgressLoggerImpl(); } - /// name of the model (needed by Factory) - const String GUIProgressLoggerImpl::getProductName() - { - return "GUI"; - } - GUIProgressLoggerImpl::GUIProgressLoggerImpl() : dlg_(nullptr), begin_(0), diff --git a/src/tests/class_tests/openms_gui/source/GUI/TOPPView_test.cpp b/src/tests/class_tests/openms_gui/source/GUI/TOPPView_test.cpp index 9ef1f19474a..3fd1443a910 100644 --- a/src/tests/class_tests/openms_gui/source/GUI/TOPPView_test.cpp +++ b/src/tests/class_tests/openms_gui/source/GUI/TOPPView_test.cpp @@ -93,6 +93,10 @@ void TestTOPPView::simulateClick_() void TestTOPPView::testGui() { + // inject the GUIProgressLoggerImpl to be used by OpenMS lib via an extern variable + make_gui_progress_logger = + []() -> ProgressLogger::ProgressLoggerImpl* { return new GUIProgressLoggerImpl(); }; + TOPPViewBase tv(TOPPViewBase::TOOL_SCAN::SKIP_SCAN); tv.show(); QApplication::processEvents(); From 34f9ddec9fe15f82130025ff2b5d93caac527009 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Tue, 5 Mar 2024 04:52:20 +0100 Subject: [PATCH 236/242] forgot DLL export --- src/openms/include/OpenMS/CONCEPT/ProgressLogger.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openms/include/OpenMS/CONCEPT/ProgressLogger.h b/src/openms/include/OpenMS/CONCEPT/ProgressLogger.h index 7d34ea9d06d..c5062b11b35 100644 --- a/src/openms/include/OpenMS/CONCEPT/ProgressLogger.h +++ b/src/openms/include/OpenMS/CONCEPT/ProgressLogger.h @@ -110,7 +110,7 @@ namespace OpenMS // Function pointer for injecting the GUI progress logger implementation typedef ProgressLogger::ProgressLoggerImpl* (*MakeGUIProgressLoggerFunc)(); - extern MakeGUIProgressLoggerFunc make_gui_progress_logger; + extern OPENMS_DLLAPI MakeGUIProgressLoggerFunc make_gui_progress_logger; } // namespace OpenMS From ddb925da05325ede58ffc1d1177f8ad951dbba9f Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Tue, 5 Mar 2024 05:41:35 +0100 Subject: [PATCH 237/242] removed unneded ::create method --- .../MAPMATCHING/FeatureGroupingAlgorithmKD.h | 6 -- .../FeatureGroupingAlgorithmLabeled.h | 6 -- .../MAPMATCHING/FeatureGroupingAlgorithmQT.h | 8 +- .../FeatureGroupingAlgorithmUnlabeled.h | 6 -- .../ANALYSIS/MAPMATCHING/LabeledPairFinder.h | 6 -- ...MapAlignmentEvaluationAlgorithmPrecision.h | 6 -- .../MapAlignmentEvaluationAlgorithmRecall.h | 6 -- .../PoseClusteringAffineSuperimposer.h | 6 -- .../PoseClusteringShiftSuperimposer.h | 12 --- .../ANALYSIS/MAPMATCHING/QTClusterFinder.h | 5 - .../ANALYSIS/MAPMATCHING/SimplePairFinder.h | 6 -- .../ANALYSIS/MAPMATCHING/StablePairFinder.h | 6 -- .../COMPARISON/CLUSTERING/AverageLinkage.h | 3 - .../COMPARISON/CLUSTERING/CompleteLinkage.h | 3 - .../COMPARISON/CLUSTERING/SingleLinkage.h | 3 - .../SPECTRA/BinnedSharedPeakCount.h | 3 - .../SPECTRA/BinnedSpectralContrastAngle.h | 3 - .../SPECTRA/BinnedSumAgreeingIntensities.h | 3 - .../OpenMS/COMPARISON/SPECTRA/PeakAlignment.h | 3 - .../SPECTRA/SpectraSTSimilarityScore.h | 5 - .../SPECTRA/SpectrumAlignmentScore.h | 5 - .../COMPARISON/SPECTRA/SpectrumCheapDPCorr.h | 4 +- .../SPECTRA/SpectrumPrecursorComparator.h | 7 -- .../SPECTRA/SteinScottImproveScore.h | 5 - .../COMPARISON/SPECTRA/ZhangSimilarityScore.h | 7 -- .../FILTERING/TRANSFORMERS/ComplementFilter.h | 3 +- .../FILTERING/TRANSFORMERS/ComplementMarker.h | 2 - .../FILTERING/TRANSFORMERS/GoodDiffFilter.h | 4 +- .../TRANSFORMERS/IntensityBalanceFilter.h | 2 - .../TRANSFORMERS/IsotopeDiffFilter.h | 2 - .../FILTERING/TRANSFORMERS/IsotopeMarker.h | 2 - .../TRANSFORMERS/NeutralLossDiffFilter.h | 2 - .../TRANSFORMERS/NeutralLossMarker.h | 2 - .../OpenMS/FILTERING/TRANSFORMERS/TICFilter.h | 4 +- .../TRANSFORMATIONS/FEATUREFINDER/BaseModel.h | 2 - .../FEATUREFINDER/BiGaussFitter1D.h | 6 -- .../FEATUREFINDER/EmgFitter1D.h | 6 -- .../TRANSFORMATIONS/FEATUREFINDER/EmgModel.h | 6 -- .../FEATUREFINDER/ExtendedIsotopeFitter1D.h | 6 -- .../FEATUREFINDER/ExtendedIsotopeModel.h | 6 -- .../FEATUREFINDER/GaussFitter1D.h | 6 -- .../FEATUREFINDER/GaussModel.h | 6 -- .../FEATUREFINDER/IsotopeFitter1D.h | 5 - .../FEATUREFINDER/IsotopeModel.h | 6 -- .../COMPARISON/CLUSTERING/AverageLinkage.cpp | 5 - .../COMPARISON/CLUSTERING/CompleteLinkage.cpp | 4 - .../COMPARISON/CLUSTERING/SingleLinkage.cpp | 4 - src/openms/source/CONCEPT/ProgressLogger.cpp | 16 ++-- .../FEATUREFINDER/FeatureFinder.cpp | 93 ------------------- .../OpenMS/VISUAL/GUIProgressLoggerImpl.h | 3 - .../source/VISUAL/GUIProgressLoggerImpl.cpp | 6 -- .../openms/source/AverageLinkage_test.cpp | 8 -- .../openms/source/BiGaussFitter1D_test.cpp | 9 -- .../source/BinnedSharedPeakCount_test.cpp | 10 -- .../BinnedSpectralContrastAngle_test.cpp | 10 -- .../BinnedSumAgreeingIntensities_test.cpp | 10 -- .../openms/source/ComplementFilter_test.cpp | 8 -- .../openms/source/ComplementMarker_test.cpp | 8 -- .../openms/source/CompleteLinkage_test.cpp | 8 -- .../openms/source/EmgFitter1D_test.cpp | 9 -- .../openms/source/EmgModel_test.cpp | 7 -- .../source/ExtendedIsotopeFitter1D_test.cpp | 7 -- .../source/ExtendedIsotopeModel_test.cpp | 7 -- .../FeatureGroupingAlgorithmKD_test.cpp | 8 -- .../FeatureGroupingAlgorithmLabeled_test.cpp | 8 -- .../FeatureGroupingAlgorithmQT_test.cpp | 8 -- ...FeatureGroupingAlgorithmUnlabeled_test.cpp | 8 -- .../openms/source/GaussFitter1D_test.cpp | 10 -- .../openms/source/GaussModel_test.cpp | 7 -- .../openms/source/GoodDiffFilter_test.cpp | 8 -- .../source/IntensityBalanceFilter_test.cpp | 8 -- .../openms/source/IsotopeDiffFilter_test.cpp | 8 -- .../openms/source/IsotopeFitter1D_test.cpp | 7 -- .../openms/source/IsotopeMarker_test.cpp | 8 -- .../openms/source/IsotopeModel_test.cpp | 7 -- .../openms/source/LabeledPairFinder_test.cpp | 8 -- ...nmentEvaluationAlgorithmPrecision_test.cpp | 8 -- ...lignmentEvaluationAlgorithmRecall_test.cpp | 8 -- .../source/NeutralLossDiffFilter_test.cpp | 8 -- .../openms/source/NeutralLossMarker_test.cpp | 8 -- .../openms/source/PeakAlignment_test.cpp | 10 -- .../PoseClusteringAffineSuperimposer_test.cpp | 9 -- .../PoseClusteringShiftSuperimposer_test.cpp | 7 -- .../openms/source/QTClusterFinder_test.cpp | 9 -- .../openms/source/SimplePairFinder_test.cpp | 6 -- .../openms/source/SingleLinkage_test.cpp | 8 -- .../source/SpectraSTSimilarityScore_test.cpp | 10 -- .../source/SpectrumAlignmentScore_test.cpp | 9 -- .../source/SpectrumCheapDPCorr_test.cpp | 8 -- .../SpectrumPrecursorComparator_test.cpp | 8 -- .../openms/source/StablePairFinder_test.cpp | 5 - .../source/SteinScottImproveScore_test.cpp | 9 -- .../source/ZhangSimilarityScore_test.cpp | 8 -- 93 files changed, 13 insertions(+), 671 deletions(-) diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmKD.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmKD.h index 7488a23790f..80f7710c5ef 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmKD.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmKD.h @@ -177,12 +177,6 @@ class OPENMS_DLLAPI ClusterProxyKD void group(const std::vector& maps, ConsensusMap& out) override; - /// Creates a new instance of this class (for Factory) - static FeatureGroupingAlgorithm* create() - { - return new FeatureGroupingAlgorithmKD(); - } - private: /// Copy constructor intentionally not implemented -> private diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmLabeled.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmLabeled.h index c8755cea679..94cf3391645 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmLabeled.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmLabeled.h @@ -42,12 +42,6 @@ namespace OpenMS */ void group(const std::vector & maps, ConsensusMap & out) override; - ///Creates a new instance of this class (for Factory) - static FeatureGroupingAlgorithm * create() - { - return new FeatureGroupingAlgorithmLabeled(); - } - private: ///Copy constructor is not implemented -> private diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmQT.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmQT.h index 6aaa73ac97b..a994f46eb4e 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmQT.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmQT.h @@ -52,13 +52,7 @@ namespace OpenMS */ void group(const std::vector& maps, ConsensusMap& out) override; - - /// Creates a new instance of this class (for Factory) - static FeatureGroupingAlgorithm* create() - { - return new FeatureGroupingAlgorithmQT(); - } - + private: /// Copy constructor intentionally not implemented -> private diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmUnlabeled.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmUnlabeled.h index be6c584e229..2ace39d6d55 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmUnlabeled.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithmUnlabeled.h @@ -82,12 +82,6 @@ namespace OpenMS */ void addToGroup(int map_id, const FeatureMap & feature_map); - /// Creates a new instance of this class (for Factory) - static FeatureGroupingAlgorithm * create() - { - return new FeatureGroupingAlgorithmUnlabeled(); - } - private: // This vector should always have 2 elements diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/LabeledPairFinder.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/LabeledPairFinder.h index 7f77aa6c6bc..0a9c0eafd62 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/LabeledPairFinder.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/LabeledPairFinder.h @@ -40,12 +40,6 @@ namespace OpenMS { } - /// Returns an instance of this class - static BaseGroupFinder * create() - { - return new LabeledPairFinder(); - } - /** @brief Run the algorithm diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithmPrecision.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithmPrecision.h index 6d42d80ac75..9749b0f55f5 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithmPrecision.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithmPrecision.h @@ -34,12 +34,6 @@ namespace OpenMS */ void evaluate(const ConsensusMap & consensus_map_in, const ConsensusMap & consensus_map_gt, const double & rt_dev, const double & mz_dev, const Peak2D::IntensityType & int_dev, const bool use_charge, double & out) override; - /// Creates a new instance of this class (for Factory) - static MapAlignmentEvaluationAlgorithm * create() - { - return new MapAlignmentEvaluationAlgorithmPrecision(); - } - private: /// Copy constructor intentionally not implemented -> private diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithmRecall.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithmRecall.h index 031a920bc65..67769382b11 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithmRecall.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithmRecall.h @@ -34,12 +34,6 @@ namespace OpenMS */ void evaluate(const ConsensusMap & consensus_map_in, const ConsensusMap & consensus_map_gt, const double & rt_dev, const double & mz_dev, const Peak2D::IntensityType & int_dev, const bool use_charge, double & out) override; - /// Creates a new instance of this class (for Factory) - static MapAlignmentEvaluationAlgorithm * create() - { - return new MapAlignmentEvaluationAlgorithmRecall(); - } - private: /// Copy constructor intentionally not implemented -> private diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/PoseClusteringAffineSuperimposer.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/PoseClusteringAffineSuperimposer.h index 9808866cefd..48634594d9e 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/PoseClusteringAffineSuperimposer.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/PoseClusteringAffineSuperimposer.h @@ -74,12 +74,6 @@ namespace OpenMS /// Perform alignment on vector of 1D peaks virtual void run(const std::vector & map_model, const std::vector & map_scene, TransformationDescription & transformation); - /// Returns an instance of this class - static BaseSuperimposer * create() - { - return new PoseClusteringAffineSuperimposer(); - } - }; } // namespace OpenMS diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/PoseClusteringShiftSuperimposer.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/PoseClusteringShiftSuperimposer.h index c0c7f491f28..7ca7e876650 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/PoseClusteringShiftSuperimposer.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/PoseClusteringShiftSuperimposer.h @@ -63,18 +63,6 @@ namespace OpenMS */ void run(const ConsensusMap & map_model, const ConsensusMap & map_scene, TransformationDescription & transformation) override; - /// Returns an instance of this class - static BaseSuperimposer * create() - { - return new PoseClusteringShiftSuperimposer(); - } - - /// Returns the name of this module - static const String getProductName() - { - return "poseclustering_shift"; - } - }; } // namespace OpenMS diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/QTClusterFinder.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/QTClusterFinder.h index 6734e203346..0121503e499 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/QTClusterFinder.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/QTClusterFinder.h @@ -278,11 +278,6 @@ namespace OpenMS void run(const std::vector& input_maps, ConsensusMap& result_map); - /// Returns an instance of this class - static BaseGroupFinder* create() - { - return new QTClusterFinder(); - } }; } // namespace OpenMS diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/SimplePairFinder.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/SimplePairFinder.h index f70f4f9a4fe..4d91f09d8b0 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/SimplePairFinder.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/SimplePairFinder.h @@ -66,12 +66,6 @@ namespace OpenMS { } - /// returns an instance of this class - static BaseGroupFinder * create() - { - return new SimplePairFinder(); - } - /** @brief Run the algorithm diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/StablePairFinder.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/StablePairFinder.h index 8656da639a8..855ad802d57 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/StablePairFinder.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/StablePairFinder.h @@ -96,12 +96,6 @@ namespace OpenMS { } - /// Returns an instance of this class - static BaseGroupFinder* create() - { - return new StablePairFinder(); - } - /** @brief Run the algorithm diff --git a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/AverageLinkage.h b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/AverageLinkage.h index 38706baf249..981385cb918 100644 --- a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/AverageLinkage.h +++ b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/AverageLinkage.h @@ -57,9 +57,6 @@ namespace OpenMS */ void operator()(DistanceMatrix & original_distance, std::vector & cluster_tree, const float threshold = 1) const override; - /// creates a new instance of a AverageLinkage object - static ClusterFunctor * create(); - }; } diff --git a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/CompleteLinkage.h b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/CompleteLinkage.h index 52c6110e9f6..afc73d9a5b0 100644 --- a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/CompleteLinkage.h +++ b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/CompleteLinkage.h @@ -63,9 +63,6 @@ class OPENMS_DLLAPI CompleteLinkage : public ClusterFunctor, public ProgressLogg */ void operator()(DistanceMatrix& original_distance, std::vector& cluster_tree, const float threshold = 1) const override; - /// creates a new instance of a CompleteLinkage object - static ClusterFunctor* create(); - }; } // namespace OpenMS diff --git a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/SingleLinkage.h b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/SingleLinkage.h index 7de2708749a..affba0a86fd 100644 --- a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/SingleLinkage.h +++ b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/SingleLinkage.h @@ -55,9 +55,6 @@ namespace OpenMS */ void operator()(DistanceMatrix & original_distance, std::vector & cluster_tree, const float threshold = 1) const override; - /// creates a new instance of a SingleLinkage object - static ClusterFunctor * create(); - }; diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSharedPeakCount.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSharedPeakCount.h index 89601ca1621..3617d3f8b5b 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSharedPeakCount.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSharedPeakCount.h @@ -59,9 +59,6 @@ namespace OpenMS /// function call operator, calculates self similarity double operator()(const BinnedSpectrum& spec) const override; - /// - static BinnedSpectrumCompareFunctor* create() { return new BinnedSharedPeakCount(); } - protected: void updateMembers_() override; double precursor_mass_tolerance_; diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSpectralContrastAngle.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSpectralContrastAngle.h index ea4602e5234..6682c96eaf7 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSpectralContrastAngle.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSpectralContrastAngle.h @@ -57,9 +57,6 @@ namespace OpenMS /// function call operator, calculates self similarity double operator()(const BinnedSpectrum& spec) const override; - /// - static BinnedSpectrumCompareFunctor* create() { return new BinnedSpectralContrastAngle(); } - protected: void updateMembers_() override; double precursor_mass_tolerance_; diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSumAgreeingIntensities.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSumAgreeingIntensities.h index d23df6114a3..b2f5d05214c 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSumAgreeingIntensities.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/BinnedSumAgreeingIntensities.h @@ -63,9 +63,6 @@ namespace OpenMS /// function call operator, calculates self similarity double operator()(const BinnedSpectrum& spec) const override; - /// - static BinnedSpectrumCompareFunctor* create() { return new BinnedSumAgreeingIntensities(); } - protected: void updateMembers_() override; double precursor_mass_tolerance_; diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/PeakAlignment.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/PeakAlignment.h index da7aa1c318d..e6a6104e9f6 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/PeakAlignment.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/PeakAlignment.h @@ -51,9 +51,6 @@ namespace OpenMS /// function call operator, calculates self similarity double operator()(const PeakSpectrum & spec) const override; - /// - static PeakSpectrumCompareFunctor * create() { return new PeakAlignment(); } - /// make alignment and get the traceback std::vector > getAlignmentTraceback(const PeakSpectrum & spec1, const PeakSpectrum & spec2) const; diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectraSTSimilarityScore.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectraSTSimilarityScore.h index 994ace496de..c295f114cd1 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectraSTSimilarityScore.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectraSTSimilarityScore.h @@ -111,11 +111,6 @@ namespace OpenMS */ double compute_F(double dot_product, double delta_D, double dot_bias); - - - /// - static PeakSpectrumCompareFunctor * create() { return new SpectraSTSimilarityScore(); } - protected: diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumAlignmentScore.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumAlignmentScore.h index 692a06be339..45522b53869 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumAlignmentScore.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumAlignmentScore.h @@ -67,11 +67,6 @@ namespace OpenMS double operator()(const PeakSpectrum & spec) const override; // @} - // @name Accessors - // @{ - /// - static PeakSpectrumCompareFunctor * create() { return new SpectrumAlignmentScore(); } - // @} }; diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumCheapDPCorr.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumCheapDPCorr.h index 024314150f9..d33efa9d3ac 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumCheapDPCorr.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumCheapDPCorr.h @@ -61,9 +61,7 @@ namespace OpenMS // @name Accessors // @{ - /// - static PeakSpectrumCompareFunctor * create() { return new SpectrumCheapDPCorr(); } - + /// return consensus spectrum from last function call operator const PeakSpectrum & lastconsensus() const; diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumPrecursorComparator.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumPrecursorComparator.h index e5b946a7509..f061a7fe6f0 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumPrecursorComparator.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SpectrumPrecursorComparator.h @@ -47,13 +47,6 @@ namespace OpenMS double operator()(const PeakSpectrum & a) const override; // @} - // @name Accessors - // @{ - /// - static PeakSpectrumCompareFunctor * create() { return new SpectrumPrecursorComparator(); } - - // @} - }; } diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SteinScottImproveScore.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SteinScottImproveScore.h index de362509928..67c4b55d5a9 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/SteinScottImproveScore.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/SteinScottImproveScore.h @@ -70,11 +70,6 @@ namespace OpenMS This function return the similarity score of itself based on SteinScott. */ double operator()(const PeakSpectrum & spec) const override; - static PeakSpectrumCompareFunctor * create() - { - return new SteinScottImproveScore(); - } - }; } diff --git a/src/openms/include/OpenMS/COMPARISON/SPECTRA/ZhangSimilarityScore.h b/src/openms/include/OpenMS/COMPARISON/SPECTRA/ZhangSimilarityScore.h index 9a48124337b..b3063084a56 100644 --- a/src/openms/include/OpenMS/COMPARISON/SPECTRA/ZhangSimilarityScore.h +++ b/src/openms/include/OpenMS/COMPARISON/SPECTRA/ZhangSimilarityScore.h @@ -53,13 +53,6 @@ namespace OpenMS double operator()(const PeakSpectrum & spec) const override; // @} - // @name Accessors - // @{ - /// - static PeakSpectrumCompareFunctor * create() { return new ZhangSimilarityScore(); } - - // @} - protected: /// returns the factor associated with the m/z tolerance and m/z difference of the peaks diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/ComplementFilter.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/ComplementFilter.h index 417369021d4..bd3e265ccfa 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/ComplementFilter.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/ComplementFilter.h @@ -47,8 +47,7 @@ namespace OpenMS // @name Accessors //@{ - static FilterFunctor * create() { return new ComplementFilter(); } - + /// returns the total intensity of peak pairs which could result from complementing fragments template double apply(SpectrumType & spectrum) diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/ComplementMarker.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/ComplementMarker.h index d9bd347e072..a0f825de36d 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/ComplementMarker.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/ComplementMarker.h @@ -47,8 +47,6 @@ namespace OpenMS // @name Accessors //@{ - /// - static PeakMarker * create() { return new ComplementMarker(); } /// template diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/GoodDiffFilter.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/GoodDiffFilter.h index 1c254f3baca..270a0977bf1 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/GoodDiffFilter.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/GoodDiffFilter.h @@ -49,9 +49,7 @@ namespace OpenMS // @name Accessors // @{ - /// - static FilterFunctor * create() { return new GoodDiffFilter(); } - + /// template double apply(SpectrumType & spectrum) diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IntensityBalanceFilter.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IntensityBalanceFilter.h index 34d3cc699bc..55c29403e85 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IntensityBalanceFilter.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IntensityBalanceFilter.h @@ -49,8 +49,6 @@ namespace OpenMS // @name Accessors // @{ - /// - static FilterFunctor * create() { return new IntensityBalanceFilter(); } /// template diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IsotopeDiffFilter.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IsotopeDiffFilter.h index 29d95cfc984..664ef7f7a9d 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IsotopeDiffFilter.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IsotopeDiffFilter.h @@ -46,8 +46,6 @@ namespace OpenMS // @name Accessors // @{ - /// - static FilterFunctor * create() { return new IsotopeDiffFilter(); } /// template diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IsotopeMarker.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IsotopeMarker.h index 387894c8047..424851a8d09 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IsotopeMarker.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/IsotopeMarker.h @@ -53,8 +53,6 @@ namespace OpenMS // @name Accessors // @{ - /// - static PeakMarker * create() { return new IsotopeMarker(); } /// template diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/NeutralLossDiffFilter.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/NeutralLossDiffFilter.h index 479134a47c9..6ad19e8bbac 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/NeutralLossDiffFilter.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/NeutralLossDiffFilter.h @@ -47,8 +47,6 @@ namespace OpenMS // @name Accessors // @{ - /// - static FilterFunctor * create() { return new NeutralLossDiffFilter(); } /// template diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/NeutralLossMarker.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/NeutralLossMarker.h index 9f2b824b076..b87e907c0ca 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/NeutralLossMarker.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/NeutralLossMarker.h @@ -47,8 +47,6 @@ namespace OpenMS // @name Accessors // @{ - /// - static PeakMarker * create() { return new NeutralLossMarker(); } /// template diff --git a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/TICFilter.h b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/TICFilter.h index bb9264aadef..673cc4af2d4 100644 --- a/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/TICFilter.h +++ b/src/openms/include/OpenMS/FILTERING/TRANSFORMERS/TICFilter.h @@ -44,8 +44,6 @@ namespace OpenMS // @name Accessors // @{ - /// - static FilterFunctor * create() { return new TICFilter(); } /// template @@ -61,7 +59,7 @@ namespace OpenMS } return TIC; } - + // @} }; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel.h index fd1dac3da34..758d77032dd 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BaseModel.h @@ -17,8 +17,6 @@ namespace OpenMS /** @brief Abstract base class for 1-dimensional models. - Every derived class has to implement the static functions - "T* create()" (see DefaultParamHandler for details) */ class BaseModel : public DefaultParamHandler { diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.h index ee743bf12e0..24079784e03 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/BiGaussFitter1D.h @@ -37,12 +37,6 @@ namespace OpenMS /// assignment operator virtual BiGaussFitter1D & operator=(const BiGaussFitter1D & source); - /// create new BiGaussModel object (function needed by Factory) - static Fitter1D * create() - { - return new BiGaussFitter1D(); - } - /// return interpolation model QualityType fit1d(const RawDataArrayType & range, std::unique_ptr& model) override; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.h index d399dfe43e1..44e81436456 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgFitter1D.h @@ -35,12 +35,6 @@ namespace OpenMS /// assignment operator virtual EmgFitter1D& operator=(const EmgFitter1D& source); - /// create new EmgFitter1D object (function needed by Factory) - static Fitter1D* create() - { - return new EmgFitter1D(); - } - /// return interpolation model QualityType fit1d(const RawDataArrayType& range, std::unique_ptr& model) override; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgModel.h index 415b10449d6..57d11c46112 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/EmgModel.h @@ -40,12 +40,6 @@ namespace OpenMS /// assignment operator EmgModel & operator=(const EmgModel & source); - /// create new EmgModel object (needed by Factory) - static BaseModel * create() - { - return new EmgModel(); - } - /// set offset without being computing all over and without any discrepancy void setOffset(CoordinateType offset) override; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.h index 607e44b1f82..0e308706c91 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeFitter1D.h @@ -34,12 +34,6 @@ namespace OpenMS /// assignment operator virtual ExtendedIsotopeFitter1D & operator=(const ExtendedIsotopeFitter1D & source); - /// create new ExtendedIsotopeFitter1D object (function needed by Factory) - static Fitter1D * create() - { - return new ExtendedIsotopeFitter1D(); - } - /// return interpolation model QualityType fit1d(const RawDataArrayType & range, std::unique_ptr& model) override; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeModel.h index 1d7e870f4df..7791a113179 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/ExtendedIsotopeModel.h @@ -50,12 +50,6 @@ namespace OpenMS UInt getCharge() const; - /// create new ExtendedIsotopeModel object (needed by Factory) - static BaseModel * create() - { - return new ExtendedIsotopeModel(); - } - /** @brief set the offset of the model The whole model will be shifted to the new offset without being computing all over. diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.h index df03b111410..6701f5dbbe7 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussFitter1D.h @@ -35,12 +35,6 @@ namespace OpenMS /// assignment operator virtual GaussFitter1D & operator=(const GaussFitter1D & source); - /// create new GaussFitter1D object (function needed by Factory) - static Fitter1D * create() - { - return new GaussFitter1D(); - } - /// return interpolation model QualityType fit1d(const RawDataArrayType & range, std::unique_ptr& model) override; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussModel.h index 3348003deb8..41271dc7cef 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/GaussModel.h @@ -40,12 +40,6 @@ namespace OpenMS /// assignment operator virtual GaussModel & operator=(const GaussModel & source); - /// create new GaussModel object (needed by Factory) - static BaseModel * create() - { - return new GaussModel(); - } - /** @brief set the offset of the model The whole model will be shifted to the new offset without being computing all over. diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.h index d812dd323c9..9122bd5e8f3 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeFitter1D.h @@ -34,11 +34,6 @@ namespace OpenMS /// assignment operator virtual IsotopeFitter1D & operator=(const IsotopeFitter1D & source); - /// create new IsotopeFitter1D object (function needed by Factory) - static Fitter1D * create() - { - return new IsotopeFitter1D(); - } /// return interpolation model QualityType fit1d(const RawDataArrayType & range, std::unique_ptr& model) override; diff --git a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeModel.h b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeModel.h index 36ba96a6fab..b8543bffa1c 100644 --- a/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeModel.h +++ b/src/openms/include/OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeModel.h @@ -53,12 +53,6 @@ namespace OpenMS UInt getCharge() const; - /// create new IsotopeModel object (needed by Factory) - static BaseModel * create() - { - return new IsotopeModel(); - } - /** @brief set the offset of the model The whole model will be shifted to the new offset without being computing all over. diff --git a/src/openms/source/COMPARISON/CLUSTERING/AverageLinkage.cpp b/src/openms/source/COMPARISON/CLUSTERING/AverageLinkage.cpp index ab95a7aeb30..be5ade2e0d2 100644 --- a/src/openms/source/COMPARISON/CLUSTERING/AverageLinkage.cpp +++ b/src/openms/source/COMPARISON/CLUSTERING/AverageLinkage.cpp @@ -13,11 +13,6 @@ namespace OpenMS { - /// creates a new instance of a AverageLinkage object - ClusterFunctor * AverageLinkage::create() - { - return new AverageLinkage(); - } AverageLinkage::AverageLinkage() : ClusterFunctor(), ProgressLogger() diff --git a/src/openms/source/COMPARISON/CLUSTERING/CompleteLinkage.cpp b/src/openms/source/COMPARISON/CLUSTERING/CompleteLinkage.cpp index 12e60ead945..365fecbe628 100644 --- a/src/openms/source/COMPARISON/CLUSTERING/CompleteLinkage.cpp +++ b/src/openms/source/COMPARISON/CLUSTERING/CompleteLinkage.cpp @@ -13,10 +13,6 @@ namespace OpenMS { - ClusterFunctor * CompleteLinkage::create() - { - return new CompleteLinkage(); - } CompleteLinkage::CompleteLinkage() : ClusterFunctor(), ProgressLogger() diff --git a/src/openms/source/COMPARISON/CLUSTERING/SingleLinkage.cpp b/src/openms/source/COMPARISON/CLUSTERING/SingleLinkage.cpp index df221888f15..167d25af31a 100644 --- a/src/openms/source/COMPARISON/CLUSTERING/SingleLinkage.cpp +++ b/src/openms/source/COMPARISON/CLUSTERING/SingleLinkage.cpp @@ -12,10 +12,6 @@ namespace OpenMS { - ClusterFunctor * SingleLinkage::create() - { - return new SingleLinkage(); - } SingleLinkage::SingleLinkage() : ClusterFunctor(), ProgressLogger() diff --git a/src/openms/source/CONCEPT/ProgressLogger.cpp b/src/openms/source/CONCEPT/ProgressLogger.cpp index 73644356280..7335c78c344 100644 --- a/src/openms/source/CONCEPT/ProgressLogger.cpp +++ b/src/openms/source/CONCEPT/ProgressLogger.cpp @@ -119,7 +119,7 @@ namespace OpenMS // An external library (e.g., OpenMS_GUI) can set this function to provide a GUI logger. // As default, it just uses the NonProgressLoggerImpl. MakeGUIProgressLoggerFunc make_gui_progress_logger = - []() -> ProgressLogger::ProgressLoggerImpl* { return NoProgressLoggerImpl::create(); }; + []() -> ProgressLogger::ProgressLoggerImpl* { return new NoProgressLoggerImpl(); }; int ProgressLogger::recursion_depth_ = 0; @@ -127,7 +127,7 @@ namespace OpenMS type_(NONE), last_invoke_() { - current_logger_ = NoProgressLoggerImpl::create(); + current_logger_ = new NoProgressLoggerImpl(); } ProgressLogger::ProgressLogger(const ProgressLogger& other) : @@ -138,12 +138,12 @@ namespace OpenMS { case NONE: { - current_logger_ = NoProgressLoggerImpl::create(); + current_logger_ = new NoProgressLoggerImpl(); break; } case CMD: { - current_logger_ = CMDProgressLoggerImpl::create(); + current_logger_ = new CMDProgressLoggerImpl(); break; } case GUI: @@ -171,12 +171,12 @@ namespace OpenMS { case NONE: { - current_logger_ = NoProgressLoggerImpl::create(); + current_logger_ = new NoProgressLoggerImpl(); break; } case CMD: { - current_logger_ = CMDProgressLoggerImpl::create(); + current_logger_ = new CMDProgressLoggerImpl(); break; } case GUI: @@ -203,12 +203,12 @@ namespace OpenMS { case NONE: { - current_logger_ = NoProgressLoggerImpl::create(); + current_logger_ = new NoProgressLoggerImpl(); break; } case CMD: { - current_logger_ = CMDProgressLoggerImpl::create(); + current_logger_ = new CMDProgressLoggerImpl(); break; } case GUI: diff --git a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinder.cpp b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinder.cpp index 5b081ec4b6d..b67e3105bad 100644 --- a/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinder.cpp +++ b/src/openms/source/TRANSFORMATIONS/FEATUREFINDER/FeatureFinder.cpp @@ -34,97 +34,4 @@ namespace OpenMS return Param(); } -/* most of that stuff doesn't belong in a base class!!! and 100% no type checks via strings!!! - void FeatureFinder::run(const String& algorithm_name, PeakMap& input_map, FeatureMap& features, const Param& param, const FeatureMap& seeds) - { - // Nothing to do if there is no data - if ((algorithm_name != "mrm" && input_map.empty()) || (algorithm_name == "mrm" && input_map.getChromatograms().empty())) - { - features.clear(true); - return; - } - - // check input - { - // We need updated ranges => check number of peaks - if (algorithm_name != "mrm" && input_map.getSize() == 0) - { - throw Exception::IllegalArgument(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "FeatureFinder needs updated ranges on input map. Aborting."); - } - - // We need MS1 data only => check levels - if (algorithm_name != "mrm" && (input_map.getMSLevels().size() != 1 || input_map.getMSLevels()[0] != 1)) - { - throw Exception::IllegalArgument(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "FeatureFinder can only operate on MS level 1 data. Please do not use MS/MS data. Aborting."); - } - - //Check if the peaks are sorted according to m/z - if (!input_map.isSorted(true)) - { - OPENMS_LOG_WARN << "Input map is not sorted by RT and m/z! This is done now, before applying the algorithm!" << std::endl; - input_map.sortSpectra(true); - input_map.sortChromatograms(true); - } - for (Size s = 0; s < input_map.size(); ++s) - { - if (input_map[s].empty()) - { - continue; - } - if (input_map[s][0].getMZ() < 0) - { - throw Exception::IllegalArgument(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "FeatureFinder can only operate on spectra that contain peaks with positive m/z values. Filter the data accordingly beforehand! Aborting."); - } - } - } - - // initialize - if (algorithm_name != "mrm" && algorithm_name != "centroided") - { - // Resize peak flag vector - flags_.resize(input_map.size()); - for (Size i = 0; i < input_map.size(); ++i) - { - flags_[i].assign(input_map[i].size(), UNUSED); - } - } - - // SERIOUSLY??? why having a base class/interface in the first place if everywhere I see this kind of code? - - // do the work - if (algorithm_name != "none") - { - FeatureFinderAlgorithm* algorithm = Factory::create(algorithm_name); - algorithm->setParameters(param); - algorithm->setData(input_map, features); - algorithm->setSeeds(seeds); - algorithm->run(); - delete(algorithm); - } - - // *facepalm* - if (algorithm_name != "mrm") // mrm works on chromatograms; the next section is only for conventional data - { - //report RT apex spectrum index and native ID for each feature - for (Size i = 0; i < features.size(); ++i) - { - //index - Size spectrum_index = input_map.RTBegin(features[i].getRT()) - input_map.begin(); - features[i].setMetaValue("spectrum_index", spectrum_index); - //native id - if (spectrum_index < input_map.size()) - { - String native_id = input_map[spectrum_index].getNativeID(); - features[i].setMetaValue("spectrum_native_id", native_id); - } - else - { - /// @todo that happens sometimes using IsotopeWaveletFeatureFinder (Rene, Marc, Andreas, Clemens) - std::cerr << "FeatureFinderAlgorithm_impl, line=" << __LINE__ << "; FixMe this cannot be, but happens" << std::endl; - } - } - } - } -*/ - } diff --git a/src/openms_gui/include/OpenMS/VISUAL/GUIProgressLoggerImpl.h b/src/openms_gui/include/OpenMS/VISUAL/GUIProgressLoggerImpl.h index 26d0f827438..d31a258bf4b 100644 --- a/src/openms_gui/include/OpenMS/VISUAL/GUIProgressLoggerImpl.h +++ b/src/openms_gui/include/OpenMS/VISUAL/GUIProgressLoggerImpl.h @@ -23,9 +23,6 @@ namespace OpenMS public ProgressLogger::ProgressLoggerImpl { public: - /// create new object (needed by Factory) - static ProgressLogger::ProgressLoggerImpl* create(); - /// default c'tor. GUIProgressLoggerImpl(); diff --git a/src/openms_gui/source/VISUAL/GUIProgressLoggerImpl.cpp b/src/openms_gui/source/VISUAL/GUIProgressLoggerImpl.cpp index ec51cb6446c..0f36bd8a1f2 100644 --- a/src/openms_gui/source/VISUAL/GUIProgressLoggerImpl.cpp +++ b/src/openms_gui/source/VISUAL/GUIProgressLoggerImpl.cpp @@ -16,12 +16,6 @@ namespace OpenMS { - /// create new object (needed by Factory) - ProgressLogger::ProgressLoggerImpl* GUIProgressLoggerImpl::create() - { - return new GUIProgressLoggerImpl(); - } - GUIProgressLoggerImpl::GUIProgressLoggerImpl() : dlg_(nullptr), begin_(0), diff --git a/src/tests/class_tests/openms/source/AverageLinkage_test.cpp b/src/tests/class_tests/openms/source/AverageLinkage_test.cpp index 11aff9aebc5..ae1dc032aac 100644 --- a/src/tests/class_tests/openms/source/AverageLinkage_test.cpp +++ b/src/tests/class_tests/openms/source/AverageLinkage_test.cpp @@ -118,14 +118,6 @@ START_SECTION((void operator()(DistanceMatrix< float > &original_distance, std:: } END_SECTION -START_SECTION((static ClusterFunctor* create())) -{ - ClusterFunctor* cf = AverageLinkage::create(); - TEST_NOT_EQUAL( dynamic_cast(cf) , nullPointer) - delete cf; -} -END_SECTION - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// END_TEST diff --git a/src/tests/class_tests/openms/source/BiGaussFitter1D_test.cpp b/src/tests/class_tests/openms/source/BiGaussFitter1D_test.cpp index b20a7419746..dc164b3596b 100644 --- a/src/tests/class_tests/openms/source/BiGaussFitter1D_test.cpp +++ b/src/tests/class_tests/openms/source/BiGaussFitter1D_test.cpp @@ -91,15 +91,6 @@ START_SECTION((QualityType fit1d(const RawDataArrayType &range, InterpolationMo TEST_EQUAL(1,1) END_SECTION -START_SECTION((Fitter1D* create())) -{ - Fitter1D* ptr = BiGaussFitter1D::create(); - TEST_EQUAL(ptr->getName(), "BiGaussFitter1D") - TEST_NOT_EQUAL(ptr, nullPointer) - delete ptr; -} -END_SECTION - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// END_TEST diff --git a/src/tests/class_tests/openms/source/BinnedSharedPeakCount_test.cpp b/src/tests/class_tests/openms/source/BinnedSharedPeakCount_test.cpp index 7b22e9c773b..b7ad48602d2 100644 --- a/src/tests/class_tests/openms/source/BinnedSharedPeakCount_test.cpp +++ b/src/tests/class_tests/openms/source/BinnedSharedPeakCount_test.cpp @@ -84,16 +84,6 @@ START_SECTION((double operator()(const BinnedSpectrum &spec) const )) } END_SECTION -START_SECTION((static BinnedSpectrumCompareFunctor* create())) -{ - BinnedSpectrumCompareFunctor* bsf = BinnedSharedPeakCount::create(); - BinnedSharedPeakCount bsp; - TEST_EQUAL(bsf->getParameters(), bsp.getParameters()) - TEST_EQUAL(bsf->getName(), bsp.getName()) - delete bsf; -} -END_SECTION - delete ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/BinnedSpectralContrastAngle_test.cpp b/src/tests/class_tests/openms/source/BinnedSpectralContrastAngle_test.cpp index db662e4831b..3ff47d47747 100644 --- a/src/tests/class_tests/openms/source/BinnedSpectralContrastAngle_test.cpp +++ b/src/tests/class_tests/openms/source/BinnedSpectralContrastAngle_test.cpp @@ -80,16 +80,6 @@ START_SECTION((double operator()(const BinnedSpectrum &spec) const )) } END_SECTION -START_SECTION((static BinnedSpectrumCompareFunctor* create())) -{ - BinnedSpectrumCompareFunctor* bsf = BinnedSpectralContrastAngle::create(); - BinnedSpectralContrastAngle bsp; - TEST_EQUAL(bsf->getParameters(), bsp.getParameters()) - TEST_EQUAL(bsf->getName(), bsp.getName()) - delete bsf; -} -END_SECTION - delete ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/BinnedSumAgreeingIntensities_test.cpp b/src/tests/class_tests/openms/source/BinnedSumAgreeingIntensities_test.cpp index 45122adbeb7..3e68174581d 100644 --- a/src/tests/class_tests/openms/source/BinnedSumAgreeingIntensities_test.cpp +++ b/src/tests/class_tests/openms/source/BinnedSumAgreeingIntensities_test.cpp @@ -84,16 +84,6 @@ START_SECTION((double operator()(const BinnedSpectrum &spec) const )) } END_SECTION -START_SECTION((static BinnedSpectrumCompareFunctor* create())) -{ - BinnedSpectrumCompareFunctor* bsf = BinnedSumAgreeingIntensities::create(); - BinnedSumAgreeingIntensities bsp; - TEST_EQUAL(bsf->getParameters(), bsp.getParameters()) - TEST_EQUAL(bsf->getName(), bsp.getName()) - delete bsf; -} -END_SECTION - delete ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/ComplementFilter_test.cpp b/src/tests/class_tests/openms/source/ComplementFilter_test.cpp index 41d4d86f2ed..6c945da0de4 100644 --- a/src/tests/class_tests/openms/source/ComplementFilter_test.cpp +++ b/src/tests/class_tests/openms/source/ComplementFilter_test.cpp @@ -70,14 +70,6 @@ START_SECTION((template double apply(SpectrumType& spectr END_SECTION -START_SECTION((static FilterFunctor* create())) - FilterFunctor* ff = ComplementFilter::create(); - ComplementFilter cf; - TEST_EQUAL(ff->getParameters(), cf.getParameters()) - TEST_EQUAL(ff->getName(), cf.getName()) - delete ff; -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/ComplementMarker_test.cpp b/src/tests/class_tests/openms/source/ComplementMarker_test.cpp index 2abe397ec65..9a8242f02b5 100644 --- a/src/tests/class_tests/openms/source/ComplementMarker_test.cpp +++ b/src/tests/class_tests/openms/source/ComplementMarker_test.cpp @@ -76,14 +76,6 @@ START_SECTION((template void apply(std::map END_SECTION -START_SECTION((static PeakMarker* create())) - PeakMarker* pm = ComplementMarker::create(); - ComplementMarker cm; - TEST_EQUAL(pm->getParameters(), cm.getParameters()) - TEST_EQUAL(pm->getName(), cm.getName()) - delete pm; -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/CompleteLinkage_test.cpp b/src/tests/class_tests/openms/source/CompleteLinkage_test.cpp index 001b3b79ae3..91c0faf2a25 100644 --- a/src/tests/class_tests/openms/source/CompleteLinkage_test.cpp +++ b/src/tests/class_tests/openms/source/CompleteLinkage_test.cpp @@ -119,14 +119,6 @@ START_SECTION((void operator()(DistanceMatrix< float > &original_distance, std:: } END_SECTION -START_SECTION((static ClusterFunctor* create())) -{ - ClusterFunctor* cf = CompleteLinkage::create(); - TEST_NOT_EQUAL( dynamic_cast(cf) , nullPointer) - delete cf; -} -END_SECTION - delete ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/EmgFitter1D_test.cpp b/src/tests/class_tests/openms/source/EmgFitter1D_test.cpp index 0bc7367f941..4b6abcfa7c6 100644 --- a/src/tests/class_tests/openms/source/EmgFitter1D_test.cpp +++ b/src/tests/class_tests/openms/source/EmgFitter1D_test.cpp @@ -138,15 +138,6 @@ START_SECTION((QualityType fit1d(const RawDataArrayType &range, InterpolationMo END_SECTION -START_SECTION((Fitter1D* create())) -{ - Fitter1D* ptr = EmgFitter1D::create(); - TEST_EQUAL(ptr->getName(), "EmgFitter1D") - TEST_NOT_EQUAL(ptr, nullPointer) - delete ptr; -} -END_SECTION - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// END_TEST diff --git a/src/tests/class_tests/openms/source/EmgModel_test.cpp b/src/tests/class_tests/openms/source/EmgModel_test.cpp index 59dfa56b426..e8cfce7ac11 100644 --- a/src/tests/class_tests/openms/source/EmgModel_test.cpp +++ b/src/tests/class_tests/openms/source/EmgModel_test.cpp @@ -41,13 +41,6 @@ START_SECTION((virtual ~EmgModel())) delete ptr; END_SECTION -START_SECTION((static BaseModel* create())) - BaseModel* ptr = EmgModel::create(); - TEST_EQUAL(ptr->getName(), "EmgModel") - TEST_NOT_EQUAL(ptr, nullPointer) - delete ptr; -END_SECTION - // assignment operator START_SECTION((virtual EmgModel& operator=(const EmgModel &source))) EmgModel em1; diff --git a/src/tests/class_tests/openms/source/ExtendedIsotopeFitter1D_test.cpp b/src/tests/class_tests/openms/source/ExtendedIsotopeFitter1D_test.cpp index a5c0a284e5f..95738ed75ee 100644 --- a/src/tests/class_tests/openms/source/ExtendedIsotopeFitter1D_test.cpp +++ b/src/tests/class_tests/openms/source/ExtendedIsotopeFitter1D_test.cpp @@ -86,13 +86,6 @@ START_SECTION((QualityType fit1d(const RawDataArrayType &range, InterpolationMo TEST_EQUAL(1,1) END_SECTION -START_SECTION((Fitter1D* create())) - Fitter1D* ptr = ExtendedIsotopeFitter1D::create(); - TEST_EQUAL(ptr->getName(), "ExtendedIsotopeFitter1D") - TEST_NOT_EQUAL(ptr, nullPointer) - delete ptr; -END_SECTION - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// END_TEST diff --git a/src/tests/class_tests/openms/source/ExtendedIsotopeModel_test.cpp b/src/tests/class_tests/openms/source/ExtendedIsotopeModel_test.cpp index 1b7f27d1fca..d15856d41b5 100644 --- a/src/tests/class_tests/openms/source/ExtendedIsotopeModel_test.cpp +++ b/src/tests/class_tests/openms/source/ExtendedIsotopeModel_test.cpp @@ -40,13 +40,6 @@ START_SECTION((virtual ~ExtendedIsotopeModel())) delete ptr; END_SECTION -START_SECTION(static BaseModel* create()) - BaseModel* ptr = ExtendedIsotopeModel::create(); - TEST_EQUAL(ptr->getName(), "ExtendedIsotopeModel") - TEST_NOT_EQUAL(ptr, nullPointer) - delete ptr; -END_SECTION - // assignment operator START_SECTION((virtual ExtendedIsotopeModel& operator=(const ExtendedIsotopeModel &source))) ExtendedIsotopeModel im1; diff --git a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmKD_test.cpp b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmKD_test.cpp index 00759133343..f43c670e36c 100644 --- a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmKD_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmKD_test.cpp @@ -30,14 +30,6 @@ START_SECTION((virtual ~FeatureGroupingAlgorithmKD())) delete ptr; END_SECTION -START_SECTION((static FeatureGroupingAlgorithm* create())) - FeatureGroupingAlgorithm* ptr2 = nullptr; - FeatureGroupingAlgorithm* base_NullPointer = nullptr; - ptr2 = FeatureGroupingAlgorithmKD::create(); - TEST_NOT_EQUAL(ptr2, base_NullPointer) - delete ptr2; -END_SECTION - START_SECTION((virtual void group(const std::vector& maps, ConsensusMap& out))) // This is tested in the tool NOT_TESTABLE; diff --git a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmLabeled_test.cpp b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmLabeled_test.cpp index 9cd3c2aaa29..1538f7599e5 100644 --- a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmLabeled_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmLabeled_test.cpp @@ -34,14 +34,6 @@ START_SECTION((virtual ~FeatureGroupingAlgorithmLabeled())) delete ptr; END_SECTION -START_SECTION((static FeatureGroupingAlgorithm* create())) - FeatureGroupingAlgorithm* ptr2 = nullptr; - FeatureGroupingAlgorithm* base_NullPointer = nullptr; - ptr2 = FeatureGroupingAlgorithmLabeled::create(); - TEST_NOT_EQUAL(ptr2, base_NullPointer) - delete ptr2; -END_SECTION - START_SECTION((virtual void group(const std::vector< FeatureMap > &maps, ConsensusMap &out))) TOLERANCE_ABSOLUTE(0.001) diff --git a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmQT_test.cpp b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmQT_test.cpp index 775265ca944..76bae7763ff 100644 --- a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmQT_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmQT_test.cpp @@ -34,14 +34,6 @@ START_SECTION((virtual ~FeatureGroupingAlgorithmQT())) delete ptr; END_SECTION -START_SECTION((static FeatureGroupingAlgorithm* create())) - FeatureGroupingAlgorithm* ptr2 = nullptr; - FeatureGroupingAlgorithm* base_NullPointer = nullptr; - ptr2 = FeatureGroupingAlgorithmQT::create(); - TEST_NOT_EQUAL(ptr2, base_NullPointer) - delete ptr2; -END_SECTION - START_SECTION((virtual void group(const std::vector< FeatureMap >& maps, ConsensusMap& out))) // This is tested extensively in TEST/TOPP NOT_TESTABLE; diff --git a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmUnlabeled_test.cpp b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmUnlabeled_test.cpp index 183cc4fb3b3..e259cafa9df 100644 --- a/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmUnlabeled_test.cpp +++ b/src/tests/class_tests/openms/source/FeatureGroupingAlgorithmUnlabeled_test.cpp @@ -34,14 +34,6 @@ START_SECTION((virtual ~FeatureGroupingAlgorithmUnlabeled())) delete ptr; END_SECTION -START_SECTION((static FeatureGroupingAlgorithm* create())) - FeatureGroupingAlgorithm* ptr2 = nullptr; - FeatureGroupingAlgorithm* base_NullPointer = nullptr; - ptr2 = FeatureGroupingAlgorithmUnlabeled::create(); - TEST_NOT_EQUAL(ptr2, base_NullPointer) - delete ptr2; -END_SECTION - START_SECTION((virtual void group(const std::vector< FeatureMap > &maps, ConsensusMap &out))) // This is tested extensively in TEST/TOPP NOT_TESTABLE; diff --git a/src/tests/class_tests/openms/source/GaussFitter1D_test.cpp b/src/tests/class_tests/openms/source/GaussFitter1D_test.cpp index 5aafbfc2ce9..5d66bdb8086 100644 --- a/src/tests/class_tests/openms/source/GaussFitter1D_test.cpp +++ b/src/tests/class_tests/openms/source/GaussFitter1D_test.cpp @@ -79,16 +79,6 @@ START_SECTION((QualityType fit1d(const RawDataArrayType &range, InterpolationMo TEST_EQUAL(1,1) END_SECTION -START_SECTION((Fitter1D* create())) -{ - Fitter1D* ptr = GaussFitter1D::create(); - TEST_EQUAL(ptr->getName(), "GaussFitter1D") - TEST_NOT_EQUAL(ptr, nullPointer) - delete ptr; -} -END_SECTION - - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// END_TEST diff --git a/src/tests/class_tests/openms/source/GaussModel_test.cpp b/src/tests/class_tests/openms/source/GaussModel_test.cpp index c99bddaf3cd..53a61d8f111 100644 --- a/src/tests/class_tests/openms/source/GaussModel_test.cpp +++ b/src/tests/class_tests/openms/source/GaussModel_test.cpp @@ -38,13 +38,6 @@ START_SECTION((virtual ~GaussModel())) delete ptr; END_SECTION -START_SECTION(static BaseModel* create()) - BaseModel* ptr = GaussModel::create(); - TEST_EQUAL(ptr->getName(), "GaussModel") - TEST_NOT_EQUAL(ptr, nullPointer) - delete ptr; -END_SECTION - // assignment operator START_SECTION((virtual GaussModel& operator=(const GaussModel &source))) GaussModel gm1; diff --git a/src/tests/class_tests/openms/source/GoodDiffFilter_test.cpp b/src/tests/class_tests/openms/source/GoodDiffFilter_test.cpp index 40bea0f86f4..ad0ccdfed08 100644 --- a/src/tests/class_tests/openms/source/GoodDiffFilter_test.cpp +++ b/src/tests/class_tests/openms/source/GoodDiffFilter_test.cpp @@ -72,14 +72,6 @@ START_SECTION((template double apply(SpectrumType& spectr TEST_REAL_SIMILAR(filter, 0.811684) END_SECTION -START_SECTION((static FilterFunctor* create())) - FilterFunctor* ff = GoodDiffFilter::create(); - GoodDiffFilter good; - TEST_EQUAL(ff->getParameters(), good.getParameters()) - TEST_EQUAL(ff->getName(), good.getName()) - delete ff; -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/IntensityBalanceFilter_test.cpp b/src/tests/class_tests/openms/source/IntensityBalanceFilter_test.cpp index 29d6a475fd3..ff006b8a079 100644 --- a/src/tests/class_tests/openms/source/IntensityBalanceFilter_test.cpp +++ b/src/tests/class_tests/openms/source/IntensityBalanceFilter_test.cpp @@ -64,14 +64,6 @@ START_SECTION((template double apply(SpectrumType& spectr END_SECTION -START_SECTION((static FilterFunctor* create())) - FilterFunctor* ff = IntensityBalanceFilter::create(); - IntensityBalanceFilter filter; - TEST_EQUAL(ff->getParameters(), filter.getParameters()) - TEST_EQUAL(ff->getName(), filter.getName()) - delete ff; -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/IsotopeDiffFilter_test.cpp b/src/tests/class_tests/openms/source/IsotopeDiffFilter_test.cpp index 46418ca180a..9640c3b105b 100644 --- a/src/tests/class_tests/openms/source/IsotopeDiffFilter_test.cpp +++ b/src/tests/class_tests/openms/source/IsotopeDiffFilter_test.cpp @@ -69,14 +69,6 @@ START_SECTION((template double apply(SpectrumType& spectr TEST_REAL_SIMILAR(filter, 2162) END_SECTION -START_SECTION((static FilterFunctor* create())) - FilterFunctor* ff = IsotopeDiffFilter::create(); - IsotopeDiffFilter filter; - TEST_EQUAL(ff->getParameters(), filter.getParameters()) - TEST_EQUAL(ff->getName(), filter.getName()) - delete ff; -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/IsotopeFitter1D_test.cpp b/src/tests/class_tests/openms/source/IsotopeFitter1D_test.cpp index c6c88f81382..b728cf35f1a 100644 --- a/src/tests/class_tests/openms/source/IsotopeFitter1D_test.cpp +++ b/src/tests/class_tests/openms/source/IsotopeFitter1D_test.cpp @@ -87,13 +87,6 @@ START_SECTION((QualityType fit1d(const RawDataArrayType &range, InterpolationMo TEST_EQUAL(if1.getParameters(), if1.getParameters()) END_SECTION -START_SECTION((Fitter1D* create())) - Fitter1D* ptr = IsotopeFitter1D::create(); - TEST_EQUAL(ptr->getName(), "IsotopeFitter1D") - TEST_NOT_EQUAL(ptr, nullPointer) - delete ptr; -END_SECTION - ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// END_TEST diff --git a/src/tests/class_tests/openms/source/IsotopeMarker_test.cpp b/src/tests/class_tests/openms/source/IsotopeMarker_test.cpp index 5f947225099..67c144dfe69 100644 --- a/src/tests/class_tests/openms/source/IsotopeMarker_test.cpp +++ b/src/tests/class_tests/openms/source/IsotopeMarker_test.cpp @@ -74,14 +74,6 @@ START_SECTION((template void apply(std::map TEST_EQUAL(marked.size(), 17) END_SECTION -START_SECTION((static PeakMarker* create())) - PeakMarker* pm = IsotopeMarker::create(); - IsotopeMarker im; - TEST_EQUAL(pm->getParameters(), im.getParameters()) - TEST_EQUAL(pm->getName(), im.getName()) - delete pm; -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/IsotopeModel_test.cpp b/src/tests/class_tests/openms/source/IsotopeModel_test.cpp index 138dedc02ea..fdcae422b59 100644 --- a/src/tests/class_tests/openms/source/IsotopeModel_test.cpp +++ b/src/tests/class_tests/openms/source/IsotopeModel_test.cpp @@ -42,13 +42,6 @@ START_SECTION((virtual ~IsotopeModel())) delete ptr; END_SECTION -START_SECTION(static BaseModel* create()) - BaseModel* ptr = IsotopeModel::create(); - TEST_EQUAL(ptr->getName(), "IsotopeModel") - TEST_NOT_EQUAL(ptr, nullPointer) - delete ptr; -END_SECTION - // assignment operator START_SECTION((virtual IsotopeModel& operator=(const IsotopeModel &source))) IsotopeModel im1; diff --git a/src/tests/class_tests/openms/source/LabeledPairFinder_test.cpp b/src/tests/class_tests/openms/source/LabeledPairFinder_test.cpp index 239e4bb61f4..58555894d6c 100644 --- a/src/tests/class_tests/openms/source/LabeledPairFinder_test.cpp +++ b/src/tests/class_tests/openms/source/LabeledPairFinder_test.cpp @@ -37,14 +37,6 @@ START_SECTION((virtual ~LabeledPairFinder())) delete ptr; END_SECTION -START_SECTION((static BaseGroupFinder* create())) - BaseGroupFinder* base_ptr = nullptr; - BaseGroupFinder* base_nullPointer = nullptr; - base_ptr = LabeledPairFinder::create(); - TEST_NOT_EQUAL(base_ptr, base_nullPointer) - delete base_ptr; -END_SECTION - FeatureMap features; features.resize(10); //start diff --git a/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithmPrecision_test.cpp b/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithmPrecision_test.cpp index f90dc645687..7ff988d6a2b 100644 --- a/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithmPrecision_test.cpp +++ b/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithmPrecision_test.cpp @@ -37,14 +37,6 @@ START_SECTION((virtual ~MapAlignmentEvaluationAlgorithmPrecision())) delete ptr; END_SECTION -MapAlignmentEvaluationAlgorithm* base_nullPointer = nullptr; -START_SECTION((static MapAlignmentEvaluationAlgorithm* create())) - MapAlignmentEvaluationAlgorithm* ptr2 = nullptr; - ptr2 = MapAlignmentEvaluationAlgorithmPrecision::create(); - TEST_NOT_EQUAL(ptr2, base_nullPointer) - delete ptr2; -END_SECTION - START_SECTION((virtual void evaluate(const ConsensusMap &consensus_map_in, const ConsensusMap &consensus_map_gt, const double &rt_dev, const double &mz_dev, const Peak2D::IntensityType &int_dev, const bool use_charge, double &out))) MapAlignmentEvaluationAlgorithmPrecision maea; ConsensusMap in; diff --git a/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithmRecall_test.cpp b/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithmRecall_test.cpp index 37174fb0333..b572c09432c 100644 --- a/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithmRecall_test.cpp +++ b/src/tests/class_tests/openms/source/MapAlignmentEvaluationAlgorithmRecall_test.cpp @@ -37,14 +37,6 @@ START_SECTION((virtual ~MapAlignmentEvaluationAlgorithmRecall())) delete ptr; END_SECTION -MapAlignmentEvaluationAlgorithm* base_nullPointer = nullptr; -START_SECTION((static MapAlignmentEvaluationAlgorithm* create())) - MapAlignmentEvaluationAlgorithm* ptr2 = nullptr; - ptr2 = MapAlignmentEvaluationAlgorithmRecall::create(); - TEST_NOT_EQUAL(ptr2, base_nullPointer) - delete ptr2; -END_SECTION - START_SECTION((virtual void evaluate(const ConsensusMap &consensus_map_in, const ConsensusMap &consensus_map_gt, const double &rt_dev, const double &mz_dev, const Peak2D::IntensityType &int_dev, const bool use_charge, double &out))) MapAlignmentEvaluationAlgorithmRecall maea; ConsensusMap in; diff --git a/src/tests/class_tests/openms/source/NeutralLossDiffFilter_test.cpp b/src/tests/class_tests/openms/source/NeutralLossDiffFilter_test.cpp index 5ecd34a035e..0c9d27d92ca 100644 --- a/src/tests/class_tests/openms/source/NeutralLossDiffFilter_test.cpp +++ b/src/tests/class_tests/openms/source/NeutralLossDiffFilter_test.cpp @@ -69,14 +69,6 @@ START_SECTION((template double apply(SpectrumType& spectr TEST_REAL_SIMILAR(filter, 2482.5) END_SECTION -START_SECTION((static FilterFunctor* create())) - FilterFunctor* ff = NeutralLossDiffFilter::create(); - NeutralLossDiffFilter filter; - TEST_EQUAL(ff->getParameters(), filter.getParameters()) - TEST_EQUAL(ff->getName(), filter.getName()) - delete ff; -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/NeutralLossMarker_test.cpp b/src/tests/class_tests/openms/source/NeutralLossMarker_test.cpp index 3b6e4e981c8..1c7ff3f324e 100644 --- a/src/tests/class_tests/openms/source/NeutralLossMarker_test.cpp +++ b/src/tests/class_tests/openms/source/NeutralLossMarker_test.cpp @@ -76,14 +76,6 @@ START_SECTION((template void apply(std::map TEST_EQUAL(marked.size(), 49) END_SECTION -START_SECTION((static PeakMarker* create())) - PeakMarker* pm = NeutralLossMarker::create(); - NeutralLossMarker marker; - TEST_EQUAL(pm->getParameters(), marker.getParameters()) - TEST_EQUAL(pm->getName(), marker.getName()) - delete pm; -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/PeakAlignment_test.cpp b/src/tests/class_tests/openms/source/PeakAlignment_test.cpp index 87baaebcb55..b1b34bb0296 100644 --- a/src/tests/class_tests/openms/source/PeakAlignment_test.cpp +++ b/src/tests/class_tests/openms/source/PeakAlignment_test.cpp @@ -107,16 +107,6 @@ START_SECTION((vector< pair > getAlignmentTraceback(const PeakSpectru } END_SECTION -START_SECTION((static PeakSpectrumCompareFunctor* create())) -{ - PeakSpectrumCompareFunctor* psf = PeakAlignment::create(); - PeakAlignment pa; - TEST_EQUAL(psf->getParameters(), pa.getParameters()) - TEST_EQUAL(psf->getName(), pa.getName()) - delete psf; -} -END_SECTION - delete ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/PoseClusteringAffineSuperimposer_test.cpp b/src/tests/class_tests/openms/source/PoseClusteringAffineSuperimposer_test.cpp index 64a48e27076..2a528cc6d01 100644 --- a/src/tests/class_tests/openms/source/PoseClusteringAffineSuperimposer_test.cpp +++ b/src/tests/class_tests/openms/source/PoseClusteringAffineSuperimposer_test.cpp @@ -43,15 +43,6 @@ START_SECTION((virtual ~PoseClusteringAffineSuperimposer())) } END_SECTION -START_SECTION((static BaseSuperimposer* create())) -{ - BaseSuperimposer* base_ptr = nullptr; - base_ptr = PoseClusteringAffineSuperimposer::create(); - TEST_NOT_EQUAL(base_ptr, base_nullPointer) - delete base_ptr; -} -END_SECTION - START_SECTION((virtual void run(const ConsensusMap& map_model, const ConsensusMap& map_scene, TransformationDescription& transformation))) { std::vector input(2); diff --git a/src/tests/class_tests/openms/source/PoseClusteringShiftSuperimposer_test.cpp b/src/tests/class_tests/openms/source/PoseClusteringShiftSuperimposer_test.cpp index 9a0bc59a549..cf5dad9d96f 100644 --- a/src/tests/class_tests/openms/source/PoseClusteringShiftSuperimposer_test.cpp +++ b/src/tests/class_tests/openms/source/PoseClusteringShiftSuperimposer_test.cpp @@ -39,13 +39,6 @@ START_SECTION((virtual ~PoseClusteringShiftSuperimposer())) delete ptr; END_SECTION -START_SECTION((static BaseSuperimposer* create())) - BaseSuperimposer* base_ptr = nullptr; - base_ptr = PoseClusteringShiftSuperimposer::create(); - TEST_NOT_EQUAL(base_ptr, base_nullPointer) - delete (base_ptr); -END_SECTION - START_SECTION((virtual void run(const ConsensusMap& map_model, const ConsensusMap& map_scene, TransformationDescription& transformation))) std::vector input(2); diff --git a/src/tests/class_tests/openms/source/QTClusterFinder_test.cpp b/src/tests/class_tests/openms/source/QTClusterFinder_test.cpp index a15fd2b5376..9e94d557824 100644 --- a/src/tests/class_tests/openms/source/QTClusterFinder_test.cpp +++ b/src/tests/class_tests/openms/source/QTClusterFinder_test.cpp @@ -43,15 +43,6 @@ START_SECTION((virtual ~QTClusterFinder())) delete ptr; END_SECTION -START_SECTION((static BaseGroupFinder* create())) -{ - BaseGroupFinder* base_ptr = nullptr; - base_ptr = QTClusterFinder::create(); - TEST_NOT_EQUAL(base_ptr, base_nullPointer); - delete base_ptr; -} -END_SECTION - START_SECTION((void run(const std::vector& input_maps, ConsensusMap& result_map))) { vector input(2); diff --git a/src/tests/class_tests/openms/source/SimplePairFinder_test.cpp b/src/tests/class_tests/openms/source/SimplePairFinder_test.cpp index cf3be7698bd..7af2be6070d 100644 --- a/src/tests/class_tests/openms/source/SimplePairFinder_test.cpp +++ b/src/tests/class_tests/openms/source/SimplePairFinder_test.cpp @@ -41,12 +41,6 @@ START_SECTION((virtual ~SimplePairFinder())) delete ptr; END_SECTION -START_SECTION((static BaseGroupFinder* create())) - BaseGroupFinder* base_ptr = SimplePairFinder::create(); - TEST_NOT_EQUAL(base_ptr, base_nullPointer) - delete base_ptr; -END_SECTION - START_SECTION((virtual void run(const std::vector< ConsensusMap > &input_maps, ConsensusMap &result_map))) FeatureMap scene; Feature feat1; diff --git a/src/tests/class_tests/openms/source/SingleLinkage_test.cpp b/src/tests/class_tests/openms/source/SingleLinkage_test.cpp index 4dca94b8f1e..b02408a3504 100644 --- a/src/tests/class_tests/openms/source/SingleLinkage_test.cpp +++ b/src/tests/class_tests/openms/source/SingleLinkage_test.cpp @@ -113,14 +113,6 @@ START_SECTION((void operator()(DistanceMatrix< float > &original_distance, std:: } END_SECTION -START_SECTION((static ClusterFunctor* create())) -{ - ClusterFunctor* cf = SingleLinkage::create(); - TEST_NOT_EQUAL( dynamic_cast(cf) , nullPointer) - delete cf; -} -END_SECTION - delete ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/SpectraSTSimilarityScore_test.cpp b/src/tests/class_tests/openms/source/SpectraSTSimilarityScore_test.cpp index f1640172476..9cfaeef2cf2 100644 --- a/src/tests/class_tests/openms/source/SpectraSTSimilarityScore_test.cpp +++ b/src/tests/class_tests/openms/source/SpectraSTSimilarityScore_test.cpp @@ -202,16 +202,6 @@ START_SECTION(bool preprocess(PeakSpectrum &spec, float remove_peak_intensity_th TEST_EQUAL(s3.size(),8) END_SECTION - - -START_SECTION(static PeakSpectrumCompareFunctor* create()) - PeakSpectrumCompareFunctor* psf = SpectraSTSimilarityScore::create(); - SpectraSTSimilarityScore spectrast; - TEST_EQUAL(psf->getParameters(), spectrast.getParameters()) - TEST_EQUAL(psf->getName(), spectrast.getName()) - delete psf; -END_SECTION - START_SECTION(double delta_D(double top_hit, double runner_up)) SpectraSTSimilarityScore spectrast; TEST_EXCEPTION( Exception::DivisionByZero, spectrast.delta_D(0,5)) diff --git a/src/tests/class_tests/openms/source/SpectrumAlignmentScore_test.cpp b/src/tests/class_tests/openms/source/SpectrumAlignmentScore_test.cpp index 67472be9d07..002d2f54469 100644 --- a/src/tests/class_tests/openms/source/SpectrumAlignmentScore_test.cpp +++ b/src/tests/class_tests/openms/source/SpectrumAlignmentScore_test.cpp @@ -109,15 +109,6 @@ START_SECTION(double operator()(const PeakSpectrum &spec) const) END_SECTION - -START_SECTION(static PeakSpectrumCompareFunctor* create()) - PeakSpectrumCompareFunctor* pscf = SpectrumAlignmentScore::create(); - SpectrumAlignmentScore sas; - TEST_EQUAL(pscf->getParameters(), sas.getParameters()) - TEST_EQUAL(pscf->getName(), sas.getName()) - delete pscf; -END_SECTION - delete ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/SpectrumCheapDPCorr_test.cpp b/src/tests/class_tests/openms/source/SpectrumCheapDPCorr_test.cpp index 346dbf64a45..9e7eb9dbdab 100644 --- a/src/tests/class_tests/openms/source/SpectrumCheapDPCorr_test.cpp +++ b/src/tests/class_tests/openms/source/SpectrumCheapDPCorr_test.cpp @@ -97,14 +97,6 @@ START_SECTION(double operator () (const PeakSpectrum& a) const) END_SECTION -START_SECTION(static PeakSpectrumCompareFunctor* create()) - PeakSpectrumCompareFunctor* cf = SpectrumCheapDPCorr::create(); - SpectrumCheapDPCorr corr; - TEST_EQUAL(cf->getParameters(), corr.getParameters()) - TEST_EQUAL(cf->getName(), corr.getName()) - delete cf; -END_SECTION - START_SECTION(void setFactor(double f)) e_ptr->setFactor(0.3); diff --git a/src/tests/class_tests/openms/source/SpectrumPrecursorComparator_test.cpp b/src/tests/class_tests/openms/source/SpectrumPrecursorComparator_test.cpp index 2fb6a43031b..8dee0ccd816 100644 --- a/src/tests/class_tests/openms/source/SpectrumPrecursorComparator_test.cpp +++ b/src/tests/class_tests/openms/source/SpectrumPrecursorComparator_test.cpp @@ -79,14 +79,6 @@ START_SECTION(double operator () (const PeakSpectrum& a) const) END_SECTION -START_SECTION(static PeakSpectrumCompareFunctor* create()) - PeakSpectrumCompareFunctor* cf = SpectrumPrecursorComparator::create(); - SpectrumPrecursorComparator pre_comp; - TEST_EQUAL(cf->getName(), pre_comp.getName()) - TEST_EQUAL(cf->getParameters(), pre_comp.getParameters()) - delete cf; -END_SECTION - delete e_ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/StablePairFinder_test.cpp b/src/tests/class_tests/openms/source/StablePairFinder_test.cpp index cbad580fcd1..f8d67587b5f 100644 --- a/src/tests/class_tests/openms/source/StablePairFinder_test.cpp +++ b/src/tests/class_tests/openms/source/StablePairFinder_test.cpp @@ -38,11 +38,6 @@ START_SECTION((virtual ~StablePairFinder())) END_SECTION BaseGroupFinder* base_nullPointer = nullptr; -START_SECTION((static BaseGroupFinder* create())) - BaseGroupFinder* base_ptr = StablePairFinder::create(); - TEST_NOT_EQUAL(base_ptr, base_nullPointer) - delete base_ptr; -END_SECTION START_SECTION((void run(const std::vector& input_maps, ConsensusMap &result_map))) { diff --git a/src/tests/class_tests/openms/source/SteinScottImproveScore_test.cpp b/src/tests/class_tests/openms/source/SteinScottImproveScore_test.cpp index d2ca961167b..313e93f7625 100644 --- a/src/tests/class_tests/openms/source/SteinScottImproveScore_test.cpp +++ b/src/tests/class_tests/openms/source/SteinScottImproveScore_test.cpp @@ -95,15 +95,6 @@ START_SECTION(double operator () (const PeakSpectrum& spec1, const PeakSpectrum& TEST_REAL_SIMILAR(score, 1.0) END_SECTION -START_SECTION(static PeakSpectrumCompareFunctor* create()) - PeakSpectrumCompareFunctor* psf = SteinScottImproveScore::create(); - SteinScottImproveScore stein; - TEST_EQUAL(psf->getParameters(), stein.getParameters()) - TEST_EQUAL(psf->getName(), stein.getName()) - delete psf; -END_SECTION - - delete ptr; ///////////////////////////////////////////////////////////// diff --git a/src/tests/class_tests/openms/source/ZhangSimilarityScore_test.cpp b/src/tests/class_tests/openms/source/ZhangSimilarityScore_test.cpp index 91c06051e88..369692a96d9 100644 --- a/src/tests/class_tests/openms/source/ZhangSimilarityScore_test.cpp +++ b/src/tests/class_tests/openms/source/ZhangSimilarityScore_test.cpp @@ -93,14 +93,6 @@ START_SECTION(double operator () (const PeakSpectrum& spec1, const PeakSpectrum& TEST_REAL_SIMILAR(score, 0.328749) END_SECTION -START_SECTION(static PeakSpectrumCompareFunctor* create()) - PeakSpectrumCompareFunctor* psf = ZhangSimilarityScore::create(); - ZhangSimilarityScore zhang; - TEST_EQUAL(psf->getParameters(), zhang.getParameters()) - TEST_EQUAL(psf->getName(), zhang.getName()) - delete psf; -END_SECTION - delete ptr; ///////////////////////////////////////////////////////////// From 0c8415f955042c01dc53ca7c43c0f8c8ce5bef6e Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Wed, 6 Mar 2024 10:34:46 +0100 Subject: [PATCH 238/242] test mode now one dimensional --- .../class_tests/openms/source/BaseModel_test.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/tests/class_tests/openms/source/BaseModel_test.cpp b/src/tests/class_tests/openms/source/BaseModel_test.cpp index 535c5247f88..5a07955afd9 100644 --- a/src/tests/class_tests/openms/source/BaseModel_test.cpp +++ b/src/tests/class_tests/openms/source/BaseModel_test.cpp @@ -88,12 +88,12 @@ END_SECTION // assignment operator START_SECTION((virtual BaseModel& operator=(const BaseModel &source))) - TestModel tm1; + TestModel tm1; TestModel tm2; tm1.setCutOff(3.3); tm2 = tm1; - TEST_REAL_SIMILAR(tm1.getCutOff(),tm2.getCutOff()) + TEST_REAL_SIMILAR(tm1.getCutOff(),tm2.getCutOff()) END_SECTION // copy constructor @@ -126,17 +126,15 @@ START_SECTION((virtual IntensityType getIntensity(const PositionType &pos) const const TestModel s; TestModel::PositionType pos; pos[0]=0.1; - pos[1]=0.2; TEST_REAL_SIMILAR(s.getIntensity(pos), 0.1); } END_SECTION START_SECTION((virtual bool isContained(const PositionType &pos) const)) - TestModel s; + TestModel s; s.setCutOff(0.9); TestModel::PositionType pos; pos[0]=0.1; - pos[1]=0.2; const TestModel& t = s; TEST_EQUAL(t.isContained(pos), false) END_SECTION @@ -145,7 +143,6 @@ START_SECTION((template void fillIntensity(PeakType &peak) c const TestModel t; TestModel::PeakType p; p.getPosition()[0]=0.1; - p.getPosition()[1]=0.2; p.setIntensity(0.1f); t.fillIntensity(p); TEST_REAL_SIMILAR(p.getIntensity(), 0.1) @@ -156,8 +153,8 @@ START_SECTION((template void fillIntensities(PeakIterator b std::vector< TestModel::PeakType > vec(4); for (Size i=0; i<4; ++i) { - vec[i].setIntensity(-0.5); - vec[i].getPosition()[0] = i; + vec[i].setIntensity(-0.5); + vec[i].getPosition()[0] = i; } t.fillIntensities(vec.begin()+1, vec.end()-1); TEST_EQUAL(vec[0].getIntensity(), -0.5) From c00ceb7ccb7691726aae0df7d01b8fb882ddf392 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Sat, 16 Mar 2024 18:04:47 +0100 Subject: [PATCH 239/242] Update src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterFunctor.h --- src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterFunctor.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterFunctor.h b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterFunctor.h index f7b59f8a1c9..74bd9100ed9 100644 --- a/src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterFunctor.h +++ b/src/openms/include/OpenMS/COMPARISON/CLUSTERING/ClusterFunctor.h @@ -70,7 +70,6 @@ namespace OpenMS */ virtual void operator()(DistanceMatrix & original_distance, std::vector & cluster_tree, const float threshold = 1) const = 0; - /// registers all derived products }; From d68811709f49f5250b72edf05b2c5c1c77f346b1 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Sat, 16 Mar 2024 21:56:39 +0100 Subject: [PATCH 240/242] removed some outdated comments --- .../OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithm.h | 2 -- .../ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithm.h | 3 --- 2 files changed, 5 deletions(-) diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithm.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithm.h index 9b55c96a6b7..0f3a3fbc874 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithm.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/FeatureGroupingAlgorithm.h @@ -41,8 +41,6 @@ namespace OpenMS /// Transfers subelements (grouped features) from input consensus maps to the result consensus map void transferSubelements(const std::vector & maps, ConsensusMap & out) const; - /// Register all derived classes in this method - protected: diff --git a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithm.h b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithm.h index b083783a4a6..13ef1b428b6 100644 --- a/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithm.h +++ b/src/openms/include/OpenMS/ANALYSIS/MAPMATCHING/MapAlignmentEvaluationAlgorithm.h @@ -39,9 +39,6 @@ namespace OpenMS ///Decides if two features are the same, based on maximum allowed deviations for retention time, m/z and intensity. bool isSameHandle(const FeatureHandle & lhs, const FeatureHandle & rhs, const double & rt_dev, const double & mz_dev, const Peak2D::IntensityType & int_dev, const bool use_charge); - /// Register all derived classes in this method - - private: ///Copy constructor is not implemented -> private MapAlignmentEvaluationAlgorithm(const MapAlignmentEvaluationAlgorithm &); From e006c7ac6436b616b71f408f310a83ad62c1de90 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Tue, 19 Mar 2024 14:48:11 +0100 Subject: [PATCH 241/242] Remove old hidden markov model code (#7401) * update changelog * remove test --- CHANGELOG | 3 + .../OpenMS/ANALYSIS/ID/HiddenMarkovModel.h | 302 ----- .../include/OpenMS/ANALYSIS/ID/sources.cmake | 1 - .../source/ANALYSIS/ID/HiddenMarkovModel.cpp | 1109 ----------------- src/openms/source/ANALYSIS/ID/sources.cmake | 1 - src/pyOpenMS/pxds/HiddenMarkovModel.pxd | 61 - src/pyOpenMS/tests/unittests/test000.py | 43 - .../data/HiddenMarkovModel_test.graphML | 42 - .../class_tests/openms/executables.cmake | 1 - .../openms/source/HiddenMarkovModel_test.cpp | 432 ------- tools/pychecker_ignore.yaml | 3 - 11 files changed, 3 insertions(+), 1995 deletions(-) delete mode 100644 src/openms/include/OpenMS/ANALYSIS/ID/HiddenMarkovModel.h delete mode 100644 src/openms/source/ANALYSIS/ID/HiddenMarkovModel.cpp delete mode 100644 src/pyOpenMS/pxds/HiddenMarkovModel.pxd delete mode 100644 src/tests/class_tests/openms/data/HiddenMarkovModel_test.graphML delete mode 100644 src/tests/class_tests/openms/source/HiddenMarkovModel_test.cpp diff --git a/CHANGELOG b/CHANGELOG index edfe8d529f1..d46733c55f9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -56,6 +56,9 @@ Cleanup/Removal: - ERPairFinder - RNPxlSearch +- removed library code: + - HiddenMarkovModel + - removed tutorials: - Tutorial_PeakPickerCWT - Tutorial_TOFCalibration diff --git a/src/openms/include/OpenMS/ANALYSIS/ID/HiddenMarkovModel.h b/src/openms/include/OpenMS/ANALYSIS/ID/HiddenMarkovModel.h deleted file mode 100644 index c94ef9dcf11..00000000000 --- a/src/openms/include/OpenMS/ANALYSIS/ID/HiddenMarkovModel.h +++ /dev/null @@ -1,302 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Timo Sachsenberg $ -// $Authors: Andreas Bertsch $ -// -------------------------------------------------------------------------- - - -#pragma once - -#include -#include - -#include -#include -#include - -#include -#include - -namespace OpenMS -{ - /** - @brief Hidden Markov Model State class for the Hidden Markov Model - */ - class OPENMS_DLLAPI HMMState - { -public: - - /** @name Constructors and destructors - */ - //@{ - /// default constructor - HMMState(); - - /// copy constructor - HMMState(const HMMState & state); - - /// constructor with name and visibility option - HMMState(const String & name, bool hidden = true); - - /// destructor - virtual ~HMMState(); - //@} - - /// - HMMState & operator=(const HMMState &); - - /** Accessors - */ - //@{ - /// sets the name of the state - void setName(const String & name); - - /// returns the name of the state - const String & getName() const; - - /// sets the hidden property to the state - void setHidden(bool hidden); - - /// returns true if the state is hidden - bool isHidden() const; - - /// adds the given predecessor state to the list - void addPredecessorState(HMMState * state); - - /// deletes the given predecessor state from the list - void deletePredecessorState(HMMState * state); - - /// add the given successor state to the list - void addSuccessorState(HMMState * state); - - /// deletes the given successor state from the list - void deleteSuccessorState(HMMState * state); - - /// returns the predecessor states of the state - const std::set & getPredecessorStates() const; - - /// return the successor states of the state - const std::set & getSuccessorStates() const; - //@} - -protected: - - /// - bool hidden_; - - /// - String name_; - - /// - std::set pre_states_; - - /// - std::set succ_states_; - }; - - - /** - @brief Hidden Markov Model implementation of PILIS - - Hidden Markov Model implementation suitable for forward connected HMMs. - The HMM is mostly used within PILIS. For further details have a look at - the docs of PILIS. - */ - class OPENMS_DLLAPI HiddenMarkovModel - { -public: - - /** @name Constructors and destructors - */ - //@{ - /// default constructor - HiddenMarkovModel(); - - /// copy constructor - HiddenMarkovModel(const HiddenMarkovModel & hmm_new); - - /// destructor - virtual ~HiddenMarkovModel(); - //@} - - /// assignment operator - HiddenMarkovModel & operator=(const HiddenMarkovModel &); - - /** Accessors - */ - //@{ - /** @brief writes the HMM into a file in GraphML format - - A detailed description of the GraphML format can be found under - http://graphml.graphdrawing.org/ - */ - void writeGraphMLFile(const String & filename); - - /// writes the HMM into an outstream - void write(std::ostream & out) const; - - /// returns the transition probability of the given state names - double getTransitionProbability(const String & s1, const String & s2) const; - - /// sets the transition probability of the given state names to prob - void setTransitionProbability(const String & s1, const String & s2, double prob); - - /// return the number of states - Size getNumberOfStates() const; - - /// registers a new state to the HMM - void addNewState(HMMState * state); - - /// registers a new state to the HMM - void addNewState(const String & name); - - /// add a new synonym transition to the given state names - void addSynonymTransition(const String & name1, const String & name2, const String & synonym1, const String & synonym2); - - /// evaluate the HMM, estimates the transition probabilities from the training - void evaluate(); - - /// trains the HMM; initial probabilities and emission probabilities of the emitting states should be set - void train(); - - /// sets the initial transition probability of the given state to prob - void setInitialTransitionProbability(const String & state, double prob); - - /// clears the initial probabilities - void clearInitialTransitionProbabilities(); - - /// sets the emission probability of the given state to prob - void setTrainingEmissionProbability(const String & state, double prob); - - /// clear the emission probabilities - void clearTrainingEmissionProbabilities(); - - /// enables a transition; adds s1 to the predecessor list of s2 and s2 to the successor list of s1 - void enableTransition(const String & s1, const String & s2); - - /// disables the transition; deletes the nodes from the predecessor/successor list respectively - void disableTransition(const String & s1, const String & s2); - - /// disables all transitions - void disableTransitions(); - - /// calculates the emission probabilities of the HMM (of course only of the non-hidden states) - void calculateEmissionProbabilities(std::map & emission_probs); - - /// writes some stats to cerr - void dump(); - - /// writes some info of the forward "matrix" to cerr - void forwardDump(); - - /// builds a synonyms structure, needed when synonyms are used - //void buildSynonyms(); - - /// estimates the transition probabilities of not trained transitions by averages similar trained ones - void estimateUntrainedTransitions(); - - /// returns the state with the given name - HMMState * getState(const String & name); - - /// returns the state with the given name - const HMMState * getState(const String & name) const; - - /// clears all data - void clear(); - - /// sets the pseudo count that are added instead of zero - void setPseudoCounts(double pseudo_counts); - - /// returns the pseudo counts - double getPseudoCounts() const; - - void setVariableModifications(const StringList & modifications); - //@} - -protected: - - /// disables the transition; deletes the nodes from the predecessor/successor list respectively - void disableTransition_(HMMState * s1, HMMState * s2); - - /// enables a transition; adds s1 to the predecessor list of s2 and s2 to the successor list of s1 - void enableTransition_(HMMState * s1, HMMState * s2); - - /// sets the emission probability of the given state to prob - void setTrainingEmissionProbability_(HMMState * state, double prob); - - /// sets the transition probability of the given states to prob - void setTransitionProbability_(HMMState * s1, HMMState * s2, double prob); - - /// returns the transition probability of the given states - double getTransitionProbability_(HMMState * s1, HMMState * s2) const; - - - /// performs the forward algorithm - void calculateForwardPart_(); - - /// performs the backward algorithm - void calculateBackwardPart_(); - - /// returns the forward variable - double getForwardVariable_(HMMState *); - - /// returns the backward variable - double getBackwardVariable_(HMMState *); - -private: - - // transition probs - std::map > trans_; - - // transition prob counts - std::map > count_trans_; - - std::map > > count_trans_all_; - - // all transition probs of all training steps (for model checking) - std::map > > train_count_trans_all_; - - // number of training steps of the transitions - std::map > training_steps_count_; - - // forward variables - std::map forward_; - - // backward variables - std::map backward_; - - // name to state Mapping - std::map name_to_state_; - - // emission probabilities - std::map train_emission_prob_; - - // initial transition probabilities - std::map init_prob_; - - // all states of the HMM - std::set states_; - - // trained transitions - std::set > trained_trans_; - - // synonym transitions Mapping - std::map > > synonym_trans_names_; - - // synonym transitions - std::map > > synonym_trans_; - - // transitions which are enabled - std::map > enabled_trans_; - - // pseudocounts used in this instance - double pseudo_counts_; - - // copy all the stuff from one HMM to this - void copy_(const HiddenMarkovModel & source); - - StringList var_modifications_; - }; -} diff --git a/src/openms/include/OpenMS/ANALYSIS/ID/sources.cmake b/src/openms/include/OpenMS/ANALYSIS/ID/sources.cmake index 080c8b74eeb..216e56205e7 100644 --- a/src/openms/include/OpenMS/ANALYSIS/ID/sources.cmake +++ b/src/openms/include/OpenMS/ANALYSIS/ID/sources.cmake @@ -21,7 +21,6 @@ ConsensusMapMergerAlgorithm.h FalseDiscoveryRate.h FIAMSDataProcessor.h FIAMSScheduler.h -HiddenMarkovModel.h HyperScore.h IDBoostGraph.h IDDecoyProbability.h diff --git a/src/openms/source/ANALYSIS/ID/HiddenMarkovModel.cpp b/src/openms/source/ANALYSIS/ID/HiddenMarkovModel.cpp deleted file mode 100644 index dbb2e041d3f..00000000000 --- a/src/openms/source/ANALYSIS/ID/HiddenMarkovModel.cpp +++ /dev/null @@ -1,1109 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Timo Sachsenberg $ -// $Authors: Andreas Bertsch $ -// -------------------------------------------------------------------------- - -#include -#include -#include -#include -#include - -#include -#include -#include - -// #define SIMPLE_DEBUG2 -// #undef SIMPLE_DEBUG2 - -// #define HIDDEN_MARKOV_MODEL_DEBUG -// #undef HIDDEN_MARKOV_MODEL_DEBUG - -// #define STATE_DEBUG -// #undef STATE_DEBUG - -// #define EVALUATE_DEBUG -// #undef EVALUATE_DEBUG - -using namespace std; - -namespace OpenMS -{ - // HMMState implementation - HMMState::HMMState() : - hidden_(true) - { - } - - HMMState::HMMState(const String & name, bool hidden) : - hidden_(hidden), - name_(name) - { -#ifdef STATE_DEBUG - cerr << "State: " << name << ", hidden=" << hidden << endl; -#endif - } - - HMMState::HMMState(const HMMState & state) : - hidden_(state.hidden_), - name_(state.name_) - { - } - - /* pre_states_(state.pre_states_), - succ_states_(state.succ_states_) - { - - }*/ - - HMMState::~HMMState() = default; - - void HMMState::setName(const String & name) - { - name_ = name; - } - - const String & HMMState::getName() const - { - return name_; - } - - HMMState & HMMState::operator=(const HMMState & state) - { - hidden_ = state.hidden_; - name_ = state.name_; - pre_states_.clear(); - succ_states_.clear(); - //pre_states_ = state.pre_states_; - //succ_states_ = state.succ_states_; - return *this; - } - - void HMMState::addSuccessorState(HMMState * state) - { -#ifdef SIMPLE_DEBUG - cerr << "'" << state->getName() << "'" << endl; -#endif - succ_states_.insert(state); - } - - void HMMState::deleteSuccessorState(HMMState * state) - { -#ifdef SIMPLE_DEBUG - cerr << "'" << state->getName() << "'" << endl; -#endif - succ_states_.erase(state); - } - - void HMMState::addPredecessorState(HMMState * state) - { -#ifdef SIMPLE_DEBUG - cerr << "'" << state->getName() << "'" << endl; -#endif - pre_states_.insert(state); - } - - void HMMState::deletePredecessorState(HMMState * state) - { -#ifdef SIMPLE_DEBUG - cerr << "'" << state->getName() << "'" << endl; -#endif - pre_states_.erase(state); - } - - const set & HMMState::getPredecessorStates() const - { - return pre_states_; - } - - const set & HMMState::getSuccessorStates() const - { - return succ_states_; - } - - bool HMMState::isHidden() const - { - return hidden_; - } - - void HMMState::setHidden(bool hidden) - { - hidden_ = hidden; - } - - // The hidden markov model - HiddenMarkovModel::HiddenMarkovModel() : - pseudo_counts_(0.0) - { - } - - HiddenMarkovModel::HiddenMarkovModel(const HiddenMarkovModel & hmm) - { - copy_(hmm); - } - - HiddenMarkovModel::~HiddenMarkovModel() - { - clear(); - } - - HiddenMarkovModel & HiddenMarkovModel::operator=(const HiddenMarkovModel & hmm) - { - if (&hmm != this) - { - clear(); - copy_(hmm); - } - return *this; - } - - HMMState * HiddenMarkovModel::getState(const String & name) - { - if (name_to_state_.find(name) == name_to_state_.end()) - { - throw Exception::ElementNotFound(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, name); - } - return name_to_state_[name]; - } - - const HMMState * HiddenMarkovModel::getState(const String & name) const - { - if (name_to_state_.find(name) == name_to_state_.end()) - { - throw Exception::ElementNotFound(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, name); - } - return name_to_state_.find(name)->second; - } - - void HiddenMarkovModel::writeGraphMLFile(const String & filename) - { - set states = states_; - std::map > transitions; - - ofstream out(filename.c_str()); - out << R"()" << endl; - - out << R"(" << endl; - - out << R"()" << endl; - out << R"()" << endl; - out << R"( )" << endl; - for (set::const_iterator it = states.begin(); it != states.end(); ++it) - { - out << " getName() << "\">" << endl; - out << " " << endl; - out << " " << endl; - out << " " << (*it)->getName() << "" << endl; - out << " " << endl; - out << " " << endl; - out << " " << endl; - - set succ = (*it)->getSuccessorStates(); - for (set::const_iterator sit = succ.begin(); sit != succ.end(); ++sit) - { - transitions[*it].push_back(*sit); - } - } - - - - for (std::map >::const_iterator it = transitions.begin(); it != transitions.end(); ++it) - { - for (vector::const_iterator it1 = it->second.begin(); it1 != it->second.end(); ++it1) - { - out << " first->getName() << "\" target=\"" << (*it1)->getName() << R"(" directed="true">)" << endl; - out << " " << endl; - out << " " << endl; - out << " " << getTransitionProbability_(it->first, *it1) << "" << endl; - out << " " << endl; - out << " " << endl; - out << " " << endl; - } - } - - out << " " << endl; - out << "" << endl; - - } - - void HiddenMarkovModel::write(ostream & out) const - { - // write states - for (set::const_iterator it = states_.begin(); it != states_.end(); ++it) - { - out << "State " << (*it)->getName(); - - if (!(*it)->isHidden()) - { - out << " false"; - } - out << endl; - } - - // write transitions - for (std::map >::const_iterator it1 = trans_.begin(); it1 != trans_.end(); ++it1) - { - for (std::map::const_iterator it2 = it1->second.begin(); it2 != it1->second.end(); ++it2) - { - out << "Transition " << it1->first->getName() << " " << it2->first->getName() << " " << it2->second << endl; - } - } - - // write synonyms - /* - for (Map > >::const_iterator it = synonym_trans_names_.begin(); it != synonym_trans_names_.end(); ++it) - { - for (Map >::const_iterator it2 = it->second.begin(); it2 != it->second.end(); ++it2) - { - out << "Synonym " << it->first << " " << it2->first << " " << it2->second.first << " " << it2->second.second << endl; - } - }*/ - - for (std::map > >::const_iterator it1 = synonym_trans_.begin(); it1 != synonym_trans_.end(); ++it1) - { - for (std::map >::const_iterator it2 = it1->second.begin(); it2 != it1->second.end(); ++it2) - { - //cerr << "Synonym " << it1->first->getName() << " " << it2->first->getName() << " " << it2->second.first->getName() << " " << it2->second.second->getName() << endl; - out << "Synonym " << it1->first->getName() << " " << it2->first->getName() << " " << it2->second.first->getName() << " " << it2->second.second->getName() << endl; - } - } - - return; - } - - void HiddenMarkovModel::clear() - { - for (set::const_iterator it = states_.begin(); it != states_.end(); ++it) - { - delete *it; - } - trans_.clear(); - count_trans_.clear(); - train_count_trans_all_.clear(); - forward_.clear(); - backward_.clear(); - name_to_state_.clear(); - train_emission_prob_.clear(); - init_prob_.clear(); - states_.clear(); - trained_trans_.clear(); - synonym_trans_.clear(); - synonym_trans_names_.clear(); - var_modifications_ = ListUtils::create(""); - return; - } - - Size HiddenMarkovModel::getNumberOfStates() const - { - return states_.size(); - } - - void HiddenMarkovModel::addNewState(HMMState * s) - { - states_.insert(s); - if (name_to_state_.find(s->getName()) == name_to_state_.end()) - { - name_to_state_[s->getName()] = s; - } - else - { - cerr << "HiddenMarkovModel: state name '" << s->getName() << "' (" << s << ") already used!" << endl; - } - } - - void HiddenMarkovModel::addNewState(const String & name) - { - HMMState * s = new HMMState(name); - states_.insert(s); - if (name_to_state_.find(name) == name_to_state_.end()) - { - name_to_state_[name] = s; - } - else - { - cerr << "HiddenMarkovModel: state name '" << name << "' (" << name_to_state_[name] << ") already used!" << endl; - } - return; - } - - void HiddenMarkovModel::addSynonymTransition(const String & name1, const String & name2, const String & synonym1, const String & synonym2) - { -#ifdef SIMPLE_DEBUG2 - cerr << "addSynonymTransition: '" << name1 << "' -> '" << name2 << "' :: '" << synonym1 << "' -> '" << synonym2 << "'" << endl; -#endif - if (name_to_state_.find(name1) == name_to_state_.end()) - { - cerr << "state '" << name1 << "' unknown" << endl; - } - if (name_to_state_.find(name2) == name_to_state_.end()) - { - cerr << "state '" << name2 << "' unknown" << endl; - } - if (name_to_state_.find(synonym1) == name_to_state_.end()) - { - cerr << "state '" << synonym1 << "' unknown" << endl; - } - if (name_to_state_.find(synonym2) == name_to_state_.end()) - { - cerr << "state '" << synonym2 << "' unknown" << endl; - } - synonym_trans_names_[synonym1][synonym2] = make_pair(name1, name2); - - synonym_trans_[name_to_state_[synonym1]][name_to_state_[synonym2]] = make_pair(name_to_state_[name1], name_to_state_[name2]); - -/* - for (Map > >::const_iterator it = synonym_trans_names_.begin(); it != synonym_trans_names_.end(); ++it) - { - for (Map >::const_iterator it2 = it->second.begin(); it2 != it->second.end(); ++it2) - { - synonym_trans_[name_to_state_[it->first]][name_to_state_[it2->first]] = - make_pair(name_to_state_[it2->second.first], name_to_state_[it2->second.second]); - } - } - */ - } - - void HiddenMarkovModel::setTransitionProbability_(HMMState * s1, HMMState * s2, double trans_prob) - { - trans_[s1][s2] = trans_prob; - s1->addSuccessorState(s2); - s2->addPredecessorState(s1); - enabled_trans_[s1].insert(s2); - training_steps_count_[s1][s2] = 0; - } - - void HiddenMarkovModel::setTransitionProbability(const String & s1, const String & s2, double trans_prob) - { - OPENMS_PRECONDITION( - name_to_state_.find(s1) != name_to_state_.end() && name_to_state_.find(s2) != name_to_state_.end(), - String("HiddenMarkovModel::setTransitionProbability(" + String(s1) + ", " + String(s2) + ", " + String(trans_prob) + "), no suchstate!").c_str()); -#ifdef SIMPLE_DEBUG2 - cerr << "setTransitionProbability: '" << s1 << "' -> '" << s2 << "'" << " " << trans_prob << endl; -#endif - - trans_[name_to_state_[s1]][name_to_state_[s2]] = trans_prob; - name_to_state_[s1]->addSuccessorState(name_to_state_[s2]); - name_to_state_[s2]->addPredecessorState(name_to_state_[s1]); - enabled_trans_[name_to_state_[s1]].insert(name_to_state_[s2]); - training_steps_count_[name_to_state_[s1]][name_to_state_[s2]] = 0; - } - - double HiddenMarkovModel::getTransitionProbability(const String & s1, const String & s2) const - { - if (name_to_state_.find(s1) == name_to_state_.end()) - { - throw Exception::ElementNotFound(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, s1); - } - HMMState * state1 = name_to_state_.at(s1); - if (name_to_state_.find(s2) == name_to_state_.end()) - { - throw Exception::ElementNotFound(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, s2); - } - HMMState * state2 = name_to_state_.at(s2); - return getTransitionProbability_(state1, state2); - } - - double HiddenMarkovModel::getTransitionProbability_(HMMState * s1, HMMState * s2) const - { - HMMState * state1 = s1; - HMMState * state2 = s2; - -#ifdef SIMPLE_DEBUG2 - cerr << "getTransitionProbability(" << s1->getName() << ", " << s2->getName() << ")" << endl; -#endif - - // check if transition is a synonym transition - if (synonym_trans_.find(state1) != synonym_trans_.end() && - synonym_trans_.find(state1)->second.find(state2) != synonym_trans_.find(state1)->second.end()) - { - HMMState * tmp = synonym_trans_.find(state1)->second.find(state2)->second.first; - state2 = synonym_trans_.find(state1)->second.find(state2)->second.second; //name_to_state_[p.second]; - state1 = tmp; - } - -#ifdef SIMPLE_DEBUG2 - cerr << "getTransitionProbability: " << state1->getName() << " " << state2->getName() << endl; -#endif - - // get the transition prob - if (trans_.find(state1) != trans_.end() && trans_.find(state1)->second.find(state2) != trans_.find(state1)->second.end()) - { - /* - // TODO !!!! ???? path length correction - if (state2->getName().hasSubstring("next")) - { - return sqrt(trans_[state1][state2]); - } - else - {*/ - return trans_.find(state1)->second.find(state2)->second; - /* - } - */ - } - else - { - return 0; - } - } - - void HiddenMarkovModel::train() - { -#ifdef HIDDEN_MARKOV_MODEL_DEBUG - cerr << "HiddenMarkovModel::train()" << endl; -#endif - trained_trans_.clear(); - -#ifdef HIDDEN_MARKOV_MODEL_DEBUG - cerr << "calc forward part" << endl; -#endif - - calculateForwardPart_(); - -#ifdef HIDDEN_MARKOV_MODEL_DEBUG - cerr << "calc backward part" << endl; -#endif - - calculateBackwardPart_(); - - -#ifdef HIDDEN_MARKOV_MODEL_DEBUG - cerr << "calc px" << endl; -#endif - - // calc p_x from forward part - double px(0); - - for (std::map::const_iterator it1 = train_emission_prob_.begin(); it1 != train_emission_prob_.end(); ++it1) - { - for (set::const_iterator it2 = it1->first->getPredecessorStates().begin(); it2 != it1->first->getPredecessorStates().end(); ++it2) - { - px += getForwardVariable_(*it2); - } - } - - double num_px(0); - if (px != 0) - { - num_px = 1.0 / px; - } - -#ifdef HIDDEN_MARKOV_MODEL_DEBUG - cerr << "px=" << num_px << endl; - cerr << "add contributions to count_trans" << endl; -#endif - - // add contributions to count_trans_ - for (set >::const_iterator it = trained_trans_.begin(); it != trained_trans_.end(); ++it) - { - double tmp(0); - tmp = num_px * getForwardVariable_(it->first) * getBackwardVariable_(it->second) * getTransitionProbability_(it->first, it->second); - tmp += pseudo_counts_; - HMMState * s1 = it->first; - HMMState * s2 = it->second; - - if (synonym_trans_.find(s1) != synonym_trans_.end() && synonym_trans_[s1].find(s2) != synonym_trans_[s1].end()) - { - HMMState * tmp_state = synonym_trans_[s1][s2].first; - s2 = synonym_trans_[s1][s2].second; - s1 = tmp_state; - } - - train_count_trans_all_[s1][s2].push_back(tmp); - if (count_trans_.find(s1) != count_trans_.end() && count_trans_[s1].find(s2) != count_trans_[s1].end()) - { - count_trans_[s1][s2] += tmp; - } - else - { - count_trans_[s1][s2] = tmp; - } - training_steps_count_[s1][s2]++; - } - } - - void HiddenMarkovModel::calculateForwardPart_() - { - forward_.clear(); - set succ; - for (std::map::iterator it = init_prob_.begin(); it != init_prob_.end(); ++it) - { - //cerr << it->first << " " << it->second << endl; - //cerr << it->first->getName() << endl; - forward_[it->first] = it->second; - } - - for (std::map::iterator outer_it = init_prob_.begin(); outer_it != init_prob_.end(); ++outer_it) - { - succ.insert(outer_it->first->getSuccessorStates().begin(), outer_it->first->getSuccessorStates().end()); - - while (!succ.empty()) - { - set succ_new; - for (set::const_iterator inner_it = succ.begin(); inner_it != succ.end(); ++inner_it) - { - set pre = (*inner_it)->getPredecessorStates(); - double sum(0); - for (set::const_iterator it2 = pre.begin(); it2 != pre.end(); ++it2) - { -#ifdef HIDDEN_MARKOV_MODEL_DEBUG - cerr << "\tadding from " << (*it2)->getName() << " " << getForwardVariable_(*it2) << " * " << getTransitionProbability(*it2, *inner_it) << endl; -#endif - sum += getForwardVariable_(*it2) * getTransitionProbability_(*it2, *inner_it); - trained_trans_.insert(make_pair(*it2, *inner_it)); - } - forward_[*inner_it] = sum; - succ_new.insert((*inner_it)->getSuccessorStates().begin(), (*inner_it)->getSuccessorStates().end()); -#ifdef HIDDEN_MARKOV_MODEL_DEBUG - cerr << "f: " << (*inner_it)->getName() << "\t" << sum << endl; -#endif - } - succ = succ_new; - } - } - } - - void HiddenMarkovModel::calculateBackwardPart_() - { - backward_.clear(); - set pre; - for (std::map::iterator it = train_emission_prob_.begin(); it != train_emission_prob_.end(); ++it) - { - backward_[it->first] = it->second; - } - - for (std::map::iterator outer_it = train_emission_prob_.begin(); outer_it != train_emission_prob_.end(); ++outer_it) - { -#ifdef HIDDEN_MARKOV_MODEL_DEBUG - cerr << "b:" << outer_it->first << " " << outer_it->first->getName() << " " << outer_it->second << endl; -#endif - pre.insert(outer_it->first->getPredecessorStates().begin(), outer_it->first->getPredecessorStates().end()); - - while (!pre.empty()) - { - set pre_new; - for (set::const_iterator inner_it = pre.begin(); inner_it != pre.end(); ++inner_it) - { - set succ = (*inner_it)->getSuccessorStates(); - double sum(0); - for (set::const_iterator it2 = succ.begin(); it2 != succ.end(); ++it2) - { -#ifdef HIDDEN_MARKOV_MODEL_DEBUG - cerr << "\tadding from " << (*it2)->getName() << " " << getBackwardVariable_(*it2) << " * " << getTransitionProbability(*inner_it, *it2) << endl; -#endif - sum += getBackwardVariable_(*it2) * getTransitionProbability_(*inner_it, *it2); - trained_trans_.insert(make_pair(*inner_it, *it2)); - } - backward_[*inner_it] = sum; - pre_new.insert((*inner_it)->getPredecessorStates().begin(), (*inner_it)->getPredecessorStates().end()); -#ifdef HIDDEN_MARKOV_MODEL_DEBUG - cerr << "b: " << (*inner_it)->getName() << "\t" << sum << endl; -#endif - } - pre = pre_new; - } - } - } - - double HiddenMarkovModel::getForwardVariable_(HMMState * state) - { - return forward_.find(state) != forward_.end() ? forward_[state] : 0; - } - - double HiddenMarkovModel::getBackwardVariable_(HMMState * state) - { - return backward_.find(state) != backward_.end() ? backward_[state] : 0; - } - - void HiddenMarkovModel::evaluate() - { - for (std::map >::const_iterator it1 = count_trans_.begin(); it1 != count_trans_.end(); ++it1) - { -#ifdef EVALUATE_DEBUG - cerr << it1->first->getName() << endl; -#endif - double sum(0); - for (std::map::const_iterator it2 = it1->second.begin(); it2 != it1->second.end(); ++it2) - { - if (count_trans_.find(it1->first) != count_trans_.end() && - count_trans_[it1->first].find(it2->first) != count_trans_[it1->first].end()) - { - sum += count_trans_[it1->first][it2->first]; -#ifdef EVALUATE_DEBUG - cerr << it1->first->getName() << " " << it2->first->getName() << " "; - - //<< count_trans_[it1->first][it2->first] << endl; - for (vector::const_iterator it = train_count_trans_all_[it1->first][it2->first].begin(); it != train_count_trans_all_[it1->first][it2->first].end(); ++it) - { - cerr << *it << " "; - } - vector data = train_count_trans_all_[it1->first][it2->first]; - std::sort(data.begin(), data.end()); - double mean = Math::mean(data.begin(), data.end()); - double variance = Math::variance(data.begin(), data.end(), mean); - cerr << "mean=" << mean << ", variance=" << variance << endl; -#endif - } - } - - if (sum != 0) - { - for (std::map::const_iterator it2 = it1->second.begin(); it2 != it1->second.end(); ++it2) - { - if (count_trans_.find(it1->first) != count_trans_.end() && - count_trans_[it1->first].find(it2->first) != count_trans_[it1->first].end()) - { - trans_[it1->first][it2->first] = count_trans_[it1->first][it2->first] / sum; - } - } - } - } - } - - void HiddenMarkovModel::setInitialTransitionProbability(const String & state, double prob) - { - OPENMS_PRECONDITION(name_to_state_.find(state) != name_to_state_.end(), String("HiddenMarkovModel::setInitialTransitionProbability(" + state + ", " + String(prob) + "), no suchstate!").c_str()); - //cerr << state << " " << prob << endl; - init_prob_[name_to_state_[state]] = prob; - } - - void HiddenMarkovModel::clearInitialTransitionProbabilities() - { - init_prob_.clear(); - } - - void HiddenMarkovModel::setTrainingEmissionProbability(const String & state, double prob) - { -#ifdef SIMPLE_DEBUG2 - cerr << "setTrainingEmissionProbability(" << state << "(" << name_to_state_[state] << "), " << prob << ")" << endl; -#endif - - OPENMS_PRECONDITION(name_to_state_.find(state) != name_to_state_.end(), String("HiddenMarkovModel::setTrainingEmissionProbability(" + state + ", " + String(prob) + "), no such state!").c_str()); - train_emission_prob_[name_to_state_[state]] = prob; - } - - void HiddenMarkovModel::clearTrainingEmissionProbabilities() - { - train_emission_prob_.clear(); - } - - void HiddenMarkovModel::enableTransition(const String & s1, const String & s2) - { -#ifdef SIMPLE_DEBUG2 - cerr << "enableTransition: '" << s1 << "' -> '" << s2 << "'" << endl; -#endif - enableTransition_(name_to_state_[s1], name_to_state_[s2]); - } - - void HiddenMarkovModel::enableTransition_(HMMState * s1, HMMState * s2) - { - s1->addSuccessorState(s2); - s2->addPredecessorState(s1); - enabled_trans_[s1].insert(s2); - } - - void HiddenMarkovModel::disableTransition(const String & s1, const String & s2) - { - disableTransition_(name_to_state_[s1], name_to_state_[s2]); - } - - void HiddenMarkovModel::disableTransition_(HMMState * s1, HMMState * s2) - { - s1->deleteSuccessorState(s2); - s2->deletePredecessorState(s1); - enabled_trans_[s1].erase(s2); - } - - void HiddenMarkovModel::disableTransitions() - { - for (std::map >::const_iterator it = enabled_trans_.begin(); it != enabled_trans_.end(); ++it) - { - for (set::const_iterator it2 = it->second.begin(); it2 != it->second.end(); ++it2) - { - it->first->deleteSuccessorState(*it2); - (*it2)->deletePredecessorState(it->first); - } - } - enabled_trans_.clear(); - } - - void HiddenMarkovModel::calculateEmissionProbabilities(std::map & emission_probs) - { - std::map states = init_prob_; - - while (!states.empty()) - { - std::map tmp = states; - for (std::map::const_iterator it = tmp.begin(); it != tmp.end(); ++it) - { - for (set::const_iterator it2 = it->first->getSuccessorStates().begin(); it2 != it->first->getSuccessorStates().end(); ++it2) - { - //cerr << "->" << (*it2)->getName() << "=(from " << it->first->getName() << "): "; // << states[it->first] << " * " << getTransitionProbability_(it->first, *it2) << " "; - if (states.find(*it2) != states.end()) - { - //cerr << " += " << states[it->first] * getTransitionProbability_(it->first, *it2); - states[*it2] += states[it->first] * getTransitionProbability_(it->first, *it2); - } - else - { - //cerr << " = " << states[it->first] * getTransitionProbability_(it->first, *it2); - states[*it2] = states[it->first] * getTransitionProbability_(it->first, *it2); - } - if (!(*it2)->isHidden()) - { - if (emission_probs.find(*it2) != emission_probs.end()) - { - //cerr << " emission: += " << states[it->first] * getTransitionProbability_(it->first, *it2); - emission_probs[*it2] += states[it->first] * getTransitionProbability_(it->first, *it2); - } - else - { - //cerr << " emission: += " << states[it->first] * getTransitionProbability_(it->first, *it2); - emission_probs[*it2] = states[it->first] * getTransitionProbability_(it->first, *it2); - } - } - //cerr << endl; - } - states.erase(it->first); - } - } - - return; - } - - void HiddenMarkovModel::dump() - { - cerr << "dump of transitions: " << endl; - for (std::map >::const_iterator it = trans_.begin(); it != trans_.end(); ++it) - { - for (std::map::const_iterator it1 = it->second.begin(); it1 != it->second.end(); ++it1) - { - cout << it->first->getName() << " -> " << it1->first->getName() << " " << it1->second << " " << training_steps_count_[it->first][it1->first] << ": "; - vector all_trans = train_count_trans_all_[it->first][it1->first]; - - if (!all_trans.empty()) - { - double sum = accumulate(all_trans.begin(), all_trans.end(), 0.0); - double avg(sum / double(all_trans.size())); - double rsd(0); - for (Size i = 0; i != all_trans.size(); ++i) - { - cout << all_trans[i] << " "; - rsd += abs(all_trans[i] - avg); - } - cout << "rsd=" << rsd / double(all_trans.size()) / avg; - cout << ", avg=" << avg; - } - - cout << endl; - } - } - - cerr << "dump completed" << endl; - } - - void HiddenMarkovModel::forwardDump() - { - set succ; - for (std::map::iterator outer_it = init_prob_.begin(); outer_it != init_prob_.end(); ++outer_it) - { - succ.insert(outer_it->first->getSuccessorStates().begin(), outer_it->first->getSuccessorStates().end()); - - while (!succ.empty()) - { - set succ_new; - for (set::const_iterator inner_it = succ.begin(); inner_it != succ.end(); ++inner_it) - { - cerr << (*inner_it)->getName() << endl; - succ_new.insert((*inner_it)->getSuccessorStates().begin(), (*inner_it)->getSuccessorStates().end()); - } - succ = succ_new; - } - } - } - - void HiddenMarkovModel::estimateUntrainedTransitions() - { -#ifdef HIDDEN_MARKOV_MODEL_DEBUG - cerr << "Transition training stats" << endl; - for (Map >::const_iterator it = training_steps_count_.begin(); it != training_steps_count_.end(); ++it) - { - for (Map::const_iterator it1 = it->second.begin(); it1 != it->second.end(); ++it1) - { - cerr << it->first->getName() << " " << it1->first->getName() << " " << it1->second << endl; - } - } - - cerr << "Estimation" << endl; -#endif - - - set residues(ResidueDB::getInstance()->getResidues("Natural20")); - for (StringList::const_iterator it = var_modifications_.begin(); it != var_modifications_.end(); ++it) - { - residues.insert(ResidueDB::getInstance()->getModifiedResidue(*it)); - } - - // pathways axyz and bxyz and the first two explicitly modeled ones - HMMState * s2 = nullptr; - HMMState * end_state = name_to_state_["end"]; - StringList pathways = ListUtils::create("axyz,axyz1,axyz1,bxyz,bxyz1,bxyz2"); - for (StringList::const_iterator pathway_it = pathways.begin(); pathway_it != pathways.end(); ++pathway_it) - { - String pathway = *pathway_it; - for (set::const_iterator it = residues.begin(); it != residues.end(); ++it) - { - s2 = name_to_state_[pathway]; - for (set::const_iterator jt = residues.begin(); jt != residues.end(); ++jt) - { - AASequence first_aa, second_aa; - first_aa += *it; - second_aa += *jt; - String aa1(first_aa.toString()), aa2(second_aa.toString()); -#ifdef HIDDEN_MARKOV_MODEL_DEBUG - cerr << "Estimating: " << aa1 << " -> " << aa2 << " (" << training_steps_count_[name_to_state_[aa1 + aa2 + "_" + pathway]][s2] << ") :: "; -#endif - - if (training_steps_count_[name_to_state_[aa1 + aa2 + "_" + pathway]][s2] == 0) - { - Size count(0); - double sum(0); - // "rows" of the amino acid matrix - for (set::const_iterator kt = residues.begin(); kt != residues.end(); ++kt) - { - AASequence third_aa; - third_aa += *kt; - String aa3(third_aa.toString()); - if (training_steps_count_[name_to_state_[aa1 + aa3 + "_" + pathway]][s2] != 0) - { - sum += trans_[name_to_state_[aa1 + aa3 + "_" + pathway]][s2]; - count++; - } - } - // "columns" of the amino acid matrix - for (set::const_iterator kt = residues.begin(); kt != residues.end(); ++kt) - { - AASequence third_aa; - third_aa += *kt; - String aa3(third_aa.toString()); - - if (training_steps_count_[name_to_state_[aa3 + aa2 + "_" + pathway]][s2] != 0) - { - sum += trans_[name_to_state_[aa3 + aa2 + "_" + pathway]][s2]; - count++; - } - } - -#ifdef HIDDEN_MARKOV_MODEL_DEBUG - cerr << trans_[name_to_state_[aa1 + aa2 + "_" + pathway]][s2] << " to "; -#endif - if (count != 0) - { -#ifdef HIDDEN_MARKOV_MODEL_DEBUG - cerr << "setting transitions of " << aa1 << aa2 << "_" << pathway << " -> " << pathway << " to " << sum / double(count) << endl; -#endif - trans_[name_to_state_[aa1 + aa2 + "_" + pathway]][s2] = sum / double(count); - trans_[name_to_state_[aa1 + aa2 + "_" + pathway]][end_state] = 1 - sum / double(count); - } -#ifdef HIDDEN_MARKOV_MODEL_DEBUG - cerr << sum / double(count) << endl; - } - else - { - cerr << "not needed" << endl; -#endif - } - } - } - } - - // sc and cr - String sc_residues("HKRDE"); - for (String::ConstIterator it = sc_residues.begin(); it != sc_residues.end(); ++it) - { - String sc_res = *it; - - for (set::const_iterator jt = residues.begin(); jt != residues.end(); ++jt) - { - AASequence second_aa; - second_aa += *jt; - String aa2(second_aa.toString()); - - s2 = name_to_state_[sc_res]; - if (training_steps_count_[name_to_state_[aa2 + "_" + sc_res]][s2] == 0) - { - Size count(0); - double sum(0); - for (set::const_iterator kt = residues.begin(); kt != residues.end(); ++kt) - { - AASequence third_aa; - third_aa += *kt; - String aa3(third_aa.toString()); - - HMMState * s1 = name_to_state_[aa3 + "_" + sc_res]; - if (training_steps_count_[s1][s2] != 0) - { - sum += trans_[s1][s2]; - count++; - } - } - - if (count != 0) - { - trans_[name_to_state_[aa2 + "_" + sc_res]][s2] = sum / double(count); - trans_[name_to_state_[aa2 + "_" + sc_res]][end_state] = 1 - sum / double(count); - } - } - } - } - - StringList bk_pathways = ListUtils::create("bk-1,bk-2"); - - for (StringList::const_iterator pathway_it = bk_pathways.begin(); pathway_it != bk_pathways.end(); ++pathway_it) - { - String pathway = *pathway_it; - s2 = name_to_state_[pathway]; - for (set::const_iterator it = residues.begin(); it != residues.end(); ++it) - { - AASequence first_aa; - first_aa += *it; - String aa1(first_aa.toString()); - if (training_steps_count_[name_to_state_[aa1 + "_" + pathway]][s2] == 0) - { - Size count(0); - double sum(0); - for (set::const_iterator jt = residues.begin(); jt != residues.end(); ++jt) - { - AASequence second_aa; - second_aa += *jt; - String aa2(second_aa.toString()); - HMMState * s1 = name_to_state_[aa2 + "_" + pathway]; - if (training_steps_count_[s1][s2] != 0) - { - sum += trans_[s1][s2]; - count++; - } - //cerr << "Estimating transition of '" << aa1 << pathway << "' -> '" << pathway << "' to " << sum/(double)count << endl; - if (count != 0) - { - trans_[name_to_state_[aa1 + "_" + pathway]][s2] = sum / static_cast(count); - trans_[name_to_state_[aa1 + "_" + pathway]][end_state] = 1 - sum / static_cast(count); - } - } - } - } - } - - } - - void HiddenMarkovModel::setPseudoCounts(double pseudo_counts) - { - pseudo_counts_ = pseudo_counts; - return; - } - - double HiddenMarkovModel::getPseudoCounts() const - { - return pseudo_counts_; - } - - void HiddenMarkovModel::setVariableModifications(const StringList & modifications) - { - var_modifications_ = modifications; - } - - void HiddenMarkovModel::copy_(const HiddenMarkovModel & source) - { - std::map old_to_new; - for (set::const_iterator it = source.states_.begin(); it != source.states_.end(); ++it) - { - HMMState * s = new HMMState(**it); - states_.insert(s); - name_to_state_[s->getName()] = s; - old_to_new[*it] = s; - } - - // trans_ - for (std::map >::const_iterator it1 = source.trans_.begin(); it1 != source.trans_.end(); ++it1) - { - for (std::map::const_iterator it2 = it1->second.begin(); it2 != it1->second.end(); ++it2) - { - trans_[old_to_new[it1->first]][old_to_new[it2->first]] = it2->second; - } - } - - // count_trans_ - for (std::map >::const_iterator it1 = source.count_trans_.begin(); it1 != source.count_trans_.end(); ++it1) - { - for (std::map::const_iterator it2 = it1->second.begin(); it2 != it1->second.end(); ++it2) - { - count_trans_[old_to_new[it1->first]][old_to_new[it2->first]] = it2->second; - } - } - - for (std::map > >::const_iterator it1 = source.train_count_trans_all_.begin(); it1 != source.train_count_trans_all_.end(); ++it1) - { - for (std::map >::const_iterator it2 = it1->second.begin(); it2 != it1->second.end(); ++it2) - { - train_count_trans_all_[old_to_new[it1->first]][old_to_new[it2->first]] = it2->second; - } - - } - - - for (std::map >::const_iterator it1 = source.training_steps_count_.begin(); it1 != source.training_steps_count_.end(); ++it1) - { - for (std::map::const_iterator it2 = it1->second.begin(); it2 != it1->second.end(); ++it2) - { - training_steps_count_[old_to_new[it1->first]][old_to_new[it2->first]] = it2->second; - } - } - - // forward and backward are just temporary objects - - for (std::map::const_iterator it = source.train_emission_prob_.begin(); it != source.train_emission_prob_.end(); ++it) - { - train_emission_prob_[old_to_new[it->first]] = it->second; - } - - for (std::map::const_iterator it = source.init_prob_.begin(); it != source.init_prob_.end(); ++it) - { - init_prob_[old_to_new[it->first]] = it->second; - } - - for (std::set >::const_iterator it = source.trained_trans_.begin(); it != source.trained_trans_.end(); ++it) - { - trained_trans_.insert(make_pair(old_to_new[it->first], old_to_new[it->second])); - } - - synonym_trans_names_ = source.synonym_trans_names_; - pseudo_counts_ = source.pseudo_counts_; - var_modifications_ = source.var_modifications_; - - - for (std::map > >::const_iterator it = synonym_trans_names_.begin(); it != synonym_trans_names_.end(); ++it) - { - for (std::map >::const_iterator it2 = it->second.begin(); it2 != it->second.end(); ++it2) - { - synonym_trans_[name_to_state_[it->first]][name_to_state_[it2->first]] = - make_pair(name_to_state_[it2->second.first], name_to_state_[it2->second.second]); - } - } - - - for (std::map >::const_iterator it1 = source.enabled_trans_.begin(); it1 != source.enabled_trans_.end(); ++it1) - { - for (set::const_iterator it2 = it1->second.begin(); it2 != it1->second.end(); ++it2) - { - enabled_trans_[old_to_new[it1->first]].insert(old_to_new[*it2]); - } - } - - } - -} diff --git a/src/openms/source/ANALYSIS/ID/sources.cmake b/src/openms/source/ANALYSIS/ID/sources.cmake index 9a0c36781ed..c77e7bcd1bb 100644 --- a/src/openms/source/ANALYSIS/ID/sources.cmake +++ b/src/openms/source/ANALYSIS/ID/sources.cmake @@ -21,7 +21,6 @@ ConsensusMapMergerAlgorithm.cpp FalseDiscoveryRate.cpp FIAMSDataProcessor.cpp FIAMSScheduler.cpp -HiddenMarkovModel.cpp HyperScore.cpp IDBoostGraph.cpp IDConflictResolverAlgorithm.cpp diff --git a/src/pyOpenMS/pxds/HiddenMarkovModel.pxd b/src/pyOpenMS/pxds/HiddenMarkovModel.pxd deleted file mode 100644 index 3dc54fd431c..00000000000 --- a/src/pyOpenMS/pxds/HiddenMarkovModel.pxd +++ /dev/null @@ -1,61 +0,0 @@ -from Types cimport * -from libcpp.map cimport map as libcpp_map -from Types cimport * -from StringList cimport * -from String cimport * - -cdef extern from "" namespace "OpenMS": - - cdef cppclass HiddenMarkovModel "OpenMS::HiddenMarkovModel": - - HiddenMarkovModel() except + nogil # wrap-doc:Hidden Markov Model implementation of PILIS - HiddenMarkovModel(HiddenMarkovModel &) except + nogil - void writeGraphMLFile(const String & filename) except + nogil # wrap-doc:Writes the HMM into a file in GraphML format - - # NAMESPACE # void write(std::ostream & out) except + nogil - double getTransitionProbability(const String & s1, const String & s2) except + nogil # wrap-doc:Returns the transition probability of the given state names - void setTransitionProbability(const String & s1, const String & s2, double prob) except + nogil # wrap-doc:Sets the transition probability of the given state names to prob - Size getNumberOfStates() except + nogil # wrap-doc:Returns the number of states - void addNewState(HMMState * state) except + nogil # wrap-doc:Registers a new state to the HMM - void addNewState(const String & name) except + nogil # wrap-doc:Registers a new state to the HMM - void addSynonymTransition(const String & name1, const String & name2, const String & synonym1, const String & synonym2) except + nogil # wrap-doc:Add a new synonym transition to the given state names - void evaluate() except + nogil # wrap-doc:Evaluate the HMM, estimates the transition probabilities from the training - void train() except + nogil # wrap-doc:Trains the HMM. Initial probabilities and emission probabilities of the emitting states should be set - void setInitialTransitionProbability(const String & state, double prob) except + nogil # wrap-doc:Sets the initial transition probability of the given state to prob - void clearInitialTransitionProbabilities() except + nogil # wrap-doc:Clears the initial probabilities - void setTrainingEmissionProbability(const String & state, double prob) except + nogil # wrap-doc:Sets the emission probability of the given state to prob - void clearTrainingEmissionProbabilities() except + nogil # wrap-doc:Clear the emission probabilities - void enableTransition(const String & s1, const String & s2) except + nogil # wrap-doc:Enables a transition; adds s1 to the predecessor list of s2 and s2 to the successor list of s1 - void disableTransition(const String & s1, const String & s2) except + nogil # wrap-doc:Disables the transition; deletes the nodes from the predecessor/successor list respectively - void disableTransitions() except + nogil # wrap-doc:Disables all transitions - # POINTER # void calculateEmissionProbabilities(Map[ HMMState *, double ] & emission_probs) except + nogil - void dump() except + nogil # wrap-doc:Writes some stats to cerr - void forwardDump() except + nogil # wrap-doc:Writes some info of the forward "matrix" to cerr - void estimateUntrainedTransitions() except + nogil # wrap-doc:Estimates the transition probabilities of not trained transitions by averages similar trained ones - HMMState * getState(const String & name) except + nogil # wrap-doc:Returns the state with the given name - void clear() except + nogil # wrap-doc:Clears all data - void setPseudoCounts(double pseudo_counts) except + nogil # wrap-doc:Sets the pseudo count that are added instead of zero - double getPseudoCounts() except + nogil # wrap-doc:Returns the pseudo counts - void setVariableModifications(StringList & modifications) except + nogil - -cdef extern from "" namespace "OpenMS": - - cdef cppclass HMMState "OpenMS::HMMState": - HMMState() except + nogil - HMMState(HMMState &) except + nogil - HMMState(const String & name, bool hidden) except + nogil - - # They don't exist ... - # bool operator==(HMMState) except + nogil - # bool operator!=(HMMState) except + nogil - - void setName(const String & name) except + nogil # wrap-doc:Sets the name of the state - String getName() except + nogil # wrap-doc:Returns the name of the state - void setHidden(bool hidden) except + nogil # wrap-doc:Sets the hidden property to the state - bool isHidden() except + nogil # wrap-doc:Returns true if the state is hidden - void addPredecessorState(HMMState * state) except + nogil # wrap-doc:Adds the given predecessor state to the list - void deletePredecessorState(HMMState * state) except + nogil # wrap-doc:Deletes the given predecessor state from the list - void addSuccessorState(HMMState * state) except + nogil # wrap-doc:Add the given successor state to the list - void deleteSuccessorState(HMMState * state) except + nogil # wrap-doc:Deletes the given successor state from the list - libcpp_set[ HMMState * ] getPredecessorStates() except + nogil # wrap-doc:Returns the predecessor states of the state - libcpp_set[ HMMState * ] getSuccessorStates() except + nogil # wrap-doc:Returns the successor states of the state diff --git a/src/pyOpenMS/tests/unittests/test000.py b/src/pyOpenMS/tests/unittests/test000.py index d063b1b6e02..4ab7aa82983 100644 --- a/src/pyOpenMS/tests/unittests/test000.py +++ b/src/pyOpenMS/tests/unittests/test000.py @@ -5049,49 +5049,6 @@ def testPercolatorOutfile(): e = pyopenms.PercolatorOutfile() assert e - - -@report -def testHiddenMarkovModel(): - hmm = pyopenms.HiddenMarkovModel() - assert hmm - - assert hmm.getNumberOfStates() == 0 - - ss = s("testState") - hmm.addNewState(ss) - - assert hmm.getNumberOfStates() == 1 - - e = pyopenms.HMMState() - # hmm.addNewState(e) # Segfault ! - - r = hmm.getState(s("testState")) - assert r - ## assert r == ss # requires == - -@report -def testHMMState(): - e = pyopenms.HMMState() - assert e - e.setName(s("somename")) - assert e.getName() == "somename", e.getName() - e.setHidden(True) - assert e.isHidden() - - pre = pyopenms.HMMState() - pre.setName(s("pre")) - suc = pyopenms.HMMState() - suc.setName(s("suc")) - - e.addPredecessorState(pre) - e.addSuccessorState(suc) - - assert e.getPredecessorStates() - assert e.getSuccessorStates() - - - @report def testProteaseDB(): edb = pyopenms.ProteaseDB() diff --git a/src/tests/class_tests/openms/data/HiddenMarkovModel_test.graphML b/src/tests/class_tests/openms/data/HiddenMarkovModel_test.graphML deleted file mode 100644 index 47c8d4541ad..00000000000 --- a/src/tests/class_tests/openms/data/HiddenMarkovModel_test.graphML +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - base - - - - - - - state_name_hidden2 - - - - - - - state_name_emitting2 - - - - - - - state_name_emitting - - - - - - - state_name_hidden - - - - - diff --git a/src/tests/class_tests/openms/executables.cmake b/src/tests/class_tests/openms/executables.cmake index b7aed4a98f2..769010783b7 100644 --- a/src/tests/class_tests/openms/executables.cmake +++ b/src/tests/class_tests/openms/executables.cmake @@ -481,7 +481,6 @@ set(analysis_executables_list FIAMSScheduler_test FLASHDeconvAlgorithm_test FLASHDeconvHelperStructs_test - HiddenMarkovModel_test IDBoostGraph_test IDMapper_test IDMergerAlgorithm_test diff --git a/src/tests/class_tests/openms/source/HiddenMarkovModel_test.cpp b/src/tests/class_tests/openms/source/HiddenMarkovModel_test.cpp deleted file mode 100644 index d1ebaf53cf5..00000000000 --- a/src/tests/class_tests/openms/source/HiddenMarkovModel_test.cpp +++ /dev/null @@ -1,432 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Timo Sachsenberg $ -// $Authors: Andreas Bertsch $ -// -------------------------------------------------------------------------- - -#include -#include - -/////////////////////////// - -#include -#include -#include - -#include -#include -#include - -/////////////////////////// - -START_TEST(HiddenMarkovModel, "$Id$") - -///////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////// - -using namespace OpenMS; -using namespace std; - -// the HMM -// 0.5 0.25 0.25 -// | | | -// v v v -// A B C -// | | | -// v v v -// A_2 B_2 C_2 -// \ / | -// \ / | -// \ / | -// v v v -// AB_3 C_3 -// -// each edge is accompanied by an edge to the "end" state -// the weight of each edge is 0.5 - -HiddenMarkovModel the_hmm; -HMMState* state_A = new HMMState("A", true); -HMMState* state_B = new HMMState("B", true); -HMMState* state_C = new HMMState("C", true); -HMMState* state_A_2 = new HMMState("A_2", true); -HMMState* state_B_2 = new HMMState("B_2", true); -HMMState* state_C_2 = new HMMState("C_2", true); -HMMState* state_AB_3 = new HMMState("AB_3", false); -HMMState* state_C_3 = new HMMState("C_3", false); -HMMState* state_end = new HMMState("end", false); - -the_hmm.addNewState(state_A); -the_hmm.addNewState(state_B); -the_hmm.addNewState(state_C); -the_hmm.addNewState(state_A_2); -the_hmm.addNewState(state_B_2); -the_hmm.addNewState(state_C_2); -the_hmm.addNewState(state_AB_3); -the_hmm.addNewState(state_C_3); -the_hmm.addNewState(state_end); - -HiddenMarkovModel* ptr = nullptr; -HiddenMarkovModel* nullPointer = nullptr; -HMMState* state_ptr = nullptr; -HMMState* state_ptr2 = nullptr; -HMMState* state_ptr3 = new HMMState("base", true); -HMMState* state_nullPointer = nullptr; - -// Hidden Markov Model State Tests -START_SECTION([EXTRA](HMMState())) - state_ptr = new HMMState(); - TEST_NOT_EQUAL(state_ptr, state_nullPointer) -END_SECTION - -START_SECTION([EXTRA](virtual ~HMMState())) - delete state_ptr; -END_SECTION - -state_ptr = nullptr; - -START_SECTION([EXTRA](HMMState(const String& name, bool hidden = true))) - state_ptr = new HMMState("state_name_hidden", true); - TEST_NOT_EQUAL(state_ptr, state_nullPointer) - state_ptr2 = new HMMState("state_name_emitting", false); - TEST_NOT_EQUAL(state_ptr2, state_nullPointer) -END_SECTION - -START_SECTION([EXTRA](const String& getName() const)) - TEST_EQUAL(state_ptr->getName(), "state_name_hidden"); - TEST_EQUAL(state_ptr2->getName(), "state_name_emitting"); -END_SECTION - -START_SECTION([EXTRA](bool isHidden() const)) - TEST_EQUAL(state_ptr->isHidden(), true) - TEST_EQUAL(state_ptr2->isHidden(), false) -END_SECTION - -START_SECTION([EXTRA](void setName(const String& name))) - state_ptr->setName("state_name_hidden2"); - TEST_EQUAL(state_ptr->getName(), "state_name_hidden2") - state_ptr->setName("state_name_hidden"); -END_SECTION - -START_SECTION([EXTRA](void setHidden(bool hidden))) - state_ptr->setHidden(false); - TEST_EQUAL(state_ptr->isHidden(), false) - state_ptr->setHidden(true); - TEST_EQUAL(state_ptr->isHidden(), true) -END_SECTION - -START_SECTION([EXTRA](const std::set& getPredecessorStates() const)) - TEST_EQUAL(state_ptr->getPredecessorStates().size(), 0) -END_SECTION - -START_SECTION([EXTRA](const std::set& getSuccessorStates() const)) - TEST_EQUAL(state_ptr->getSuccessorStates().size(), 0) -END_SECTION - -START_SECTION([EXTRA](void addPredecessorState(HMMState* state))) - state_ptr->addPredecessorState(state_ptr2); - TEST_EQUAL(state_ptr->getPredecessorStates().size(), 1); - TEST_EQUAL(*state_ptr->getPredecessorStates().begin(), state_ptr2); -END_SECTION - -START_SECTION([EXTRA](void deletePredecessorState(HMMState* state))) - state_ptr->deletePredecessorState(state_ptr2); - TEST_EQUAL(state_ptr->getPredecessorStates().size(), 0); -END_SECTION - -START_SECTION([EXTRA](void addSuccessorState(HMMState* state))) - state_ptr->addSuccessorState(state_ptr2); - TEST_EQUAL(state_ptr->getSuccessorStates().size(), 1); - TEST_EQUAL(*state_ptr->getSuccessorStates().begin(), state_ptr2); -END_SECTION - -START_SECTION([EXTRA](void deleteSuccessorState(HMMState* state))) - state_ptr->deleteSuccessorState(state_ptr2); - TEST_EQUAL(state_ptr->getSuccessorStates().size(), 0); -END_SECTION - - -// Hidden Markov Model Tests -START_SECTION((HiddenMarkovModel())) - ptr = new HiddenMarkovModel(); - TEST_NOT_EQUAL(ptr, nullPointer) -END_SECTION - -START_SECTION((virtual ~HiddenMarkovModel())) - delete ptr; -END_SECTION - -ptr = new HiddenMarkovModel(); - -START_SECTION((Size getNumberOfStates() const)) - TEST_EQUAL(ptr->getNumberOfStates(), 0) -END_SECTION - -START_SECTION((void addNewState(HMMState* state))) - ptr->addNewState(state_ptr); - TEST_EQUAL(ptr->getNumberOfStates(), 1) - ptr->addNewState(state_ptr2); - ptr->addNewState(state_ptr3); - TEST_EQUAL(ptr->getNumberOfStates(), 3) -END_SECTION - -START_SECTION((HMMState* getState(const String& name))) - TEST_EQUAL(ptr->getState("state_name_hidden"), state_ptr) -END_SECTION - -START_SECTION((const HMMState* getState(const String& name) const)) - TEST_EQUAL(ptr->getState("state_name_hidden"), state_ptr) -END_SECTION - -START_SECTION((double getTransitionProbability(const String& s1, const String& s2) const)) - TEST_REAL_SIMILAR(ptr->getTransitionProbability("state_name_hidden", "state_name_emitting"), 0.0) -END_SECTION - -START_SECTION((void setTransitionProbability(const String& s1, const String& s2, double prob))) - ptr->setTransitionProbability("state_name_hidden", "state_name_emitting", 0.3); - TEST_REAL_SIMILAR(ptr->getTransitionProbability("state_name_hidden", "state_name_emitting"), 0.3) - - the_hmm.setTransitionProbability("A", "A_2", 0.5); - the_hmm.setTransitionProbability("A", "end", 0.5); - the_hmm.setTransitionProbability("B", "B_2", 0.5); - the_hmm.setTransitionProbability("B", "end", 0.5); - the_hmm.setTransitionProbability("C", "C_2", 0.5); - the_hmm.setTransitionProbability("C", "end", 0.5); - the_hmm.setTransitionProbability("A_2", "AB_3", 0.5); - the_hmm.setTransitionProbability("A_2", "end", 0.5); - the_hmm.setTransitionProbability("B_2", "AB_3", 0.5); - the_hmm.setTransitionProbability("B_2", "end", 0.5); - the_hmm.setTransitionProbability("C_2", "C_3", 0.5); - the_hmm.setTransitionProbability("C_2", "end", 0.5); - - TEST_REAL_SIMILAR(the_hmm.getTransitionProbability("A", "A_2"), 0.5) - TEST_REAL_SIMILAR(the_hmm.getTransitionProbability("A", "end"), 0.5) - TEST_REAL_SIMILAR(the_hmm.getTransitionProbability("B", "B_2"), 0.5) - TEST_REAL_SIMILAR(the_hmm.getTransitionProbability("B", "end"), 0.5) - TEST_REAL_SIMILAR(the_hmm.getTransitionProbability("C", "C_2"), 0.5) - TEST_REAL_SIMILAR(the_hmm.getTransitionProbability("C", "end"), 0.5) - TEST_REAL_SIMILAR(the_hmm.getTransitionProbability("A_2", "AB_3"), 0.5) - TEST_REAL_SIMILAR(the_hmm.getTransitionProbability("A_2", "end"), 0.5) - TEST_REAL_SIMILAR(the_hmm.getTransitionProbability("B_2", "AB_3"), 0.5) - TEST_REAL_SIMILAR(the_hmm.getTransitionProbability("B_2", "end"), 0.5) - TEST_REAL_SIMILAR(the_hmm.getTransitionProbability("C_2", "C_3"), 0.5) - TEST_REAL_SIMILAR(the_hmm.getTransitionProbability("C_2", "end"), 0.5) - -END_SECTION - -START_SECTION((void addSynonymTransition(const String& name1, const String& name2, const String& synonym1, const String& synonym2))) - HMMState* s1 = new HMMState("state_name_hidden2"); - HMMState* s2 = new HMMState("state_name_emitting2"); - ptr->addNewState(s1); - ptr->addNewState(s2); - ptr->addSynonymTransition("state_name_hidden", "state_name_emitting", "state_name_hidden2", "state_name_emitting2"); - NOT_TESTABLE -END_SECTION - -START_SECTION((void setInitialTransitionProbability(const String& state, double prob))) - ptr->setInitialTransitionProbability("state_name_hidden2", 1.0); - NOT_TESTABLE - - the_hmm.setInitialTransitionProbability("A", 0.5); - the_hmm.setInitialTransitionProbability("B", 0.25); - the_hmm.setInitialTransitionProbability("C", 0.25); - -END_SECTION - -START_SECTION((void enableTransition(const String& s1, const String& s2))) - the_hmm.enableTransition("A", "A_2"); - the_hmm.enableTransition("A", "end"); - the_hmm.enableTransition("B", "B_2"); - the_hmm.enableTransition("B", "end"); - the_hmm.enableTransition("C", "C_2"); - the_hmm.enableTransition("C", "end"); - the_hmm.enableTransition("A_2", "AB_3"); - the_hmm.enableTransition("A_2", "end"); - the_hmm.enableTransition("B_2", "AB_3"); - the_hmm.enableTransition("B_2", "end"); - the_hmm.enableTransition("C_2", "C_3"); - the_hmm.enableTransition("C_2", "end"); - NOT_TESTABLE // will be tested implicetly below -END_SECTION - -START_SECTION((void disableTransition(const String& s1, const String& s2))) - NOT_TESTABLE // will be tested implicitely below -END_SECTION - -START_SECTION((void disableTransitions())) - ptr->disableTransitions(); - NOT_TESTABLE -END_SECTION - -START_SECTION((void calculateEmissionProbabilities(Map& emission_probs))) - std::map emission_probs; - the_hmm.calculateEmissionProbabilities(emission_probs); - TEST_EQUAL(emission_probs.size(), 3) - double sum(0); - TOLERANCE_ABSOLUTE(0.01) - for (std::map::const_iterator it = emission_probs.begin(); it != emission_probs.end(); ++it) - { - if (it->first->getName() == "end") - { - sum += it->second; - TEST_REAL_SIMILAR(it->second, 12.0/16.0) - } - else if (it->first->getName() == "AB_3") - { - sum += it->second; - TEST_REAL_SIMILAR(it->second, 3.0/16.0) - } - else if (it->first->getName() == "C_3") - { - sum += it->second; - TEST_REAL_SIMILAR(it->second, 1.0/16.0) - } - } - TEST_REAL_SIMILAR(sum , 1.0) -END_SECTION - -START_SECTION((void setTrainingEmissionProbability(const String& state, double prob))) - the_hmm.setTrainingEmissionProbability("end", 0.5); - the_hmm.setTrainingEmissionProbability("AB_3", 0.3); - the_hmm.setTrainingEmissionProbability("C_3", 0.2); - NOT_TESTABLE -END_SECTION - -START_SECTION((void train())) - the_hmm.train(); - NOT_TESTABLE -END_SECTION - -START_SECTION((void evaluate())) - the_hmm.evaluate(); - NOT_TESTABLE -END_SECTION - -START_SECTION((void estimateUntrainedTransitions())) - NOT_TESTABLE // only applicable to the fragmentation model -END_SECTION - -START_SECTION(([EXTRA] void calculateEmissionProbabilities(Map& emission_probs))) - std::map emission_probs; - the_hmm.calculateEmissionProbabilities(emission_probs); - TEST_EQUAL(emission_probs.size(), 3) - double sum(0); - TOLERANCE_ABSOLUTE(0.01) - for (std::map::const_iterator it = emission_probs.begin(); it != emission_probs.end(); ++it) - { - if (it->first->getName() == "end") - { - sum += it->second; - TEST_REAL_SIMILAR(it->second, 0.8456) - } - else if (it->first->getName() == "AB_3") - { - sum += it->second; - TEST_REAL_SIMILAR(it->second, 0.125) - } - else if (it->first->getName() == "C_3") - { - sum += it->second; - TEST_REAL_SIMILAR(it->second, 0.02941) - } - } - TEST_REAL_SIMILAR(sum , 1.0) - -END_SECTION - -START_SECTION([EXTRA](HMMState(const HMMState& state))) - HMMState copy(*state_ptr); - TEST_EQUAL(copy.getName(), state_ptr->getName()) - TEST_EQUAL(copy.getSuccessorStates().size(), state_ptr->getSuccessorStates().size()) - TEST_EQUAL(copy.getPredecessorStates().size(), state_ptr->getPredecessorStates().size()) - TEST_EQUAL(copy.isHidden(), state_ptr->isHidden()) -END_SECTION - -START_SECTION((HiddenMarkovModel(const HiddenMarkovModel& hmm_new))) - HiddenMarkovModel copy(*ptr); - TEST_EQUAL(copy.getNumberOfStates(), ptr->getNumberOfStates()) -END_SECTION - -START_SECTION([EXTRA](HMMState& operator = (const HMMState&))) - HMMState copy; - copy = *state_ptr; - TEST_EQUAL(copy.getName(), state_ptr->getName()) - TEST_EQUAL(copy.getSuccessorStates().size(), state_ptr->getSuccessorStates().size()) - TEST_EQUAL(copy.getPredecessorStates().size(), state_ptr->getPredecessorStates().size()) - TEST_EQUAL(copy.isHidden(), state_ptr->isHidden()) -END_SECTION - -START_SECTION((HiddenMarkovModel& operator = (const HiddenMarkovModel&))) - HiddenMarkovModel copy; - copy = *ptr; - TEST_EQUAL(copy.getNumberOfStates(), ptr->getNumberOfStates()) -END_SECTION - -START_SECTION((void clearInitialTransitionProbabilities())) - ptr->clearInitialTransitionProbabilities(); - NOT_TESTABLE -END_SECTION - -START_SECTION((void clearTrainingEmissionProbabilities())) - ptr->clearTrainingEmissionProbabilities(); - NOT_TESTABLE -END_SECTION - -START_SECTION((void dump())) - NOT_TESTABLE -END_SECTION - -START_SECTION((void forwardDump())) - NOT_TESTABLE -END_SECTION - -START_SECTION((void write(std::ostream& out) const)) - stringstream ss; - ptr->write(ss); - String str_stream = ss.str(); - TEST_EQUAL(str_stream.hasSubstring("State"), true); - TEST_EQUAL(str_stream.hasSubstring("Transition"), true); - TEST_EQUAL(str_stream.hasSubstring("Synonym"), true); -END_SECTION - -START_SECTION((void writeGraphMLFile(const String& filename))) - String filename; - NEW_TMP_FILE(filename) - ptr->writeGraphMLFile(filename); - //TEST_FILE_SIMILAR(filename, OPENMS_GET_TEST_DATA_PATH("HiddenMarkovModel_test.graphML")) - NOT_TESTABLE // just a convenience function; the sorting of the nodes will depend on the instance... -END_SECTION - -START_SECTION((void setVariableModifications(const StringList &modifications))) - StringList mods = ListUtils::create("Carboxymethyl (C),Oxidation (M)"); - ptr->setVariableModifications(mods); - NOT_TESTABLE -END_SECTION - -START_SECTION((void clear())) - ptr->clear(); - TEST_EQUAL(ptr->getNumberOfStates(), 0) -END_SECTION - -START_SECTION(void addNewState(const String &name)) - ptr->addNewState("new_fancy_state"); - TEST_EQUAL(ptr->getNumberOfStates(), 1) -END_SECTION - -START_SECTION(void setPseudoCounts(double pseudo_counts)) - ptr->setPseudoCounts(10e-3); - NOT_TESTABLE // tested in next section -END_SECTION - -START_SECTION(double getPseudoCounts() const) - TEST_EQUAL(ptr->getPseudoCounts(), 10e-3) -END_SECTION - -delete ptr; - -///////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////// - -END_TEST - diff --git a/tools/pychecker_ignore.yaml b/tools/pychecker_ignore.yaml index 33d2901bc49..28f0b478d7e 100644 --- a/tools/pychecker_ignore.yaml +++ b/tools/pychecker_ignore.yaml @@ -799,9 +799,6 @@ PyOpenMSChecker: OpenMS::FeatureFinderAlgorithmPickedHelperStructs::MassTrace: - max_peak - peaks - OpenMS::HiddenMarkovModel: - - write # stream - - calculateEmissionProbabilities # ptr inside Map OpenMS::MarkerMower: - insertmarker OpenMS::ProteinResolver::ProteinEntry: From 671b07ee59a97a322adf516fa7e732e81363bd05 Mon Sep 17 00:00:00 2001 From: Timo Sachsenberg Date: Tue, 19 Mar 2024 14:48:31 +0100 Subject: [PATCH 242/242] remove proton distribution model (#7402) --- .../DefaultParamHandlerDocumenter.cpp | 2 - .../ANALYSIS/ID/ProtonDistributionModel.h | 147 -- .../include/OpenMS/ANALYSIS/ID/sources.cmake | 1 - .../ANALYSIS/ID/ProtonDistributionModel.cpp | 1802 ----------------- src/openms/source/ANALYSIS/ID/sources.cmake | 1 - src/pyOpenMS/pxds/ProtonDistributionModel.pxd | 70 - .../class_tests/openms/executables.cmake | 1 - .../source/ProtonDistributionModel_test.cpp | 117 -- 8 files changed, 2141 deletions(-) delete mode 100644 src/openms/include/OpenMS/ANALYSIS/ID/ProtonDistributionModel.h delete mode 100644 src/openms/source/ANALYSIS/ID/ProtonDistributionModel.cpp delete mode 100644 src/pyOpenMS/pxds/ProtonDistributionModel.pxd delete mode 100644 src/tests/class_tests/openms/source/ProtonDistributionModel_test.cpp diff --git a/doc/doxygen/parameters/DefaultParamHandlerDocumenter.cpp b/doc/doxygen/parameters/DefaultParamHandlerDocumenter.cpp index 272bb2865ba..88d36468060 100644 --- a/doc/doxygen/parameters/DefaultParamHandlerDocumenter.cpp +++ b/doc/doxygen/parameters/DefaultParamHandlerDocumenter.cpp @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -457,7 +456,6 @@ int main(int argc, char** argv) DOCME(MorphologicalFilter); DOCME(MassDecompositionAlgorithm); DOCME(MRMFragmentSelection); - DOCME(ProtonDistributionModel); DOCME(MascotRemoteQuery); DOCME(MascotGenericFile); DOCME(Fitter1D); diff --git a/src/openms/include/OpenMS/ANALYSIS/ID/ProtonDistributionModel.h b/src/openms/include/OpenMS/ANALYSIS/ID/ProtonDistributionModel.h deleted file mode 100644 index d1f18b5d1c7..00000000000 --- a/src/openms/include/OpenMS/ANALYSIS/ID/ProtonDistributionModel.h +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Timo Sachsenberg $ -// $Authors: Andreas Bertsch $ -// -------------------------------------------------------------------------- - - -#pragma once - -#include -#include -#include -#include - -namespace OpenMS -{ - class AASequence; - - /** - @brief A proton distribution model to calculate the proton distribution over charged peptides - - The model uses proton affinity values of backbone nitrogens and sidechains to calculate the - proton distribution of charged peptide among these sites. The possible sites are the peptide - bonds between the amino acids, the side chains and the C-terminus and N-terminus. The calculation - is done calculating a Boltzmann distribution of the sites. - - Details and the proton affinities can be found in - Z. Zhang, Prediction of Low-Energy Collision-Induced Dissociation Spectra of Peptides, - Anal. Chem., 76 (14), 3908 - 3922, 2004 - - A proton distribution can be calculated using the getProtonDistribution method. The backbone - probabilities are reported in the first parameter (index 0 for the N-terminus, index 1 for the - first peptide bond...), the site chain probabilities are reported in the second parameter - (index 0, for the first amino acid...). The peptide and the number of protons as well as type - of peptide (can be Reside::YIon for peptides and y-ions and any other ion type). - - Charge state intensities of differently charged equal (e.g. y7+ and y7++) ions can be calculated - using the getChargeStateIntensities function. - - @htmlinclude OpenMS_ProtonDistributionModel.parameters - */ - class OPENMS_DLLAPI ProtonDistributionModel : - public DefaultParamHandler - { -public: - - /** Constructor and destructors - */ - //@{ - /// default constructor - ProtonDistributionModel(); - - /// copy constructor - ProtonDistributionModel(const ProtonDistributionModel & model); - - /// destructor - ~ProtonDistributionModel() override; - //@} - - /// assignment operator - ProtonDistributionModel & operator=(const ProtonDistributionModel & pdm); - - /** @name Enumerations - */ - //@{ - /// the type of fragmentation - enum FragmentationType - { - ChargeDirected = 0, - ChargeRemote, - SideChain - }; - //@} - - /** @brief calculates a proton distribution of the given charged peptide - - @param bb_charges the calculated probabilities of the backbone sites (including N-terminus and C-terminus) - @param sc_charges the calculated probabilities of the side chain sites - @param peptide the peptide - @param charge the charge - @param res_type the type of the ion given in peptide. Peptides are handled as y-ions, i.e. Residue::YIon - */ - void getProtonDistribution(std::vector & bb_charges, std::vector & sc_charges, const AASequence & peptide, Int charge, Residue::ResidueType res_type = Residue::YIon); - - /** @brief calculates the charge state intensities of different charge states of the same ion - - @param peptide the peptide - @param n_term_ion the prefix ion sequence - @param c_term_ion the suffix ion sequence - @param charge the charge - @param n_term_type the ion type of the N-terminal ion; valid values are Residue::AIon, Residue::BIon - @param n_term_intensities the probability of seeing a charged prefix ions (first index corresponds to ion of charge 1) - @param c_term_intensities the probability of seeing a charged suffix ions (first index corresponds to ion of charge 2) - @param type the type of fragmentation (charge-directed, charge-remote of side chain) - */ - //void getChargeStateIntensities(const AASequence& peptide, const AASequence& n_term_ion, const AASequence& c_term_ion, Int charge, Residue::ResidueType n_term_type, double& n_term1, double& c_term1, double& n_term2, double& c_term2, FragmentationType type); - - - void getChargeStateIntensities(const AASequence & peptide, const AASequence & n_term_ion, const AASequence & c_term_ion, Int charge, Residue::ResidueType n_term_type, - std::vector & n_term_intensities, std::vector & c_term_intensities, FragmentationType type); - - /// sets the proton distributions of the whole peptide, they are needed for the getChargeStateIntensities_ method and need to be recalculated each time if not given - void setPeptideProtonDistribution(const std::vector & bb_charge, const std::vector & sc_charge); - -protected: - - // calculates the proton distribution - void calculateProtonDistribution_(const AASequence & peptide, Int charge, Residue::ResidueType res_type = Residue::YIon, bool fixed_proton = false, Size cleavage_site = 0, bool use_most_basic_site = false); - - void calculateProtonDistributionCharge1_(const AASequence & peptide, Residue::ResidueType res_type); - void calculateProtonDistributionCharge2_(const AASequence & peptide, Residue::ResidueType res_type, bool fixed_proton, Size cleavage_site, bool use_most_basic_site); - void calculateProtonDistributionGreater2_(const AASequence & peptide, Int charge, Residue::ResidueType res_type); - - void calculateProtonDistributionIonPair_(const AASequence & peptide, Residue::ResidueType type, Size cleavage_site); - - // returns the proton affinity of the peptide with the given charge and ion type - //double getProtonAffinity_(const AASequence& ion, Int charge, Residue::ResidueType res_type); - - // returns the (relative) Intensities of the possible charge states of the ion from peptide - //std::vector getChargeStateIntensities_(const AASequence& peptide, const AASequence& ion, Int charge, Residue::ResidueType res_type); - - - void calcChargeStateIntensities_(const AASequence & peptide, const AASequence & n_term_ion, const AASequence & c_term_ion, Int charge, - Residue::ResidueType n_term_type, std::vector & n_term_intensities, std::vector & c_term_intensities, FragmentationType type); - - // calculates the intensities of the different possible charge states - void calcChargeStateIntensities_(const AASequence & peptide, const AASequence & n_term_ion, const AASequence & c_term_ion, Int charge, Residue::ResidueType n_term_type, double & n_term1, double & c_term1, double & n_term2, double & c_term2, FragmentationType type); - - // returns the left and right GB values, NH2 and COOH if at terminus - void getLeftAndRightGBValues_(const AASequence & peptide, double & left_gb, double & right_gb, Size position); - - std::vector sc_charge_; - std::vector bb_charge_; - std::vector sc_charge_full_; - std::vector bb_charge_full_; - std::vector sc_charge_ion_n_term_; - std::vector bb_charge_ion_n_term_; - std::vector sc_charge_ion_c_term_; - std::vector bb_charge_ion_c_term_; - double E_; - double E_c_term_; - double E_n_term_; - - }; -} diff --git a/src/openms/include/OpenMS/ANALYSIS/ID/sources.cmake b/src/openms/include/OpenMS/ANALYSIS/ID/sources.cmake index 216e56205e7..9484ece68a7 100644 --- a/src/openms/include/OpenMS/ANALYSIS/ID/sources.cmake +++ b/src/openms/include/OpenMS/ANALYSIS/ID/sources.cmake @@ -38,7 +38,6 @@ PeptideIndexing.h PeptideProteinResolution.h PercolatorFeatureSetHelper.h PrecursorPurity.h -ProtonDistributionModel.h PScore.h SimpleSearchEngineAlgorithm.h SiriusExportAlgorithm.h diff --git a/src/openms/source/ANALYSIS/ID/ProtonDistributionModel.cpp b/src/openms/source/ANALYSIS/ID/ProtonDistributionModel.cpp deleted file mode 100644 index 8321d0c78ac..00000000000 --- a/src/openms/source/ANALYSIS/ID/ProtonDistributionModel.cpp +++ /dev/null @@ -1,1802 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Timo Sachsenberg $ -// $Authors: Andreas Bertsch $ -// -------------------------------------------------------------------------- - - -#include - -#include -#include -#include - -#include -#include -#include - - -#define COULOMB_REPULSION (double)47.0 // from zhang: 47.0 kJ/mol -#define COULOMB_REPULSION2 (double)47.0 // new - -//#define CALC_CHARGE_STATES_DEBUG - -using namespace std; - -namespace OpenMS -{ - ProtonDistributionModel::ProtonDistributionModel() : - DefaultParamHandler("ProtonDistributionModel"), - E_(0), - E_c_term_(0), - E_n_term_(0) - { - defaults_.setValue("gb_bb_l_NH2", 916.84, "Gas-phase basicity value of N-terminus", {"advanced"}); - defaults_.setValue("gb_bb_r_COOH", -95.82, "Gas-phase basicity value of C-terminus", {"advanced"}); - defaults_.setValue("gb_bb_r_b-ion", 36.46, "Gas-phase basicity value of b-ion C-terminus", {"advanced"}); - defaults_.setValue("gb_bb_r_a-ion", 46.85, "Gas-phase basicity value of a-ion C-terminus", {"advanced"}); - defaults_.setValue("sigma", 0.5, "Width of the gaussian which distributes the mobile protons over the charge states, only for z > 3.", {"advanced"}); - defaults_.setValue("temperature", 500.0, "Temperature term ", {"advanced"}); - - defaultsToParam_(); - } - - ProtonDistributionModel::~ProtonDistributionModel() = default; - - ProtonDistributionModel::ProtonDistributionModel(const ProtonDistributionModel & model) : - DefaultParamHandler(model), - sc_charge_(model.sc_charge_), - bb_charge_(model.bb_charge_), - sc_charge_full_(model.sc_charge_full_), - bb_charge_full_(model.bb_charge_full_), - E_(model.E_), - E_c_term_(model.E_c_term_), - E_n_term_(model.E_n_term_) - { - } - - ProtonDistributionModel & ProtonDistributionModel::operator=(const ProtonDistributionModel & model) - { - if (this != &model) - { - DefaultParamHandler::operator=(model); - sc_charge_ = model.sc_charge_; - bb_charge_ = model.bb_charge_; - sc_charge_full_ = model.sc_charge_full_; - bb_charge_full_ = model.bb_charge_full_; - E_ = model.E_; - E_c_term_ = model.E_c_term_; - E_n_term_ = model.E_n_term_; - } - return *this; - } - - void ProtonDistributionModel::setPeptideProtonDistribution(const vector & bb_charge, const vector & sc_charge) - { - bb_charge_full_ = bb_charge; - sc_charge_full_ = sc_charge; - } - - void ProtonDistributionModel::getProtonDistribution(vector & bb_charges, - vector & sc_charges, - const AASequence & peptide, - Int charge, - Residue::ResidueType res_type) - { - bb_charge_ = vector(peptide.size() + 1, 0.0); - sc_charge_ = vector(peptide.size(), 0.0); - calculateProtonDistribution_(peptide, charge, res_type); - bb_charges = bb_charge_; - sc_charges = sc_charge_; - } - -/* - void ProtonDistributionModel::getChargeStateIntensities(const AASequence& peptide, - const AASequence& n_term_ion, - const AASequence& c_term_ion, - Int charge, - Residue::ResidueType n_term_type, - double& n_term1, - double& c_term1, - double& n_term2, - double& c_term2, - FragmentationType type) - { - - //calcChargeStateIntensities_(peptide, n_term_ion, c_term_ion, charge, n_term_type, n_term1, c_term1, n_term2, c_term2, type); - vector n_term_intensities, c_term_intensities; - calcChargeStateIntensities_(peptide, n_term_ion, c_term_ion, charge, n_term_type, n_term_intensities, c_term_intensities, type); - n_term1 = n_term_intensities[0]; - c_term1 = c_term_intensities[0]; - if (charge == 1) - { - n_term2 = 0; - c_term2 = 0; - } - else - { - n_term2 = n_term_intensities[1]; - c_term2 = c_term_intensities[1]; - } - return; - } -*/ - - // this method calculates the distribution of protons, by using two separate ions given by the precursor peptide ion and the cleavage site - // this is needed for charge directed cases, where the activated proton needs to be distributed between the two ions - // cleavage_site is one-based; so b1/yk-1 would be cleavage_site == 1; it can be in the range [0,peptide.size()] - void ProtonDistributionModel::calculateProtonDistributionIonPair_(const AASequence & peptide, - Residue::ResidueType n_res_type, - Size cleavage_site) - { - // TODO model this using one calculation for both ions - - double q(0); // partition function = state sum - - double gb_bb_l_NH2 = (double)param_.getValue("gb_bb_l_NH2"); - double gb_bb_r_COOH = (double)param_.getValue("gb_bb_r_COOH"); - double gb_bb_r_bion = (double)param_.getValue("gb_bb_r_b-ion"); - double gb_bb_r_aion = (double)param_.getValue("gb_bb_r_a-ion"); - double T = (double)param_.getValue("temperature"); - - // we calculate the distribution of only the last proton, all other protons are already distributed - - // so, first calculate the partition function Q of the N-term ion - for (Size i = 0; i != cleavage_site; ++i) - { - // backbone energy - if (i == 0) - { - double E = -(gb_bb_l_NH2 + peptide[i].getBackboneBasicityRight()); - q += (1.0 - bb_charge_[i]) * exp(-E * 1000 / (Constants::R * T)); - } - else - { - if (i == cleavage_site - 1) - { - // position at the C-terminal end of the ion - double E(-peptide[i].getBackboneBasicityLeft()); - if (n_res_type == Residue::BIon) - { - E -= gb_bb_r_bion; - } - else - { - // a-ion - E -= gb_bb_r_aion; - } - q += (1.0 - bb_charge_[i + 1]) * exp(-E * 1000 / (Constants::R * T)); - } - - // normal internal backbone position - double E = -(peptide[i - 1].getBackboneBasicityLeft() + peptide[i].getBackboneBasicityRight()); - q += (1.0 - bb_charge_[i]) * exp(-E * 1000 / (Constants::R * T)); - } - - // side chains - if (peptide[i].getSideChainBasicity() != 0) - { - double E = -peptide[i].getSideChainBasicity(); - q += (1.0 - sc_charge_[i]) * exp(-E * 1000 / (Constants::R * T)); - } - } - - //cerr << "Q-N-term=" << q << endl; - - // add the parts of the C-term ion to the partition function - for (Size i = cleavage_site; i != peptide.size(); ++i) - { - // backbone energy - if (i == cleavage_site) - { - double E = -(gb_bb_l_NH2 + peptide[i].getBackboneBasicityRight()); - //cerr << "H3N: " << (1.0 - bb_charge_[i]) * exp(-E * 1000 / (Constants::R * T)) << endl; - q += (1.0 - bb_charge_[i]) * exp(-E * 1000 / (Constants::R * T)); - } - else - { - if (i == peptide.size() - 1) - { - // position at the C-terminal end of the ion, C-term ion always has COOH ending... - double E(0); - E = -(peptide[i].getBackboneBasicityLeft() + gb_bb_r_COOH); - //cerr << "COOH: " << (1.0 - bb_charge_[i + 1]) * exp(-E * 1000 / (Constants::R * T)) << endl; - q += (1.0 - bb_charge_[i + 1]) * exp(-E * 1000 / (Constants::R * T)); - } - - // normal internal backbone position - double E = -(peptide[i - 1].getBackboneBasicityLeft() + peptide[i].getBackboneBasicityRight()); - //cerr << "Internal: " << (1.0 - bb_charge_[i]) * exp(-E * 1000/ (Constants::R * T)) << endl; - q += (1.0 - bb_charge_[i]) * exp(-E * 1000 / (Constants::R * T)); - } - // side chains - if (peptide[i].getSideChainBasicity() != 0) - { - double E = -peptide[i].getSideChainBasicity(); - //cerr << "SideChain: " << (1.0 - sc_charge_[i]) * exp(-E * 1000 / (Constants::R * T)) << endl; - q += (1.0 - sc_charge_[i]) * exp(-E * 1000 / (Constants::R * T)); - } - } - - //cerr << "Q-C-term=" << q << endl; - - // calculate proton availabilities of the N-terminal ion - for (Size i = 0; i != cleavage_site; ++i) - { - // backbone - if (i == 0) - { - double E = -(gb_bb_l_NH2 + peptide[i].getBackboneBasicityRight()); - bb_charge_ion_n_term_[i] = (1.0 - bb_charge_[i]) * exp(-E * 1000 / (Constants::R * T)) / q; - } - else - { - if (i == cleavage_site - 1) - { - double E(-peptide[i].getBackboneBasicityLeft()); - - if (n_res_type == Residue::BIon) - { - E -= gb_bb_r_bion; - } - else - { - // a-ion - E -= gb_bb_r_aion; - } - bb_charge_ion_n_term_[i + 1] = (1.0 - bb_charge_[i + 1]) * exp(-E * 1000 / (Constants::R * T)) / q; - } - - // normal backbone position - double E = -(peptide[i - 1].getBackboneBasicityLeft() + peptide[i].getBackboneBasicityRight()); - bb_charge_ion_n_term_[i] = (1.0 - bb_charge_[i]) * exp(-E * 1000 / (Constants::R * T)) / q; - } - - // side chains - if (peptide[i].getSideChainBasicity() != 0) - { - double E = -peptide[i].getSideChainBasicity(); - sc_charge_ion_n_term_[i] = (1.0 - sc_charge_[i]) * exp(-E * 1000 / (Constants::R * T)) / q; - } - } - - // same for the C-term ion - for (Size i = cleavage_site; i != peptide.size(); ++i) - { - // backbone - if (i == cleavage_site) - { - double E = -(gb_bb_l_NH2 + peptide[i].getBackboneBasicityRight()); - bb_charge_ion_c_term_[i - cleavage_site] = (1.0 - bb_charge_[i]) * exp(-E * 1000 / (Constants::R * T)) / q; - } - else - { - if (i == peptide.size() - 1) - { - double E = -(peptide[i].getBackboneBasicityLeft() + gb_bb_r_COOH); - bb_charge_ion_c_term_[i + 1 - cleavage_site] = (1.0 - bb_charge_[i + 1]) * exp(-E * 1000 / (Constants::R * T)) / q; - } - - // normal backbone position - double E = -(peptide[i - 1].getBackboneBasicityLeft() + peptide[i].getBackboneBasicityRight()); - bb_charge_ion_c_term_[i - cleavage_site] = (1.0 - bb_charge_[i]) * exp(-E * 1000 / (Constants::R * T)) / q; - //cerr << "Int: " << peptide[i].getOneLetterCode() << " " << bb_charge_[i] << - } - - // side chains - if (peptide[i].getSideChainBasicity() != 0) - { - double E = -peptide[i].getSideChainBasicity(); - sc_charge_ion_c_term_[i - cleavage_site] = (1.0 - sc_charge_[i]) * exp(-E * 1000 / (Constants::R * T)) / q; - //cerr << "SC: " << peptide[i].getOneLetterCode() << " " << sc_charge_[i] << " " << sc_charge_ion_c_term_[i - cleavage_site] << endl; - } - } - - return; - } - - void ProtonDistributionModel::calculateProtonDistributionGreater2_(const AASequence & peptide, Int charge, Residue::ResidueType /*res_type*/) - { - //cerr << "void ProtonDistributionModel::calculateProtonDistributionGreater2_(" << peptide << ", " << charge << ", res_type=" << res_type << ")" << endl; - //double gb_bb_l_NH2 = param_.getValue("gb_bb_l_NH2"); - //double gb_bb_r_COOH = param_.getValue("gb_bb_r_COOH"); - //double gb_bb_r_bion = param_.getValue("gb_bb_r_b-ion"); - //double gb_bb_r_aion = param_.getValue("gb_bb_r_a-ion"); - //const double T(500.0); - - vector gb_bb, gb_sc; - double gb_left_n_term(0), gb_right_n_term(0); - getLeftAndRightGBValues_(peptide, gb_left_n_term, gb_right_n_term, 0); - gb_bb.push_back(gb_left_n_term + gb_right_n_term); - Size count(1); - for (AASequence::ConstIterator it = peptide.begin(); it != peptide.end(); ++it, ++count) - { - double gb_left(0), gb_right(0); - getLeftAndRightGBValues_(peptide, gb_left, gb_right, count); - - double gb = gb_left + gb_right; - gb_bb.push_back(gb); - - gb_sc.push_back(it->getSideChainBasicity()); - } - - // now distribute the charges until no site has more than 1.0 proton - vector bb_coulomb(peptide.size() + 1, 0.0), sc_coulomb(peptide.size(), 0.0); - Int actual_charge(charge); - set sc_sites, bb_sites; - while (true) - { - //cerr << "#protons remaining: " << actual_charge << endl; - vector k_bb(peptide.size() + 1, 0.0), k_sc(peptide.size(), 0.0); - count = 0; - double sum_k(0); - for (vector::const_iterator it = gb_bb.begin(); it != gb_bb.end(); ++it, ++count) - { - if (bb_sites.find(count) == bb_sites.end()) - { - k_bb[count] = exp((*it - bb_coulomb[count]) * 1000.0 / Constants::R / 500.0); - sum_k += k_bb[count]; - //cerr << k_bb[count] << endl; - } - } - - count = 0; - for (vector::const_iterator it = gb_sc.begin(); it != gb_sc.end(); ++it, ++count) - { - if (sc_sites.find(count) == sc_sites.end()) - { - k_sc[count] = exp((*it - sc_coulomb[count]) * 1000.0 / Constants::R / 500.0); - sum_k += k_sc[count]; - //cerr << k_sc[count] << endl; - } - } - - //cerr << "sum_k: " << sum_k << endl; - - vector p_bb(peptide.size() + 1, 1.0), p_sc(peptide.size(), 1.0); - count = 0; - for (vector::const_iterator it = k_bb.begin(); it != k_bb.end(); ++it, ++count) - { - if (bb_sites.find(count) == bb_sites.end()) - { - p_bb[count] = (double)actual_charge * *it / sum_k; - bb_charge_[count] = p_bb[count]; - } - //cerr << "BB" << count << ": " << p_bb[count] << endl; - } - - count = 0; - for (vector::const_iterator it = k_sc.begin(); it != k_sc.end(); ++it, ++count) - { - if (sc_sites.find(count) == sc_sites.end()) - { - p_sc[count] = (double)actual_charge * *it / sum_k; - sc_charge_[count] = p_sc[count]; - } - //cerr << "SC" << count << ": " << p_sc[count] << endl; - } - - // check if there is a site containing more than one proton - for (Size i = 0; i != p_bb.size(); ++i) - { - if (p_bb[i] > 1.0) - { - bb_charge_[i] = 1.0; - bb_sites.insert(i); - //cerr << "BackbonePosition " << i << " has charge > 1" << endl; - --actual_charge; - } - } - for (Size i = 0; i != p_sc.size(); ++i) - { - if (p_sc[i] > 1.0) - { - sc_charge_[i] = 1.0; - //cerr << "SideChain " << i << " has charge > 1 " << endl; - sc_sites.insert(i); - --actual_charge; - } - } - - // now calculate the Coulomb repulsions - for (Size i = 0; i != gb_bb.size(); ++i) - { - // check if the site is not occupied by a "complete" proton - if (bb_sites.find(i) == bb_sites.end()) - { - double coulomb_sum(0); - for (set::const_iterator it = bb_sites.begin(); it != bb_sites.end(); ++it) - { - // calculate the distance between occupied site and this backbone site - Size pos = *it; - Size diff = (pos > i) ? pos - i : i - pos; - coulomb_sum += COULOMB_REPULSION2 / (double)diff; - } - - for (set::const_iterator it = sc_sites.begin(); it != sc_sites.end(); ++it) - { - // calculate the distance between occupied side chain and this backbone site - Size pos = *it; - Size diff = (pos > i) ? pos - i : i - pos; - ++diff; // bond to the side chain counts extra - coulomb_sum += COULOMB_REPULSION2 / (double)diff; - } - bb_coulomb[i] = coulomb_sum; - //cerr << "BB coulomb" << i << ": " << coulomb_sum << endl; - } - } - for (Size i = 0; i != gb_sc.size(); ++i) - { - if (sc_sites.find(i) == sc_sites.end()) - { - double coulomb_sum(0); - for (set::const_iterator it = bb_sites.begin(); it != bb_sites.end(); ++it) - { - Size pos = *it; - Size diff = (pos > i) ? pos - i : i - pos; - ++diff; - coulomb_sum += COULOMB_REPULSION2 / (double)diff; - } - for (set::const_iterator it = sc_sites.begin(); it != sc_sites.end(); ++it) - { - Size pos = *it; - Size diff = (pos > i) ? pos - i : i - pos; - diff += 2; - coulomb_sum += COULOMB_REPULSION2 / (double)diff; - } - //cerr << "SC coulomb" << i << ": " << coulomb_sum << endl; - sc_coulomb[i] = coulomb_sum; - } - } - - // TODO think about what happens if #protons are greater than number of sites?!? - if (bb_sites.empty() && sc_sites.empty()) - { - break; - } - - // search for entries > 1 - bool has_greater_one = std::any_of(p_bb.begin(), p_bb.end(), [](const double v) { return v > 1.0; }); - has_greater_one |= std::any_of(p_sc.begin(), p_sc.end(), [](const double v) { return v > 1.0; }); - - if (!has_greater_one) - { - //cerr << "Has no site with more than 1.0 proton" << endl; - break; - } - } - - return; - - } - - void ProtonDistributionModel::calculateProtonDistributionCharge2_(const AASequence & peptide, - Residue::ResidueType res_type, - bool fixed_proton, - Size cleavage_site, - bool use_most_basic_site) - { - double q(0), sum_E(0), sum_E_n_term(0), sum_E_c_term(0); // partition function - Size most_basic_site(0); - bool most_basic_site_sc(false); - - double gb_bb_l_NH2 = (double)param_.getValue("gb_bb_l_NH2"); - double gb_bb_r_COOH = (double)param_.getValue("gb_bb_r_COOH"); - double gb_bb_r_bion = (double)param_.getValue("gb_bb_r_b-ion"); - double gb_bb_r_aion = (double)param_.getValue("gb_bb_r_a-ion"); - double T = (double)param_.getValue("temperature"); - - if (!use_most_basic_site) - { - bb_charge_ = vector(peptide.size() + 1, 0.0); - sc_charge_ = vector(peptide.size(), 0.0); - } - else - { - // find the most basic site - double max_prob(0); - //cerr << "bb: "; - for (Size i = 0; i != bb_charge_.size(); ++i) - { - //cerr << i << ". " << bb_charge_[i] << "; " << endl; - if (bb_charge_[i] > max_prob) - { - max_prob = bb_charge_[i]; - most_basic_site = i; - } - } - - //cerr << endl << "sc: "; - for (Size i = 0; i != sc_charge_.size(); ++i) - { - //cerr << i << ". " << sc_charge_[i] << "; " << endl; - if (sc_charge_[i] > max_prob) - { - max_prob = sc_charge_[i]; - most_basic_site = i; - most_basic_site_sc = true; - } - } - //cerr << endl; - - - bb_charge_ = vector(peptide.size() + 1, 0.0); - sc_charge_ = vector(peptide.size(), 0.0); - } - - Size fixed_site(0); - if (fixed_proton) - { - fixed_site = cleavage_site; - } - - bool fixed_site_sc(false); - if (use_most_basic_site) - { - fixed_site = most_basic_site; - fixed_site_sc = most_basic_site_sc; - } - - for (Size i = 0; i != sc_charge_.size(); ++i) - { - sc_charge_[i] = 0; - } - - for (Size i = 0; i != bb_charge_.size(); ++i) - { - bb_charge_[i] = 0; - } - //bb_charge_[peptide.size()] = 0; - - - // fixed proton - // - // if two protons are available one proton is kept at the cleavage site - // this is needed for the N/C-terminal charge distribution calculation - // - // use the fixed proton with pre-calculated charges of the other proton - // -> get distribution of the prior fixed one - - // make only sense with charge = 2 - if (fixed_proton || use_most_basic_site) - { - //cerr << "fixed site: " << fixed_site << " " << fixed_site_sc << endl; - // fixed proton at fixed_site - q = 0; - - double gb_j(0); - if (!fixed_site_sc) - { - if (fixed_site == 0) - { - gb_j = gb_bb_l_NH2 + peptide[fixed_site].getBackboneBasicityRight(); - } - else - { - gb_j = peptide[fixed_site - 1].getBackboneBasicityLeft() + peptide[fixed_site].getBackboneBasicityRight(); - } - } - else - { - gb_j = peptide[fixed_site].getSideChainBasicity(); - } - - for (Size i = 0; i <= peptide.size(); ++i) - { - double gb_i(0); - // proton 1 at N-terminus - if (i == 0 || (i == cleavage_site && use_most_basic_site)) - { - if (i != peptide.size()) // added for cppcheck - { - gb_i = gb_bb_l_NH2 + peptide[i].getBackboneBasicityRight(); - } - } - else - { - // proton 1 at N-terminus - if (i == peptide.size()) - { - if (res_type == Residue::BIon) - { - gb_i = peptide[i - 1].getBackboneBasicityLeft() + gb_bb_r_bion; - } - else - { - if (res_type == Residue::AIon) - { - gb_i = peptide[i - 1].getBackboneBasicityLeft() + gb_bb_r_aion; - } - else - { - gb_i = peptide[i - 1].getBackboneBasicityLeft() + gb_bb_r_COOH; - } - } - } - else - { - // proton 1 at backbone - gb_i = peptide[i - 1].getBackboneBasicityLeft() + peptide[i].getBackboneBasicityRight(); - } - } - - if (!fixed_site_sc) - { - if (i != fixed_site) - { - Int r_ij(abs((Int)i - (Int)(fixed_site))); - q += exp(-(-gb_i - gb_j + COULOMB_REPULSION / r_ij) * 1000 / (Constants::R * T) -500); - - if (i != peptide.size()) - { - if (peptide[i].getSideChainBasicity() != 0) - { - double gb_i_sc = peptide[i].getSideChainBasicity(); - q += exp(-(-gb_i_sc - gb_j + COULOMB_REPULSION / (r_ij + 1)) * 1000 / (Constants::R * T) -500); - } - } - } - else - { - // last chance: the proton i is located at side chain of cleavage site - if (i != peptide.size()) - { - if (peptide[i].getSideChainBasicity() != 0) - { - double gb_i_sc = peptide[i].getSideChainBasicity(); - q += exp(-(-gb_i - gb_i_sc + COULOMB_REPULSION) * 1000 / (Constants::R * T) -500); - } - } - } - } - else - { - // fixed site at side chain - // - // first, one proton at BB - Int r_ij = abs((Int)i - (Int)fixed_site); - q += exp(-(-gb_i - gb_j + COULOMB_REPULSION / (r_ij + 1)) * 1000 / (Constants::R * T) -500); - - // only side chain site different from fixed one - if (i != fixed_site && i != peptide.size()) - { - double gb_i_sc(0); - gb_i_sc = peptide[i].getSideChainBasicity(); - q += exp(-(-gb_i_sc - gb_j + COULOMB_REPULSION / (r_ij + 2)) * 1000 / (Constants::R * T) -500); - } - } - } - - // calculate availabilities - for (Size i = 0; i <= peptide.size(); ++i) - { - double gb_i(0); - if (i == 0 || (i == cleavage_site && use_most_basic_site)) - { - if (i != peptide.size()) // added for cppcheck - { - gb_i = gb_bb_l_NH2 + peptide[i].getBackboneBasicityRight(); - } - } - else - { - if (i == peptide.size()) - { - if (res_type == Residue::BIon) - { - gb_i = peptide[i - 1].getBackboneBasicityLeft() + gb_bb_r_bion; - } - else - { - if (res_type == Residue::AIon) - { - gb_i = peptide[i - 1].getBackboneBasicityLeft() + gb_bb_r_aion; - } - else - { - gb_i = peptide[i - 1].getBackboneBasicityLeft() + gb_bb_r_COOH; - } - } - } - else - { - gb_i = peptide[i - 1].getBackboneBasicityLeft() + peptide[i].getBackboneBasicityRight(); - } - } - - if (!fixed_site_sc) - { - if (i != fixed_site) - { - Int r_ij(abs((Int)i - (Int)(fixed_site))); - double prob = exp(-(-gb_i - gb_j + COULOMB_REPULSION / r_ij) * 1000 / (Constants::R * T) -500) / q; - bb_charge_[i] += prob; - - double add_E = exp(gb_i * 1000 / Constants::R / T); - if (i < fixed_site - 1) - { - sum_E_n_term += add_E; - } - else - { - sum_E_c_term += add_E; - } - - if (i != peptide.size()) - { - if (peptide[i].getSideChainBasicity() != 0) - { - double gb_i_sc = peptide[i].getSideChainBasicity(); - double probi = exp(-(-gb_i_sc - gb_j + COULOMB_REPULSION / (r_ij + 1)) * 1000 / (Constants::R * T) -500) / q; - sc_charge_[i] += probi; - - double add_Ei = exp(gb_i_sc * 1000 / Constants::R / T); - if (i < fixed_site - 1) - { - sum_E_n_term += add_Ei; - } - else - { - sum_E_c_term += add_Ei; - } - } - } - } - else - { - if (i != peptide.size()) - { - // SC position - if (peptide[i].getSideChainBasicity() != 0) - { - double gb_i_sc = peptide[i].getSideChainBasicity(); - double prob = exp(-(-gb_i_sc - gb_j + COULOMB_REPULSION) * 1000 / (Constants::R * T) -500) / q; - sc_charge_[i] += prob; - - double add_E = exp(gb_i_sc * 1000 / Constants::R / T); - if (i < fixed_site - 1) - { - sum_E_n_term += add_E; - } - else - { - sum_E_c_term += add_E; - } - } - } - } - } - else - { - // fixed site at side chain - Int r_ij = abs((Int)i - (Int)fixed_site); - double probi = exp(-(-gb_i - gb_j + COULOMB_REPULSION / (r_ij + 1)) * 1000 / (Constants::R * T) -500) / q; - bb_charge_[i] += probi; - - double add_Ei = exp(gb_i * 1000 / Constants::R / T); - if (i <= fixed_site) - { - sum_E_n_term += add_Ei; - } - else - { - sum_E_c_term += add_Ei; - } - - if (i != fixed_site && i != peptide.size()) - { - if (peptide[i].getSideChainBasicity() != 0) - { - double gb_i_sc = peptide[i].getSideChainBasicity(); - double prob = exp(-(-gb_i_sc - gb_j + COULOMB_REPULSION / (r_ij + 2)) * 1000 / (Constants::R * T) -500) / q; - sc_charge_[i] += prob; - - double add_E = exp(gb_i_sc * 1000 / Constants::R / T); - if (i <= fixed_site) - { - sum_E_n_term += add_E; - } - else - { - sum_E_c_term += add_E; - } - } - } - } - } - } - - - // double charged - if (!fixed_proton && !use_most_basic_site) - { - // calculate sum - Int count(0); - for (Size i = 0; i <= peptide.size(); ++i) - { - for (Size j = i; j <= peptide.size(); ++j) - { - double gb_i(0), gb_j(0); - // proton 1 at N-terminus - if (i == 0) - { - //gb_i = gb_bb_l_["NH2"] + gb_bb_r_[peptide[i].getOneLetterCode()]; - gb_i = gb_bb_l_NH2 + peptide[i].getBackboneBasicityRight(); - } - else - { - String aa_i_l(peptide[i - 1].getOneLetterCode()); - // proton 1 at N-terminus - if (i == peptide.size()) - { - if (res_type == Residue::BIon) - { - //gb_i = gb_bb_l_[aa_i_l] + gb_bb_r_["b-ion"]; - gb_i = peptide[i - 1].getBackboneBasicityLeft() + gb_bb_r_bion; - } - else - { - if (res_type == Residue::AIon) - { - //gb_i = gb_bb_l_[aa_i_l] + gb_bb_r_["a-ion"]; - gb_i = peptide[i - 1].getBackboneBasicityLeft() + gb_bb_r_aion; - } - else - { - //gb_i = gb_bb_l_[aa_i_l] + gb_bb_r_["COOH"]; - gb_i = peptide[i - 1].getBackboneBasicityLeft() + gb_bb_r_COOH; - } - } - } - else - { - // proton 1 at backbone - //gb_i = gb_bb_l_[aa_i_l] + gb_bb_r_[peptide[i].getOneLetterCode()]; - gb_i = peptide[i - 1].getBackboneBasicityLeft() + peptide[i].getBackboneBasicityRight(); - } - } - // proton 2 at N-terminus - if (j == 0) - { - //gb_j = gb_bb_l_["NH2"] + gb_bb_r_[peptide[j].getOneLetterCode()]; - gb_j = gb_bb_l_NH2 + peptide[j].getBackboneBasicityRight(); - } - else - { - //String aa_j_l(peptide[j-1].getOneLetterCode()); - double gb_j_l = peptide[j - 1].getBackboneBasicityLeft(); - // proton 2 at C-terminus - if (j == peptide.size()) - { - if (res_type == Residue::BIon) - { - //gb_j = gb_bb_l_[aa_j_l] + gb_bb_r_["b-ion"]; - gb_j = gb_j_l + gb_bb_r_bion; - } - else - { - if (res_type == Residue::AIon) - { - //gb_j = gb_bb_l_[aa_j_l] + gb_bb_r_["a-ion"]; - gb_j = gb_j_l + gb_bb_r_aion; - } - else - { - //gb_j = gb_bb_l_[aa_j_l] + gb_bb_r_["COOH"]; - gb_j = gb_j_l + gb_bb_r_COOH; - } - } - } - else - { - // proton 2 at backbone - //gb_j = gb_bb_l_[aa_j_l] + gb_bb_r_[peptide[j].getOneLetterCode()]; - gb_j = gb_j_l + peptide[j].getBackboneBasicityRight(); - } - } - if (i != j) - { - // distance of protons - Int r_ij(abs((Int)i - (Int)j)); - q += exp(-(-gb_i - gb_j + COULOMB_REPULSION / r_ij) * 1000 / (Constants::R * T) -500); - //cerr << "1.\t" << -(-gb_i - gb_j + COULOMB_REPULSION/r_ij) * 1000/(Constants::R * T) << endl; - ++count; - - double gb_i_sc(0); - if (i != peptide.size()) - { - // side chain of proton 1 - if (/*gb_sc_.has(peptide[i].getOneLetterCode())*/ peptide[i].getSideChainBasicity() != 0) - { - //gb_i_sc = gb_sc_[peptide[i].getOneLetterCode()]; - gb_i_sc = peptide[i].getSideChainBasicity(); - q += exp(-(-gb_i_sc - gb_j + COULOMB_REPULSION / (r_ij + 1)) * 1000 / (Constants::R * T) -500); - //cerr << "2.\t" << -(-gb_i_sc - gb_j + COULOMB_REPULSION/(r_ij + 1)) * 1000/(Constants::R * T) << endl; - ++count; - } - } - - if (j != peptide.size()) - { - // side chain of proton 2 - if (/*gb_sc_.has(peptide[j].getOneLetterCode())*/ peptide[j].getSideChainBasicity() != 0) - { - //gb_j_sc = gb_sc_[peptide[j].getOneLetterCode()]; - double gb_j_sc = peptide[j].getSideChainBasicity(); - q += exp(-(-gb_i - gb_j_sc + COULOMB_REPULSION / (r_ij + 1)) * 1000 / (Constants::R * T) -500); - //cerr << "3.\t" << -(-gb_i - gb_j_sc + COULOMB_REPULSION/(r_ij + 1)) * 1000 /(Constants::R * T) - 500 << endl; - ++count; - // both at side chain? - if (gb_i_sc != 0) - { - q += exp(-(-gb_i_sc - gb_j_sc + COULOMB_REPULSION / (r_ij + 2)) * 1000 / (Constants::R * T) -500); - //cerr << "4.\t" << -(-gb_i_sc - gb_j_sc + COULOMB_REPULSION/(r_ij + 2)) * 1000 /(Constants::R * T) - 500 << endl; - ++count; - } - } - } - } - else - { - if (i != peptide.size()) - { - // one at side chain, the other one at backbone of same residue - if (/*gb_sc_.has(peptide[i].getOneLetterCode())*/ peptide[i].getSideChainBasicity() != 0) - { - //double gb_i_sc = gb_sc_[peptide[i].getOneLetterCode()]; - double gb_i_sc = peptide[i].getSideChainBasicity(); - q += exp(-(-gb_i - gb_i_sc + COULOMB_REPULSION) * 1000 / (Constants::R * T) -500); - //cerr << "5.\t" << -(-gb_i - gb_i_sc + COULOMB_REPULSION) * 1000/ (Constants::R * T) -500 << endl; - ++count; - } - } - } - } - } - - // calculate availabilities - for (Size i = 0; i <= peptide.size(); ++i) - { - for (Size j = i; j <= peptide.size(); ++j) - { - double gb_i(0), gb_j(0); - // calculate the backbone proton gb's - // N-terminus - if (i == 0) - { - //gb_i = gb_bb_l_["NH2"] + gb_bb_r_[peptide[i].getOneLetterCode()]; - gb_i = gb_bb_l_NH2 + peptide[i].getBackboneBasicityRight(); - } - else - { - //String aa_i_l(peptide[i-1].getOneLetterCode()); - - // C-terminus - if (i == peptide.size()) - { - if (res_type == Residue::BIon) - { - //gb_i = gb_bb_l_[aa_i_l] + gb_bb_r_["b-ion"]; - gb_i = peptide[i - 1].getBackboneBasicityLeft() + gb_bb_r_bion; - } - else - { - if (res_type == Residue::AIon) - { - //gb_i = gb_bb_l_[aa_i_l] + gb_bb_r_["a-ion"]; - gb_i = peptide[i - 1].getBackboneBasicityLeft() + gb_bb_r_aion; - } - else - { - //gb_i = gb_bb_l_[aa_i_l] + gb_bb_r_["COOH"]; - gb_i = peptide[i - 1].getBackboneBasicityLeft() + gb_bb_r_COOH; - } - } - } - else - { - // internal BB gb's - //gb_i = gb_bb_l_[aa_i_l] + gb_bb_r_[peptide[i].getOneLetterCode()]; - gb_i = peptide[i - 1].getBackboneBasicityLeft() + peptide[i].getBackboneBasicityRight(); - } - } - // N-terminus - if (j == 0) - { - //gb_j = gb_bb_l_["NH2"] + gb_bb_r_[peptide[j].getOneLetterCode()]; - gb_j = gb_bb_l_NH2 + peptide[j].getBackboneBasicityRight(); - } - else - { - String aa_j_l(peptide[j - 1].getOneLetterCode()); - // C-terminus - if (j == peptide.size()) - { - if (res_type == Residue::BIon) - { - //gb_j = gb_bb_l_[aa_j_l] + gb_bb_r_["b-ion"]; - gb_j = peptide[j - 1].getBackboneBasicityLeft() + gb_bb_r_bion; - } - else - { - if (res_type == Residue::AIon) - { - //gb_j = gb_bb_l_[aa_j_l] + gb_bb_r_["a-ion"]; - gb_j = peptide[j - 1].getBackboneBasicityLeft() + gb_bb_r_aion; - } - else - { - //gb_j = gb_bb_l_[aa_j_l] + gb_bb_r_["COOH"]; - gb_j = peptide[j - 1].getBackboneBasicityLeft() + gb_bb_r_COOH; - } - } - } - else - { - //gb_j = gb_bb_l_[aa_j_l] + gb_bb_r_[peptide[j].getOneLetterCode()]; - gb_j = peptide[j - 1].getBackboneBasicityLeft() + peptide[j].getBackboneBasicityRight(); - } - } - - // protons at different residues - if (i != j) - { - // distance of the protons - Int r_ij(abs((Int)i - (Int)j)); - // calculate probability - double prob = exp(-(-gb_i - gb_j + COULOMB_REPULSION / r_ij) * 1000 / (Constants::R * T) -500) / q; - // add prob to site of first proton - bb_charge_[i] += prob; - // add to apparent GB - bb_charge_[j] += prob; - - // side chains - double gb_i_sc(0); - if (i != peptide.size()) - { - if (/*gb_sc_.has(peptide[i].getOneLetterCode())*/ peptide[i].getSideChainBasicity() != 0) - { - //gb_i_sc = gb_sc_[peptide[i].getOneLetterCode()]; - gb_i_sc = peptide[i].getSideChainBasicity(); - double probi = exp(-(-gb_i_sc - gb_j + COULOMB_REPULSION / (r_ij + 1)) * 1000 / (Constants::R * T) -500) / q; - sc_charge_[i] += probi; - bb_charge_[j] += probi; - } - } - - if (j != peptide.size()) - { - if (/*gb_sc_.has(peptide[j].getOneLetterCode())*/ peptide[j].getSideChainBasicity() != 0) - { - //gb_j_sc = gb_sc_[peptide[j].getOneLetterCode()]; - double gb_j_sc = peptide[j].getSideChainBasicity(); - double probi = exp(-(-gb_i - gb_j_sc + COULOMB_REPULSION / (r_ij + 1)) * 1000 / (Constants::R * T) -500) / q; - bb_charge_[i] += probi; - sc_charge_[j] += probi; - - // both protons at sidechains - if (gb_i_sc != 0) - { - double prob_s = exp(-(-gb_i_sc - gb_j_sc + COULOMB_REPULSION / (r_ij + 2)) * 1000 / (Constants::R * T) -500) / q; - sc_charge_[i] += prob_s; - sc_charge_[j] += prob_s; - } - } - } - } - else - { - // protons at the same residue - if (i != peptide.size()) - { - if (/*gb_sc_.has(peptide[i].getOneLetterCode())*/ peptide[i].getSideChainBasicity() != 0) - { - //double gb_i_sc = gb_sc_[peptide[i].getOneLetterCode()]; - double gb_i_sc = peptide[i].getSideChainBasicity(); - double prob = exp(-(-gb_i - gb_i_sc + COULOMB_REPULSION) * 1000 / (Constants::R * T) -500) / q; - sc_charge_[i] += prob; - sc_charge_[j] += prob; - } - } - } - } - } - } - -#if 0 - cerr << "side chain proton availabilities" << endl; - double sum(0); - for (unsigned Int i = 0; i != peptide.size(); ++i) - { - if (sc_charge_.has(i)) - { - cerr << i << ".\t" << peptide[i].getThreeLetterCode() << ": " << sc_charge_[i] << endl; - sum += sc_charge_[i]; - } - else - { - cerr << i << ".\t" << peptide[i].getThreeLetterCode() << ": 0" << endl; - } - } - - cerr << "\nbackbone proton availabilities" << endl; - for (unsigned Int i = 0; i <= peptide.size(); ++i) - { - if (bb_charge_.has(i)) - { - cerr << i << ".\t" << bb_charge_[i] << endl; - sum += bb_charge_[i]; - } - else - { - cerr << i << ".\t" << 0 << endl; - } - } - - cerr << "(sum=" << sum << ")" << endl; -#endif - - E_ = sum_E; - if (fixed_proton) - { - E_n_term_ = sum_E_n_term; - E_c_term_ = sum_E_c_term; - } - else - { - E_n_term_ = 0; - E_c_term_ = 0; - } - - } - - void ProtonDistributionModel::calculateProtonDistributionCharge1_(const AASequence & peptide, Residue::ResidueType res_type) - { - // single charged - double q(0), sum_E(0) /*, sum_E_n_term(0), sum_E_c_term(0)*/; // partition function - - double gb_bb_l_NH2 = (double)param_.getValue("gb_bb_l_NH2"); - double gb_bb_r_COOH = (double)param_.getValue("gb_bb_r_COOH"); - double gb_bb_r_bion = (double)param_.getValue("gb_bb_r_b-ion"); - double gb_bb_r_aion = (double)param_.getValue("gb_bb_r_a-ion"); - double T = (double)param_.getValue("temperature"); - - for (Size i = 0; i != peptide.size(); ++i) - { - // backbone energy - if (i == 0) - { - double E = -(gb_bb_l_NH2 + peptide[i].getBackboneBasicityRight()); - q += exp(-E * 1000 / (Constants::R * T)); - } - else - { - if (i == peptide.size() - 1) - { - // position at the C-terminal end of the ion - double E(0); - if (res_type == Residue::BIon) - { - E = -(peptide[i].getBackboneBasicityLeft() + gb_bb_r_bion); - } - else - { - if (res_type == Residue::AIon) - { - E = -(peptide[i].getBackboneBasicityLeft() + gb_bb_r_aion); - } - else - { - E = -(peptide[i].getBackboneBasicityLeft() + gb_bb_r_COOH); - } - } - q += exp(-E * 1000 / (Constants::R * T)); - E = -(peptide[i - 1].getBackboneBasicityLeft() + peptide[i].getBackboneBasicityRight()); - q += exp(-E * 1000 / (Constants::R * T)); - } - else - { - // normal internal backbone position - double E = -(peptide[i - 1].getBackboneBasicityLeft() + peptide[i].getBackboneBasicityRight()); - q += exp(-E * 1000 / (Constants::R * T)); - } - } - - // side chains - if (peptide[i].getSideChainBasicity() != 0) - { - double E = -peptide[i].getSideChainBasicity(); - q += exp(-E * 1000 / (Constants::R * T)); - } - } - -#if 0 - cout << "Q=" << q << endl; -#endif - // calculate the availabilities - for (Size i = 0; i != peptide.size(); ++i) - { - // backbone - if (i == 0) - { - double E = -(gb_bb_l_NH2 + peptide[i].getBackboneBasicityRight()); - bb_charge_[i] = exp(-E * 1000 / (Constants::R * T)) / q; - sum_E += exp(-E * 1000 / Constants::R / T); - } - else - { - if (i == peptide.size() - 1) - { - double E(0); - - if (res_type == Residue::BIon) - { - E = -(peptide[i].getBackboneBasicityLeft() + gb_bb_r_bion); - } - else - { - if (res_type == Residue::AIon) - { - E = -(peptide[i].getBackboneBasicityLeft() + gb_bb_r_aion); - } - else - { - E = -(peptide[i].getBackboneBasicityLeft() + gb_bb_r_COOH); - } - } - // TODO charge order; bug???? - bb_charge_[i + 1] = exp(-E * 1000 / (Constants::R * T)) / q; - sum_E += exp(-E * 1000 / Constants::R / T); - - E = -(peptide[i - 1].getBackboneBasicityLeft() + peptide[i].getBackboneBasicityRight()); - bb_charge_[i] = exp(-E * 1000 / (Constants::R * T)) / q; - sum_E += exp(-E * 1000 / Constants::R / T); - } - else - { - // normal backbone position - double E = -(peptide[i - 1].getBackboneBasicityLeft() + peptide[i].getBackboneBasicityRight()); - bb_charge_[i] = exp(-E * 1000 / (Constants::R * T)) / q; - sum_E += exp(-E * 1000 / Constants::R / T); - } - } - - // side chains - if (peptide[i].getSideChainBasicity() != 0) - { - double E = -peptide[i].getSideChainBasicity(); - sc_charge_[i] = exp(-E * 1000 / (Constants::R * T)) / q; - sum_E += exp(-E * 1000 / Constants::R / T); - } - } - E_ = sum_E; - } - - void ProtonDistributionModel::calculateProtonDistribution_(const AASequence & peptide, - Int charge, Residue::ResidueType res_type, - bool fixed_proton, - Size cleavage_site, - bool use_most_basic_site) - { - if (charge == 1) - { - calculateProtonDistributionCharge1_(peptide, res_type); - return; - } - if (charge == 2) - { - calculateProtonDistributionCharge2_(peptide, res_type, fixed_proton, cleavage_site, use_most_basic_site); - return; - } - - // charge > 2 - calculateProtonDistributionGreater2_(peptide, charge, res_type); - return; - } - -/* - double ProtonDistributionModel::getProtonAffinity_(const AASequence& peptide, Int charge, Residue::ResidueType res_type) - { - //const double T(500.0); - - double pa(0); - calculateProtonDistribution_(peptide, charge, res_type); - - //pa = Constants::R * T * log(E_); - - // new test - double sum(0); - if (res_type == Residue::AIon || res_type == Residue::BIon || res_type == Residue::CIon) - { - for (Size i = 1; i <= peptide.size(); ++i) - { - sum += bb_charge_[i]; - if (sc_charge_.has(i-1)) - { - sum += sc_charge_[i-1]; - } - } - sum += bb_charge_[0]/2; - } - else - { - if (res_type == Residue::XIon || res_type == Residue::YIon || res_type == Residue::ZIon) - { - for (Size i = bb_charge_.size() - peptide.size() - 1; i != bb_charge_.size(); ++i) - { - sum += bb_charge_[i]; - if (sc_charge_.has(i)) - { - sum += sc_charge_[i]; - } - } - sum += bb_charge_[0]/2; - } - } - - pa = sum; - - //return pa; - return E_; - } -*/ - - void ProtonDistributionModel::getChargeStateIntensities(const AASequence & peptide, - const AASequence & n_term_ion, - const AASequence & c_term_ion, - Int charge, - Residue::ResidueType n_term_type, - std::vector & n_term_intensities, - std::vector & c_term_intensities, - FragmentationType type) - { - calcChargeStateIntensities_(peptide, n_term_ion, c_term_ion, charge, n_term_type, n_term_intensities, c_term_intensities, type); - return; - } - - void ProtonDistributionModel::calcChargeStateIntensities_(const AASequence & peptide, - const AASequence & n_term_ion, - const AASequence & c_term_ion, - Int charge, - Residue::ResidueType n_term_type, - vector & n_term_intensities, - vector & c_term_intensities, - FragmentationType type) - { - // original method works well - if (charge == 1) - { - double c_term_int1(0), c_term_int2(0), n_term_int1(0), n_term_int2(0); - n_term_intensities.clear(); - c_term_intensities.clear(); - calcChargeStateIntensities_(peptide, n_term_ion, c_term_ion, charge, n_term_type, n_term_int1, c_term_int1, n_term_int2, c_term_int2, type); - n_term_intensities.push_back(n_term_int1); - c_term_intensities.push_back(c_term_int1); - return; - } - - if (charge == 2) - { - double c_term_int1(0), c_term_int2(0), n_term_int1(0), n_term_int2(0); - n_term_intensities.clear(); - c_term_intensities.clear(); - calcChargeStateIntensities_(peptide, n_term_ion, c_term_ion, charge, n_term_type, n_term_int1, c_term_int1, n_term_int2, c_term_int2, type); - n_term_intensities.push_back(n_term_int1); - n_term_intensities.push_back(n_term_int2); - c_term_intensities.push_back(c_term_int1); - c_term_intensities.push_back(c_term_int2); - return; - } - - - // charge > 2 - n_term_intensities = vector(charge, 0.0); - c_term_intensities = vector(charge, 0.0); - - // calculate the number of in-active protons - // this is simply the number of protons in case of charge-remote and - // side-chain induced cleavages (side-chain protons stay at the side chain) - // for charge-directed cleavages there must be one proton which induces - // the cleavage, however, this can be distributed over several places - Int num_active_protons = charge; - if (type == ChargeDirected) - { - num_active_protons = charge - 1; - } - - // calculate proton distribution - calculateProtonDistribution_(peptide, num_active_protons, Residue::Full); - double n_term_sum(0), c_term_sum(0); - - // sum up all protons located at the N-term/C-term part of the peptide - for (Size i = 0; i != n_term_ion.size(); ++i) - { - //cerr << "N-term: i=" << i << ", " << peptide[i].getOneLetterCode() << ", BB-charge=" << bb_charge_[i] << ", SC-charge=" << sc_charge_[i] << endl; - n_term_sum += bb_charge_[i]; - n_term_sum += sc_charge_[i]; - } - for (Size i = n_term_ion.size(); i != peptide.size(); ++i) - { - //cerr << "C-term: i=" << i << ", " << peptide[i].getOneLetterCode() << ", BB-charge=" << bb_charge_[i] << ", SC-charge=" << sc_charge_[i] << endl; - c_term_sum += bb_charge_[i + 1]; - c_term_sum += sc_charge_[i]; - } - //c_term_sum += bb_charge_[peptide.size()]; - //cerr << n_term_ion << " " << c_term_ion << " " << n_term_sum << " " << c_term_sum << endl; - //n_term_intensities[0] = n_term_sum; - //c_term_intensities[0] = c_term_sum; - // now we have the distributions of the protons - - //cerr << "Init: " << n_term_sum << " " << c_term_sum << endl; - if (type == ChargeDirected) - { - // charge directed case - // the proton which induces the cleavage is handled separately - bb_charge_ion_n_term_ = vector(n_term_ion.size() + 1, 0.0); - bb_charge_ion_c_term_ = vector(c_term_ion.size() + 1, 0.0); - sc_charge_ion_n_term_ = vector(n_term_ion.size(), 0.0); - sc_charge_ion_c_term_ = vector(c_term_ion.size(), 0.0); - calculateProtonDistributionIonPair_(peptide, n_term_type, n_term_ion.size()); - //cerr << "NTerm: "; - for (Size i = 0; i != n_term_ion.size(); ++i) - { - //cerr << i << ", bb=" << bb_charge_ion_n_term_[i] << ", sc=" << sc_charge_ion_n_term_[i] << " "; - n_term_sum += bb_charge_ion_n_term_[i]; - n_term_sum += sc_charge_ion_n_term_[i]; - } - //cerr << bb_charge_ion_n_term_[n_term_ion.size()] << endl; - n_term_sum += bb_charge_ion_n_term_[n_term_ion.size()]; - - //cerr << "CTerm: "; - for (Size i = 0; i != c_term_ion.size(); ++i) - { - //cerr << i << ", bb=" << bb_charge_ion_c_term_[i] << ", sc=" << sc_charge_ion_c_term_[i] << " "; - c_term_sum += bb_charge_ion_c_term_[i]; - c_term_sum += sc_charge_ion_c_term_[i]; - } - //cerr << bb_charge_ion_c_term_[c_term_ion.size()] << endl; - c_term_sum += bb_charge_ion_c_term_[c_term_ion.size()]; - } - - // we simply need to calculate the charge state distribution according - // to the proton probabilities we calculated above - double sigma = (double)param_.getValue("sigma"); - for (Int z = 1; z <= charge; ++z) - { - double nterm = fabs(n_term_sum - (double)z); - double cterm = fabs(c_term_sum - (double)z); - boost::math::normal_distribution normal(0., sigma); - n_term_intensities[z - 1] = boost::math::pdf(normal, nterm); - c_term_intensities[z - 1] = boost::math::pdf(normal, cterm); - } - - return; - } - - void ProtonDistributionModel::calcChargeStateIntensities_(const AASequence & peptide, - const AASequence & n_term_ion, - const AASequence & c_term_ion, - Int charge, - Residue::ResidueType n_term_type, - double & n_term1, - double & c_term1, - double & n_term2, - double & c_term2, - FragmentationType type) - { - - if (charge == 1) - { - if (type == ChargeDirected || type == ChargeRemote) - { - // get the K_app of N and C-terminal fragment respectively - calculateProtonDistribution_(n_term_ion, 1, n_term_type); - double n_term_kapp = E_; - calculateProtonDistribution_(c_term_ion, 1, Residue::YIon); - double c_term_kapp = E_; - - // calc the ratio - n_term1 = n_term_kapp / (n_term_kapp + c_term_kapp); - c_term1 = c_term_kapp / (n_term_kapp + c_term_kapp); - // - - //double pa_n = log(n_term_kapp); - //double pa_c = log(c_term_kapp); - - //double ratio_bx_yz = exp(pa_n - pa_c); - - //n_term1 = ratio_bx_yz/*ratio_bx_yz / (1.0 + ratio_bx_yz)*/; - //c_term1 = 1.0 /*/ (ratio_bx_yz + 1.0)*/; - - // of course ++ ions are not available - n_term2 = 0; - c_term2 = 0; - - - //cerr << "ChargeStateIntensities: " << n_term_ion << " - " << c_term_ion << " z=1 " << n_term_kapp << " " << c_term_kapp << " " << n_term1 << " " << c_term1 << endl; - } - else - { - if (type == SideChain) - { - // the proton stays at the fragmentation site (N-terminal fragment) - n_term1 = 1; - c_term1 = 0; - n_term2 = 0; - c_term2 = 0; - } - else - { - // not possible - cerr << "calcChargeStateIntensities_: unknown fragmentation type (" << type << ")" << endl; - } - } - return; - } - - if (charge == 2) - { - if (type == ChargeDirected) - { - // calculate proton distribution with one fixed at cleavage site - calculateProtonDistribution_(peptide, 2, Residue::Full, true, n_term_ion.size()); - //calculateProtonDistribution_(peptide, 1, Residue::Full); - double p_n(0), p_c(0); - - p_n = E_n_term_ / (E_n_term_ + E_c_term_); - if (p_n < 0) - { - p_n = 0; - } - p_c = E_c_term_ / (E_n_term_ + E_c_term_); - if (p_c < 0) - { - p_c = 0; - } - -#ifdef CALC_CHARGE_STATES_DEBUG - cerr << "E_n_term_=" << E_n_term_ << ", E_c_term_=" << E_c_term_ << ", p_n=" << p_n << ", p_c=" << p_c << endl; -#endif - - - // calculate proton distribution of second proton with other one at most basic site fixed - calculateProtonDistribution_(peptide, 2, Residue::Full, false, n_term_ion.size(), true); - -#ifdef CALC_CHARGE_STATES_DEBUG - cerr << "Distribution of second proton: " << endl; - cerr << "BB: "; - for (Size i = 0; i != bb_charge_.size(); ++i) - { - cerr << "; " << i << ". " << bb_charge_[i]; - } - cerr << "\nSC: "; - for (Size i = 0; i != sc_charge_.size(); ++i) - { - cerr << "; " << i << ". " << sc_charge_[i]; - } - cerr << endl; -#endif - - double singly_charged(0); - for (Size i = 0; i != n_term_ion.size(); ++i) - { - n_term2 += bb_charge_[i] * p_n; - singly_charged += bb_charge_[i] * p_c; - if (sc_charge_[i] != 0) - { - n_term2 += sc_charge_[i] * p_n; - singly_charged += sc_charge_[i] * p_c; - } - } - - for (Size i = n_term_ion.size(); i <= peptide.size(); ++i) - { - c_term2 += bb_charge_[i] * p_c; - singly_charged += bb_charge_[i] * p_n; - if (i < peptide.size() && sc_charge_[i] != 0) - { - c_term2 += sc_charge_[i] * p_c; - singly_charged += sc_charge_[i] * p_n; - } - } - - n_term1 = singly_charged; - c_term1 = singly_charged; - - //cerr << E_n_term_ << "\t" << E_c_term_ << "\t" << p_n << "\t" << p_c << "\t" << endl; - - - // calculate charge losses - double gb_n_term = AAIndex::calculateGB(n_term_ion); - double gb_c_term = AAIndex::calculateGB(c_term_ion); - - double b(828.18); // kJ/mol - - double gb_n_term_loss = exp(-(gb_n_term - b) / 1000.0); - double gb_c_term_loss = exp(-(gb_c_term - b) / 1000.0); - -#ifdef CALC_CHARGE_STATES_DEBUG - cerr << "Loss: N-term: " << gb_n_term << " -> " << gb_n_term_loss << ", C-term: " << gb_c_term << " -> " << gb_c_term_loss << endl; -#endif - - n_term1 += n_term2 * (1.0 - gb_n_term_loss); - n_term2 *= gb_n_term_loss; - c_term1 += c_term2 * (1.0 - gb_c_term_loss); - c_term2 *= gb_c_term_loss; - - - // TODO normalization correct? - double sum(0); - sum += n_term1 + n_term2 + c_term1 + c_term2; - n_term1 /= sum; - n_term2 /= sum; - c_term1 /= sum; - c_term2 /= sum; - -#ifdef CALC_CHARGE_STATES_DEBUG - cerr << "CD: charge=2, " << n_term_ion << "|" << c_term_ion << ", n_term1=" << n_term1 << ", n_term2=" << n_term2 << ", c_term1=" << c_term1 << ", c_term2=" << c_term2 << endl; -#endif - } - else - { - if (type == ChargeRemote || type == SideChain) - { - // TODO ranges correct? Missing some sites of the peptide - double n_term_sum(0), c_term_sum(0); - for (Size i = 0; i != n_term_ion.size(); ++i) - { - n_term_sum += bb_charge_full_[i]; - n_term_sum += sc_charge_full_[i]; - } - for (Size i = n_term_ion.size(); i != peptide.size(); ++i) - { - c_term_sum += bb_charge_full_[i]; - c_term_sum += sc_charge_full_[i]; - } - c_term_sum += bb_charge_full_[peptide.size()]; - - if (n_term_sum - 1 > 0) - { - n_term2 = n_term_sum - 1; - n_term1 = 1 - n_term2; - } - else - { - n_term1 = n_term_sum; - n_term2 = 0; - } - if (c_term_sum - 1 > 0) - { - c_term2 = c_term_sum - 1; - c_term1 = 1 - c_term2; - } - else - { - c_term1 = c_term_sum; - c_term2 = 0; - } - - double sum(0); - sum += n_term1 + n_term2 + c_term1 + c_term2; - n_term1 /= sum; - n_term2 /= sum; - c_term1 /= sum; - c_term2 /= sum; -#ifdef CALC_CHARGE_STATES_DEBUG - cerr << "CR/SC: charge=2, " << n_term_ion << "|" << c_term_ion << ", n_term1=" << n_term1 << ", n_term2=" << n_term2 << ", c_term1=" << c_term1 << ", c_term2=" << c_term2 << endl; -#endif - } - else - { - cerr << "calcChargeStateIntensities_: unknown fragmentation type (" << type << ")" << endl; - } - } - } - if (charge > 2) - { - /*const AASequence& peptide, const AASequence& n_term_ion, const AASequence& c_term_ion, - Int charge, Residue::ResidueType n_term_type, double& n_term1, double& c_term1, double& n_term2, double& c_term2*/ - // add up charges from the ions - double n_term_sum(0); - for (Size i = 0; i <= n_term_ion.size(); ++i) - { - n_term_sum += bb_charge_[i]; - if (i != n_term_ion.size()) - { - n_term_sum += sc_charge_[i]; - } - } - double c_term_sum(0); - for (Size i = n_term_ion.size() + 1; i != bb_charge_.size(); ++i) - { - c_term_sum += bb_charge_[i]; - } - - for (Size i = n_term_ion.size(); i != sc_charge_.size(); ++i) - { - c_term_sum += sc_charge_[i]; - } - - if (n_term_sum > 2) - { - n_term2 = 1; - n_term1 = 0; - } - else - { - if (n_term_sum > 1) - { - n_term2 = n_term_sum - 1; - n_term1 = 1 - n_term2; - } - else - { - n_term2 = 0; - n_term1 = n_term_sum; - } - } - - if (c_term_sum > 2) - { - c_term2 = 1; - c_term1 = 0; - } - else - { - if (c_term_sum > 1) - { - c_term2 = c_term_sum - 1; - c_term1 = 1 - c_term2; - } - else - { - c_term2 = 0; - c_term1 = c_term_sum; - } - } - - /* - if (n_term_ion.size() == 2) - { - n_term1 /= 10.0; - n_term2 /= 10.0; - } - */ - - - } - return; - } - - void ProtonDistributionModel::getLeftAndRightGBValues_(const AASequence & peptide, double & left_gb, double & right_gb, Size position) - { - // TODO test if position out of range - if (position == 0) - { - left_gb = (double)param_.getValue("gb_bb_l_NH2"); - right_gb = peptide[position].getBackboneBasicityRight(); - return; - //cerr << position << " " << left_gb << " " << right_gb << endl; - } - else - { - if (position == peptide.size()) - { - left_gb = peptide[position - 1].getBackboneBasicityLeft(); - right_gb = (double)param_.getValue("gb_bb_r_COOH"); - return; - //cerr << position << " " << left_gb << " " << right_gb << endl; - } - else - { - left_gb = peptide[position - 1].getBackboneBasicityLeft(); - right_gb = peptide[position].getBackboneBasicityRight(); - return; - //cerr << position << " " << left_gb << " " << right_gb << endl; - } - } - } - -} // namespace OpenMS diff --git a/src/openms/source/ANALYSIS/ID/sources.cmake b/src/openms/source/ANALYSIS/ID/sources.cmake index c77e7bcd1bb..41cc05a6d59 100644 --- a/src/openms/source/ANALYSIS/ID/sources.cmake +++ b/src/openms/source/ANALYSIS/ID/sources.cmake @@ -38,7 +38,6 @@ PeptideProteinResolution.cpp PeptideIndexing.cpp PercolatorFeatureSetHelper.cpp PrecursorPurity.cpp -ProtonDistributionModel.cpp PScore.cpp SimpleSearchEngineAlgorithm.cpp SiriusExportAlgorithm.cpp diff --git a/src/pyOpenMS/pxds/ProtonDistributionModel.pxd b/src/pyOpenMS/pxds/ProtonDistributionModel.pxd deleted file mode 100644 index 6bdc900cca5..00000000000 --- a/src/pyOpenMS/pxds/ProtonDistributionModel.pxd +++ /dev/null @@ -1,70 +0,0 @@ -from Types cimport * -from libcpp.vector cimport vector as libcpp_vector -from Types cimport * -from Residue cimport * -from DefaultParamHandler cimport * -from AASequence cimport * - -cdef extern from "" namespace "OpenMS": - - cdef cppclass ProtonDistributionModel(DefaultParamHandler) : - # wrap-inherits: - # DefaultParamHandler - ProtonDistributionModel() except + nogil - # wrap-doc: - # A proton distribution model to calculate the proton distribution over charged peptides - # - # The model uses proton affinity values of backbone nitrogens and sidechains to calculate the - # proton distribution of charged peptide among these sites. The possible sites are the peptide - # bonds between the amino acids, the side chains and the C-terminus and N-terminus. The calculation - # is done calculating a Boltzmann distribution of the sites - # - # Details and the proton affinities can be found in - # Z. Zhang, Prediction of Low-Energy Collision-Induced Dissociation Spectra of Peptides, - # Anal. Chem., 76 (14), 3908 - 3922, 2004 - # - # A proton distribution can be calculated using the getProtonDistribution method. The backbone - # probabilities are reported in the first parameter (index 0 for the N-terminus, index 1 for the - # first peptide bond...), the site chain probabilities are reported in the second parameter - # (index 0, for the first amino acid...). The peptide and the number of protons as well as type - # of peptide (can be Reside::YIon for peptides and y-ions and any other ion type) - # - # Charge state intensities of differently charged equal (e.g. y7+ and y7++) ions can be calculated - # using the getChargeStateIntensities function - - ProtonDistributionModel(ProtonDistributionModel &) except + nogil - void getProtonDistribution(libcpp_vector[ double ] & bb_charges, libcpp_vector[ double ] & sc_charges, AASequence & peptide, Int charge, ResidueType res_type) except + nogil - # wrap-doc: - # Calculates a proton distribution of the given charged peptide - # - # - # :param bb_charges: The calculated probabilities of the backbone sites (including N-terminus and C-terminus) - # :param sc_charges: The calculated probabilities of the side chain sites - # :param peptide: The peptide as AASequence object - # :param charge: The charge - # :param res_type: The type of the ion given in peptide. Peptides are handled as y-ions, i.e. Residue::YIon - - void getChargeStateIntensities(AASequence & peptide, AASequence & n_term_ion, AASequence & c_term_ion, Int charge, ResidueType n_term_type, libcpp_vector[ double ] & n_term_intensities, libcpp_vector[ double ] & c_term_intensities, FragmentationType type_) except + nogil - # wrap-doc: - # Calculates the charge state intensities of different charge states of the same ion - # - # - # :param peptide: The peptide - # :param n_term_ion: The prefix ion sequence - # :param c_term_ion: The suffix ion sequence - # :param charge: The charge - # :param n_term_type: The ion type of the N-terminal ion; valid values are Residue::AIon, Residue::BIon - # :param n_term_intensities: The probability of seeing a charged prefix ions (first index corresponds to ion of charge 1) - # :param c_term_intensities: The probability of seeing a charged suffix ions (first index corresponds to ion of charge 2) - # :param type: The type of fragmentation (charge-directed, charge-remote of side chain) - - void setPeptideProtonDistribution(libcpp_vector[ double ] & bb_charge, libcpp_vector[ double ] & sc_charge) except + nogil - -cdef extern from "" namespace "OpenMS::ProtonDistributionModel": - cdef enum FragmentationType "OpenMS::ProtonDistributionModel::FragmentationType": - #wrap-attach: - # ProtonDistributionModel - ChargeDirected - ChargeRemote - SideChain - diff --git a/src/tests/class_tests/openms/executables.cmake b/src/tests/class_tests/openms/executables.cmake index 769010783b7..19ca3f49102 100644 --- a/src/tests/class_tests/openms/executables.cmake +++ b/src/tests/class_tests/openms/executables.cmake @@ -541,7 +541,6 @@ set(analysis_executables_list PoseClusteringAffineSuperimposer_test PoseClusteringShiftSuperimposer_test PrecursorPurity_test - ProtonDistributionModel_test ProteinResolver_test PSProteinInference_test QTClusterFinder_test diff --git a/src/tests/class_tests/openms/source/ProtonDistributionModel_test.cpp b/src/tests/class_tests/openms/source/ProtonDistributionModel_test.cpp deleted file mode 100644 index 92789f56eae..00000000000 --- a/src/tests/class_tests/openms/source/ProtonDistributionModel_test.cpp +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin -// SPDX-License-Identifier: BSD-3-Clause -// -// -------------------------------------------------------------------------- -// $Maintainer: Timo Sachsenberg $ -// $Authors: Andreas Bertsch $ -// -------------------------------------------------------------------------- - -#include -#include - -/////////////////////////// - -#include - -#include -#include - -/////////////////////////// - -START_TEST(ProtonDistributionModel, "$Id$") - -///////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////// - -using namespace OpenMS; -using namespace std; - -ProtonDistributionModel* ptr = nullptr; -ProtonDistributionModel* nullPointer = nullptr; - -START_SECTION(ProtonDistributionModel()) - ptr = new ProtonDistributionModel(); - TEST_NOT_EQUAL(ptr, nullPointer) -END_SECTION - -START_SECTION(~ProtonDistributionModel()) - delete ptr; -END_SECTION - -ptr = new ProtonDistributionModel(); - -START_SECTION(ProtonDistributionModel(const ProtonDistributionModel& model)) - ProtonDistributionModel copy(*ptr); - NOT_TESTABLE -END_SECTION - -START_SECTION(ProtonDistributionModel& operator = (const ProtonDistributionModel& pdm)) - ProtonDistributionModel copy; - copy = *ptr; - NOT_TESTABLE -END_SECTION - -START_SECTION(void getProtonDistribution(vector& bb_charges, vector& sc_charges, const AASequence& peptide, Int charge, Residue::ResidueType res_type = Residue::YIon)) - vector bb_charges, sc_charges; - double bb_tmp[] = {1.76496e-09, 2.9459e-13, 6.3724e-12, 2.96724e-13, 0.69332e-13, 6.56286e-13, 4.82365e-13, 3.51139e-13, 5.82514e-23, 1.35049e-12}; - AASequence peptide = AASequence::fromString("DFPIANGER"); - ptr->getProtonDistribution(bb_charges, sc_charges, peptide, 1); - for (Size i = 0; i <= peptide.size(); ++i) - { - TEST_REAL_SIMILAR(bb_charges[i], bb_tmp[i]) - } - - double sc_tmp[] = {2.7239e-23, 0, 0, 0, 0, 7.77547e-15, 0, 1.15343e-22, 1}; - for (Size i = 0; i != peptide.size(); ++i) - { - TEST_REAL_SIMILAR(sc_charges[i], sc_tmp[i]) - } - -END_SECTION - -START_SECTION((void setPeptideProtonDistribution(const std::vector< double > &bb_charge, const std::vector< double > &sc_charge))) - vector bb_charges, sc_charges; - AASequence peptide = AASequence::fromString("DFPIANGER"); - ptr->getProtonDistribution(bb_charges, sc_charges, peptide, 1); - - ptr->setPeptideProtonDistribution(bb_charges, sc_charges); - NOT_TESTABLE -END_SECTION - -START_SECTION((void getChargeStateIntensities(const AASequence &peptide, const AASequence &n_term_ion, const AASequence &c_term_ion, Int charge, Residue::ResidueType n_term_type, std::vector< double > &n_term_intensities, std::vector< double > &c_term_intensities, FragmentationType type))) - vector bb_charges, sc_charges; - AASequence peptide = AASequence::fromString("DFPIANGER"); - ptr->getProtonDistribution(bb_charges, sc_charges, peptide, 1); - - // set the full proton distribution - ptr->setPeptideProtonDistribution(bb_charges, sc_charges); - - AASequence pre1 = AASequence::fromString("DFP"); - AASequence suf1 = AASequence::fromString("IANGER"); - vector pre_ints, suf_ints; - ptr->getChargeStateIntensities(peptide, pre1, suf1, 1, Residue::YIon, pre_ints, suf_ints, ProtonDistributionModel::ChargeDirected); - - TEST_EQUAL(pre_ints.size(), 1) - TEST_EQUAL(suf_ints.size(), 1) - TEST_REAL_SIMILAR(pre_ints[0], 0.0); - TEST_REAL_SIMILAR(suf_ints[0], 1.0); - - pre_ints.clear(); - suf_ints.clear(); - ptr->getChargeStateIntensities(peptide, pre1, suf1, 2, Residue::YIon, pre_ints, suf_ints, ProtonDistributionModel::ChargeDirected); - TEST_EQUAL(pre_ints.size(), 2) - TEST_EQUAL(suf_ints.size(), 2) - TOLERANCE_ABSOLUTE(0.01) - TEST_REAL_SIMILAR(pre_ints[0], 0.40526) - TEST_REAL_SIMILAR(pre_ints[1], 0.0) - TEST_REAL_SIMILAR(suf_ints[0], 0.4922) - TEST_REAL_SIMILAR(suf_ints[1], 0.1025) - -END_SECTION - -delete ptr; - -///////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////// - -END_TEST