Skip to content

Commit

Permalink
added new features and more support for HMDB parser
Browse files Browse the repository at this point in the history
  • Loading branch information
dominik-kopczynski committed Sep 7, 2023
1 parent a530552 commit f0cb342
Show file tree
Hide file tree
Showing 4 changed files with 275 additions and 216 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -428,213 +428,7 @@ private void addMediatorFunction(TreeNode node) {

private void setTrivialMediator(TreeNode node) {
headGroup = "FA";

switch (node.getText()) {
case "Palmitic acid":
currentFa = new FattyAcid("FA", 16, knownFunctionalGroups);
break;

case "Linoleic acid":
currentFa = new FattyAcid("FA", 18, new DoubleBonds(2), knownFunctionalGroups);
break;

case "AA":
currentFa = new FattyAcid("FA", 20, new DoubleBonds(4), knownFunctionalGroups);
break;

case "ALA":
currentFa = new FattyAcid("FA", 18, new DoubleBonds(3), knownFunctionalGroups);
break;

case "EPA":
currentFa = new FattyAcid("FA", 20, new DoubleBonds(5), knownFunctionalGroups);
break;

case "DHA":
currentFa = new FattyAcid("FA", 22, new DoubleBonds(6), knownFunctionalGroups);
break;

case "LTB4": {
FunctionalGroup f1 = knownFunctionalGroups.get("OH");
FunctionalGroup f2 = knownFunctionalGroups.get("OH");
f1.setPosition(5);
f2.setPosition(12);
DoubleBonds db = new DoubleBonds(new TreeMap<>(Map.of(6, "Z", 8, "E", 10, "E", 14, "Z")));
HashMap<String, ArrayList<FunctionalGroup>> fg = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f1, f2))));
currentFa = new FattyAcid("FA", 20, db, fg, knownFunctionalGroups);
}
break;

case "Resolvin D3": {
FunctionalGroup f1 = knownFunctionalGroups.get("OH");
FunctionalGroup f2 = knownFunctionalGroups.get("OH");
FunctionalGroup f3 = knownFunctionalGroups.get("OH");
f1.setPosition(4);
f2.setPosition(11);
f3.setPosition(17);
HashMap<String, ArrayList<FunctionalGroup>> fg = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f1, f2, f3))));
currentFa = new FattyAcid("FA", 22, new DoubleBonds(6), fg, knownFunctionalGroups);
}
break;

case "Maresin 1": {
FunctionalGroup f1 = knownFunctionalGroups.get("OH");
FunctionalGroup f2 = knownFunctionalGroups.get("OH");
f1.setPosition(4);
f2.setPosition(14);
HashMap<String, ArrayList<FunctionalGroup>> fg = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f1, f2))));
currentFa = new FattyAcid("FA", 22, new DoubleBonds(6), fg, knownFunctionalGroups);
}
break;

case "Resolvin D2": {
FunctionalGroup f1 = knownFunctionalGroups.get("OH");
FunctionalGroup f2 = knownFunctionalGroups.get("OH");
FunctionalGroup f3 = knownFunctionalGroups.get("OH");
f1.setPosition(4);
f2.setPosition(16);
f3.setPosition(17);
HashMap<String, ArrayList<FunctionalGroup>> fg = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f1, f2, f3))));
currentFa = new FattyAcid("FA", 22, new DoubleBonds(6), fg, knownFunctionalGroups);
}
break;

case "Resolvin D5": {
FunctionalGroup f1 = knownFunctionalGroups.get("OH");
FunctionalGroup f2 = knownFunctionalGroups.get("OH");
f1.setPosition(7);
f2.setPosition(17);
HashMap<String, ArrayList<FunctionalGroup>> fg = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f1, f2))));
currentFa = new FattyAcid("FA", 22, new DoubleBonds(6), fg, knownFunctionalGroups);
}
break;

case "Resolvin D1": {
FunctionalGroup f1 = knownFunctionalGroups.get("OH");
FunctionalGroup f2 = knownFunctionalGroups.get("OH");
FunctionalGroup f3 = knownFunctionalGroups.get("OH");
f1.setPosition(7);
f2.setPosition(8);
f3.setPosition(17);
HashMap<String, ArrayList<FunctionalGroup>> fg = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f1, f2, f3))));
currentFa = new FattyAcid("FA", 22, new DoubleBonds(6), fg, knownFunctionalGroups);
}
break;

case "TXB1": {
FunctionalGroup f1 = knownFunctionalGroups.get("OH");
FunctionalGroup f2 = knownFunctionalGroups.get("OH");
FunctionalGroup f3 = knownFunctionalGroups.get("OH");
FunctionalGroup f4 = knownFunctionalGroups.get("oxy");
f1.setPosition(15);
f2.setPosition(9);
f3.setPosition(11);
f4.setPosition(11);
HashMap<String, ArrayList<FunctionalGroup>> fgc = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f2, f3)), "oxo", new ArrayList<>(Arrays.asList(f4))));
Cycle cy = new Cycle(5, 8, 12, fgc, knownFunctionalGroups);
HashMap<String, ArrayList<FunctionalGroup>> fg = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f1)), "cy", new ArrayList<>(Arrays.asList(cy))));
currentFa = new FattyAcid("FA", 20, new DoubleBonds(1), fg, knownFunctionalGroups);
}
break;

case "TXB2": {
FunctionalGroup f1 = knownFunctionalGroups.get("OH");
FunctionalGroup f2 = knownFunctionalGroups.get("OH");
FunctionalGroup f3 = knownFunctionalGroups.get("OH");
FunctionalGroup f4 = knownFunctionalGroups.get("oxy");
f1.setPosition(15);
f2.setPosition(9);
f3.setPosition(11);
f4.setPosition(11);
HashMap<String, ArrayList<FunctionalGroup>> fgc = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f2, f3)), "oxy", new ArrayList<>(Arrays.asList(f4))));
Cycle cy = new Cycle(5, 8, 12, fgc, knownFunctionalGroups);
HashMap<String, ArrayList<FunctionalGroup>> fg = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f1)), "cy", new ArrayList<>(Arrays.asList(cy))));
currentFa = new FattyAcid("FA", 20, new DoubleBonds(2), fg, knownFunctionalGroups);
}
break;

case "TXB3": {
FunctionalGroup f1 = knownFunctionalGroups.get("OH");
FunctionalGroup f2 = knownFunctionalGroups.get("OH");
FunctionalGroup f3 = knownFunctionalGroups.get("OH");
FunctionalGroup f4 = knownFunctionalGroups.get("oxy");
f1.setPosition(15);
f2.setPosition(9);
f3.setPosition(11);
f4.setPosition(11);
HashMap<String, ArrayList<FunctionalGroup>> fgc = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f2, f3)), "oxy", new ArrayList<>(Arrays.asList(f4))));
Cycle cy = new Cycle(5, 8, 12, fgc, knownFunctionalGroups);
HashMap<String, ArrayList<FunctionalGroup>> fg = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f1)), "cy", new ArrayList<>(Arrays.asList(cy))));
currentFa = new FattyAcid("FA", 20, new DoubleBonds(3), fg, knownFunctionalGroups);
}
break;

case "PGF2alpha": {
FunctionalGroup f1 = knownFunctionalGroups.get("OH");
FunctionalGroup f2 = knownFunctionalGroups.get("OH");
FunctionalGroup f3 = knownFunctionalGroups.get("OH");
f1.setPosition(15);
f2.setPosition(9);
f3.setPosition(11);
HashMap<String, ArrayList<FunctionalGroup>> fgc = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f2, f3))));
Cycle cy = new Cycle(5, 8, 12, fgc, knownFunctionalGroups);
HashMap<String, ArrayList<FunctionalGroup>> fg = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f1)), "cy", new ArrayList<>(Arrays.asList(cy))));
currentFa = new FattyAcid("FA", 20, new DoubleBonds(2), fg, knownFunctionalGroups);
}
break;

case "PGD2": {
FunctionalGroup f1 = knownFunctionalGroups.get("OH");
FunctionalGroup f2 = knownFunctionalGroups.get("OH");
FunctionalGroup f3 = knownFunctionalGroups.get("oxo");
f1.setPosition(15);
f2.setPosition(9);
f3.setPosition(11);
HashMap<String, ArrayList<FunctionalGroup>> fgc = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f2)), "oxo", new ArrayList<>(Arrays.asList(f3))));
Cycle cy = new Cycle(5, 8, 12, fgc, knownFunctionalGroups);
HashMap<String, ArrayList<FunctionalGroup>> fg = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f1)), "cy", new ArrayList<>(Arrays.asList(cy))));
currentFa = new FattyAcid("FA", 20, new DoubleBonds(2), fg, knownFunctionalGroups);
}
break;

case "PGE2": {
FunctionalGroup f1 = knownFunctionalGroups.get("OH");
FunctionalGroup f2 = knownFunctionalGroups.get("oxo");
FunctionalGroup f3 = knownFunctionalGroups.get("OH");
f1.setPosition(15);
f2.setPosition(9);
f3.setPosition(11);
HashMap<String, ArrayList<FunctionalGroup>> fgc = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f3)), "oxo", new ArrayList<>(Arrays.asList(f2))));
Cycle cy = new Cycle(5, 8, 12, fgc, knownFunctionalGroups);
HashMap<String, ArrayList<FunctionalGroup>> fg = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f1)), "cy", new ArrayList<>(Arrays.asList(cy))));
currentFa = new FattyAcid("FA", 20, new DoubleBonds(2), fg, knownFunctionalGroups);
}
break;

case "PGB2": {
FunctionalGroup f1 = knownFunctionalGroups.get("OH");
FunctionalGroup f2 = knownFunctionalGroups.get("OH");
f1.setPosition(15);
f2.setPosition(9);
HashMap<String, ArrayList<FunctionalGroup>> fgc = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f2))));
Cycle cy = new Cycle(5, 8, 12, new DoubleBonds(1), fgc, knownFunctionalGroups);
HashMap<String, ArrayList<FunctionalGroup>> fg = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f1)), "cy", new ArrayList<>(Arrays.asList(cy))));
currentFa = new FattyAcid("FA", 20, new DoubleBonds(2), fg, knownFunctionalGroups);
}
break;

case "15d-PGJ2": {
FunctionalGroup f1 = knownFunctionalGroups.get("OH");
FunctionalGroup f2 = knownFunctionalGroups.get("oxo");
f1.setPosition(15);
f2.setPosition(11);
HashMap<String, ArrayList<FunctionalGroup>> fgc = new HashMap<>(Map.of("oxo", new ArrayList<>(Arrays.asList(f2))));
Cycle cy = new Cycle(5, 8, 12, new DoubleBonds(1), fgc, knownFunctionalGroups);
HashMap<String, ArrayList<FunctionalGroup>> fg = new HashMap<>(Map.of("OH", new ArrayList<>(Arrays.asList(f1)), "cy", new ArrayList<>(Arrays.asList(cy))));
currentFa = new FattyAcid("FA", 20, new DoubleBonds(3), fg, knownFunctionalGroups);
}
break;
}
currentFa = resolveFaSynonym(node.getText());

faList.clear();
faList.add(currentFa);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ public class HmdbParserEventHandler extends LipidBaseParserEventHandler {
private int dbPositions;
private String dbCistrans;
private Dictionary furan = null;
private String funcType;

/**
* Create a new {@code HmdbParserEventHandler}.
Expand Down Expand Up @@ -103,7 +104,11 @@ public HmdbParserEventHandler(KnownFunctionalGroups knownFunctionalGroups) {
entry("furan_fa_mono_pre_event", this::furanFaMono),
entry("furan_fa_di_pre_event", this::furanFaDi),
entry("furan_first_number_pre_event", this::furanFaFirstNumber),
entry("furan_second_number_pre_event", this::furanFaSecondNumber)
entry("furan_second_number_pre_event", this::furanFaSecondNumber),
entry("fa_lcb_suffix_types_pre_event", this::registerSuffixType),
entry("fa_lcb_suffix_position_pre_event", this::registerSuffixPos),
entry("fa_synonym_pre_event", this::registerFaSynonym)

);
} catch (Exception e) {
throw new LipidParsingException("Cannot initialize LipidMapsParserEventHandler.");
Expand All @@ -124,6 +129,7 @@ protected void resetParser(TreeNode node) {
dbCistrans = "";
furan = new Dictionary();
headgroupDecorators.clear();
funcType = "";
}

private void setIsomericLevel(TreeNode node) {
Expand Down Expand Up @@ -175,6 +181,30 @@ private void newLcb(TreeNode node) {
setLipidLevel(LipidLevel.STRUCTURE_DEFINED);
currentFa = lcb;
}

private void registerSuffixType(TreeNode node) {
funcType = node.getText();
if (funcType.compareTo("me") != 0 && funcType.compareTo("OH") != 0 && funcType.compareTo("O") != 0){
throw new LipidException("Unknown functional abbreviation: " + funcType);
}
if (funcType.compareTo("me") == 0) funcType = "Me";
else if (funcType.compareTo("O") == 0) funcType = "oxo";
}

private void registerSuffixPos(TreeNode node) {
FunctionalGroup functionalGroup = knownFunctionalGroups.get(funcType);
if (functionalGroup == null) return;
functionalGroup.setPosition(node.getInt());
if (!currentFa.getFunctionalGroupsInternal().containsKey(funcType)) {
currentFa.getFunctionalGroupsInternal().put(funcType, new ArrayList<>());
}
currentFa.getFunctionalGroupsInternal().get(funcType).add(functionalGroup);

}

private void registerFaSynonym(TreeNode node) {
currentFa = resolveFaSynonym(node.getText());
}

private void cleanLcb(TreeNode node) {
if (currentFa.getDoubleBonds().getDoubleBondPositions().isEmpty() && currentFa.getDoubleBonds().getNumDoubleBonds() > 0) {
Expand Down Expand Up @@ -230,34 +260,34 @@ private void addHydroxyl(TreeNode node) {
num_h -= 1;
}

FunctionalGroup functional_group = knownFunctionalGroups.get("OH");
functional_group.setCount(num_h);
FunctionalGroup functionalGroup = knownFunctionalGroups.get("OH");
functionalGroup.setCount(num_h);
if (!currentFa.getFunctionalGroupsInternal().containsKey("OH")) {
currentFa.getFunctionalGroupsInternal().put("OH", new ArrayList<>());
}
currentFa.getFunctionalGroupsInternal().get("OH").add(functional_group);
currentFa.getFunctionalGroupsInternal().get("OH").add(functionalGroup);
}

private void addMethyl(TreeNode node) {
FunctionalGroup functional_group = knownFunctionalGroups.get("Me");
functional_group.setPosition(currentFa.getNumCarbon() - (node.getText().equals("i-") ? 1 : 2));
FunctionalGroup functionalGroup = knownFunctionalGroups.get("Me");
functionalGroup.setPosition(currentFa.getNumCarbon() - (node.getText().equals("i-") ? 1 : 2));
currentFa.setNumCarbon(currentFa.getNumCarbon() - 1);

if (!currentFa.getFunctionalGroupsInternal().containsKey("Me")) {
currentFa.getFunctionalGroupsInternal().put("Me", new ArrayList<>());
}
currentFa.getFunctionalGroupsInternal().get("Me").add(functional_group);
currentFa.getFunctionalGroupsInternal().get("Me").add(functionalGroup);
}

private void addOneHydroxyl(TreeNode node) {
if (currentFa.getFunctionalGroupsInternal().containsKey("OH") && currentFa.getFunctionalGroupsInternal().get("OH").get(0).getPosition() == -1) {
currentFa.getFunctionalGroupsInternal().get("OH").get(0).setCount(currentFa.getFunctionalGroupsInternal().get("OH").get(0).getCount() + 1);
} else {
FunctionalGroup functional_group = knownFunctionalGroups.get("OH");
FunctionalGroup functionalGroup = knownFunctionalGroups.get("OH");
if (!currentFa.getFunctionalGroupsInternal().containsKey("OH")) {
currentFa.getFunctionalGroupsInternal().put("OH", new ArrayList<>());
}
currentFa.getFunctionalGroupsInternal().get("OH").add(functional_group);
currentFa.getFunctionalGroupsInternal().get("OH").add(functionalGroup);
}
}

Expand Down
Loading

0 comments on commit f0cb342

Please sign in to comment.