public void wirteChainsIntoAGffFile( ArrayList<Double> PDScores, String blockId, String pathToChainsDir, double scoreThreshold) throws IOException { String blockSpecfications[] = blockId.split("_"); String Chr = blockSpecfications[0]; String gffoutputFileName = pathToChainsDir + "/" + blockId + ".gff"; PrintWriter pw = new PrintWriter(new FileWriter(gffoutputFileName)); final GFFWriter gffw = new GFFWriter(pw); int numberOfPDScores = PDScores.size(); int oneStart = 0; int oneEnd = 0; int dummyPos = 0; for (int i = 0; i < numberOfPDScores - 1; i++) { double thisScore = PDScores.get(i); double nextScore = PDScores.get(i + 1); if (PDScores.get(0) >= scoreThreshold) { thisScore = thisScore - 0.001; } if (thisScore < scoreThreshold && nextScore >= scoreThreshold) { oneStart = i + 1; dummyPos = i + 1; double sum = 0; while (PDScores.get(dummyPos) >= scoreThreshold && dummyPos < numberOfPDScores - 1) { sum = sum + PDScores.get(dummyPos + 1); dummyPos++; } /*while*/ // System.out.println(" start = " + oneStart + " end = " + dummyPos); oneEnd = dummyPos; int oneChainLength = oneEnd - oneStart; SimpleGFFRecord oneRecord = new SimpleGFFRecord(); oneRecord.setStart(oneStart + 1); oneRecord.setEnd(oneEnd); oneRecord.setSeqName(Chr); oneRecord.setScore(sum / oneChainLength); // oneRecord.setScore(sum/oneChainLength+1); oneRecord.setSource("composure"); oneRecord.setFeature("chainFromPD"); int minChainLength = getMinPeakLengths(); if (oneChainLength > 5) { // System.out.println(Chr + "\t" + oneStart + "\t" + oneEnd + "\t" + oneChainLength); gffw.recordLine(oneRecord); } i = oneEnd - 1; } /*if*/ } /*for*/ pw.flush(); } /*wirteChainsIntoAGffFile*/
/** * @param args * @throws Exception */ public void main(String[] args) throws Exception { List<Map<String, Location>> locs = new ArrayList<Map<String, Location>>(); for (String fileName : args) { locs.add(GFFUtils.gffToLocationMap(new File(fileName))); } Set<String> seqIds; { Iterator<Map<String, Location>> i = locs.iterator(); seqIds = new HashSet<String>(i.next().keySet()); while (i.hasNext()) { seqIds.retainAll(i.next().keySet()); } } if (validate && (seqDB != null)) { for (Map<String, Location> ls : locs) { WriteCoveredSequences.validateGFFSequenceIdentifiersAgainstSequences(ls, seqDB); } } PrintWriter pw = null; GFFWriter gffw = null; GFFEntrySet gffEntries = null; if (outputFormat == Format.GFF) { pw = new PrintWriter(new OutputStreamWriter(System.out)); gffw = new GFFWriter(pw); } else { gffEntries = new GFFEntrySet(); } for (String id : seqIds) { Iterator<Map<String, Location>> i = locs.iterator(); Location l = i.next().get(id); while (i.hasNext()) { l = LocationTools.intersection(l, i.next().get(id)); } if (negate) { l = LocationTools.subtract(new RangeLocation(1, seqDB.getSequence(id).length()), l); } SimpleGFFRecord r = new SimpleGFFRecord(); r.setSeqName(id); r.setFeature("block"); r.setSource("nmintersectseq"); r.setStrand(StrandedFeature.POSITIVE); for (Iterator<?> bi = l.blockIterator(); bi.hasNext(); ) { Location bloc = (Location) bi.next(); r.setStart(bloc.getMin()); r.setEnd(bloc.getMax()); r.setComment(""); r.setGroupAttributes(new HashMap<Object, Object>()); if (gffw != null) { gffw.recordLine(r); } else { Sequence seq = new SimpleSequence( seqDB.getSequence(id).subList(bloc.getMin(), bloc.getMax()), null, String.format("%s_|%d-%d|", id, bloc.getMin(), bloc.getMax()), Annotation.EMPTY_ANNOTATION); RichSequence.IOTools.writeFasta(System.out, seq, null); } } } if (pw != null) pw.flush(); if (seqDB != null) { System.err.println("Writing output sequences..."); GFFTools.annotateSequences(seqDB, gffEntries); } }