* SequenceFeature group for PDB File features added to sequences
*/
private static final String PDBFILEFEATURE = "PDBFile";
+ private static final String IEASTATUS = "IEA:jalview";
public String id;
public Vector bonds = new Vector();
public Vector atoms = new Vector();
public int pdbend = 0;
public int seqstart = 0;
public int seqend = 0;
-
- public PDBChain(String id) {
+ public String pdbid="";
+ public PDBChain(String pdbid, String id) {
+ this.pdbid=pdbid.toLowerCase();
this.id = id;
}
/**
* copy over the RESNUM seqfeatures from the internal chain sequence to the mapped sequence
* @param seq
+ * @param status The Status of the transferred annotation
*/
public void transferRESNUMFeatures(SequenceI seq, String status) {
- if (seq != sequence) {
- /** SequenceFeature[] seqsfeatures=seq.getSequenceFeatures();
+ SequenceI sq = seq;
+ while (sq!=null) {
+ if (sq==sequence)
+ return;
+ sq = sq.getDatasetSequence();
+ }
+ /**
+ * Remove any existing features for this chain if they exist ?
+ * SequenceFeature[] seqsfeatures=seq.getSequenceFeatures();
int totfeat=seqsfeatures.length;
// Remove any features for this exact chain ?
for (int i=0; i<seqsfeatures.length; i++) {
-
} */
- if (status==null)
- status = "IEA:jalview";
- SequenceFeature[] features = sequence.getSequenceFeatures();
- for (int i=0; i<features.length; i++) {
- if (features[i].getFeatureGroup().equals(PDBChain.PDBFILEFEATURE)) {
- SequenceFeature tx = new SequenceFeature(features[i]);
- tx.setBegin(1+((Atom)((Residue)residues.elementAt(tx.getBegin()-offset)).atoms.elementAt(0)).alignmentMapping);
- tx.setEnd(1+((Atom)((Residue)residues.elementAt(tx.getEnd()-offset)).atoms.elementAt(0)).alignmentMapping);
- tx.setStatus(status+((tx.getStatus()==null || tx.getStatus().length()==0) ? "" : ":"+tx.getStatus()));
- seq.getDatasetSequence().addSequenceFeature(tx);
- }
+ if (status==null)
+ status = PDBChain.IEASTATUS;
+ SequenceFeature[] features = sequence.getSequenceFeatures();
+ for (int i=0; i<features.length; i++) {
+ if (features[i].getFeatureGroup().equals(PDBChain.PDBFILEFEATURE)) {
+ SequenceFeature tx = new SequenceFeature(features[i]);
+ tx.setBegin(1+((Atom)((Residue)residues.elementAt(tx.getBegin()-offset)).atoms.elementAt(0)).alignmentMapping);
+ tx.setEnd(1+((Atom)((Residue)residues.elementAt(tx.getEnd()-offset)).atoms.elementAt(0)).alignmentMapping);
+ tx.setStatus(status+((tx.getStatus()==null || tx.getStatus().length()==0) ? "" : ":"+tx.getStatus()));
+ seq.addSequenceFeature(tx);
}
-
}
}
Atom tmpat = (Atom) tmpres.atoms.elementAt(0);
// Make A new SequenceFeature for the current residue numbering
SequenceFeature sf =
- new SequenceFeature("RESNUM",tmpat.resName+":"+tmpat.resNumIns,
+ new SequenceFeature("RESNUM",tmpat.resName+":"+tmpat.resNumIns+" "+pdbid+id,
"",offset+count,offset+count,MCview.PDBChain.PDBFILEFEATURE);
resFeatures.addElement(sf);
// Keep totting up the sequence
if(id.length()<1 || id.equals(" "))
id = "_";
- sequence = new Sequence(id, seq.toString(), offset, resNumber); // resNumber-offset ~= seq.size()
+ sequence = new Sequence(id, seq.toString(), offset, resNumber-1); // Note: resNumber-offset ~= seq.size()
// System.out.println("PDB Sequence is :\nSequence = " + seq);
// System.out.println("No of residues = " + residues.size());
for (i=0,iSize=resFeatures.size(); i<iSize; i++) {
}
else
{
- tmpchain = new PDBChain(tmpatom.chain);
+ tmpchain = new PDBChain(id,tmpatom.chain);
chains.addElement(tmpchain);
tmpchain.atoms.addElement(tmpatom);
}
}
for (int i = 0; i < chains.size(); i++)
{
- SequenceI seq = ( (PDBChain) chains.elementAt(i)).
+ SequenceI dataset = ( (PDBChain) chains.elementAt(i)).
sequence;
- seq.setName(id + "|" + seq.getName());
- Sequence dataset = new Sequence(seq.
- getName(),
- seq.getSequence().toString(),
- seq.getStart(), seq.getEnd());
- dataset.setSequenceFeatures(seq.getSequenceFeatures());
+ dataset.setName(id + "|" + dataset.getName());
PDBEntry entry = new PDBEntry();
entry.setId(id);
if (inFile != null)
entry.setFile(inFile.getAbsolutePath());
-
- seq.setDatasetSequence(dataset);
dataset.addPDBId(entry);
-
- getSeqs().addElement(seq);
+ getSeqs().addElement(dataset.deriveSequence()); // PDBChain objects maintain reference to dataset
}
}catch(OutOfMemoryError er)
{