Skip to content

Commit

Permalink
add alignment trimming
Browse files Browse the repository at this point in the history
  • Loading branch information
daniel-ji committed Nov 21, 2023
1 parent 910a113 commit 9cbcde5
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 3 deletions.
50 changes: 47 additions & 3 deletions src/App.jsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
// TODO: 300 seq timing out
// TODO: speed up load time / run time
// TODO: break on error add error messages
// TODO: incorporate gzip wherever and optimize memory usage
// TODO: implement manual reinit
import React, { Component, Fragment } from 'react'
import { marked } from 'marked'
import JSZip from 'jzip';
Expand Down Expand Up @@ -361,6 +359,14 @@ export class App extends Component {
this.setState(prevState => ({ omitRef: !prevState.omitRef, inputChanged: true }))
}

setTrimSeqAlnStart = (event) => {
this.setState({ trimSeqAlnStart: event.target.value, inputChanged: true, validTrimSeqAlnStart: event.target.value >= 0 && Number.isInteger(parseFloat(event.target.value)) })
}

setTrimSeqAlnEnd = (event) => {
this.setState({ trimSeqAlnEnd: event.target.value, inputChanged: true, validTrimSeqAlnEnd: event.target.value >= 0 && Number.isInteger(parseFloat(event.target.value)) })
}

setThreshold = (event) => {
this.setState({ threshold: event.target.value, inputChanged: true, validThreshold: event.target.value >= 0 && event.target.value <= 1, validClusterThreshold: this.state.clusterThreshold >= 0 && this.state.clusterThreshold <= 1 && this.state.clusterThreshold <= event.target.value })
}
Expand Down Expand Up @@ -567,6 +573,10 @@ export class App extends Component {
inputAln = pyodide.FS.readFile(PATH_TO_PYODIDE_ROOT + "output/sequence.fas.sam.aln", { encoding: "utf8" });
}

if (this.state.trimSeqAlnStart || this.state.trimSeqAlnEnd) {
inputAln = this.runAlnTrim(inputAln);
}

if (this.state.performMolecularClustering || this.state.performPhyloInference || this.state.performLSD2) {
// mount alignment file
await this.state.CLI.mount([{
Expand Down Expand Up @@ -635,6 +645,34 @@ export class App extends Component {
}
}

runAlnTrim = (inputAln) => {
let trimAln = "";
let currID = undefined;
let currSeq = undefined;
for (const line of inputAln.split("\n")) {
const l = line.trim();
if (l[0] === '>') {
if (currID) {
trimAln += currID + "\n" + currSeq.substring(this.state.trimSeqAlnStart, currSeq.length - this.state.trimSeqAlnEnd) + "\n";
}
currID = l;
currSeq = "";
} else {
if (currSeq === undefined) {
// TODO: alert("Error: Invalid alignment file.");
this.log('\n', false);
this.log("Error when trimming alignment: Invalid alignment file.");
return;
}
currSeq += l;
}
}
if (currID) {
trimAln += currID + "\n" + currSeq.substring(this.state.trimSeqAlnStart, currSeq.length - this.state.trimSeqAlnEnd) + "\n";
}
return trimAln;
}

validTN93 = () => {
return this.state.validThreshold && this.state.validFraction && this.state.validOverlap && this.state.validCounts && this.state.validProbability && this.state.validClusterThreshold;
}
Expand Down Expand Up @@ -1111,6 +1149,12 @@ export class App extends Component {
</div>
</div>

<p className="mt-3 mb-2">Trim Alignment Columns From Start:</p>
<input type="number" className={`form-control ${!this.state.validTrimSeqAlnStart && 'is-invalid'}`} id="trim-seq-aln-start" placeholder="Default Columns: 0" min="0" value={this.state.trimSeqAlnStart} onInput={this.setTrimSeqAlnStart} />

<p className="mt-3 mb-2">Trim Alignment Columns From End:</p>
<input type="number" className={`form-control ${!this.state.validTrimSeqAlnEnd && 'is-invalid'}`} id="trim-seq-aln-end" placeholder="Default Columns: 0" min="0" value={this.state.trimSeqAlnEnd} onInput={this.setTrimSeqAlnEnd} />

<div className="form-check mt-5">
<input className="form-check-input" type="checkbox" id="molecular-clustering-check" data-testid="molecular-clustering-check" checked={this.state.performMolecularClustering} onChange={() => this.toggleMolecularClusteringArgs()} />
<label className="form-check-label" htmlFor="molecular-clustering-check">
Expand Down
4 changes: 4 additions & 0 deletions src/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ export const DEFAULT_INPUT_STATE = {
refFile: undefined,
validRefFile: true,
omitRef: false,
trimSeqAlnStart: 0,
validTrimSeqAlnStart: true,
trimSeqAlnEnd: 0,
validTrimSeqAlnEnd: true,

threshold: 1.0,
validThreshold: true,
Expand Down

0 comments on commit 9cbcde5

Please sign in to comment.