Skip to content

Commit

Permalink
fix(decoder): resolve issue #7
Browse files Browse the repository at this point in the history
able to now decode zlib compressed empty binary data

fix #7
  • Loading branch information
vmalnathnambiar committed Apr 18, 2024
1 parent 332cbff commit 6e9dce0
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 10 deletions.
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ authors:
given-names: 'Shabarinath'
orcid: 'https://orcid.org/0000-0002-6713-1705'
title: 'ExfilMS'
version: 1.2.5
version: 1.2.6
abstract: 'ExfilMS is a cross-platform, command line interface (CLI) tool to extract mass spectrometry (MS) data from mzML formatted files, with filtering capabilities.'
keywords:
- 'mass spectrometry'
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ For more guidance on how to use ExfilMS, please refer to our available guides be

If you use ExfilMS in your work, please cite it using the following:

Nambiar, V., & Nambiar, S. (2024). ExfilMS (Version 1.2.5) [Computer software]. https://doi.org/10.5281/zenodo.10976761
Nambiar, V., & Nambiar, S. (2024). ExfilMS (Version 1.2.6) [Computer software]. https://doi.org/10.5281/zenodo.10976761

<br>

Expand Down
14 changes: 7 additions & 7 deletions data/mzML/S15_Bruker_ImpactII_QToFMS.mzML
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@
</binaryDataArray>
</binaryDataArrayList>
</spectrum>
<spectrum index="3" id="scan=4" defaultArrayLength="231">
<spectrum index="3" id="scan=4" defaultArrayLength="0">
<cvParam cvRef="MS" accession="MS:1000511" name="ms level" value="2"/>
<cvParam cvRef="MS" accession="MS:1000580" name="MSn spectrum" value=""/>
<cvParam cvRef="MS" accession="MS:1000130" name="positive scan" value=""/>
Expand Down Expand Up @@ -248,17 +248,17 @@
</precursor>
</precursorList>
<binaryDataArrayList count="2">
<binaryDataArray encodedLength="2464">
<binaryDataArray encodedLength="0">
<cvParam cvRef="MS" accession="MS:1000523" name="64-bit float" value=""/>
<cvParam cvRef="MS" accession="MS:1000576" name="no compression" value=""/>
<cvParam cvRef="MS" accession="MS:1000576" name="zlib compression" value=""/>
<cvParam cvRef="MS" accession="MS:1000514" name="m/z array" value="" unitCvRef="MS" unitAccession="MS:1000040" unitName="m/z"/>
<binary>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</binary>
<binary></binary>
</binaryDataArray>
<binaryDataArray encodedLength="1232">
<binaryDataArray encodedLength="0">
<cvParam cvRef="MS" accession="MS:1000521" name="32-bit float" value=""/>
<cvParam cvRef="MS" accession="MS:1000576" name="no compression" value=""/>
<cvParam cvRef="MS" accession="MS:1000576" name="zlib compression" value=""/>
<cvParam cvRef="MS" accession="MS:1000515" name="intensity array" value="" unitCvRef="MS" unitAccession="MS:1000131" unitName="number of detector counts"/>
<binary>AACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAASEIAAJBBAACAQQAA8EEAAABCAACQQQAAgEEAAEBCAACAQQAAoEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAAChQwAAeEIAABZDAADgQgAAwEEAAIBBAACAQQAAgEEAAIBBAACZQwAAhEIAALBBAAAwQgAAAEIAACxDAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAADQQgAAgEEAABhCAACAQQAAgEEAAKBBAACAQQAAKEIAAFBCAIBcRAAAgEEAAKhCAACAQQAAYEIAAIBBAACAQQAAkEEAAIRCAACAQQAAgEEAAIBBAACAQQAA4EEAAIBBAACAQQAAgEEAAIBBAACAQQAAAEIAAIBBAABYQgAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAkEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACQQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACQQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBBAACAQQAAgEEAAIBB</binary>
<binary></binary>
</binaryDataArray>
</binaryDataArrayList>
</spectrum>
Expand Down
2 changes: 1 addition & 1 deletion data/mzML/S46_SCIEX_QTRAP6500P_TQMS_New.mzML
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
</processingMethod>
</dataProcessing>
</dataProcessingList>
<run id="_x0032_0230608_MR-LIPT-001_RLIP_Stress_Test-20230605_MR-LIPT-001_RLIP_Stress_Test_VLTR_96" defaultInstrumentConfigurationRef="IC1" startTimeStamp="2023-06-09T17:24:53Z" defaultSourceFileRef="WIFF">
<run id="S46_SCIEX_QTRAP6500P_TQMS_New" defaultInstrumentConfigurationRef="IC1" startTimeStamp="2023-06-09T17:24:53Z" defaultSourceFileRef="WIFF">
<chromatogramList count="1" defaultDataProcessingRef="pwiz_Reader_ABI_conversion">
<chromatogram index="0" id="TIC" defaultArrayLength="6053">
<cvParam cvRef="MS" accession="MS:1000235" name="total ion current chromatogram" value=""/>
Expand Down
16 changes: 16 additions & 0 deletions src/__tests__/decoder.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,14 @@ describe('decoder', () => {
).toStrictEqual(testMZ);
});

test('decode encoded data (empty binary): 64-bit', async () => {
expect(
Array.from(
await decoder(encoding.precisionValue, encoding.compressionMethod, ''),
),
).toStrictEqual([]);
});

test('decode encoded data: 32-bit', async () => {
encoding.precisionValue = 32;

Expand Down Expand Up @@ -177,4 +185,12 @@ describe('decoder', () => {
),
).toStrictEqual(testIntensity);
});

test('decode encoded data (empty binary): 32-bit', async () => {
expect(
Array.from(
await decoder(encoding.precisionValue, encoding.compressionMethod, ''),
),
).toStrictEqual([]);
});
});
5 changes: 5 additions & 0 deletions src/utils/decoder.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@ export async function decoder(precisionValue, compressionMethod, encodedData) {

let decodedData;

// Check if encodedData is empty
if (encodedData.length === 0) {
return precisionValue === 64 ? new Float64Array() : new Float32Array();
}

// Check compression method used
if (compressionMethod === 'none') {
decodedData = decode(encodedData);
Expand Down

0 comments on commit 6e9dce0

Please sign in to comment.