Repository 'matchms'
hg clone https://eddie.galaxyproject.org/repos/recetox/matchms

Changeset 0:6a736abe431f (2020-12-07)
Next changeset 1:4aecfd6b319b (2021-03-17)
Commit message:
"planemo upload for repository https://github.com/RECETOX/galaxytools/tree/master/tools/matchms commit 25fba33c37b26a6e9321f043c61b3c0dd392a53c"
added:
matchms.xml
matchms_wrapper.py
test-data/fill.msp
test-data/output.csv
b
diff -r 000000000000 -r 6a736abe431f matchms.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/matchms.xml Mon Dec 07 20:12:13 2020 +0000
[
@@ -0,0 +1,61 @@
+<tool id="matchms" name="matchMS" version="0.6.0+galaxy1">
+    <requirements>
+        <requirement type="package" version="0.6.1">matchms</requirement>
+        <requirement type="package" version="1.1.4">pandas</requirement>
+    </requirements>
+
+    <environment_variables>
+        <environment_variable name="MPLCONFIGDIR">/tmp</environment_variable>
+    </environment_variables>
+
+    <command detect_errors="exit_code"><![CDATA[
+        python3 ${__tool_directory__}/matchms_wrapper.py "$references" "$queries" "$similarity_scores" "$similarity_metric"
+    ]]>    </command>
+
+    <inputs>
+        <param label="Reference spectra" name="references" type="data" format="msp" help="Reference mass spectra to match against as library." />
+        <param label="Queries spectra" name="queries" type="data" format="msp" help="Query mass spectra to match against references." />
+        <param label="Similarity metric" name="similarity_metric" type="select" display="radio" help="Similarity metric to use for score computation.">
+            <option value="CosineGreedy" selected="true">CosineGreedy</option>
+            <option value="CosineHungarian">CosineHungarian</option>
+            <option value="IntersectMz">IntersectMz</option>
+        </param>
+    </inputs>
+
+    <outputs>
+        <data label="$similarity_metric similarity of ${on_string}" name="similarity_scores" format="csv" />
+    </outputs>
+
+    <tests>
+        <test>
+            <param name="references" value="fill.msp" ftype="msp"/>
+            <param name="queries" value="fill.msp" ftype="msp"/>
+            <param name="similarity_metric" value="CosineGreedy"/>
+            <output name="similarity_scores" file="output.csv" ftype="csv" checksum="md5$0fd5cb719f8aa66ec5d9aeddca4b5fe7"/>
+        </test>
+    </tests>
+
+    <help><![CDATA[
+    Documentation
+        For documentation on the tool see https://github.com/matchms/matchms/blob/master/README.rst or for more details https://matchms.readthedocs.io/en/latest/.
+
+    Upstream Tools
+        +-----------+---------------+--------+-----------+
+        | Name      | Output File   | Format | Parameter |
+        +===========+===============+========+===========+
+        | RAMClustR | Mass spectra  | msp    | references|
+        +-----------+---------------+--------+-----------+
+        | RAMClustR | Mass spectra  | msp    | queries   |
+        +-----------+---------------+--------+-----------+
+
+        RAMClustR outputs a collection of **msp** files which can be matched to a library (.msp) using a similarity score computed in matchMS.
+
+    Downstream Tools
+        The **output** is a csv which contains the similarity score and the number of matched peaks as a tuple.
+    ]]></help>
+
+
+    <citations>
+        <citation type="doi">10.21105/joss.02411</citation>
+    </citations>
+</tool>
b
diff -r 000000000000 -r 6a736abe431f matchms_wrapper.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/matchms_wrapper.py Mon Dec 07 20:12:13 2020 +0000
[
@@ -0,0 +1,61 @@
+import argparse
+import sys
+
+import pandas
+from matchms import calculate_scores
+from matchms.importing import load_from_msp
+from matchms.similarity import (
+    CosineGreedy,
+    CosineHungarian,
+    FingerprintSimilarity,
+    IntersectMz,
+    ModifiedCosine,
+    ParentMassMatch
+)
+
+
+def main(argv):
+    parser = argparse.ArgumentParser(description="Compute MSP similarity scores")
+    parser.add_argument(
+        "references_filename", type=str, help="Path to reference MSP library."
+    )
+    parser.add_argument("queries_filename", type=str, help="Path to query spectra.")
+    parser.add_argument("output_filename", type=str, help="Path where to store the output .csv.")
+    parser.add_argument("similarity_metric", type=str, help='Metric to use for matching.')
+
+    args = parser.parse_args()
+
+    if args.similarity_metric == 'CosineGreedy':
+        similarity_metric = CosineGreedy()
+    elif args.similarity_metric == 'CosineHungarian':
+        similarity_metric = CosineHungarian()
+    elif args.similarity_metric == 'FingerprintSimilarity':
+        similarity_metric = FingerprintSimilarity()
+    elif args.similarity_metric == 'IntersectMz':
+        similarity_metric = IntersectMz()
+    elif args.similarity_metric == 'ModifiedCosine':
+        similarity_metric = ModifiedCosine()
+    else:
+        similarity_metric = ParentMassMatch()
+
+    reference_spectra = [
+        spectrum for spectrum in load_from_msp(args.references_filename)
+    ]
+    queries_spectra = [spectrum for spectrum in load_from_msp(args.queries_filename)]
+
+    scores = calculate_scores(
+        references=reference_spectra,
+        queries=queries_spectra,
+        similarity_function=similarity_metric,
+    )
+
+    query_names = [spectra.metadata['name'] for spectra in scores.queries]
+    reference_names = [spectra.metadata['name'] for spectra in scores.references]
+    dataframe = pandas.DataFrame(data=scores.scores, index=reference_names, columns=query_names)
+    dataframe.to_csv(args.output_filename, sep=';')
+    return 0
+
+
+if __name__ == "__main__":
+    main(argv=sys.argv[1:])
+    pass
b
diff -r 000000000000 -r 6a736abe431f test-data/fill.msp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fill.msp Mon Dec 07 20:12:13 2020 +0000
b
b'@@ -0,0 +1,2165 @@\n+NAME:C001\n+IONMODE:Negative\n+RETENTIONTIME:38.74\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:57\n+216.9205 32607700\n+256.8215 31377637\n+175.0641 26780143\n+206.9034 26130980\n+254.8252 23747536\n+198.8647 21688594\n+196.8658 21390430\n+372.7383 19374863\n+258.8237 15532799\n+382.8218 12815572\n+488.6825 12267966\n+392.7685 10913351\n+316.7777 10734168\n+440.7322 10603010\n+138.9121 10186226\n+312.7841 10051801\n+434.7287 9943329\n+266.8652 9805546\n+370.7418 9765463\n+450.7016 8762673\n+324.9549 8619910\n+428.7834 8554675\n+384.8177 8311500\n+442.7401 8271752\n+200.8848 7742528\n+492.744 7662344\n+494.8953 7188793\n+546.6093 7177067\n+498.8794 6811405\n+500.8484 6520691\n+322.8157 6317648\n+350.9875 6150799\n+550.6949 6104789\n+426.7772 5431633\n+566.5977 5171811\n+510.763 4989757\n+486.7743 4886062\n+460.7076 4528973\n+484.7242 4273989\n+518.7415 4243468\n+334.849 4178412\n+413.2664 3965867\n+436.8161 3705247\n+502.7832 3567833\n+342.8093 3285552\n+366.8281 3253770\n+306.9914 3169316\n+268.8537 3090354\n+800.4451 2792137\n+186.1095 2675456\n+234.0134 2550129\n+462.7862 2123666\n+349.9455 2050695\n+612.6927 2005587\n+676.6436 1982714\n+351.941 1965882\n+148.9337 1008656\n+\n+NAME:C002\n+IONMODE:Negative\n+RETENTIONTIME:520.25\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:35\n+525.375 1073323842\n+310.1623 295359836\n+526.3783 181668883\n+1047.7378 150394804\n+551.3321 111616808\n+1048.7399 90978863\n+289.6491 46498377\n+312.0296 38757284\n+1075.1968 33352763\n+1049.7432 29946438\n+552.3348 28340614\n+813.5403 25060147\n+527.3812 23642795\n+309.1649 18045974\n+301.1565 15185412\n+311.1658 13124727\n+330.6757 12666597\n+624.296 11790213\n+1076.2004 10417953\n+578.2905 7578406\n+562.3269 7538206\n+1050.7453 6807767\n+267.2688 6103973\n+814.5336 5865975\n+1069.7158 5074652\n+619.3008 4742103\n+1216.8041 4439324\n+1206.3127 3738816\n+1217.807 3565334\n+1074.1979 3402288\n+553.3314 2609936\n+955.1171 2322927\n+1101.6535 2023916\n+131.1733 1971789\n+279.0196 1946255\n+\n+NAME:C003\n+IONMODE:Negative\n+RETENTIONTIME:483.67\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:26\n+522.3565 4089569222\n+523.354 1201714423\n+288.6414 202172046\n+1043.7028 144351468\n+1044.7068 83271854\n+549.3267 63300808\n+279.6362 29849749\n+1045.706 27998321\n+1058.1594 20718345\n+1071.1639 15461047\n+378.2093 15309961\n+796.9808 13576738\n+809.9883 12596682\n+265.2529 11366224\n+280.6546 8848921\n+576.2749 7386007\n+1059.1626 6608764\n+810.9916 6601055\n+1046.7131 6505178\n+797.9841 6368973\n+1072.1671 5096642\n+625.4543 4040374\n+379.1966 2902366\n+577.3074 2354251\n+617.2778 2323470\n+266.2564 1420444\n+\n+NAME:C004\n+IONMODE:Negative\n+RETENTIONTIME:473.48\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:24\n+496.34 12577588056\n+497.3442 3337125302\n+991.6726 1420557258\n+992.6749 763118028\n+498.3462 532285213\n+993.6787 239161906\n+296.147 190395687\n+1017.6897 168186952\n+482.3247 145772322\n+1018.6656 120599518\n+499.3493 68176083\n+1019.6555 57647644\n+994.6801 53549573\n+770.964 49250157\n+483.3283 36245876\n+275.6336 28001849\n+771.9675 22666873\n+1020.6591 12469103\n+783.9721 9839299\n+949.6233 8009033\n+124.1405 6517662\n+950.6274 3674694\n+784.9749 3622908\n+170.2437 1237313\n+\n+NAME:C005\n+IONMODE:Negative\n+RETENTIONTIME:41.72\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:20\n+337.0623 88672453\n+359.0443 48435582\n+353.0361 37061354\n+375.018 29159485\n+218.1386 14009249\n+417.0027 13822994\n+381.0261 13522755\n+438.9851 11307111\n+396.9999 10317665\n+454.9592 9820452\n+432.9764 9779399\n+338.0654 8770055\n+360.0459 5025128\n+418.9966 4386311\n+512.8989 4072570\n+456.9603 3774845\n+470.9263 3632486\n+572.871 3485486\n+440.9796 3364168\n+376.0216 2740193\n+\n+NAME:C006\n+IONMODE:Negative\n+RETENTIONTIME:452.08\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:19\n+494.3249 803829845\n+495.3278 207959661\n+542.3239 193323900\n+543.3276 55501736\n+1087.6715 34676828\n+516.3076 24092471\n+274.6257 21694276\n+1088.6773 21466528\n+1001.658 11852076\n+1089.682 9948820\n+290.6256 9704443\n+1061.6562 9417442\n+987.6411 7453650\n+1037.6578 7076912\n+1062.6592 5657208\n+484.3311 5283943\n+265.6196 '..b'5.2288 1932289\n+\n+NAME:C147\n+IONMODE:Negative\n+RETENTIONTIME:563.22\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+282.2792 241362345\n+256.2615 19433189\n+\n+NAME:C148\n+IONMODE:Negative\n+RETENTIONTIME:548.47\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+305.2468 9633582\n+329.249 5814756\n+\n+NAME:C149\n+IONMODE:Negative\n+RETENTIONTIME:350.93\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+130.0643 7419216\n+190.0865 4433780\n+\n+NAME:C150\n+IONMODE:Negative\n+RETENTIONTIME:365.37\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+490.2083 5275418\n+465.1226 1763287\n+\n+NAME:C151\n+IONMODE:Negative\n+RETENTIONTIME:394.87\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+328.2481 11119434\n+329.2519 2068394\n+\n+NAME:C152\n+IONMODE:Negative\n+RETENTIONTIME:385.78\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+427.1607 2275086\n+409.1497 1369551\n+\n+NAME:C153\n+IONMODE:Negative\n+RETENTIONTIME:401.39\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+107.0557 2271180\n+197.1612 1286942\n+\n+NAME:C154\n+IONMODE:Negative\n+RETENTIONTIME:388.72\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+239.1276 1743749\n+286.9585 1645545\n+\n+NAME:C155\n+IONMODE:Negative\n+RETENTIONTIME:373.67\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+507.1617 6285930\n+508.1657 1535734\n+\n+NAME:C156\n+IONMODE:Negative\n+RETENTIONTIME:378.37\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+777.6928 4522421\n+257.2254 3302868\n+\n+NAME:C157\n+IONMODE:Negative\n+RETENTIONTIME:473.08\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+534.2949 13399261\n+267.6425 11780168\n+\n+NAME:C158\n+IONMODE:Negative\n+RETENTIONTIME:508.15\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+380.2992 5790633\n+423.2518 1386850\n+\n+NAME:C159\n+IONMODE:Negative\n+RETENTIONTIME:471.89\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+304.2357 21716257\n+306.1523 8327492\n+\n+NAME:C160\n+IONMODE:Negative\n+RETENTIONTIME:465.45\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+295.1974 20379534\n+193.1239 1274413\n+\n+NAME:C161\n+IONMODE:Negative\n+RETENTIONTIME:488.7\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+667.4214 3075774\n+1189.7766 2040172\n+\n+NAME:C162\n+IONMODE:Negative\n+RETENTIONTIME:471.97\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+393.2201 8389493\n+316.6601 7221684\n+\n+NAME:C163\n+IONMODE:Negative\n+RETENTIONTIME:465.16\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+431.3157 12163271\n+422.3267 4962906\n+\n+NAME:C164\n+IONMODE:Negative\n+RETENTIONTIME:474.29\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+398.3268 11918127\n+239.1779 8236995\n+\n+NAME:C165\n+IONMODE:Negative\n+RETENTIONTIME:477.74\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+307.15 1941191\n+249.1858 1576729\n+\n+NAME:C166\n+IONMODE:Negative\n+RETENTIONTIME:494.51\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+355.2846 54372680\n+373.2951 6108864\n+\n+NAME:C167\n+IONMODE:Negative\n+RETENTIONTIME:497.67\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+474.3486 2732000\n+649.4483 2434649\n+\n+NAME:C168\n+IONMODE:Negative\n+RETENTIONTIME:498.02\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+539.4163 5285541\n+459.2569 3550909\n+\n+NAME:C169\n+IONMODE:Negative\n+RETENTIONTIME:492.45\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+732.5452 4526953\n+733.5465 1043642\n+\n+NAME:C170\n+IONMODE:Negative\n+RETENTIONTIME:497.3\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+451.3631 6446370\n+450.3586 4210116\n+\n+NAME:C171\n+IONMODE:Negative\n+RETENTIONTIME:467.81\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+185.0776 5067455\n+200.203 1398415\n+\n+NAME:C172\n+IONMODE:Negative\n+RETENTIONTIME:457.02\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+263.2347 3933284\n+615.2633 1132491\n+\n+NAME:C173\n+IONMODE:Negative\n+RETENTIONTIME:443.89\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+370.2956 41596161\n+371.304 9966707\n+\n+NAME:C174\n+IONMODE:Negative\n+RETENTIONTIME:438.81\n+RETENTIONINDEX:\n+SPECTRUMTYPE:Centroid\n+Num Peaks:2\n+579.2938 6044865\n+330.2563 5274387\n+\n'
b
diff -r 000000000000 -r 6a736abe431f test-data/output.csv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/output.csv Mon Dec 07 20:12:13 2020 +0000
b
b'@@ -0,0 +1,175 @@\n+;C001;C002;C003;C004;C005;C006;C007;C008;C009;C010;C011;C012;C013;C014;C015;C016;C017;C018;C019;C020;C021;C022;C023;C024;C025;C026;C027;C028;C029;C030;C031;C032;C033;C034;C035;C036;C037;C038;C039;C040;C041;C042;C043;C044;C045;C046;C047;C048;C049;C050;C051;C052;C053;C054;C055;C056;C057;C058;C059;C060;C061;C062;C063;C064;C065;C066;C067;C068;C069;C070;C071;C072;C073;C074;C075;C076;C077;C078;C079;C080;C081;C082;C083;C084;C085;C086;C087;C088;C089;C090;C091;C092;C093;C094;C095;C096;C097;C098;C099;C100;C101;C102;C103;C104;C105;C106;C107;C108;C109;C110;C111;C112;C113;C114;C115;C116;C117;C118;C119;C120;C121;C122;C123;C124;C125;C126;C127;C128;C129;C130;C131;C132;C133;C134;C135;C136;C137;C138;C139;C140;C141;C142;C143;C144;C145;C146;C147;C148;C149;C150;C151;C152;C153;C154;C155;C156;C157;C158;C159;C160;C161;C162;C163;C164;C165;C166;C167;C168;C169;C170;C171;C172;C173;C174\n+C001;(1.0000000000000002, 57);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.011318242104766061, 1);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0480501832162959, 1);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0)\n+C002;(0.0, 0);(1.0000000000000004, 35);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(9.826519226227063e-05, 1);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.05881897890549432, 2);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.012123553350886737, 1);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0036044014431702073, 1);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.'..b' 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.9156381551854463, 1);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(1.0000000000000002, 2);(0.0, 0);(0.0, 0)\n+C173;(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.00045173712879657656, 1);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.14221557456489292, 1);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(1.0000000000000002, 2);(0.0, 0)\n+C174;(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(0.0, 0);(1.0000000000000002, 2)\n'