Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Java lipid validation #22

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions lipid_validation/mslibrary-lipid-validator/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#
# https://help.github.com/articles/dealing-with-line-endings/
#
# Linux start script should use lf
/gradlew text eol=lf

# These are Windows script files and should use crlf
*.bat text eol=crlf

5 changes: 5 additions & 0 deletions lipid_validation/mslibrary-lipid-validator/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Ignore Gradle project-specific cache directory
.gradle

# Ignore Gradle build output directory
build
83 changes: 83 additions & 0 deletions lipid_validation/mslibrary-lipid-validator/app/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/*
* This file was generated by the Gradle 'init' task.
*
* This generated file contains a sample Java application project to get you started.
* For more details on building Java & JVM projects, please refer to https://docs.gradle.org/8.4/userguide/building_java_projects.html in the Gradle documentation.
*/

plugins {
// Apply the application plugin to add support for building a CLI application in Java.
id 'application'
}

repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
maven {
url "https://m.lifs-tools.org/artifactory/libs-release"
}
maven { url = "file://" + projectDir + "/src/main/lib" }
// For jmzml, etc.
maven { url = "https://www.ebi.ac.uk/Tools/maven/repos/content/groups/ebi-repo/" }
// For SIRIUS ID modules
maven { url = "https://bio.informatik.uni-jena.de/repository/libs-oss/" }
maven { url = "https://jitpack.io" }
maven { url = "https://www.xypron.de/repository/" }
// For cpdetector
maven { url = "https://nexus.nuiton.org/nexus/content/groups/releases/" }
// For jimzml
// maven { url = "https://mvnrepository.com/artifact/com.alanmrace/jimzmlparser" }
}

ext {
jgoslinVersion = '2.1.0'
}

dependencies {
// Use JUnit Jupiter for testing.
testImplementation 'org.junit.jupiter:junit-jupiter:5.9.3'

testRuntimeOnly 'org.junit.platform:junit-platform-launchchemspider-apier'

// This dependency is used by the application.
implementation 'com.google.guava:guava:32.1.1-jre'

implementation('io.github.mzmine:mzmine3:3.9.3') {
exclude group: 'org.rsc.chemspider', module: 'chemspider-api'
exclude group: 'mzmine', module: 'jmprojection'
exclude group: 'mzmine', module: 'gslibml'
exclude group: 'org.du-lab.adap', module: 'adap'
exclude group: 'gnf', module: 'clustering'
}
implementation "org.lifs-tools:jgoslin-parsers:$jgoslinVersion"
}

// Apply a specific Java toolchain to ease working on different environments.
java {
toolchain {
languageVersion = JavaLanguageVersion.of(20)
}
}

application {
// Define the main class for the application.
mainClass = 'org.mzmine.mslibrary.lipid.validator.App'
}

tasks.named('test') {
// Use JUnit Platform for unit tests.
useJUnitPlatform()
}

tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
options.compilerArgs += ['--enable-preview']
}

tasks.withType(Test) {
jvmArgs += "--enable-preview"
}

tasks.withType(JavaExec) {
jvmArgs += '--enable-preview'
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* This Java source file was generated by the Gradle 'init' task.
*/
package org.mzmine.mslibrary.lipid.validator;

import io.github.mzmine.util.spectraldb.parser.UnsupportedFormatException;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class App {

public String getGreeting() {
return "Hello World!";
}

public static void main(String[] args) {
try {
new MsLibraryReader().read(new File("/home/nilshoffmann/Projects/github.com/nilshoffmann/biohack23_p15/lipid_validation/mslibrary-lipid-validator/app/src/main/resources/PNNL-LIPIDS-NEGATIVE-small.mgf"));
} catch (IOException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedFormatException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package org.mzmine.mslibrary.lipid.validator;

import io.github.mzmine.util.MemoryMapStorage;
import io.github.mzmine.util.spectraldb.entry.DBEntryField;
import io.github.mzmine.util.spectraldb.entry.SpectralLibrary;
import io.github.mzmine.util.spectraldb.parser.AutoLibraryParser;
import io.github.mzmine.util.spectraldb.parser.UnsupportedFormatException;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
import org.lifstools.jgoslin.domain.ElementTable;
import org.lifstools.jgoslin.domain.LipidAdduct;
import org.lifstools.jgoslin.domain.LipidParsingException;
import org.lifstools.jgoslin.parser.LipidParser;
import org.lifstools.jgoslin.parser.SumFormulaParser;

/**
*
* @author nilshoffmann
*/
public class MsLibraryReader {

private final LipidParser lipidParser = new LipidParser();
private final SumFormulaParser sfp = new SumFormulaParser();

public void read(File mgfFile) throws IOException, UnsupportedFormatException {
AutoLibraryParser alp = new AutoLibraryParser(10, (spectralLibraryEntryList, alreadyProcessed) -> {
spectralLibraryEntryList.forEach((t) -> {
String name = t.getField(DBEntryField.NAME).map((dbentryname) -> dbentryname.toString()).orElse("NA");
System.out.println("Processing entry: " + name);
try {
System.out.println("Checking if lipid name is parseable!");
LipidAdduct lipidAdduct = lipidParser.parse(name);
System.out.println(lipidAdduct.toString());
String providedSumFormula = t.getField(DBEntryField.FORMULA).map((formula) -> formula.toString()).orElse("");
ElementTable et = sfp.parse(providedSumFormula, sfp.newEventHandler());
String calculatedSumFormula = lipidAdduct.getSumFormula();
System.out.println("Sum Formulas: DB entry: " + et.getSumFormula() + " calculated: " + calculatedSumFormula);
System.out.println("Sum Formulas are equal: " + calculatedSumFormula.equals(et.getSumFormula()));
Object pepmass = t.getField(DBEntryField.MOLWEIGHT).orElse(Double.valueOf(0));
System.out.println("Molweight: " + pepmass.toString());
Object mw = t.getField(DBEntryField.PRECURSOR_MZ).orElse(Double.valueOf(0));
System.out.println("Precursor MZ: " + mw.toString());
double mwd = ((Double)mw).doubleValue();
double calculatedMass = et.getMass().doubleValue();
System.out.println("Calculated Precursor MZ: "+calculatedMass);
System.out.println("Mass difference: "+(mwd-calculatedMass));
double diffMass = Math.abs(mwd-calculatedMass);
boolean massOk = diffMass<1.0E-3;
System.out.println("Mass difference < 1.0E-3? "+massOk);
} catch (LipidParsingException e) {
System.out.println("Goslin says no!");
}
});
});
String prefix = "lipid-spec-lib-" + UUID.randomUUID();
boolean parseSuccess = alp.parse(null, mgfFile, new SpectralLibrary(MemoryMapStorage.create(), prefix, File.createTempFile(prefix, ".slib")));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
BEGIN IONS
PEPMASS=450.262
CHARGE=1
MSLEVEL=2
SOURCE_INSTRUMENT=LC-ESI-CID; Lumos
FILENAME=/home/mingxun/Data/data/Metabolomics/Libraries/PNNL/Lipids/LibrariesCreation/PNNL_LipidSpectra_Neg.mgf
SEQ=*..*
IONMODE=Negative
ORGANISM=PNNL-LIPIDS-NEGATIVE
NAME=PE(16:1/0:0) [M-H]1-
PI=Thomas Metz
FORMULA=C21H41N1O7P1
DATACOLLECTOR=Thomas Metz
SMILES=N/A
INCHI=N/A
INCHIAUX=N/A
PUBMED=N/A
SUBMITUSER=mwang87
LIBRARYQUALITY=1
SPECTRUMID=CCMSLIB00010059112
SCANS=1
88.32769 245.804764
93.972839 232.013443
95.618507 268.045868
100.635094 307.082031
105.552155 291.909698
123.586555 369.775604
140.011139 1016.653503
147.90979 356.798553
151.629898 416.599426
158.973969 371.781433
196.037247 2644.280029
205.488373 501.591583
214.048126 15959.319336
253.216827 668097.875
261.997437 462.053406
307.020447 728.224487
409.645721 690.217773
END IONS


BEGIN IONS
PEPMASS=450.262
CHARGE=1
MSLEVEL=2
SOURCE_INSTRUMENT=LC-ESI-HCD; Lumos
FILENAME=/home/mingxun/Data/data/Metabolomics/Libraries/PNNL/Lipids/LibrariesCreation/PNNL_LipidSpectra_Neg.mgf
SEQ=*..*
IONMODE=Negative
ORGANISM=PNNL-LIPIDS-NEGATIVE
NAME=PE(16:1/0:0) [M-H]1-
PI=Thomas Metz
FORMULA=C21H41N1O7P1
DATACOLLECTOR=Thomas Metz
SMILES=N/A
INCHI=N/A
INCHIAUX=N/A
PUBMED=N/A
SUBMITUSER=mwang87
LIBRARYQUALITY=1
SPECTRUMID=CCMSLIB00010059114
SCANS=2
100.93396 282.544464
113.877197 307.384216
140.011642 8027.749023
152.9953 2096.166748
178.184937 1374.054077
196.03775 9324.954102
214.048828 15460.44043
235.208908 752.753296
253.217422 967534.6875
254.221176 771.921692
262.387482 654.0802
271.458923 780.599854
294.089935 762.228088
322.021149 839.201355
END IONS


BEGIN IONS
PEPMASS=476.278
CHARGE=1
MSLEVEL=2
SOURCE_INSTRUMENT=LC-ESI-CID; Lumos
FILENAME=/home/mingxun/Data/data/Metabolomics/Libraries/PNNL/Lipids/LibrariesCreation/PNNL_LipidSpectra_Neg.mgf
SEQ=*..*
IONMODE=Negative
ORGANISM=PNNL-LIPIDS-NEGATIVE
NAME=PE(18:2/0:0) [M-H]1-
PI=Thomas Metz
FORMULA=C23H43N1O7P1
DATACOLLECTOR=Thomas Metz
SMILES=N/A
INCHI=N/A
INCHIAUX=N/A
PUBMED=N/A
SUBMITUSER=mwang87
LIBRARYQUALITY=1
SPECTRUMID=CCMSLIB00010059115
SCANS=3
99.012329 302.66864
137.016525 441.67511
140.011261 1204.163208
150.551758 430.2565
152.995499 834.349426
178.209702 1269.476562
196.037888 3227.924316
214.048141 29480.539062
214.071869 1270.914429
247.366653 793.174438
278.830505 852.584534
279.232513 1467222.375
280.235352 951.054077
280.567749 942.396912
285.79657 797.994751
306.568115 913.472595
394.96698 1693.546265
432.089874 782.323792
432.187653 1374.477661
448.449188 640.251648
455.015808 711.718628
458.298615 1311.985596
486.666687 717.959473
END IONS


Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/*
* This Java source file was generated by the Gradle 'init' task.
*/
package org.mzmine.mslibrary.lipid.validator;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class AppTest {
@Test void appHasAGreeting() {
App classUnderTest = new App();
assertNotNull(classUnderTest.getGreeting(), "app should have a greeting");
}
}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading