From d6e07c50e21d1ac8ea29a5282683623df7bca71a Mon Sep 17 00:00:00 2001 From: hoangnguyen Date: Mon, 10 Jul 2017 00:56:21 +1000 Subject: [PATCH] to demo.. --- .../java/japsadev/bio/hts/newscarf/Alignment.java | 29 ++++++++-------------- .../japsadev/bio/hts/newscarf/BidirectedGraph.java | 19 ++++++++++++-- .../japsadev/bio/hts/newscarf/GraphExplore.java | 8 +++--- .../japsadev/bio/hts/newscarf/HybridAssembler.java | 8 +++--- src/dev/java/japsadev/tools/NewScarfCmd.java | 5 ++-- 5 files changed, 38 insertions(+), 31 deletions(-) diff --git a/src/dev/java/japsadev/bio/hts/newscarf/Alignment.java b/src/dev/java/japsadev/bio/hts/newscarf/Alignment.java index 52a470d..11f7283 100644 --- a/src/dev/java/japsadev/bio/hts/newscarf/Alignment.java +++ b/src/dev/java/japsadev/bio/hts/newscarf/Alignment.java @@ -9,8 +9,11 @@ public class Alignment implements Comparable { public final static int OVERHANG_THRES=1000; - - int score; + public final static int GOOD_QUAL=60; + + public static int MIN_QUAL=20; //TODO: reduce this by doing self-correction + + int alignLength, quality; public String readID; BidirectedNode node; @@ -37,23 +40,10 @@ //public int readLeft, readRight, readAlign, refLeft, refRight, refAlign; //left and right are in the direction of the reference sequence - public Alignment(String readID, int refStart, int refEnd, int readLength, - int readStart, int readEnd, boolean strand, boolean useful, BidirectedNode node, int score){ - this.readID = readID; - this.node = node; - this.refStart = refStart; - this.refEnd = refEnd; - - this.readLength = readLength; - this.readStart = readStart;//1-index - this.readEnd = readEnd;//1-index - this.strand = strand; - this.useful = useful; - this.score = score; - } public Alignment(SAMRecord sam, BidirectedNode node) { // readID = Integer.parseInt(sam.getReadName().split("_")[0]); readID = sam.getReadName(); + quality = sam.getMappingQuality(); prime=!sam.getNotPrimaryAlignmentFlag(); this.node = node; @@ -104,7 +94,7 @@ public Alignment(SAMRecord sam, BidirectedNode node) { int refLeft = refStart - 1; int refRight = ((Sequence) node.getAttribute("seq")).length() - refEnd; - score = refEnd + 1 - refStart; + alignLength = refEnd + 1 - refStart; if (sam.getReadNegativeStrandFlag()){ strand = false; //need to convert the alignment position on read the correct direction @@ -118,9 +108,10 @@ public Alignment(SAMRecord sam, BidirectedNode node) { ) goodMargin=true; - if( goodMargin && + if ( goodMargin //prime && //TODO: should be separated as another attribute for further consideration?? - score > BidirectedGraph.getKmerSize() //FIXME: + && alignLength > BidirectedGraph.getKmerSize() //FIXME: + && quality >= MIN_QUAL ) useful = true; diff --git a/src/dev/java/japsadev/bio/hts/newscarf/BidirectedGraph.java b/src/dev/java/japsadev/bio/hts/newscarf/BidirectedGraph.java index c9c4e5c..8520224 100644 --- a/src/dev/java/japsadev/bio/hts/newscarf/BidirectedGraph.java +++ b/src/dev/java/japsadev/bio/hts/newscarf/BidirectedGraph.java @@ -386,8 +386,23 @@ public static void setKmerSize(int kmer){ //traverse(tmp, dest, retval, distance+source.getSeq().length()+dest.getSeq().length()); traverse(tmp, dstNode, possiblePaths, distance, from.strand, to.strand, 0); //only get the best ones - if(possiblePaths.isEmpty()) - return null; + if(possiblePaths.isEmpty()){ + //if a path couldn't be found between 2 dead-ends but alignments quality are insane high + //FIXME: return a pseudo path having an nanopore edge + if(isUnique(srcNode) && isUnique(dstNode) && srcNode.getDegree() == 1 && dstNode.getDegree()==1 && + Math.min(from.quality, to.quality) >= Alignment.GOOD_QUAL) + { + BidirectedEdge pseudoEdge = new BidirectedEdge(srcNode, dstNode, from.strand, to.strand); + //TODO: save the corresponding content of long reads to this edge + pseudoEdge.setAttribute("pseudo", distance); + tmp.add(pseudoEdge); + retval.add(tmp); + System.out.println("pseudo path from " + srcNode.getId() + " to " + dstNode.getId()); +// HybridAssembler.promptEnterKey(); + return retval; + }else + return null; + } double bestScore=possiblePaths.get(0).getDeviation(); for(int i=0;i/{if(index($1,q)!=0) flag=0; else flag=1;}{if(flag==1) print $1;}' ../EcK12S-careful/assembly_graph.fastg > Eck12-careful.fasta //TODO: need to make this easier - hbAss.assembly(GraphExplore.spadesFolder+"bwa/EcK12S-careful.sam", 30); + hbAss.assembly(GraphExplore.spadesFolder+"bwa/EcK12S-careful.sam"); } } diff --git a/src/dev/java/japsadev/tools/NewScarfCmd.java b/src/dev/java/japsadev/tools/NewScarfCmd.java index b5015a1..11ac513 100644 --- a/src/dev/java/japsadev/tools/NewScarfCmd.java +++ b/src/dev/java/japsadev/tools/NewScarfCmd.java @@ -7,6 +7,7 @@ import japsa.util.CommandLine; import japsa.util.deploy.Deployable; +import japsadev.bio.hts.newscarf.Alignment; import japsadev.bio.hts.newscarf.BidirectedGraph; import japsadev.bio.hts.newscarf.HybridAssembler; @@ -32,7 +33,7 @@ public static void main(String[] args) throws IOException{ CommandLine cmdLine = new NewScarfCmd (); args = cmdLine.stdParseLine(args); - int qual = cmdLine.getIntVal("qual"); + Alignment.MIN_QUAL = cmdLine.getIntVal("qual"); String fastgFile = cmdLine.getStringVal("fastg"); String samFile = cmdLine.getStringVal("sam"); String pathFile = cmdLine.getStringVal("path"); @@ -79,7 +80,7 @@ public static void main(String[] args) throws IOException{ try { if(pathFile!=null) hbAss.reduceFromSPAdesPaths(pathFile); - hbAss.assembly(samFile, qual); + hbAss.assembly(samFile); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace();