Repository 'xcms_export_samplemetadata'
hg clone https://toolshed.g2.bx.psu.edu/repos/lecorguille/xcms_export_samplemetadata

Changeset 11:4ea32e46b2d6 (2024-07-15)
Previous changeset 10:cdab04a1d1d7 (2023-09-11)
Commit message:
planemo upload for repository https://github.com/workflow4metabolomics/tools-metabolomics/ commit eca29d4347fe2f4802091c4a06715232a6fd9253
added:
test-data/eic_plot.png
test-data/raw_plot.png
test-data/xcms_plot_eic_testdata.mzML
test-data/xcms_plot_raw_testdata.mzML
b
diff -r cdab04a1d1d7 -r 4ea32e46b2d6 test-data/eic_plot.png
b
Binary file test-data/eic_plot.png has changed
b
diff -r cdab04a1d1d7 -r 4ea32e46b2d6 test-data/raw_plot.png
b
Binary file test-data/raw_plot.png has changed
b
diff -r cdab04a1d1d7 -r 4ea32e46b2d6 test-data/xcms_plot_eic_testdata.mzML
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/xcms_plot_eic_testdata.mzML Mon Jul 15 15:57:52 2024 +0000
b
b'@@ -0,0 +1,3801 @@\n+<?xml version="1.0" encoding="ISO-8859-1"?>\n+<indexedmzML xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0_idx.xsd">\n+<mzML xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0.xsd" accession="" version="1.1.0">\n+\t<cvList count="5">\n+\t\t<cv id="MS" fullName="Proteomics Standards Initiative Mass Spectrometry Ontology" URI="http://psidev.cvs.sourceforge.net/*checkout*/psidev/psi/psi-ms/mzML/controlledVocabulary/psi-ms.obo"/>\n+\t\t<cv id="UO" fullName="Unit Ontology" URI="http://obo.cvs.sourceforge.net/obo/obo/ontology/phenotype/unit.obo"/>\n+\t\t<cv id="BTO" fullName="BrendaTissue545" version="unknown" URI="http://www.brenda-enzymes.info/ontology/tissue/tree/update/update_files/BrendaTissueOBO"/>\n+\t\t<cv id="GO" fullName="Gene Ontology - Slim Versions" version="unknown" URI="http://www.geneontology.org/GO_slims/goslim_goa.obo"/>\n+\t\t<cv id="PATO" fullName="Quality ontology" version="unknown" URI="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/phenotype/quality.obo"/>\n+\t</cvList>\n+\t<fileDescription>\n+\t\t<fileContent>\n+\t\t\t<cvParam cvRef="MS" accession="MS:1000294" name="mass spectrum" />\n+\t\t</fileContent>\n+\t\t<sourceFileList count="1">\n+\t\t\t<sourceFile id="sf_ru_0" name="RCX_06_shortened.mzML" location="file:///C:/Users/473355/Downloads">\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000569" name="SHA-1" value="6c9fc5a54e7e588b4940994f66c953de66f8e8c5" />\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000584" name="mzML format" />\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000777" name="spectrum identifier nativeID format" />\n+\t\t\t</sourceFile>\n+\t\t</sourceFileList>\n+\t</fileDescription>\n+\t<sampleList count="1">\n+\t\t<sample id="sa_0" name="">\n+\t\t\t<cvParam cvRef="MS" accession="MS:1000004" name="sample mass" value="0" unitAccession="UO:0000021" unitName="gram" unitCvRef="UO" />\n+\t\t\t<cvParam cvRef="MS" accession="MS:1000005" name="sample volume" value="0" unitAccession="UO:0000098" unitName="milliliter" unitCvRef="UO" />\n+\t\t\t<cvParam cvRef="MS" accession="MS:1000006" name="sample concentration" value="0" unitAccession="UO:0000175" unitName="gram per liter" unitCvRef="UO" />\n+\t\t</sample>\n+\t</sampleList>\n+\t<softwareList count="2">\n+\t\t<software id="so_in_0" version="" >\n+\t\t\t<cvParam cvRef="MS" accession="MS:1000799" name="custom unreleased software tool" value="" />\n+\t\t</software>\n+\t\t<software id="so_default" version="" >\n+\t\t\t<cvParam cvRef="MS" accession="MS:1000799" name="custom unreleased software tool" value="" />\n+\t\t</software>\n+\t</softwareList>\n+\t<instrumentConfigurationList count="1">\n+\t\t<instrumentConfiguration id="ic_0">\n+\t\t\t<cvParam cvRef="MS" accession="MS:1000031" name="instrument model" />\n+\t\t\t<softwareRef ref="so_in_0" />\n+\t\t</instrumentConfiguration>\n+\t</instrumentConfigurationList>\n+\t<dataProcessingList count="1">\n+\t\t<dataProcessing id="dp_sp_0">\n+\t\t\t<processingMethod order="0" softwareRef="so_default">\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000544" name="Conversion to mzML" />\n+\t\t\t\t<userParam name="warning" type="xsd:string" value="fictional processing method used to fulfill format requirements" />\n+\t\t\t</processingMethod>\n+\t\t</dataProcessing>\n+\t</dataProcessingList>\n+\t<run id="ru_0" defaultInstrumentConfigurationRef="ic_0" sampleRef="sa_0" defaultSourceFileRef="sf_ru_0">\n+\t\t<userParam name="mzml_id" type="xsd:string" value="MZmine mzML export"/>\n+\t\t<spectrumList count="101" defaultDataProcessingRef="dp_sp_0">\n+\t\t\t<spectrum id="scan=100" index="0" defaultArrayLength="17" dataProcessingRef="dp_sp_0">\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000128" name="profile spectrum" />\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000511" name="ms level" value="1" />\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000294" name="mass spectrum" />\n+\t\t\t\t<cvParam cvRef="MS" accession='..b'ffset>\n+\t\t<offset idRef="scan=113">38074</offset>\n+\t\t<offset idRef="scan=114">40753</offset>\n+\t\t<offset idRef="scan=115">43395</offset>\n+\t\t<offset idRef="scan=116">46058</offset>\n+\t\t<offset idRef="scan=117">48750</offset>\n+\t\t<offset idRef="scan=118">51379</offset>\n+\t\t<offset idRef="scan=119">54043</offset>\n+\t\t<offset idRef="scan=120">56707</offset>\n+\t\t<offset idRef="scan=121">59339</offset>\n+\t\t<offset idRef="scan=122">61982</offset>\n+\t\t<offset idRef="scan=123">64626</offset>\n+\t\t<offset idRef="scan=124">67269</offset>\n+\t\t<offset idRef="scan=125">69947</offset>\n+\t\t<offset idRef="scan=126">72590</offset>\n+\t\t<offset idRef="scan=127">75205</offset>\n+\t\t<offset idRef="scan=128">77800</offset>\n+\t\t<offset idRef="scan=129">80395</offset>\n+\t\t<offset idRef="scan=130">83010</offset>\n+\t\t<offset idRef="scan=131">85688</offset>\n+\t\t<offset idRef="scan=132">88331</offset>\n+\t\t<offset idRef="scan=133">90970</offset>\n+\t\t<offset idRef="scan=134">93601</offset>\n+\t\t<offset idRef="scan=135">96245</offset>\n+\t\t<offset idRef="scan=136">98909</offset>\n+\t\t<offset idRef="scan=137">101551</offset>\n+\t\t<offset idRef="scan=138">104183</offset>\n+\t\t<offset idRef="scan=139">106815</offset>\n+\t\t<offset idRef="scan=140">109447</offset>\n+\t\t<offset idRef="scan=141">112079</offset>\n+\t\t<offset idRef="scan=142">114695</offset>\n+\t\t<offset idRef="scan=143">117338</offset>\n+\t\t<offset idRef="scan=144">119952</offset>\n+\t\t<offset idRef="scan=145">122613</offset>\n+\t\t<offset idRef="scan=146">125229</offset>\n+\t\t<offset idRef="scan=147">127860</offset>\n+\t\t<offset idRef="scan=148">130524</offset>\n+\t\t<offset idRef="scan=149">133168</offset>\n+\t\t<offset idRef="scan=150">135812</offset>\n+\t\t<offset idRef="scan=151">138428</offset>\n+\t\t<offset idRef="scan=152">141072</offset>\n+\t\t<offset idRef="scan=153">143704</offset>\n+\t\t<offset idRef="scan=154">146336</offset>\n+\t\t<offset idRef="scan=155">148952</offset>\n+\t\t<offset idRef="scan=156">151595</offset>\n+\t\t<offset idRef="scan=157">154227</offset>\n+\t\t<offset idRef="scan=158">156871</offset>\n+\t\t<offset idRef="scan=159">159513</offset>\n+\t\t<offset idRef="scan=160">162128</offset>\n+\t\t<offset idRef="scan=161">164743</offset>\n+\t\t<offset idRef="scan=162">167339</offset>\n+\t\t<offset idRef="scan=163">169971</offset>\n+\t\t<offset idRef="scan=164">172603</offset>\n+\t\t<offset idRef="scan=165">175234</offset>\n+\t\t<offset idRef="scan=166">177849</offset>\n+\t\t<offset idRef="scan=167">180465</offset>\n+\t\t<offset idRef="scan=168">183032</offset>\n+\t\t<offset idRef="scan=169">185676</offset>\n+\t\t<offset idRef="scan=170">188319</offset>\n+\t\t<offset idRef="scan=171">190950</offset>\n+\t\t<offset idRef="scan=172">193581</offset>\n+\t\t<offset idRef="scan=173">196197</offset>\n+\t\t<offset idRef="scan=174">198812</offset>\n+\t\t<offset idRef="scan=175">201407</offset>\n+\t\t<offset idRef="scan=176">204038</offset>\n+\t\t<offset idRef="scan=177">206668</offset>\n+\t\t<offset idRef="scan=178">209282</offset>\n+\t\t<offset idRef="scan=179">211876</offset>\n+\t\t<offset idRef="scan=180">214538</offset>\n+\t\t<offset idRef="scan=181">217181</offset>\n+\t\t<offset idRef="scan=182">219796</offset>\n+\t\t<offset idRef="scan=183">222437</offset>\n+\t\t<offset idRef="scan=184">225080</offset>\n+\t\t<offset idRef="scan=185">227712</offset>\n+\t\t<offset idRef="scan=186">230390</offset>\n+\t\t<offset idRef="scan=187">233034</offset>\n+\t\t<offset idRef="scan=188">235698</offset>\n+\t\t<offset idRef="scan=189">238389</offset>\n+\t\t<offset idRef="scan=190">241052</offset>\n+\t\t<offset idRef="scan=191">243683</offset>\n+\t\t<offset idRef="scan=192">246299</offset>\n+\t\t<offset idRef="scan=193">248911</offset>\n+\t\t<offset idRef="scan=194">251553</offset>\n+\t\t<offset idRef="scan=195">254184</offset>\n+\t\t<offset idRef="scan=196">256825</offset>\n+\t\t<offset idRef="scan=197">259457</offset>\n+\t\t<offset idRef="scan=198">262099</offset>\n+\t\t<offset idRef="scan=199">264731</offset>\n+\t\t<offset idRef="scan=200">267345</offset>\n+\t</index>\n+</indexList>\n+<indexListOffset>269991</indexListOffset>\n+<fileChecksum>0</fileChecksum>\n+</indexedmzML>\n\\ No newline at end of file\n'
b
diff -r cdab04a1d1d7 -r 4ea32e46b2d6 test-data/xcms_plot_raw_testdata.mzML
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/xcms_plot_raw_testdata.mzML Mon Jul 15 15:57:52 2024 +0000
[
b'@@ -0,0 +1,212 @@\n+<?xml version="1.0" encoding="ISO-8859-1"?>\n+<indexedmzML xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0_idx.xsd">\n+<mzML xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0.xsd" accession="" version="1.1.0">\n+\t<cvList count="5">\n+\t\t<cv id="MS" fullName="Proteomics Standards Initiative Mass Spectrometry Ontology" URI="http://psidev.cvs.sourceforge.net/*checkout*/psidev/psi/psi-ms/mzML/controlledVocabulary/psi-ms.obo"/>\n+\t\t<cv id="UO" fullName="Unit Ontology" URI="http://obo.cvs.sourceforge.net/obo/obo/ontology/phenotype/unit.obo"/>\n+\t\t<cv id="BTO" fullName="BrendaTissue545" version="unknown" URI="http://www.brenda-enzymes.info/ontology/tissue/tree/update/update_files/BrendaTissueOBO"/>\n+\t\t<cv id="GO" fullName="Gene Ontology - Slim Versions" version="unknown" URI="http://www.geneontology.org/GO_slims/goslim_goa.obo"/>\n+\t\t<cv id="PATO" fullName="Quality ontology" version="unknown" URI="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/phenotype/quality.obo"/>\n+\t</cvList>\n+\t<fileDescription>\n+\t\t<fileContent>\n+\t\t\t<cvParam cvRef="MS" accession="MS:1000294" name="mass spectrum" />\n+\t\t</fileContent>\n+\t\t<sourceFileList count="1">\n+\t\t\t<sourceFile id="sf_ru_0" name="RCX_06_shortened.mzML" location="file:///C:/Users/473355/Downloads">\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000569" name="SHA-1" value="6c9fc5a54e7e588b4940994f66c953de66f8e8c5" />\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000584" name="mzML format" />\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000777" name="spectrum identifier nativeID format" />\n+\t\t\t</sourceFile>\n+\t\t</sourceFileList>\n+\t</fileDescription>\n+\t<sampleList count="1">\n+\t\t<sample id="sa_0" name="">\n+\t\t\t<cvParam cvRef="MS" accession="MS:1000004" name="sample mass" value="0" unitAccession="UO:0000021" unitName="gram" unitCvRef="UO" />\n+\t\t\t<cvParam cvRef="MS" accession="MS:1000005" name="sample volume" value="0" unitAccession="UO:0000098" unitName="milliliter" unitCvRef="UO" />\n+\t\t\t<cvParam cvRef="MS" accession="MS:1000006" name="sample concentration" value="0" unitAccession="UO:0000175" unitName="gram per liter" unitCvRef="UO" />\n+\t\t</sample>\n+\t</sampleList>\n+\t<softwareList count="2">\n+\t\t<software id="so_in_0" version="" >\n+\t\t\t<cvParam cvRef="MS" accession="MS:1000799" name="custom unreleased software tool" value="" />\n+\t\t</software>\n+\t\t<software id="so_default" version="" >\n+\t\t\t<cvParam cvRef="MS" accession="MS:1000799" name="custom unreleased software tool" value="" />\n+\t\t</software>\n+\t</softwareList>\n+\t<instrumentConfigurationList count="1">\n+\t\t<instrumentConfiguration id="ic_0">\n+\t\t\t<cvParam cvRef="MS" accession="MS:1000031" name="instrument model" />\n+\t\t\t<softwareRef ref="so_in_0" />\n+\t\t</instrumentConfiguration>\n+\t</instrumentConfigurationList>\n+\t<dataProcessingList count="1">\n+\t\t<dataProcessing id="dp_sp_0">\n+\t\t\t<processingMethod order="0" softwareRef="so_default">\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000544" name="Conversion to mzML" />\n+\t\t\t\t<userParam name="warning" type="xsd:string" value="fictional processing method used to fulfill format requirements" />\n+\t\t\t</processingMethod>\n+\t\t</dataProcessing>\n+\t</dataProcessingList>\n+\t<run id="ru_0" defaultInstrumentConfigurationRef="ic_0" sampleRef="sa_0" defaultSourceFileRef="sf_ru_0">\n+\t\t<userParam name="mzml_id" type="xsd:string" value="MZmine mzML export"/>\n+\t\t<spectrumList count="4" defaultDataProcessingRef="dp_sp_0">\n+\t\t\t<spectrum id="scan=126" index="0" defaultArrayLength="31" dataProcessingRef="dp_sp_0">\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000128" name="profile spectrum" />\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000511" name="ms level" value="1" />\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000294" name="mass spectrum" />\n+\t\t\t\t<cvParam cvRef="MS" accession="MS'..b'0RQiY0AeLJ7mFiJjQGd0ivsYImNAqhN3EBsiY0DmCWQlHSJjQBxXUTofImNATPs+TyEiY0B39ixkIyJjQJpIG3klImNA</binary>\n+\t\t\t\t\t</binaryDataArray>\n+\t\t\t\t\t<binaryDataArray encodedLength="96">\n+\t\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000515" name="intensity array" unitAccession="MS:1000131" unitName="number of detector counts" unitCvRef="MS"/>\n+\t\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000521" name="32-bit float" />\n+\t\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000576" name="no compression" />\n+\t\t\t\t\t\t<binary>MpSAR7CKlkfSH7ZH8ADIR47vl0elaPRGkTmOR/0nH0gVxxNJXw/6SSlRrkpz4hJLaZY8S4KkE0vEPa5KZiHvSTSj30hQKRBH</binary>\n+\t\t\t\t\t</binaryDataArray>\n+\t\t\t\t</binaryDataArrayList>\n+\t\t\t</spectrum>\n+\t\t\t<spectrum id="scan=129" index="3" defaultArrayLength="31">\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000128" name="profile spectrum" />\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000511" name="ms level" value="1" />\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000294" name="mass spectrum" />\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000285" name="total ion current" value="5.5177718e09"/>\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000528" name="lowest observed m/z" value="108.907641099520376" unitAccession="MS:1000040" unitName="m/z" unitCvRef="MS"/>\n+\t\t\t\t<cvParam cvRef="MS" accession="MS:1000527" name="highest observed m/z" value="1111.099388375058879" unitAccession="MS:1000040" unitName="m/z" unitCvRef="MS"/>\n+\t\t\t\t<userParam name="filter string" type="xsd:string" value="FTMS + p ESI Full ms [110.0000-1100.0000]"/>\n+\t\t\t\t<scanList count="1">\n+\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000795" name="no combination" />\n+\t\t\t\t\t<scan >\n+\t\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000016" name="scan start time" value="172.64467" unitAccession="UO:0000010" unitName="second" unitCvRef="UO" />\n+\t\t\t\t\t\t<userParam name="MS:1000130" type="xsd:string" value=""/>\n+\t\t\t\t\t\t<scanWindowList count="1">\n+\t\t\t\t\t\t\t<scanWindow>\n+\t\t\t\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000501" name="scan window lower limit" value="110" unitAccession="MS:1000040" unitName="m/z" unitCvRef="MS" />\n+\t\t\t\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000500" name="scan window upper limit" value="1100" unitAccession="MS:1000040" unitName="m/z" unitCvRef="MS" />\n+\t\t\t\t\t\t\t</scanWindow>\n+\t\t\t\t\t\t</scanWindowList>\n+\t\t\t\t\t</scan>\n+\t\t\t\t</scanList>\n+\t\t\t\t<binaryDataArrayList count="2">\n+\t\t\t\t\t<binaryDataArray encodedLength="332">\n+\t\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000514" name="m/z array" unitAccession="MS:1000040" unitName="m/z" unitCvRef="MS" />\n+\t\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000523" name="64-bit float" />\n+\t\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000576" name="no compression" />\n+\t\t\t\t\t\t<binary>v/C4pr4hY0B13Za7wCFjQCMhddDCIWNAx7tT5cQhY0BirTL6xiFjQPT1EQ/JIWNAwtKM1Q8iY0A9/3fqESJjQLGCY/8TImNAH11PFBYiY0CGjjspGCJjQOgWKD4aImNAQvYUUxwiY0CWLAJoHiJjQOW573wgImNALZ7dkSIiY0Bu2cumJCJjQKprursmImNA4VSp0CgiY0CGbJeIVCJjQE3PjZ1WImNAEImEslgiY0DPmXvHWiJjQIkBc9xcImNAQcBq8V4iY0D01WIGYSJjQKGC19E/I2NAY0z05kEjY0ApbRH8QyNjQPTkLhFGI2NAwrNMJkgjY0A=</binary>\n+\t\t\t\t\t</binaryDataArray>\n+\t\t\t\t\t<binaryDataArray encodedLength="168">\n+\t\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000515" name="intensity array" unitAccession="MS:1000131" unitName="number of detector counts" unitCvRef="MS"/>\n+\t\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000521" name="32-bit float" />\n+\t\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000576" name="no compression" />\n+\t\t\t\t\t\t<binary>fv0oRj9abEfoz8tHM/PIR0Q2f0eGNfFGwRgcSAr2V0icrD9JxtcqSvxEwErt4BlLlFcpSyPp6UqapnlK1o6YSfuKpEjqzglIZ2WBR8B3u0bDlYJHQfIASNx2I0hHr5NH7dsiRw69pUYm4wdHO6CKR0+FkEcPBkJHQvz1Rg==</binary>\n+\t\t\t\t\t</binaryDataArray>\n+\t\t\t\t</binaryDataArrayList>\n+\t\t\t</spectrum>\n+\t\t</spectrumList>\n+\t</run>\n+</mzML>\n+<indexList count="1">\n+\t<index name="spectrum">\n+\t\t<offset idRef="scan=126">3577</offset>\n+\t\t<offset idRef="scan=127">6508</offset>\n+\t\t<offset idRef="scan=128">9315</offset>\n+\t\t<offset idRef="scan=129">12005</offset>\n+\t</index>\n+</indexList>\n+<indexListOffset>14938</indexListOffset>\n+<fileChecksum>0</fileChecksum>\n+</indexedmzML>\n\\ No newline at end of file\n'