X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2Fstructurechooser%2FTDBResultAnalyser.java;h=e817b26bc8d18cfc4bc8934f1b60a66a949b2270;hb=a6f0678764ea06034460236c7a811bbfcad682aa;hp=2408d7a2c8c248641896ca62447b20885b91d9c7;hpb=5a352aa2f3330ae269d9b70c4a7374c2518bfb2e;p=jalview.git diff --git a/src/jalview/gui/structurechooser/TDBResultAnalyser.java b/src/jalview/gui/structurechooser/TDBResultAnalyser.java index 2408d7a..e817b26 100644 --- a/src/jalview/gui/structurechooser/TDBResultAnalyser.java +++ b/src/jalview/gui/structurechooser/TDBResultAnalyser.java @@ -20,8 +20,6 @@ */ package jalview.gui.structurechooser; -import java.util.Locale; - import java.util.ArrayList; import java.util.Arrays; import java.util.BitSet; @@ -29,6 +27,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Locale; import jalview.datamodel.SequenceI; import jalview.fts.api.FTSData; @@ -45,8 +44,8 @@ public class TDBResultAnalyser */ private static List EXP_CATEGORIES = Arrays .asList(new String[] - { "EXPERIMENTALLY DETERMINED", "DEEP-LEARNING", "TEMPLATE-BASED", - "AB-INITIO", "CONFORMATIONAL ENSEMBLE" }); + { "EXPERIMENTALLY DETERMINED", "DEEP-LEARNING", "AB-INITIO", + "TEMPLATE-BASED", "CONFORMATIONAL ENSEMBLE" }); private SequenceI seq; @@ -62,6 +61,8 @@ public class TDBResultAnalyser private int idx_mqual; + private int idx_mqualtype; + private int idx_resol; /** @@ -92,6 +93,7 @@ public class TDBResultAnalyser idx_mprov = lastTdbRequest.getFieldIndex("Provider"); idx_mqual = lastTdbRequest.getFieldIndex("Confidence"); idx_resol = lastTdbRequest.getFieldIndex("Resolution"); + idx_mqualtype = lastTdbRequest.getFieldIndex("Confidence Score Type"); } /** @@ -169,6 +171,8 @@ public class TDBResultAnalyser int o2_cat = scoreCategory((String) o2data[idx_mcat]); String o2_prov = ((String) o2data[idx_mprov]) .toUpperCase(Locale.ROOT); + String o1_qualtype = (String) o1data[idx_mqualtype], + o2_qualtype = (String) o2data[idx_mqualtype]; if (o1_cat == o2_cat) { @@ -178,6 +182,7 @@ public class TDBResultAnalyser int o2_xtent = o2_e - o2_s; if (o1_xtent == o2_xtent) { + // EXPERIMENTAL DATA ALWAYS TRUMPS MODELS if (o1_cat == scoreCategory(EXP_CATEGORIES.get(0))) { if (o1_prov.equals(o2_prov)) @@ -209,6 +214,19 @@ public class TDBResultAnalyser } else { + // RANK ON QUALITY - DOWNRANK THOSE WITH NO QUALITY MEASURE + if (eitherNull(idx_mqualtype, o1data, o2data)) + { + return nonNullFirst(idx_mqualtype, o1data, o2data); + } + // ONLY COMPARE LIKE QUALITY SCORES + if (!o1_qualtype.equals(o2_qualtype)) + { + // prefer LDDT measure over others + return "pLDDT".equals(o1_prov) ? -1 + : "pLDDT".equals(o2_prov) ? 1 : 0; + } + // OR NO VALUE FOR THE QUALITY if (eitherNull(idx_mqual, o1data, o2data)) { return nonNullFirst(idx_mqual, o1data, o2data); @@ -231,6 +249,12 @@ public class TDBResultAnalyser } else { + // if both are not experimental, then favour alphafold + if (o2_cat > 0 && o1_cat > 0) + { + return "ALPHAFOLD DB".equals(o1_prov) ? -1 + : "ALPHAFOLD DB".equals(o2_prov) ? 1 : 0; + } return o2_cat - o1_cat; } }