*/
package jalview.gui.structurechooser;
-import java.util.Locale;
-
import java.util.ArrayList;
import java.util.Arrays;
import java.util.BitSet;
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;
*/
private static List<String> 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;
private int idx_mqual;
+ private int idx_mqualtype;
+
private int idx_resol;
/**
idx_mprov = lastTdbRequest.getFieldIndex("Provider");
idx_mqual = lastTdbRequest.getFieldIndex("Confidence");
idx_resol = lastTdbRequest.getFieldIndex("Resolution");
+ idx_mqualtype = lastTdbRequest.getFieldIndex("Confidence Score Type");
}
/**
int idx = EXP_CATEGORIES.indexOf(upper_cat);
if (idx == -1)
{
- System.out.println("Unknown category: '" + cat + "'");
+ jalview.bin.Console.outPrintln("Unknown category: '" + cat + "'");
EXP_CATEGORIES.add(upper_cat);
idx = EXP_CATEGORIES.size() - 1;
}
// 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];
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)
{
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))
}
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);
}
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;
}
}