import jalview.analysis.*;
import jalview.datamodel.*;
import jalview.schemes.*;
+import jalview.structure.StructureMapping;
public class PDBChain
{
return tmp;
}
- void makeExactMapping(AlignSeq as, Sequence s1)
+ public void makeExactMapping(AlignSeq as, SequenceI s1)
{
int pdbpos = as.getSeq2Start() - 2;
int alignpos = s1.getStart() + as.getSeq1Start() - 3;
}
}
}
-
/**
* copy over the RESNUM seqfeatures from the internal chain sequence to the mapped sequence
* @param seq
public SequenceFeature[] transferRESNUMFeatures(SequenceI seq, String status)
{
SequenceI sq = seq;
- while (sq != null)
+ while (sq!=null && sq.getDatasetSequence()!=null)
{
+ sq = sq.getDatasetSequence();
if (sq == sequence)
{
return null;
}
- sq = sq.getDatasetSequence();
}
/**
* Remove any existing features for this chain if they exist ?
SequenceFeature[] features = sequence.getSequenceFeatures();
for (int i = 0; i < features.length; i++)
{
- if (features[i].getFeatureGroup().equals(PDBChain.PDBFILEFEATURE))
+ if (features[i].getFeatureGroup().equals(pdbid))
{
SequenceFeature tx = new SequenceFeature(features[i]);
tx.setBegin(1 +
tx.setStatus(status +
( (tx.getStatus() == null || tx.getStatus().length() == 0) ?
"" : ":" + tx.getStatus()));
- seq.addSequenceFeature(tx);
+ if (tx.begin!=0 && tx.end!=0)
+ sq.addSequenceFeature(tx);
}
}
return features;
int count = 0;
StringBuffer seq = new StringBuffer();
Vector resFeatures = new Vector();
+ Vector resAnnotation = new Vector();
int i, iSize = atoms.size() - 1;
int resNumber = -1;
for (i = 0; i <= iSize; i++)
tmpat.resName + ":" + tmpat.resNumIns + " " +
pdbid + id,
"", offset + count, offset + count,
- MCview.PDBChain.PDBFILEFEATURE);
+ pdbid);
+
+ //MCview.PDBChain.PDBFILEFEATURE);
resFeatures.addElement(sf);
+ resAnnotation.addElement(new Annotation(tmpat.tfactor));
// Keep totting up the sequence
if (ResidueProperties.getAA3Hash().get(tmpat.resName) == null)
{
count++;
}
- if (id.length() < 1 || id.equals(" "))
+ if (id.length() < 1)
{
- id = "_";
+ id = " ";
}
sequence = new Sequence(id, seq.toString(), offset, resNumber - 1); // Note: resNumber-offset ~= seq.size()
sequence.addSequenceFeature( (SequenceFeature) resFeatures.elementAt(i));
resFeatures.setElementAt(null, i);
}
+ Annotation[] annots = new Annotation[resAnnotation.size()];
+ float max=0;
+ for (i=0,iSize=annots.length; i<iSize; i++)
+ {
+ annots[i] = (Annotation) resAnnotation.elementAt(i);
+ if (annots[i].value>max)
+ max = annots[i].value;
+ resAnnotation.setElementAt(null, i);
+ }
+ AlignmentAnnotation tfactorann = new AlignmentAnnotation("PDB.CATempFactor","CA Temperature Factor for "+sequence.getName(),
+ annots, 0, max, AlignmentAnnotation.LINE_GRAPH);
+ tfactorann.setSequenceRef(sequence);
+ sequence.addAlignmentAnnotation(tfactorann);
}
public void setChargeColours()
tmp.endCol = col;
}
}
+
+ public AlignmentAnnotation[] transferResidueAnnotation(SequenceI seq, String status)
+ {
+ AlignmentAnnotation[] transferred = null;
+
+ return transferred;
+
+ }
+
+ /**
+ * copy any sequence annotation onto the sequence mapped using the provided StructureMapping
+ * @param mapping
+ */
+ public void transferResidueAnnotation(StructureMapping mapping)
+ {
+ SequenceI sq = mapping.getSequence();
+ if (sq!=null)
+ {
+ if (sequence!=null && sequence.getAnnotation()!=null)
+ {
+
+ }
+ 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++)
+ {
+ int prn = mapping.getPDBResNum(k+1);
+
+ an[k] = new Annotation((float)prn);
+ if (min==-1)
+ {
+ min=k;
+ max=k;
+ } else {
+ if (min>k)
+ {
+ min=k;
+ } else
+ if (max<k)
+ {
+ max=k;
+ }
+ }
+ }
+ sq.addAlignmentAnnotation(new AlignmentAnnotation("PDB.RESNUM", "PDB Residue Numbering for "+this.pdbid+":"+this.id, an, (float)min,(float)max, AlignmentAnnotation.LINE_GRAPH));
+ }
+ }
}