-
- /*
- * convert any non-gap unknown residues to 'X'
- */
- convertNonGapCharacters(seq);
-
- /*
- * construct and add the Jalview sequence
- */
- String seqName = "" + modelTitle + "|" + chainId;
- int start = firstResNum;
- int end = firstResNum + length - 1;
-
- SequenceI sq = new Sequence(seqName, seq, start, end);
-
- addPdbid(sq, modelTitle, chainId);
-
- addSourceDBref(sq, modelTitle, start, end);
-
- seqs.add(sq);
-
- /*
- * add secondary structure predictions (if any)
- */
- addSecondaryStructureAnnotation(modelTitle, sq, secstr, secstrcode,
- chainId, firstResNum);
-
- }
-
- /**
- * Scans the list of (Jmol) Monomer objects, and adds the residue for each to
- * the sequence array, and any converted secondary structure prediction to the
- * secondary structure arrays
- *
- * @param monomers
- * @param seq
- * @param secstr
- * @param secstrcode
- */
- protected void extractJmolChainData(List<Monomer> monomers, char[] seq,
- char[] secstr, char[] secstrcode)
- {
- int pos = 0;
- for (Monomer monomer : monomers)
- {
- seq[pos] = monomer.getGroup1();
-
- /*
- * JAL-1828 replace a modified amino acid with its standard equivalent
- * (e.g. MSE with MET->M) to maximise sequence matching
- */
- replaceNonCanonicalResidue(monomer.getGroup3(), seq, pos);
-
- /*
- * if Jmol has derived a secondary structure prediction for this position,
- * convert it to Jalview equivalent and save it
- */
- setSecondaryStructure(monomer.getProteinStructureSubType(), pos,
- secstr, secstrcode);
- pos++;
- }
- }
-
- /**
- * Replace any non-gap miscellaneous characters with 'X'
- *
- * @param seq
- * @return
- */
- protected void convertNonGapCharacters(char[] seq)
- {
- boolean isNa = Comparison.areNucleotide(new char[][] { seq });
- int[] cinds = isNa ? ResidueProperties.nucleotideIndex
- : ResidueProperties.aaIndex;
- int nonGap = isNa ? ResidueProperties.maxNucleotideIndex
- : ResidueProperties.maxProteinIndex;
-
- for (int p = 0; p < seq.length; p++)
- {
- if (cinds[seq[p]] == nonGap)
- {
- seq[p] = 'X';
- }
- }
- }
-
- /**
- * Add a source db ref entry for the given sequence.
- *
- * @param sq
- * @param accessionId
- * @param start
- * @param end
- */
- protected void addSourceDBref(SequenceI sq, String accessionId,
- int start, int end)
- {
- DBRefEntry sourceDBRef = new DBRefEntry();
- sourceDBRef.setAccessionId(accessionId);
- sourceDBRef.setSource(DBRefSource.MMCIF);
- sourceDBRef.setStartRes(start);
- sourceDBRef.setEndRes(end);
- sq.setSourceDBRef(sourceDBRef);
- sq.addDBRef(sourceDBRef);
- }
-
- /**
- * Add a PDBEntry giving the source of PDB data to the sequence
- *
- * @param sq
- * @param id
- * @param chainId
- */
- protected void addPdbid(SequenceI sq, String id, String chainId)
- {
- PDBEntry entry = new PDBEntry();
- entry.setId(id);
- entry.setType(PDBEntry.Type.MMCIF);
- entry.setProperty(new Hashtable());
- if (chainId != null)
- {
- // entry.getProperty().put("CHAIN", chains.elementAt(i).id);
- entry.setChainCode(String.valueOf(chainId));
- }
- if (inFile != null)
- {
- entry.setFile(inFile.getAbsolutePath());
- }
- else