+ SegmentHelperPojo shp = new SegmentHelperPojo(seq, mapping, resNumMap,
+ omitNonObserved, nonObservedShiftIndex);
+ processSegments(segments, shp);
+ try
+ {
+ populateAtomPositions(entityId, mapping);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ if (seqCoordSys == CoordinateSys.UNIPROT)
+ {
+ padWithGaps(resNumMap, omitNonObserved);
+ }
+ int seqStart = UNASSIGNED;
+ int seqEnd = UNASSIGNED;
+ int pdbStart = UNASSIGNED;
+ int pdbEnd = UNASSIGNED;
+
+ if (mapping.isEmpty())
+ {
+ throw new SiftsException("SIFTS mapping failed");
+ }
+
+ Integer[] keys = mapping.keySet().toArray(new Integer[0]);
+ Arrays.sort(keys);
+ seqStart = keys[0];
+ seqEnd = keys[keys.length - 1];
+
+ String matchedSeq = originalSeq;
+ if (seqStart != UNASSIGNED)
+ {
+ pdbStart = mapping.get(seqStart)[PDB_RES_POS];
+ pdbEnd = mapping.get(seqEnd)[PDB_RES_POS];
+ int orignalSeqStart = seq.getStart();
+ if (orignalSeqStart >= 1)
+ {
+ int subSeqStart = (seqStart >= orignalSeqStart) ? seqStart
+ - orignalSeqStart : 0;
+ int subSeqEnd = seqEnd - (orignalSeqStart - 1);
+ subSeqEnd = originalSeq.length() < subSeqEnd ? originalSeq.length()
+ : subSeqEnd;
+ matchedSeq = originalSeq.substring(subSeqStart, subSeqEnd);
+ }
+ else
+ {
+ matchedSeq = originalSeq.substring(1, originalSeq.length());
+ }
+ }
+
+ StringBuilder targetStrucSeqs = new StringBuilder();
+ for (String res : resNumMap.values())
+ {
+ targetStrucSeqs.append(res);
+ }
+
+ if (os != null)
+ {
+ MappingOutputPojo mop = new MappingOutputPojo();
+ mop.setSeqStart(seqStart);
+ mop.setSeqEnd(seqEnd);
+ mop.setSeqName(seq.getName());
+ mop.setSeqResidue(matchedSeq);
+
+ mop.setStrStart(pdbStart);
+ mop.setStrEnd(pdbEnd);
+ mop.setStrName(structId);
+ mop.setStrResidue(targetStrucSeqs.toString());
+
+ mop.setType("pep");
+ os.print(getMappingOutput(mop).toString());
+ os.println();
+ }
+ return mapping;
+ }
+
+ void processSegments(List<Segment> segments, SegmentHelperPojo shp)
+ {
+ SequenceI seq = shp.getSeq();
+ HashMap<Integer, int[]> mapping = shp.getMapping();
+ TreeMap<Integer, String> resNumMap = shp.getResNumMap();
+ List<Integer> omitNonObserved = shp.getOmitNonObserved();
+ int nonObservedShiftIndex = shp.getNonObservedShiftIndex();