import java.util.SortedMap;
import java.util.TreeMap;
+import jalview.api.AlignCalcWorkerI;
import jalview.bin.Console;
import jalview.commands.RemoveGapColCommand;
import jalview.datamodel.AlignedCodon;
import jalview.datamodel.SequenceGroup;
import jalview.datamodel.SequenceI;
import jalview.datamodel.features.SequenceFeatures;
+import jalview.gui.AlignmentPanel;
import jalview.io.gff.SequenceOntologyI;
import jalview.schemes.ResidueProperties;
import jalview.util.Comparison;
import jalview.util.IntRangeComparator;
import jalview.util.MapList;
import jalview.util.MappingUtils;
+import jalview.workers.SecondaryStructureConsensusThread;
/**
* grab bag of useful alignment manipulation operations Expect these to be
private static final String SEQUENCE_VARIANT = "sequence_variant:";
+
+ private static final Map<String, String> SECONDARY_STRUCTURE_LABELS = new HashMap<>();
+
+ static {
+ SECONDARY_STRUCTURE_LABELS.put("Secondary Structure", "3D Structures");
+ SECONDARY_STRUCTURE_LABELS.put("jnetpred", "JPred");
+ // Add other secondary structure labels here if needed
+ }
+
+ private static final String SS_ANNOTATION_LABEL = "Secondary Structure";
+
/*
* the 'id' attribute is provided for variant features fetched from
* Ensembl using its REST service with JSON format
if (translated == null || !(aaRes == translated.charAt(0)))
{
// debug
- // jalview.bin.Console.outPrintln(("Mismatch at " + i + "/" + aaResidue + ": "
+ // jalview.bin.Console.outPrintln(("Mismatch at " + i + "/" + aaResidue
+ // + ": "
// + codon + "(" + translated + ") != " + aaRes));
return false;
}
* unmapped position; treat like a gap
*/
sourceGapMappedLength += ratio;
- // jalview.bin.Console.errPrintln("Can't align: no codon mapping to residue "
+ // jalview.bin.Console.errPrintln("Can't align: no codon mapping to
+ // residue "
// + sourceDsPos + "(" + sourceChar + ")");
// return;
continue;
{
if (protein.isNucleotide() || !dna.isNucleotide())
{
- jalview.bin.Console.errPrintln("Wrong alignment type in alignProteinAsDna");
+ jalview.bin.Console
+ .errPrintln("Wrong alignment type in alignProteinAsDna");
return 0;
}
List<SequenceI> unmappedProtein = new ArrayList<>();
{
if (protein.isNucleotide() || !dna.isNucleotide())
{
- jalview.bin.Console.errPrintln("Wrong alignment type in alignProteinAsDna");
+ jalview.bin.Console
+ .errPrintln("Wrong alignment type in alignProteinAsDna");
return 0;
}
// todo: implement this
* @param alignment
* the alignment to add them to
* @param selectionGroup
- * current selection group - may be null, if provided then any added annotation will be trimmed to just those columns in the selection group
+ * current selection group - may be null, if provided then any added
+ * annotation will be trimmed to just those columns in the selection
+ * group
*/
public static void addReferenceAnnotations(
Map<SequenceI, List<AlignmentAnnotation>> annotations,
}
}
}
+
+
+ public static boolean isSSAnnotationPresent( Map<SequenceI, List<AlignmentAnnotation>> annotations) {
+
+ for (SequenceI seq : annotations.keySet())
+ {
+ for (AlignmentAnnotation ann : annotations.get(seq))
+ {
+ if(ann.getDescription(false).startsWith(SS_ANNOTATION_LABEL)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
/**
* Make a copy of a reference annotation {@code ann} and add it to an
* @param seq
* @param ann
* @param selectionGroup
- * current selection group - may be null, if provided then any added annotation will be trimmed to just those columns in the selection group
+ * current selection group - may be null, if provided then any added
+ * annotation will be trimmed to just those columns in the selection
+ * group
* @return annotation added to {@code seq and {@code alignment}
*/
public static AlignmentAnnotation addReferenceAnnotationTo(
fromRange[i + 1]);
if (range == null)
{
- jalview.bin.Console.errPrintln("Error in mapping " + seqMap + " from "
- + fromSeq.getName());
+ jalview.bin.Console.errPrintln("Error in mapping " + seqMap
+ + " from " + fromSeq.getName());
return false;
}
int fromCol = fromSeq.findIndex(fromRange[i]);
}
return true;
}
+
+
+ public static List<String> getSecondaryStructureSources(AlignmentAnnotation[] annotations) {
+
+ List<String> ssSources = new ArrayList<>();
+ Set<String> addedLabels = new HashSet<>(); // to keep track of added labels
+
+ for (AlignmentAnnotation annotation : annotations) {
+ String label = annotation.label;
+ if (SECONDARY_STRUCTURE_LABELS.containsKey(label) && !addedLabels.contains(label)) {
+ ssSources.add(SECONDARY_STRUCTURE_LABELS.get(label));
+ addedLabels.add(label); // Add the label to the set
+ }
+ }
+
+ return ssSources;
+ }
+
+ public static boolean isSecondaryStructurePresent(AlignmentAnnotation[] annotations)
+ {
+ boolean ssPresent = false;
+
+ for (AlignmentAnnotation aa : annotations)
+ {
+ if(ssPresent) {
+ break;
+ }
+
+ if (SECONDARY_STRUCTURE_LABELS.containsKey(aa.label)) {
+ ssPresent = true;
+ break;
+ }
+ }
+
+ return ssPresent;
+
+ }
}