WsParamSetI preset, List<Argument> paramset)
{
super(service, alignFrame, preset, paramset);
- submitGaps=true;
- alignedSeqs=true;
- nucleotidesAllowed=false;
- proteinAllowed=true;
+ submitGaps = true;
+ alignedSeqs = true;
+ nucleotidesAllowed = false;
+ proteinAllowed = true;
+ gapMap=new boolean[0];
}
public String getServiceActionText()
x = val;
}
}
+ // if we're at a gapped column then skip to next ungapped position
+ if (gapMap != null && gapMap.length > 0)
+ {
+ while (!gapMap[i])
+ {
+ elm[i++]=new Annotation("", "" , ' ', Float.NaN);
+ }
+ }
elm[i] = new Annotation("", "" + val, ' ', val);
}
protected boolean bySequence = false;
Map<String, SequenceI> seqNames;
-
+ boolean[] gapMap;
+ int realw;
public List<FastaSequence> getInputSequences(AlignmentI alignment)
{
-
if (alignment == null || alignment.getWidth() <= 0
|| alignment.getSequences() == null
// || (alignedSeqs && !alignment.isAligned() && !submitGaps)
{
seqNames = new HashMap<String, SequenceI>();
}
+ gapMap=new boolean[0];
for (SequenceI sq : ((List<SequenceI>) alignment.getSequences()))
{
-
if (sq.getEnd() - sq.getStart() > minlen - 1)
{
String newname = SeqsetUtils.unique_name(seqs.size() + 1);
seqNames.put(newname, sq);
}
FastaSequence seq;
+ if (submitGaps)
+ {
+ seqs.add(seq = new compbio.data.sequence.FastaSequence(newname,sq.getSequenceAsString()));
+ if (gapMap==null || gapMap.length<seq.getSequence().length())
+ {
+ boolean[] tg=gapMap;
+ gapMap=new boolean[seq.getLength()];
+ System.arraycopy(tg, 0, gapMap, 0, tg.length);
+ for (int p=tg.length;p<gapMap.length;p++)
+ {
+ gapMap[p]=false; // init as a gap
+ }
+ }
+ for (int apos:sq.gapMap()) {
+ gapMap[apos]=true; // aligned.
+ }
+ } else {
seqs.add(seq = new compbio.data.sequence.FastaSequence(newname,
- (submitGaps) ? sq.getSequenceAsString() : AlignSeq
+ AlignSeq
.extractGaps(jalview.util.Comparison.GapChars,
sq.getSequenceAsString())));
+ }
if (seq.getSequence().length() > ln)
{
ln = seq.getSequence().length();
}
if (alignedSeqs && submitGaps)
{
+ realw = 0;
+ for (int i=0;i<gapMap.length;i++)
+ {
+ if (gapMap[i])
+ {
+ realw++;
+ }
+ }
// try real hard to return something submittable
// TODO: some of AAcons measures need a minimum of two or three amino
// acids at each position, and aacons doesn't gracefully degrade.
{
FastaSequence sq = seqs.get(p);
int l = sq.getSequence().length();
- if (l < ln)
+ // strip gapped columns
+ char[] padded = new char[realw],orig=sq.getSequence().toCharArray();
+ for (int i=0,pp=0;i<realw; pp++)
{
- char[] padded = new char[ln];
- System.arraycopy(sq.getSequence().toCharArray(), 0, padded, 0, sq
- .getSequence().length());
- while (l < ln)
+ if (gapMap[pp])
{
- padded[l++] = '-';
+ if (orig.length>pp)
+ {
+ padded[i++]=orig[pp];
+ } else {
+ padded[i++]='-';
+ }
}
- seqs.set(p, new compbio.data.sequence.FastaSequence(sq.getId(),
- new String(padded)));
}
+ seqs.set(p, new compbio.data.sequence.FastaSequence(sq.getId(),
+ new String(padded)));
}
-
}
return seqs;
}