*/
package mc_view;
+import java.awt.Color;
+import java.util.List;
+import java.util.Locale;
+import java.util.Vector;
+
import jalview.analysis.AlignSeq;
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.Annotation;
+import jalview.datamodel.ContactMatrixI;
import jalview.datamodel.Mapping;
import jalview.datamodel.Sequence;
import jalview.datamodel.SequenceFeature;
import jalview.datamodel.SequenceI;
+import jalview.datamodel.annotations.AnnotationRowBuilder;
import jalview.schemes.ColourSchemeI;
import jalview.schemes.ResidueProperties;
import jalview.structure.StructureImportSettings;
import jalview.structure.StructureMapping;
import jalview.util.Comparison;
-import java.awt.Color;
-import java.util.List;
-import java.util.Vector;
-
public class PDBChain
{
public static final String RESNUM_FEATURE = "RESNUM";
public String pdbid = "";
- String tfacName = "Temperature Factor";
-
+ AnnotationRowBuilder tfacTemplate = new AnnotationRowBuilder(
+ "Temperature Factor");
- public PDBChain(String thePdbid, String theId, String tempFactorColumnName)
+ public PDBChain(String thePdbid, String theId,
+ AnnotationRowBuilder template)
{
- this.pdbid = thePdbid == null ? thePdbid : thePdbid.toLowerCase();
- this.id = theId;
- if (tempFactorColumnName!=null && tempFactorColumnName.length()>0)
+ this(thePdbid, theId);
+ if (template != null)
{
- tfacName = tempFactorColumnName;
+ tfacTemplate = template;
}
}
/**
- * import chain data assuming Temperature Factor is in the Temperature Factor column
+ * import chain data assuming Temperature Factor is in the Temperature Factor
+ * column
+ *
* @param thePdbid
* @param theId
*/
public PDBChain(String thePdbid, String theId)
{
- this(thePdbid,theId, null);
+ this.pdbid = thePdbid == null ? thePdbid
+ : thePdbid.toLowerCase(Locale.ROOT);
+ this.id = theId;
}
/**
}
char seqchar = ds.getCharAt(seqpos - ds.getStart());
- boolean sameResidue = Comparison.isSameResidue(
- seqchar, strchar, false);
+ boolean sameResidue = Comparison.isSameResidue(seqchar, strchar,
+ false);
if (sameResidue)
{
for (Atom atom : res.atoms)
* @param seq
* @param status
* The Status of the transferred annotation
+ *
+ * @param altPDBID
+ * the group id for the features on the destination sequence (e.g.
+ * the official accession ID)
*/
- public void transferRESNUMFeatures(SequenceI seq,
- String status)
+ public void transferRESNUMFeatures(SequenceI seq, String status,
+ String altPDBID)
{
+ if (altPDBID == null)
+ {
+ altPDBID = pdbid;
+ }
SequenceI sq = seq;
while (sq != null && sq.getDatasetSequence() != null)
{
if (feature.getFeatureGroup() != null
&& feature.getFeatureGroup().equals(pdbid))
{
- int newBegin = 1 + residues.elementAt(feature.getBegin() - offset).atoms
- .elementAt(0).alignmentMapping;
+ int newBegin = 1
+ + residues.elementAt(feature.getBegin() - offset).atoms
+ .elementAt(0).alignmentMapping;
int newEnd = 1 + residues.elementAt(feature.getEnd() - offset).atoms
.elementAt(0).alignmentMapping;
SequenceFeature tx = new SequenceFeature(feature, newBegin, newEnd,
- feature.getFeatureGroup(), feature.getScore());
+ altPDBID, feature.getScore());
tx.setStatus(status
+ ((tx.getStatus() == null || tx.getStatus().length() == 0)
? ""
{
String desc = currAtom.resName + ":" + currAtom.resNumIns + " "
+ pdbid + id;
- SequenceFeature sf = new SequenceFeature("INSERTION", desc, offset
- + count - 1, offset + count - 1, "PDB_INS");
+ SequenceFeature sf = new SequenceFeature("INSERTION", desc,
+ offset + count - 1, offset + count - 1, "PDB_INS");
resFeatures.addElement(sf);
residues.lastElement().atoms.addAll(resAtoms);
}
Residue tmpres = residues.lastElement();
Atom tmpat = tmpres.atoms.get(0);
// Make A new SequenceFeature for the current residue numbering
- String desc = tmpat.resName
- + ":" + tmpat.resNumIns + " " + pdbid + id;
+ String desc = tmpat.resName + ":" + tmpat.resNumIns + " " + pdbid
+ + id;
SequenceFeature sf = new SequenceFeature(RESNUM_FEATURE, desc,
offset + count, offset + count, pdbid);
resFeatures.addElement(sf);
for (int i = 0; i < iSize; i++)
{
annots[i] = resAnnotation.elementAt(i);
+ tfacTemplate.processAnnotation(annots[i]);
max = Math.max(max, annots[i].value);
min = Math.min(min, annots[i].value);
resAnnotation.setElementAt(null, i);
}
+ if (tfacTemplate.isHasMinMax())
+ {
+ max = tfacTemplate.getMax();
+ min = tfacTemplate.getMin();
+ }
+
AlignmentAnnotation tfactorann = new AlignmentAnnotation(
- tfacName, tfacName + " for " + pdbid + id,
+ tfacTemplate.getName(),
+ (tfacTemplate.isHasDescription()
+ ? tfacTemplate.getDescription()
+ : tfacTemplate.getName()) + " for " + pdbid + id,
annots, min, max, AlignmentAnnotation.LINE_GRAPH);
-
+ tfactorann.setTFType(tfacTemplate.getTFType());
tfactorann.setCalcId(getClass().getName());
tfactorann.setSequenceRef(sequence);
}
}
-
/**
* Colour start/end of bonds by charge
* <ul>
ana.getCalcId(), ana.label, ana.description);
if (transfer == null || transfer.size() == 0)
{
+ ContactMatrixI cm = shadow.getContactMatrixFor(ana);
ana = new AlignmentAnnotation(ana);
+ // TODO map contact matrix under mapping
ana.liftOver(sequence, shadowMap);
ana.liftOver(dsq, sqmpping);
dsq.addAlignmentAnnotation(ana);
+ if (cm != null)
+ {
+ dsq.addContactListFor(ana, cm);
+ }
}
else
{
ana.description);
if (transfer == null || transfer.size() == 0)
{
+ ContactMatrixI cm = sequence.getContactMatrixFor(ana);
ana = new AlignmentAnnotation(ana);
ana.liftOver(dsq, sqmpping);
dsq.addAlignmentAnnotation(ana);
- // mapping.transfer(ana);
+ if (cm != null)
+ {
+ dsq.addContactListFor(ana, cm);
+ }
}
else
{
// Useful for debugging mappings - adds annotation for mapped position
float min = -1, max = 0;
Annotation[] an = new Annotation[sq.getEnd() - sq.getStart() + 1];
- for (int i = sq.getStart(), j = sq
- .getEnd(), k = 0; i <= j; i++, k++)
+ for (int i = sq.getStart(), j = sq.getEnd(),
+ k = 0; i <= j; i++, k++)
{
int prn = mapping.getPDBResNum(k + 1);