X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2Fstructurechooser%2FTDBResultAnalyser.java;h=e817b26bc8d18cfc4bc8934f1b60a66a949b2270;hb=a6f0678764ea06034460236c7a811bbfcad682aa;hp=02d4bda5956dd93fb68478ed0933af75245e7acf;hpb=485f6ecbc3e4439fa7a2252ed3cfa74d0097c353;p=jalview.git diff --git a/src/jalview/gui/structurechooser/TDBResultAnalyser.java b/src/jalview/gui/structurechooser/TDBResultAnalyser.java index 02d4bda..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"); } /** @@ -131,7 +133,8 @@ public class TDBResultAnalyser // ignore anything outside the sequence region for (FTSData row : collectedResults) { - if (row.getSummaryData() != null && row.getSummaryData()[idx_ups]!=null) + if (row.getSummaryData() != null + && row.getSummaryData()[idx_ups] != null) { int up_s = (Integer) row.getSummaryData()[idx_ups]; int up_e = (Integer) row.getSummaryData()[idx_upe]; @@ -168,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) { @@ -177,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)) @@ -208,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); @@ -230,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; } }