Repository 'spec2vec_training'
hg clone https://toolshed.g2.bx.psu.edu/repos/recetox/spec2vec_training

Changeset 0:e1e22ada831e (2023-01-05)
Next changeset 1:9d917de87cca (2023-06-27)
Commit message:
planemo upload for repository https://github.com/RECETOX/galaxytools/tree/master/tools/spec2vec commit 2e4bdc2fd94445aa5a8d1882a3d092cca727e4b6
added:
macros.xml
spec2vec_training.xml
spec2vec_training_wrapper.py
test-data/RECETOX_Exposome_pesticides_HR_MS_normalized_20220323.msp
test-data/model.json
test-data/model_vector_size_100.json
b
diff -r 000000000000 -r e1e22ada831e macros.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/macros.xml Thu Jan 05 10:08:12 2023 +0000
b
@@ -0,0 +1,19 @@
+<macros>
+    <token name="@COMMIT_SHA@">c9b54b9</token>
+    <token name="@TOOL_VERSION@">0.6.0</token>
+    <token name="@TOOL_DEV_VERSION@">0</token>
+
+    <xml name="creator">
+        <creator>
+            <person
+                givenName="Maksym"
+                familyName="Skoryk"
+                url="https://github.com/maximskorik"
+                identifier="0000-0003-2056-8018" />
+            <organization
+                url="https://www.recetox.muni.cz/"
+                email="GalaxyToolsDevelopmentandDeployment@space.muni.cz"
+                name="RECETOX MUNI" />
+        </creator>
+    </xml>
+</macros>
b
diff -r 000000000000 -r e1e22ada831e spec2vec_training.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/spec2vec_training.xml Thu Jan 05 10:08:12 2023 +0000
[
b'@@ -0,0 +1,257 @@\n+<tool id="spec2vec_training" name="Spec2Vec Model Training" version="@TOOL_VERSION@-@TOOL_DEV_VERSION@+galaxy0" python_template_version="3.5" profile="21.05">\n+    <description>Train a Spec2Vec model for mass spectra similarity scoring</description>\n+\n+    <macros>\n+        <import>macros.xml</import>\n+    </macros>\n+    <expand macro="creator"/>\n+\n+    <requirements>\n+        <container type="docker">recetox/spec2vec:@COMMIT_SHA@</container>\n+    </requirements>\n+\n+    <command detect_errors="exit_code"><![CDATA[\n+        ln -fs \'${weights_filename}\' \'${weights_filename}.npy\' &&\n+        sh ${spec2vec_python_cli}\n+    ]]></command>\n+        \n+    <configfiles>\n+        <configfile name="spec2vec_python_cli">\n+            python3 \'${__tool_directory__}/spec2vec_training_wrapper.py\' \\\n+            --spectra_filename \'$spectra_filename\' \\\n+            --spectra_fileformat \'$spectra_filename.ext\' \\\n+            #if $output_parameters.model_checkpoints.save_checkpoints == \'TRUE\'\n+            --checkpoints \'$output_parameters.model_checkpoints.checkpoints\' \\\n+            #else\n+            --epochs $output_parameters.model_checkpoints.epochs \\\n+            #end if\n+            --vector_size $training_parameters.vector_size \\\n+            --alpha $training_parameters.alpha \\\n+            --min_alpha $training_parameters.min_alpha \\\n+            --window $training_parameters.window \\\n+            --min_count $training_parameters.min_count \\\n+            --sample $training_parameters.sample \\\n+            --seed $training_parameters.seed \\\n+            --sg $training_parameters.sg_param.sg \\\n+            #if not $training_parameters.sg_param.sg\n+            --cbow_mean $training_parameters.sg_param.cbow_mean \\\n+            #end if\n+            --hs $training_parameters.hs_param.hs \\\n+            #if not $training_parameters.hs_param.hs\n+            --negative $training_parameters.hs_param.negative \\\n+            --ns_exponent $training_parameters.hs_param.ns_exponent \\\n+            #end if\n+            --sorted_vocab $training_parameters.sorted_vocab \\\n+            --batch_words $training_parameters.batch_words \\\n+            --shrink_windows $training_parameters.shrink_windows \\\n+            #if $training_parameters.trim_vocab.max_vocab_size_bool == \'TRUE\'\n+            --max_vocab_size $training_parameters.trim_vocab.max_vocab_size \\\n+            #end if\n+            --n_decimals $training_parameters.n_decimals \\\n+            --n_workers \\${GALAXY_SLOTS:-1} \\\n+            #if $output_parameters.as_pickle\n+            --model_filename_pickle \'$model_filename_pickle\' \\\n+            #end if\n+            --model_filename \'$model_filename\' \\\n+            --weights_filename \'$weights_filename\' \\\n+        </configfile>\n+    </configfiles>\n+\n+    <inputs>\n+        <param label="Training spectra" name="spectra_filename" type="data" format="msp,mgf"\n+               help="Spectra file to train a Spec2Vec model."/>\n+\n+        <section title="Output parameters" name="output_parameters" expanded="true">\n+            <param label="Save model as Pickle file" name="as_pickle" type="boolean" checked="false" truevalue="TRUE" falsevalue="FALSE"\n+                   help="Add a Pickle output besides default JSON."/>\n+            <conditional name="model_checkpoints">\n+                <param label="Model checkpoints" name="save_checkpoints" type="select" display="radio"\n+                   help="Epochs after which to save a model.">\n+                    <option value="TRUE">Yes</option>\n+                    <option value="FALSE" selected="true">No</option>\n+                </param>\n+                <when value="TRUE">\n+                    <param label="Number of training epochs with checkpoints" name="checkpoints" type="text" value="10,20,50"\n+                           help="Comma-separated epoch numbers after which to save a model. The highest number will be used as a total number of epochs for training.">\n+                           '..b'HR_MS_normalized_20220323.msp" ftype="msp"/>\n+            <param name="as_pickle" value="TRUE"/>\n+            <output name="model_filename" file="model.json" ftype="json"/>\n+            <output name="weights_filename" ftype="binary">\n+                <assert_contents>\n+                    <has_size value="1708000" delta="1000"/>\n+                    <has_text text="\'shape\': (1423, 300)" n="1"/>\n+                </assert_contents>\n+            </output>\n+            <output name="model_filename_pickle" ftype="binary">\n+                <assert_contents>\n+                    <has_size value="3468000" delta="1000" />\n+                    <has_text text="gensim.models.word2vec"/>\n+                    <has_text text="peak@" n="1423"/>\n+                </assert_contents>\n+            </output>\n+        </test>\n+        <test expect_num_outputs="3"> <!-- Test 3: model checkpoints -->\n+            <param name="spectra_filename" value="RECETOX_Exposome_pesticides_HR_MS_normalized_20220323.msp" ftype="msp"/>\n+            <conditional name="model_checkpoints">\n+                <param name="save_checkpoints" value="TRUE"/>\n+                <param name="checkpoints" value="1,5,8,10"/>\n+            </conditional>\n+            <output name="model_filename" file="model.json" ftype="json"/>\n+            <output name="weights_filename" ftype="binary">\n+                <assert_contents>\n+                    <has_size value="1708000" delta="1000"/>\n+                    <has_text text="\'shape\': (1423, 300)" n="1"/>\n+                </assert_contents>\n+            </output>\n+            <output_collection name="model_checkpoints" type="list" count="3">\n+                <element name="spec2vec_iter_1">\n+                    <assert_contents>\n+                        <has_size value="3468000" delta="1000" />\n+                        <has_text text="gensim.models.word2vec" />\n+                        <has_text text="peak@" n="1423" />\n+                    </assert_contents>\n+                </element>\n+                <element name="spec2vec_iter_5">\n+                    <assert_contents>\n+                        <has_size value="3468000" delta="1000" />\n+                        <has_text text="gensim.models.word2vec" />\n+                        <has_text text="peak@" n="1423" />\n+                    </assert_contents>\n+                </element>\n+                <element name="spec2vec_iter_8">\n+                    <assert_contents>\n+                        <has_size value="3468000" delta="1000" />\n+                        <has_text text="gensim.models.word2vec" />\n+                        <has_text text="peak@" n="1423" />\n+                    </assert_contents>\n+                </element>\n+            </output_collection>\n+        </test>\n+        <test> <!-- Test 4: embeddings size in output corresponds to `vector_size` param -->\n+            <param name="spectra_filename" value="RECETOX_Exposome_pesticides_HR_MS_normalized_20220323.msp" ftype="msp"/>\n+            <param name="vector_size" value="100"/>\n+            <output name="model_filename" file="model_vector_size_100.json" ftype="json"/>\n+            <output name="weights_filename" ftype="binary">\n+                <assert_contents>\n+                    <has_size value="569000" delta="1000"/>\n+                    <has_text text="\'shape\': (1423, 100)" n="1"/>\n+                </assert_contents>\n+            </output>\n+        </test>\n+    </tests>\n+\n+    <help><![CDATA[\n+    **Spec2vec** is a spectral similarity score inspired by a natural language processing algorithm \xe2\x80\x93 Word2Vec.\n+    Where Word2Vec learns relationships between words in sentences, spec2vec does so for mass fragments and neutral losses in MS/MS spectra.\n+    The spectral similarity score is based on spectral embeddings learnt from the fragmental relationships within a large set of spectral data.\n+    ]]></help>\n+\n+    <citations>\n+        <citation type="doi">10.1371/journal.pcbi.1008724</citation>\n+    </citations>\n+</tool>\n'
b
diff -r 000000000000 -r e1e22ada831e spec2vec_training_wrapper.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/spec2vec_training_wrapper.py Thu Jan 05 10:08:12 2023 +0000
[
@@ -0,0 +1,110 @@
+#!/usr/bin/env python
+
+import argparse
+import sys
+
+from matchms.importing import load_from_mgf, load_from_msp
+from spec2vec import SpectrumDocument
+from spec2vec.model_building import train_new_word2vec_model
+from spec2vec.serialization import export_model
+
+
+def read_spectra(spectra_file, file_format):
+    if file_format == "mgf":
+        return load_from_mgf(spectra_file)
+    elif file_format == "msp":
+        return load_from_msp(spectra_file)
+    else:
+        raise NotImplementedError(f"Unsupported file format: {file_format}.")
+
+
+def parse_checkpoints_input(checkpoints_input):
+    checkpoints_str = checkpoints_input.replace(" ", "").split(",")
+    try:
+        checkpoints_int = map(int, checkpoints_str)
+    except ValueError:
+        raise ValueError("Checkpoint values must be integers.")
+    return list(set(checkpoints_int))
+
+
+def main(argv):
+    parser = argparse.ArgumentParser(description="Train a spec2vec model.")
+
+    # Input data
+    parser.add_argument("--spectra_filename", type=str, help="Path to a file containing spectra.")
+    parser.add_argument("--spectra_fileformat", type=str, help="Spectra file format.")
+
+    # Training parameters
+    parser.add_argument("--epochs", type=int, default=0, help="Number of epochs to train the model.")
+    parser.add_argument("--checkpoints", type=str, default=None, help="Epochs after which to save the model.")
+
+    # Hyperparameters
+    parser.add_argument("--vector_size", type=int, default=100, help="Dimensionality of the feature vectors.")
+    parser.add_argument("--alpha", type=float, default=0.025, help="The initial learning rate.")
+    parser.add_argument("--window", type=int, default=5, help="The maximum distance between the current and predicted peak within a spectrum.")
+    parser.add_argument("--min_count", type=int, default=5, help="Ignores all peaks with total frequency lower than this.")
+    parser.add_argument("--sample", type=float, default=0.001, help="The threshold for configuring which higher-frequency peaks are randomly downsampled.")
+    parser.add_argument("--seed", type=int, default=1, help="A seed for model reproducibility.")
+    parser.add_argument("--min_alpha", type=float, default=0.0001, help="Learning rate will linearly drop to min_alpha as training progresses.")
+    parser.add_argument("--sg", type=int, default=0, help="Training algorithm: 1 for skip-gram; otherwise CBOW.")
+    parser.add_argument("--hs", type=int, default=0, help="If 1, hierarchical softmax will be used for model training. If set to 0, and negative is non-zero, negative sampling will be used.")
+    parser.add_argument("--negative", type=int, default=5, help="If > 0, negative sampling will be used, the int for negative specifies how many “noise words” should be drawn (usually between 5-20). If set to 0, no negative sampling is used.")
+    parser.add_argument("--ns_exponent", type=float, default=0.75, help="The exponent used to shape the negative sampling distribution.")
+    parser.add_argument("--cbow_mean", type=int, default=1, help="If 0, use the sum of the context word vectors. If 1, use the mean. Only applies when cbow is used.")
+    parser.add_argument("--sorted_vocab", type=bool, default=True, help="If 1, sort the vocabulary by descending frequency before assigning word indexes.")
+    parser.add_argument("--batch_words", type=int, default=10000, help="Target size (in words) for batches of examples passed to worker threads (and thus cython routines). Larger batches will be passed if individual texts are longer than 10000 words, but the standard cython code truncates to that maximum.")
+    parser.add_argument("--shrink_windows", type=bool, default=True, help="If 1, the input sentence will be truncated to the window size.")
+    parser.add_argument("--max_vocab_size", type=int, default=None, help="Limits the RAM during vocabulary building; if there are more unique words than this, then prune the infrequent ones. Every 10 million word types need about 1GB of RAM. Set to None for no limit (default).")
+    parser.add_argument("--n_decimals", type=int, default=2, help="Rounds peak position to this number of decimals.")
+    parser.add_argument("--n_workers", type=int, default=1, help="Number of worker nodes to train the model.")
+
+    # Output files
+    parser.add_argument("--model_filename_pickle", type=str, help="If specified, the model will also be saved as a pickle file.")
+    parser.add_argument("--model_filename", type=str, help="Path to the output model json-file.")
+    parser.add_argument("--weights_filename", type=str, help="Path to the output weights json-file.")
+
+    args = parser.parse_args()
+
+    # Load the spectra
+    spectra = list(read_spectra(args.spectra_filename, args.spectra_fileformat))
+    reference_documents = [SpectrumDocument(spectrum, n_decimals=args.n_decimals) for spectrum in spectra]
+
+    # Process epoch arguments
+    if args.checkpoints:
+        iterations = parse_checkpoints_input(args.checkpoints)
+    else:
+        iterations = args.epochs
+
+    # Train a model
+    model = train_new_word2vec_model(
+        documents=reference_documents,
+        iterations=iterations,
+        filename="spec2vec",
+        progress_logger=True,
+        workers=args.n_workers,
+        vector_size=args.vector_size,
+        learning_rate_initial=args.alpha,
+        learning_rate_decay=args.min_alpha,
+        window=args.window,
+        min_count=args.min_count,
+        sample=args.sample,
+        seed=args.seed,
+        sg=args.sg,
+        hs=args.hs,
+        negative=args.negative,
+        ns_exponent=args.ns_exponent,
+        cbow_mean=args.cbow_mean,
+        sorted_vocab=args.sorted_vocab,
+        batch_words=args.batch_words,
+        shrink_windows=args.shrink_windows,
+        max_vocab_size=args.max_vocab_size)
+
+    # Save the model
+    if args.model_filename_pickle:
+        model.save(args.model_filename_pickle)
+
+    export_model(model, args.model_filename, args.weights_filename)
+
+
+if __name__ == "__main__":
+    main(argv=sys.argv[1:])
b
diff -r 000000000000 -r e1e22ada831e test-data/RECETOX_Exposome_pesticides_HR_MS_normalized_20220323.msp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/RECETOX_Exposome_pesticides_HR_MS_normalized_20220323.msp Thu Jan 05 10:08:12 2023 +0000
[
b'@@ -0,0 +1,6548 @@\n+SCANNUMBER: 1161\n+PRECURSORTYPE: [M+H]+\n+IONMODE: positive\n+SPECTRUMTYPE: Centroid\n+FORMULA: C4H10NO3PS\n+INCHIKEY: YASYVMFAVPKPKE-SECBINFHSA-N\n+INCHI: \n+SMILES: COP(=O)(N=C(O)C)SC\n+AUTHORS: Biomarker Analytical Laboratories, RECETOX, Masaryk University (CZ)\n+INSTRUMENT: LC Orbitrap Fusion Tribrid MS\n+INSTRUMENTTYPE: LC-ESI-Orbitrap\n+IONIZATION: ESI+\n+LICENSE: CC BY-NC\n+COMMENT: \n+COMPOUND_NAME: Acephate\n+RETENTION_TIME: 1.232997\n+PRECURSOR_MZ: 184.0194\n+COLLISION_ENERGY: \n+NUM PEAKS: 16\n+90.09368    0.029663134088936807\n+93.11512    0.03263470691876824\n+95.10279    0.02940016304204907\n+101.31465   0.030294264601467377\n+102.90688   0.03476477239855892\n+103.98039   0.03158282273121729\n+112.01607   0.3231651195203408\n+112.99994   1.0\n+115.00399   0.042969469061456336\n+124.98121   0.02424593052304941\n+128.97701   0.24214373997422883\n+132.57193   0.03550109132984458\n+135.84808   0.037552265495568934\n+142.99275   0.43177216188497647\n+147.94205   0.046019933205354094\n+173.5094    0.06187708733268467\n+\n+SCANNUMBER: 2257\n+PRECURSORTYPE: [M+H]+\n+IONMODE: positive\n+SPECTRUMTYPE: Centroid\n+FORMULA: C12H11NO2\n+INCHIKEY: CVXBEEMKQHEXEN-UHFFFAOYSA-N\n+INCHI: \n+SMILES: CN=C(Oc1cccc2c1cccc2)O\n+AUTHORS: Biomarker Analytical Laboratories, RECETOX, Masaryk University (CZ)\n+INSTRUMENT: LC Orbitrap Fusion Tribrid MS\n+INSTRUMENTTYPE: LC-ESI-Orbitrap\n+IONIZATION: ESI+\n+LICENSE: CC BY-NC\n+COMMENT: \n+COMPOUND_NAME: Carbaryl\n+RETENTION_TIME: 5.259445\n+PRECURSOR_MZ: 202.0863\n+COLLISION_ENERGY: \n+NUM PEAKS: 1\n+145.06491   1.0         "Theoretical m/z 145.064787, Mass diff 0 (0.85 ppm), SMILES OC1=CC=CC=2C=CC=CC12, Annotation [C10H8O+H]+, Rule of HR True"\n+\n+SCANNUMBER: 1516\n+PRECURSORTYPE: [M+H]+\n+IONMODE: positive\n+SPECTRUMTYPE: Centroid\n+FORMULA: C8H16NO5P\n+INCHIKEY: VEENJGZXVHKXNB-UHFFFAOYSA-N\n+INCHI: \n+SMILES: COP(=O)(OC(=CC(=O)N(C)C)C)OC\n+AUTHORS: Biomarker Analytical Laboratories, RECETOX, Masaryk University (CZ)\n+INSTRUMENT: LC Orbitrap Fusion Tribrid MS\n+INSTRUMENTTYPE: LC-ESI-Orbitrap\n+IONIZATION: ESI+\n+LICENSE: CC BY-NC\n+COMMENT: \n+COMPOUND_NAME: Dicrotophos\n+RETENTION_TIME: 2.025499\n+PRECURSOR_MZ: 238.0844\n+COLLISION_ENERGY: \n+NUM PEAKS: 5\n+112.074     0.01124761836832089\n+112.07591   1.0         "Theoretical m/z 112.075687, Mass diff 0 (1.99 ppm), SMILES O=C(C=CC)N(C)C, Annotation [C6H11NO-H]+, Rule of HR True"\n+127.01563   0.35611747652157366     "Theoretical m/z 127.01547, Mass diff 0 (1.26 ppm), SMILES O=P(O)(OC)OC, Annotation [C2H7O4P+H]+, Rule of HR True"\n+193.02605   0.8706598300714133      "Theoretical m/z 193.026035, Mass diff 0 (0.08 ppm), SMILES O=CC=C(OP(=O)(OC)OC)C, Annotation [C6H11O5P-H]+, Rule of HR True"\n+238.08437   0.32776190727646287     "Theoretical m/z 238.083891, Mass diff 0 (2.01 ppm), SMILES O=C(C=C(OP(=O)(OC)OC)C)N(C)C, Annotation [C8H16NO5P+H]+, Rule of HR True"\n+\n+SCANNUMBER: 1865\n+PRECURSORTYPE: [M+H]+\n+IONMODE: positive\n+SPECTRUMTYPE: Centroid\n+FORMULA: C5H12NO3PS2\n+INCHIKEY: MCWXGJITAZMZEV-UHFFFAOYSA-N\n+INCHI: \n+SMILES: CN=C(CSP(=S)(OC)OC)O\n+AUTHORS: Biomarker Analytical Laboratories, RECETOX, Masaryk University (CZ)\n+INSTRUMENT: LC Orbitrap Fusion Tribrid MS\n+INSTRUMENTTYPE: LC-ESI-Orbitrap\n+IONIZATION: ESI+\n+LICENSE: CC BY-NC\n+COMMENT: \n+COMPOUND_NAME: Dimethoate\n+RETENTION_TIME: 2.866696\n+PRECURSOR_MZ: 230.0072\n+COLLISION_ENERGY: \n+NUM PEAKS: 8\n+88.0219     0.10126528522417098     "Theoretical m/z 88.021549, Mass diff 0 (3.99 ppm), SMILES SCC=NC, Annotation [C3H7NS-H]+, Rule of HR True"\n+124.98233   0.03394816737947091     "Theoretical m/z 124.982067, Mass diff 0 (2.11 ppm), SMILES S=P(OC)OC, Annotation [C2H7O2PS-H]+, Rule of HR True"\n+142.99275   0.13332015000924125     "Theoretical m/z 142.993177, Mass diff 0 (0 ppm), Formula C2H8O3PS"\n+156.95422   0.014917466667331371    "Theoretical m/z 156.954136, Mass diff 0 (0.54 ppm), SMILES S=P(S)(OC)OC, Annotation [C2H7O2PS2-H]+, Rule of HR True"\n+170.97      0.2633444689954621      "Theoretical m/z 170.969791, Mass diff 0 (1.22 ppm), SMILES S=P(OC'..b'cal Laboratories, RECETOX, Masaryk University (CZ)\n+INSTRUMENT: LC Orbitrap Fusion Tribrid MS\n+INSTRUMENTTYPE: LC-ESI-Orbitrap\n+IONIZATION: ESI+\n+LICENSE: CC BY-NC\n+COMMENT: \n+COMPOUND_NAME: Mexacarbate\n+RETENTION_TIME: 1.682191\n+PRECURSOR_MZ: 223.1443\n+COLLISION_ENERGY: \n+NUM PEAKS: 5\n+134.07283   0.048004709909413995    "Theoretical m/z 134.072623, Mass diff 0 (1.55 ppm), SMILES O(C=1C=C(C=C(C1)C)C)C, Annotation [C9H12O-2H]+, Rule of HR False"\n+136.07611   0.474709014573502       "Theoretical m/z 136.076239, Mass diff 0 (0 ppm), Formula C8H10NO"\n+150.092     0.02866330157050705     "Theoretical m/z 150.091343, Mass diff 0.001 (4.38 ppm), SMILES OC1=CC=C(C(=C1)C)N(C)C, Annotation [C9H13NO-H]+, Rule of HR True"\n+151.09932   1.0         "Theoretical m/z 151.099168, Mass diff 0 (1.01 ppm), SMILES OC1=CC=C(C(=C1)C)N(C)C, Annotation [C9H13NO]+, Rule of HR False"\n+166.12282   0.02811286892205852     "Theoretical m/z 166.122633, Mass diff 0 (1.13 ppm), SMILES OC=1C=C(C(=C(C1)C)N(C)C)C, Annotation [C10H15NO+H]+, Rule of HR True"\n+\n+SCANNUMBER: 3999\n+PRECURSORTYPE: [M+H]+\n+IONMODE: positive\n+SPECTRUMTYPE: Centroid\n+FORMULA: C19H21N2OCl\n+INCHIKEY: OGYFATSSENRIKG-UHFFFAOYSA-N\n+INCHI: \n+SMILES: Clc1ccc(cc1)CN(C(=Nc1ccccc1)O)C1CCCC1\n+AUTHORS: Biomarker Analytical Laboratories, RECETOX, Masaryk University (CZ)\n+INSTRUMENT: LC Orbitrap Fusion Tribrid MS\n+INSTRUMENTTYPE: LC-ESI-Orbitrap\n+IONIZATION: ESI+\n+LICENSE: CC BY-NC\n+COMMENT: \n+COMPOUND_NAME: Monceren\n+RETENTION_TIME: 7.14553\n+PRECURSOR_MZ: 329.1426\n+COLLISION_ENERGY: \n+NUM PEAKS: 5\n+89.03881    0.014711534999784734    "Theoretical m/z 89.038575, Mass diff 0 (2.63 ppm), SMILES C=1C=CC(=CC1)C, Annotation [C7H8-3H]+, Rule of HR True"\n+94.06543    0.016966589174607548    "Theoretical m/z 94.065123, Mass diff 0 (3.27 ppm), SMILES NC=1C=CC=CC1, Annotation [C6H7N+H]+, Rule of HR True"\n+106.06545   0.011922830429775924    "Theoretical m/z 106.065123, Mass diff 0 (3.09 ppm), SMILES N(=C)C=1C=CC=CC1, Annotation [C7H7N+H]+, Rule of HR True"\n+125.01307   0.013678447019393882\n+125.01532   1.0         "Theoretical m/z 125.015255, Mass diff 0 (0.52 ppm), SMILES ClC1=CC=C(C=C1)C, Annotation [C7H7Cl-H]+, Rule of HR True"\n+\n+SCANNUMBER: 2271\n+PRECURSORTYPE: [M+H]+\n+IONMODE: positive\n+SPECTRUMTYPE: Centroid\n+FORMULA: C16H16N2O4\n+INCHIKEY: WZJZMXBKUWKXTQ-UHFFFAOYSA-N\n+INCHI: \n+SMILES: CCOC(=Nc1cccc(c1)OC(=Nc1ccccc1)O)O\n+AUTHORS: Biomarker Analytical Laboratories, RECETOX, Masaryk University (CZ)\n+INSTRUMENT: LC Orbitrap Fusion Tribrid MS\n+INSTRUMENTTYPE: LC-ESI-Orbitrap\n+IONIZATION: ESI+\n+LICENSE: CC BY-NC\n+COMMENT: \n+COMPOUND_NAME: Desmedipham\n+RETENTION_TIME: 6.430396\n+PRECURSOR_MZ: 301.1192\n+COLLISION_ENERGY: \n+NUM PEAKS: 3\n+136.03947   0.2736671949482495      "Theoretical m/z 136.03931, Mass diff 0 (1.18 ppm), SMILES OC(O)=NC=1C=CC=CC1, Annotation [C7H7NO2-H]+, Rule of HR True"\n+154.04993   0.15474967323186417     "Theoretical m/z 154.049864, Mass diff 0 (0.43 ppm), SMILES OC(O)=NC=1C=CC=C(O)C1, Annotation [C7H7NO3+H]+, Rule of HR True"\n+182.08162   1.0         "Theoretical m/z 182.081175, Mass diff 0 (2.45 ppm), SMILES OC(=NC=1C=CC=C(O)C1)OCC, Annotation [C9H11NO3+H]+, Rule of HR True"\n+\n+SCANNUMBER: 2458\n+PRECURSORTYPE: [M+H]+\n+IONMODE: positive\n+SPECTRUMTYPE: Centroid\n+FORMULA: C16H16N2O4\n+INCHIKEY: IDOWTHOLJBTAFI-UHFFFAOYSA-N\n+INCHI: \n+SMILES: COC(=Nc1cccc(c1)OC(=Nc1cccc(c1)C)O)O\n+AUTHORS: Biomarker Analytical Laboratories, RECETOX, Masaryk University (CZ)\n+INSTRUMENT: LC Orbitrap Fusion Tribrid MS\n+INSTRUMENTTYPE: LC-ESI-Orbitrap\n+IONIZATION: ESI+\n+LICENSE: CC BY-NC\n+COMMENT: \n+COMPOUND_NAME: Phenmedipham\n+RETENTION_TIME: 6.570995\n+PRECURSOR_MZ: 301.1185\n+COLLISION_ENERGY: \n+NUM PEAKS: 2\n+136.03947   0.36898395493981717     "Theoretical m/z 136.03931, Mass diff 0 (1.18 ppm), SMILES OC(O)=NC=1C=CC=CC1, Annotation [C7H7NO2-H]+, Rule of HR True"\n+168.06587   1.0         "Theoretical m/z 168.065519, Mass diff 0 (2.09 ppm), SMILES OC(=NC=1C=CC=C(O)C1)OC, Annotation [C8H9NO3+H]+, Rule of HR True"\n+\n'
b
diff -r 000000000000 -r e1e22ada831e test-data/model.json
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/model.json Thu Jan 05 10:08:12 2023 +0000
[
b'@@ -0,0 +1,1 @@\n+{"vector_size": 300, "index_to_key": ["peak@95.05", "peak@91.05", "peak@92.05", "peak@115.05", "peak@125.02", "peak@89.04", "peak@173.51", "peak@93.06", "peak@105.07", "peak@105.05", "peak@155.06", "peak@111.04", "peak@120.04", "peak@110.07", "peak@106.07", "peak@118.07", "peak@127.02", "peak@119.06", "peak@119.09", "peak@110.05", "peak@137.02", "peak@149.02", "peak@142.07", "peak@94.07", "peak@107.05", "peak@103.05", "peak@138.08", "peak@96.06", "peak@85.05", "peak@96.04", "peak@158.98", "peak@117.06", "peak@129.07", "peak@139.01", "peak@143.06", "peak@129.01", "peak@120.08", "peak@146.06", "peak@128.06", "peak@119.05", "peak@123.00", "peak@104.05", "peak@131.06", "peak@123.04", "peak@105.04", "peak@163.03", "peak@109.07", "peak@138.99", "peak@117.07", "peak@144.06", "peak@170.10", "peak@110.06", "peak@95.09", "peak@145.06", "peak@85.08", "peak@147.08", "peak@137.06", "peak@151.03", "peak@133.06", "peak@97.04", "peak@165.05", "peak@114.07", "peak@175.03", "peak@132.08", "peak@139.03", "peak@107.09", "peak@99.00", "peak@141.01", "peak@140.03", "peak@113.02", "peak@158.05", "peak@113.08", "peak@109.08", "peak@122.06", "peak@130.07", "peak@168.09", "peak@156.07", "peak@141.07", "peak@167.07", "peak@153.07", "peak@136.04", "peak@165.07", "peak@98.06", "peak@161.06", "peak@164.03", "peak@93.07", "peak@128.05", "peak@157.08", "peak@116.06", "peak@172.99", "peak@86.04", "peak@116.03", "peak@124.08", "peak@118.05", "peak@134.06", "peak@116.05", "peak@150.02", "peak@174.97", "peak@135.08", "peak@184.12", "peak@128.08", "peak@129.05", "peak@100.05", "peak@99.07", "peak@152.06", "peak@148.04", "peak@134.10", "peak@152.07", "peak@121.04", "peak@176.04", "peak@130.03", "peak@94.04", "peak@147.94", "peak@182.08", "peak@121.07", "peak@134.07", "peak@136.08", "peak@186.08", "peak@168.07", "peak@122.10", "peak@123.06", "peak@124.06", "peak@125.01", "peak@91.03", "peak@102.04", "peak@183.06", "peak@91.04", "peak@125.06", "peak@90.03", "peak@130.04", "peak@126.01", "peak@165.10", "peak@93.03", "peak@108.08", "peak@139.07", "peak@148.08", "peak@125.08", "peak@191.06", "peak@122.07", "peak@113.04", "peak@108.06", "peak@191.07", "peak@183.08", "peak@133.09", "peak@159.09", "peak@158.08", "peak@144.08", "peak@114.09", "peak@143.07", "peak@161.10", "peak@150.09", "peak@108.04", "peak@170.07", "peak@132.07", "peak@153.08", "peak@107.07", "peak@163.08", "peak@145.05", "peak@145.10", "peak@131.09", "peak@133.10", "peak@209.06", "peak@120.06", "peak@178.05", "peak@145.03", "peak@172.97", "peak@186.97", "peak@157.09", "peak@164.07", "peak@168.02", "peak@164.04", "peak@133.05", "peak@132.04", "peak@177.05", "peak@102.05", "peak@166.07", "peak@167.09", "peak@190.04", "peak@155.09", "peak@189.05", "peak@142.08", "peak@185.07", "peak@147.07", "peak@160.08", "peak@141.06", "peak@135.04", "peak@131.07", "peak@95.06", "peak@149.06", "peak@159.04", "peak@162.07", "peak@208.96", "peak@130.08", "peak@155.07", "peak@106.03", "peak@98.10", "peak@123.02", "peak@219.03", "peak@109.03", "peak@172.96", "peak@139.05", "peak@124.98", "peak@113.00", "peak@142.99", "peak@147.04", "peak@169.10", "peak@99.04", "peak@146.07", "peak@125.05", "peak@176.03", "peak@141.02", "peak@180.10", "peak@102.06", "peak@136.01", "peak@226.17", "peak@215.03", "peak@147.06", "peak@184.99", "peak@99.08", "peak@164.11", "peak@198.08", "peak@208.13", "peak@165.06", "peak@151.11", "peak@192.10", "peak@308.00", "peak@223.01", "peak@156.09", "peak@109.10", "peak@155.00", "peak@132.96", "peak@125.00", "peak@208.10", "peak@171.03", "peak@159.07", "peak@158.04", "peak@159.97", "peak@127.10", "peak@163.04", "peak@142.12", "peak@216.03", "peak@171.04", "peak@148.09", "peak@158.07", "peak@180.03", "peak@144.07", "peak@148.11", "peak@121.09", "peak@127.99", "peak@140.05", "peak@217.02", "peak@87.08", "peak@166.12", "peak@206.08", "peak@179.07", "peak@107.06", "peak@242.08", "peak@162.04", "peak@150.01", "peak@160.11", "peak@110.10", "peak@115.08", "peak@86.10", "peak@138.09", "peak@223.08'..b': 1240, "peak@155.02": 1241, "peak@226.13": 1242, "peak@210.10": 1243, "peak@209.11": 1244, "peak@196.09": 1245, "peak@185.11": 1246, "peak@102.03": 1247, "peak@187.09": 1248, "peak@188.08": 1249, "peak@216.06": 1250, "peak@161.03": 1251, "peak@174.02": 1252, "peak@175.05": 1253, "peak@119.04": 1254, "peak@134.04": 1255, "peak@150.04": 1256, "peak@151.10": 1257, "peak@163.01": 1258, "peak@188.09": 1259, "peak@163.05": 1260, "peak@170.04": 1261, "peak@178.03": 1262, "peak@179.00": 1263, "peak@205.04": 1264, "peak@214.04": 1265, "peak@155.04": 1266, "peak@147.03": 1267, "peak@146.02": 1268, "peak@134.05": 1269, "peak@101.02": 1270, "peak@98.04": 1271, "peak@366.15": 1272, "peak@231.10": 1273, "peak@230.09": 1274, "peak@215.11": 1275, "peak@214.10": 1276, "peak@202.10": 1277, "peak@201.10": 1278, "peak@200.08": 1279, "peak@199.09": 1280, "peak@199.07": 1281, "peak@189.10": 1282, "peak@247.07": 1283, "peak@260.07": 1284, "peak@273.06": 1285, "peak@139.12": 1286, "peak@211.00": 1287, "peak@86.07": 1288, "peak@96.08": 1289, "peak@136.09": 1290, "peak@137.09": 1291, "peak@138.10": 1292, "peak@151.12": 1293, "peak@224.18": 1294, "peak@179.13": 1295, "peak@180.15": 1296, "peak@191.12": 1297, "peak@192.15": 1298, "peak@194.13": 1299, "peak@208.14": 1300, "peak@167.97": 1301, "peak@152.98": 1302, "peak@139.97": 1303, "peak@136.00": 1304, "peak@134.99": 1305, "peak@121.01": 1306, "peak@111.03": 1307, "peak@108.00": 1308, "peak@107.00": 1309, "peak@96.00": 1310, "peak@90.97": 1311, "peak@377.14": 1312, "peak@349.11": 1313, "peak@347.09": 1314, "peak@337.11": 1315, "peak@335.13": 1316, "peak@334.08": 1317, "peak@209.18": 1318, "peak@237.21": 1319, "peak@273.08": 1320, "peak@226.12": 1321, "peak@172.98": 1322, "peak@204.02": 1323, "peak@206.02": 1324, "peak@220.02": 1325, "peak@250.02": 1326, "peak@225.11": 1327, "peak@251.11": 1328, "peak@272.11": 1329, "peak@261.09": 1330, "peak@279.10": 1331, "peak@325.05": 1332, "peak@325.14": 1333, "peak@325.24": 1334, "peak@263.97": 1335, "peak@168.05": 1336, "peak@179.09": 1337, "peak@177.08": 1338, "peak@138.06": 1339, "peak@178.09": 1340, "peak@150.13": 1341, "peak@150.05": 1342, "peak@149.05": 1343, "peak@114.05": 1344, "peak@166.03": 1345, "peak@148.02": 1346, "peak@143.02": 1347, "peak@138.04": 1348, "peak@99.03": 1349, "peak@89.01": 1350, "peak@86.99": 1351, "peak@103.00": 1352, "peak@333.11": 1353, "peak@331.10": 1354, "peak@321.11": 1355, "peak@127.03": 1356, "peak@186.07": 1357, "peak@90.01": 1358, "peak@117.02": 1359, "peak@334.17": 1360, "peak@110.04": 1361, "peak@111.00": 1362, "peak@155.03": 1363, "peak@319.10": 1364, "peak@159.02": 1365, "peak@190.10": 1366, "peak@161.05": 1367, "peak@186.05": 1368, "peak@160.99": 1369, "peak@176.99": 1370, "peak@133.07": 1371, "peak@200.12": 1372, "peak@173.11": 1373, "peak@115.04": 1374, "peak@376.04": 1375, "peak@265.95": 1376, "peak@279.13": 1377, "peak@219.11": 1378, "peak@178.04": 1379, "peak@166.04": 1380, "peak@220.13": 1381, "peak@192.14": 1382, "peak@162.13": 1383, "peak@147.10": 1384, "peak@330.09": 1385, "peak@288.09": 1386, "peak@286.07": 1387, "peak@204.00": 1388, "peak@183.97": 1389, "peak@184.98": 1390, "peak@174.07": 1391, "peak@241.09": 1392, "peak@226.06": 1393, "peak@220.07": 1394, "peak@219.07": 1395, "peak@211.08": 1396, "peak@205.05": 1397, "peak@198.07": 1398, "peak@197.06": 1399, "peak@193.09": 1400, "peak@193.05": 1401, "peak@189.09": 1402, "peak@188.05": 1403, "peak@187.04": 1404, "peak@175.04": 1405, "peak@164.05": 1406, "peak@196.98": 1407, "peak@161.02": 1408, "peak@151.08": 1409, "peak@150.07": 1410, "peak@148.05": 1411, "peak@139.08": 1412, "peak@280.01": 1413, "peak@254.04": 1414, "peak@253.03": 1415, "peak@245.04": 1416, "peak@244.03": 1417, "peak@237.06": 1418, "peak@225.03": 1419, "peak@213.98": 1420, "peak@212.97": 1421, "peak@90.09": 1422}, "norms": null, "mapfile_path": null, "__numpys": [], "__scipys": [], "__ignoreds": [], "__recursive_saveloads": [], "__weights_format": "np.ndarray"}\n\\ No newline at end of file\n'
b
diff -r 000000000000 -r e1e22ada831e test-data/model_vector_size_100.json
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/model_vector_size_100.json Thu Jan 05 10:08:12 2023 +0000
[
b'@@ -0,0 +1,1 @@\n+{"vector_size": 100, "index_to_key": ["peak@95.05", "peak@91.05", "peak@92.05", "peak@115.05", "peak@125.02", "peak@89.04", "peak@173.51", "peak@93.06", "peak@105.07", "peak@105.05", "peak@155.06", "peak@111.04", "peak@120.04", "peak@110.07", "peak@106.07", "peak@118.07", "peak@127.02", "peak@119.06", "peak@119.09", "peak@110.05", "peak@137.02", "peak@149.02", "peak@142.07", "peak@94.07", "peak@107.05", "peak@103.05", "peak@138.08", "peak@96.06", "peak@85.05", "peak@96.04", "peak@158.98", "peak@117.06", "peak@129.07", "peak@139.01", "peak@143.06", "peak@129.01", "peak@120.08", "peak@146.06", "peak@128.06", "peak@119.05", "peak@123.00", "peak@104.05", "peak@131.06", "peak@123.04", "peak@105.04", "peak@163.03", "peak@109.07", "peak@138.99", "peak@117.07", "peak@144.06", "peak@170.10", "peak@110.06", "peak@95.09", "peak@145.06", "peak@85.08", "peak@147.08", "peak@137.06", "peak@151.03", "peak@133.06", "peak@97.04", "peak@165.05", "peak@114.07", "peak@175.03", "peak@132.08", "peak@139.03", "peak@107.09", "peak@99.00", "peak@141.01", "peak@140.03", "peak@113.02", "peak@158.05", "peak@113.08", "peak@109.08", "peak@122.06", "peak@130.07", "peak@168.09", "peak@156.07", "peak@141.07", "peak@167.07", "peak@153.07", "peak@136.04", "peak@165.07", "peak@98.06", "peak@161.06", "peak@164.03", "peak@93.07", "peak@128.05", "peak@157.08", "peak@116.06", "peak@172.99", "peak@86.04", "peak@116.03", "peak@124.08", "peak@118.05", "peak@134.06", "peak@116.05", "peak@150.02", "peak@174.97", "peak@135.08", "peak@184.12", "peak@128.08", "peak@129.05", "peak@100.05", "peak@99.07", "peak@152.06", "peak@148.04", "peak@134.10", "peak@152.07", "peak@121.04", "peak@176.04", "peak@130.03", "peak@94.04", "peak@147.94", "peak@182.08", "peak@121.07", "peak@134.07", "peak@136.08", "peak@186.08", "peak@168.07", "peak@122.10", "peak@123.06", "peak@124.06", "peak@125.01", "peak@91.03", "peak@102.04", "peak@183.06", "peak@91.04", "peak@125.06", "peak@90.03", "peak@130.04", "peak@126.01", "peak@165.10", "peak@93.03", "peak@108.08", "peak@139.07", "peak@148.08", "peak@125.08", "peak@191.06", "peak@122.07", "peak@113.04", "peak@108.06", "peak@191.07", "peak@183.08", "peak@133.09", "peak@159.09", "peak@158.08", "peak@144.08", "peak@114.09", "peak@143.07", "peak@161.10", "peak@150.09", "peak@108.04", "peak@170.07", "peak@132.07", "peak@153.08", "peak@107.07", "peak@163.08", "peak@145.05", "peak@145.10", "peak@131.09", "peak@133.10", "peak@209.06", "peak@120.06", "peak@178.05", "peak@145.03", "peak@172.97", "peak@186.97", "peak@157.09", "peak@164.07", "peak@168.02", "peak@164.04", "peak@133.05", "peak@132.04", "peak@177.05", "peak@102.05", "peak@166.07", "peak@167.09", "peak@190.04", "peak@155.09", "peak@189.05", "peak@142.08", "peak@185.07", "peak@147.07", "peak@160.08", "peak@141.06", "peak@135.04", "peak@131.07", "peak@95.06", "peak@149.06", "peak@159.04", "peak@162.07", "peak@208.96", "peak@130.08", "peak@155.07", "peak@106.03", "peak@98.10", "peak@123.02", "peak@219.03", "peak@109.03", "peak@172.96", "peak@139.05", "peak@124.98", "peak@113.00", "peak@142.99", "peak@147.04", "peak@169.10", "peak@99.04", "peak@146.07", "peak@125.05", "peak@176.03", "peak@141.02", "peak@180.10", "peak@102.06", "peak@136.01", "peak@226.17", "peak@215.03", "peak@147.06", "peak@184.99", "peak@99.08", "peak@164.11", "peak@198.08", "peak@208.13", "peak@165.06", "peak@151.11", "peak@192.10", "peak@308.00", "peak@223.01", "peak@156.09", "peak@109.10", "peak@155.00", "peak@132.96", "peak@125.00", "peak@208.10", "peak@171.03", "peak@159.07", "peak@158.04", "peak@159.97", "peak@127.10", "peak@163.04", "peak@142.12", "peak@216.03", "peak@171.04", "peak@148.09", "peak@158.07", "peak@180.03", "peak@144.07", "peak@148.11", "peak@121.09", "peak@127.99", "peak@140.05", "peak@217.02", "peak@87.08", "peak@166.12", "peak@206.08", "peak@179.07", "peak@107.06", "peak@242.08", "peak@162.04", "peak@150.01", "peak@160.11", "peak@110.10", "peak@115.08", "peak@86.10", "peak@138.09", "peak@223.08'..b': 1240, "peak@155.02": 1241, "peak@226.13": 1242, "peak@210.10": 1243, "peak@209.11": 1244, "peak@196.09": 1245, "peak@185.11": 1246, "peak@102.03": 1247, "peak@187.09": 1248, "peak@188.08": 1249, "peak@216.06": 1250, "peak@161.03": 1251, "peak@174.02": 1252, "peak@175.05": 1253, "peak@119.04": 1254, "peak@134.04": 1255, "peak@150.04": 1256, "peak@151.10": 1257, "peak@163.01": 1258, "peak@188.09": 1259, "peak@163.05": 1260, "peak@170.04": 1261, "peak@178.03": 1262, "peak@179.00": 1263, "peak@205.04": 1264, "peak@214.04": 1265, "peak@155.04": 1266, "peak@147.03": 1267, "peak@146.02": 1268, "peak@134.05": 1269, "peak@101.02": 1270, "peak@98.04": 1271, "peak@366.15": 1272, "peak@231.10": 1273, "peak@230.09": 1274, "peak@215.11": 1275, "peak@214.10": 1276, "peak@202.10": 1277, "peak@201.10": 1278, "peak@200.08": 1279, "peak@199.09": 1280, "peak@199.07": 1281, "peak@189.10": 1282, "peak@247.07": 1283, "peak@260.07": 1284, "peak@273.06": 1285, "peak@139.12": 1286, "peak@211.00": 1287, "peak@86.07": 1288, "peak@96.08": 1289, "peak@136.09": 1290, "peak@137.09": 1291, "peak@138.10": 1292, "peak@151.12": 1293, "peak@224.18": 1294, "peak@179.13": 1295, "peak@180.15": 1296, "peak@191.12": 1297, "peak@192.15": 1298, "peak@194.13": 1299, "peak@208.14": 1300, "peak@167.97": 1301, "peak@152.98": 1302, "peak@139.97": 1303, "peak@136.00": 1304, "peak@134.99": 1305, "peak@121.01": 1306, "peak@111.03": 1307, "peak@108.00": 1308, "peak@107.00": 1309, "peak@96.00": 1310, "peak@90.97": 1311, "peak@377.14": 1312, "peak@349.11": 1313, "peak@347.09": 1314, "peak@337.11": 1315, "peak@335.13": 1316, "peak@334.08": 1317, "peak@209.18": 1318, "peak@237.21": 1319, "peak@273.08": 1320, "peak@226.12": 1321, "peak@172.98": 1322, "peak@204.02": 1323, "peak@206.02": 1324, "peak@220.02": 1325, "peak@250.02": 1326, "peak@225.11": 1327, "peak@251.11": 1328, "peak@272.11": 1329, "peak@261.09": 1330, "peak@279.10": 1331, "peak@325.05": 1332, "peak@325.14": 1333, "peak@325.24": 1334, "peak@263.97": 1335, "peak@168.05": 1336, "peak@179.09": 1337, "peak@177.08": 1338, "peak@138.06": 1339, "peak@178.09": 1340, "peak@150.13": 1341, "peak@150.05": 1342, "peak@149.05": 1343, "peak@114.05": 1344, "peak@166.03": 1345, "peak@148.02": 1346, "peak@143.02": 1347, "peak@138.04": 1348, "peak@99.03": 1349, "peak@89.01": 1350, "peak@86.99": 1351, "peak@103.00": 1352, "peak@333.11": 1353, "peak@331.10": 1354, "peak@321.11": 1355, "peak@127.03": 1356, "peak@186.07": 1357, "peak@90.01": 1358, "peak@117.02": 1359, "peak@334.17": 1360, "peak@110.04": 1361, "peak@111.00": 1362, "peak@155.03": 1363, "peak@319.10": 1364, "peak@159.02": 1365, "peak@190.10": 1366, "peak@161.05": 1367, "peak@186.05": 1368, "peak@160.99": 1369, "peak@176.99": 1370, "peak@133.07": 1371, "peak@200.12": 1372, "peak@173.11": 1373, "peak@115.04": 1374, "peak@376.04": 1375, "peak@265.95": 1376, "peak@279.13": 1377, "peak@219.11": 1378, "peak@178.04": 1379, "peak@166.04": 1380, "peak@220.13": 1381, "peak@192.14": 1382, "peak@162.13": 1383, "peak@147.10": 1384, "peak@330.09": 1385, "peak@288.09": 1386, "peak@286.07": 1387, "peak@204.00": 1388, "peak@183.97": 1389, "peak@184.98": 1390, "peak@174.07": 1391, "peak@241.09": 1392, "peak@226.06": 1393, "peak@220.07": 1394, "peak@219.07": 1395, "peak@211.08": 1396, "peak@205.05": 1397, "peak@198.07": 1398, "peak@197.06": 1399, "peak@193.09": 1400, "peak@193.05": 1401, "peak@189.09": 1402, "peak@188.05": 1403, "peak@187.04": 1404, "peak@175.04": 1405, "peak@164.05": 1406, "peak@196.98": 1407, "peak@161.02": 1408, "peak@151.08": 1409, "peak@150.07": 1410, "peak@148.05": 1411, "peak@139.08": 1412, "peak@280.01": 1413, "peak@254.04": 1414, "peak@253.03": 1415, "peak@245.04": 1416, "peak@244.03": 1417, "peak@237.06": 1418, "peak@225.03": 1419, "peak@213.98": 1420, "peak@212.97": 1421, "peak@90.09": 1422}, "norms": null, "mapfile_path": null, "__numpys": [], "__scipys": [], "__ignoreds": [], "__recursive_saveloads": [], "__weights_format": "np.ndarray"}\n\\ No newline at end of file\n'