@Override public String process(File page, Map<String, String> query) { loadContigs(); if (query.get("contigName").matches("^[ACGT]+$")) { contigs.put("manual", query.get("contigName")); query.put("contigName", "manual"); } else if (query.get("contigName").matches("^Pf3D7.+$")) { String[] pieces = query.get("contigName").split("[:-]"); int start = Integer.valueOf(pieces[1].replaceAll(",", "")); int end = Integer.valueOf(pieces[2].replaceAll(",", "")); ReferenceSequence rseq = REF.getSubsequenceAt(pieces[0], start, end); contigs.put("manual", new String(rseq.getBases())); query.put("contigName", "manual"); } if (query.containsKey("contigName") && contigs.containsKey(query.get("contigName")) && graphs.containsKey(query.get("graphName"))) { boolean showLinks = query.get("showLinks").equals("links_on"); String contig = contigs.get(query.get("contigName")); String originalContig = contigs.get(query.get("contigName")); String refFormattedString = ""; String kmerOrigin = ""; if (metrics.containsKey(query.get("contigName"))) { String[] loc = metrics.get(query.get("contigName")).get("canonicalLocus").split("[:-]"); if (!loc[0].equals("*")) { boolean isRc = metrics.get(query.get("contigName")).get("isRcCanonical").equals("1"); if (isRc) { contig = SequenceUtils.reverseComplement(contig); originalContig = SequenceUtils.reverseComplement(originalContig); } int locStart = Integer.valueOf(loc[1]); int locEnd = Integer.valueOf(loc[2]); Cigar cigar = cigarStringToCigar(metrics.get(query.get("contigName")).get("cigarCanonical")); if (cigar.getCigarElement(0).getOperator().equals(CigarOperator.S)) { locStart -= cigar.getCigarElement(0).getLength(); } if (cigar .getCigarElement(cigar.getCigarElements().size() - 1) .getOperator() .equals(CigarOperator.S)) { locEnd += cigar.getCigarElement(cigar.getCigarElements().size() - 1).getLength(); } String ref = new String(REF.getSubsequenceAt(loc[0], locStart, locEnd).getBases()); StringBuilder refFormatted = new StringBuilder(); int pos = 0; for (CigarElement ce : cigar.getCigarElements()) { CigarOperator co = ce.getOperator(); switch (co) { case S: refFormatted.append(ref.substring(pos, pos + ce.getLength()).toLowerCase()); break; case M: refFormatted.append(ref.substring(pos, pos + ce.getLength())); break; case I: refFormatted.append(StringUtils.repeat("-", ce.getLength())); break; } if (ce.getOperator().consumesReferenceBases()) { pos += ce.getLength(); } } refFormattedString = refFormatted.toString(); kmerOrigin = metrics.get(query.get("contigName")).get("kmerOrigin"); } } CortexGraph cg = graphs.get(query.get("graphName")); String sampleName = cg.getColor(0).getSampleName(); Set<CortexLinksMap> links = new HashSet<CortexLinksMap>(); if (LINKS != null && !LINKS.isEmpty()) { for (CortexLinksMap link : LINKS) { if (sampleName.equals(link.getCortexLinks().getColor(0).getSampleName())) { links.add(link); } } } Set<String> contigKmers = new HashSet<String>(); for (int i = 0; i <= contig.length() - cg.getKmerSize(); i++) { String curKmer = contig.substring(i, i + cg.getKmerSize()); contigKmers.add(curKmer); } StringBuilder firstFlank = new StringBuilder(); String firstKmer = contig.substring(0, cg.getKmerSize()); Set<String> pks = CortexUtils.getPrevKmers(cg, firstKmer, 0); Set<String> usedPrevKmers = new HashSet<String>(); usedPrevKmers.add(firstKmer); while (pks.size() == 1 && usedPrevKmers.size() <= 100) { String kmer = pks.iterator().next(); firstFlank.insert(0, kmer.charAt(0)); if (usedPrevKmers.contains(kmer)) { break; } usedPrevKmers.add(kmer); pks = CortexUtils.getPrevKmers(cg, kmer, 0); } StringBuilder lastFlank = new StringBuilder(); String lastKmer = contig.substring(contig.length() - cg.getKmerSize(), contig.length()); Set<String> nks = CortexUtils.getNextKmers(cg, lastKmer, 0); Set<String> usedNextKmers = new HashSet<String>(); usedNextKmers.add(lastKmer); while (nks.size() == 1 && usedNextKmers.size() <= 100) { String kmer = nks.iterator().next(); lastFlank.append(kmer.charAt(kmer.length() - 1)); if (usedNextKmers.contains(kmer)) { break; } usedNextKmers.add(kmer); nks = CortexUtils.getNextKmers(cg, kmer, 0); } contig = firstFlank.toString() + contig + lastFlank.toString(); DirectedGraph<CtxVertex, MultiEdge> g = new DefaultDirectedGraph<CtxVertex, MultiEdge>(MultiEdge.class); for (int i = 0; i <= contig.length() - cg.getKmerSize(); i++) { String curKmer = contig.substring(i, i + cg.getKmerSize()); CortexKmer ck = new CortexKmer(curKmer); CtxVertex curVer = new CtxVertex( curKmer, i, contigKmers.contains(curKmer) ? VertexType.CONTIG : VertexType.CLIPPED, cg.findRecord(ck)); g.addVertex(curVer); String expectedPrevKmer = (i > 0) ? contig.substring(i - 1, i - 1 + cg.getKmerSize()) : ""; String expectedNextKmer = (i < contig.length() - cg.getKmerSize()) ? contig.substring(i + 1, i + 1 + cg.getKmerSize()) : ""; Set<String> prevKmers = CortexUtils.getPrevKmers(cg, curKmer, 0); for (String prevKmer : prevKmers) { if (!expectedPrevKmer.equals(prevKmer)) { CortexKmer pk = new CortexKmer(prevKmer); CtxVertex prevVer = new CtxVertex(prevKmer, i - 1, VertexType.IN, cg.findRecord(pk)); MultiEdge me = g.containsEdge(prevVer, curVer) ? g.getEdge(prevVer, curVer) : new MultiEdge(); me.addGraphName(cg.getCortexFile().getName()); g.addVertex(prevVer); g.addEdge(prevVer, curVer, me); } } Set<String> nextKmers = CortexUtils.getNextKmers(cg, curKmer, 0); for (String nextKmer : nextKmers) { if (!expectedNextKmer.equals(nextKmer)) { CortexKmer nk = new CortexKmer(nextKmer); CtxVertex nextVer = new CtxVertex(nextKmer, i + 1, VertexType.OUT, cg.findRecord(nk)); MultiEdge me = g.containsEdge(curVer, nextVer) ? g.getEdge(curVer, nextVer) : new MultiEdge(); me.addGraphName(cg.getCortexFile().getName()); g.addVertex(nextVer); g.addEdge(curVer, nextVer, me); } } } Set<Map<String, Object>> verticesWithLinks = new HashSet<Map<String, Object>>(); DataFrame<String, String, Integer> hv = new DataFrame<String, String, Integer>(0); for (int q = 0; q <= contig.length() - cg.getKmerSize(); q++) { // String sk = cv.getBinaryKmer(); String sk = contig.substring(q, q + cg.getKmerSize()); CortexKmer ck = new CortexKmer(sk); for (CortexLinksMap link : links) { if (link.containsKey(ck)) { CortexLinksRecord clr = link.get(ck); Map<String, Integer> lc = (!showLinks) ? new HashMap<String, Integer>() : CortexUtils.getKmersAndCoverageInLink(cg, sk, clr); Map<String, Object> entry = new HashMap<String, Object>(); entry.put("kmer", sk); entry.put("lc", lc); verticesWithLinks.add(entry); if (showLinks) { for (CortexJunctionsRecord cjr : clr.getJunctions()) { List<String> lk = CortexUtils.getKmersInLink(cg, sk, cjr); for (int i = 0; i < lk.size(); i++) { String kili = lk.get(i); for (int j = 0; j < lk.size(); j++) { String kilj = lk.get(j); if (i != j) { hv.set(kili, kilj, hv.get(kili, kilj) + cjr.getCoverage(0)); } } } } } } } } /* int hvMax = 0; Map<String, Integer> hvlin = new HashMap<String, Integer>(); if (showLinks) { for (String kili : hv.getRowNames()) { for (String kilj : hv.getColNames()) { int cov = hv.get(kili, kilj); String id = kili + "_" + kilj; hvlin.put(id, cov); if (cov > hvMax) { hvMax = cov; } } } } */ JSONObject jo = new JSONObject(); jo.put("contig", contig); jo.put("originalContig", originalContig); jo.put("ref", refFormattedString); jo.put("kmerOrigin", kmerOrigin); jo.put("kmerSize", cg.getKmerSize()); jo.put("clipStart", firstFlank.length()); jo.put("clipEnd", contig.length() - lastFlank.length()); List<Map<String, Object>> va = new ArrayList<Map<String, Object>>(); for (CtxVertex v : g.vertexSet()) { Map<String, Object> vm = new HashMap<String, Object>(); vm.put("base", v.getBase()); vm.put("kmer", v.getKmer()); vm.put("pos", v.getPos()); vm.put("type", v.getVertexType().name()); vm.put("missing", v.isMissingFromGraph()); vm.put("cov", v.getCoverage()); va.add(vm); } jo.put("vertices", va); jo.put("verticesWithLinks", verticesWithLinks); // jo.put("hvlin", hvlin); // jo.put("hvmax", hvMax); return jo.toString(); } return null; }
static { try { String platform; if (isWindows()) { platform = "windows"; } else if (isUnix()) { platform = "linux"; } else if (isMac()) { platform = "mac"; } else { platform = null; } String propertiesFile = "undefined"; if (platform != null) { propertiesFile = "org/python/pydev/core/TestDependent." + platform + ".properties"; InputStream stream = TestDependent.class.getClassLoader().getResourceAsStream(propertiesFile); if (stream != null) { // Initialize the static contents of the class. String streamContents = REF.getStreamContents(stream, null, null); Properties props = PropertiesHelper.createPropertiesFromString(streamContents); Map<String, String> map = PropertiesHelper.createMapFromProperties(props); Set<Entry<String, String>> entrySet = map.entrySet(); for (Entry<String, String> entry : entrySet) { String key = entry.getKey(); try { Field field = TestDependent.class.getField(key); if (field != null) { String value = entry.getValue(); if (!value.equals("null")) { field.set(null, value); } } } catch (Exception e) { e.printStackTrace(); } } } else { System.err.println( "Could not get stream to: " + propertiesFile + " to initialize TestDependent.java values."); } } // Checking and setting variables that do not exist (if possible). if (PYTHON_INSTALL == null) { System.err.println( "PYTHON_INSTALL variable MUST be set in " + propertiesFile + " to run tests."); } else if (!new File(PYTHON_INSTALL).exists()) { System.err.println( "PYTHON_INSTALL variable points to path that does NOT exist: " + PYTHON_INSTALL); } if (TEST_PYDEV_BASE_LOC == null) { System.err.println( "TEST_PYDEV_BASE_LOC variable MUST be set in " + propertiesFile + " to run tests."); } else if (!new File(TEST_PYDEV_BASE_LOC).exists()) { System.err.println( "TEST_PYDEV_BASE_LOC variable points to path that does NOT exist: " + TEST_PYDEV_BASE_LOC); } if (PYTHON_EXE == null) { if (isWindows()) { PYTHON_EXE = PYTHON_INSTALL + "python.exe"; } else { PYTHON_EXE = PYTHON_INSTALL + "python"; } } if (!new File(PYTHON_EXE).exists()) { System.err.println("PYTHON_EXE variable points to path that does NOT exist: " + PYTHON_EXE); } if (PYTHON_LIB == null) { PYTHON_LIB = PYTHON_INSTALL + "Lib/"; } if (PYTHON_DLLS == null) { PYTHON_DLLS = PYTHON_INSTALL + "DLLs/"; } if (PYTHON_SITE_PACKAGES == null) { PYTHON_SITE_PACKAGES = PYTHON_LIB + "site-packages/"; } if (PYTHON_TEST_PACKAGES == null) { if (new File(TestDependent.PYTHON_LIB + "test/").exists()) { PYTHON_TEST_PACKAGES = TestDependent.PYTHON_LIB + "test/"; } } if (TEST_PYSRC_LOC == null) { TEST_PYSRC_LOC = TEST_PYDEV_BASE_LOC + "org.python.pydev/tests/pysrc/"; } if (TEST_PYSRC_NAVIGATOR_LOC == null) { TEST_PYSRC_NAVIGATOR_LOC = TEST_PYDEV_BASE_LOC + "org.python.pydev/tests_navigator/pysrc/"; } if (TEST_PYSRC_LOC2 == null) { TEST_PYSRC_LOC2 = TEST_PYDEV_BASE_LOC + "org.python.pydev/tests/pysrc2/"; } if (TEST_PYDEV_PLUGIN_LOC == null) { TEST_PYDEV_PLUGIN_LOC = TEST_PYDEV_BASE_LOC + "org.python.pydev/"; } if (TEST_PYDEV_DEBUG_PLUGIN_LOC == null) { TEST_PYDEV_DEBUG_PLUGIN_LOC = TEST_PYDEV_BASE_LOC + "org.python.pydev.debug/"; } if (TEST_PYDEV_JYTHON_PLUGIN_LOC == null) { TEST_PYDEV_JYTHON_PLUGIN_LOC = TEST_PYDEV_BASE_LOC + "org.python.pydev.jython/"; } if (TEST_PYDEV_PARSER_PLUGIN_LOC == null) { TEST_PYDEV_PARSER_PLUGIN_LOC = TEST_PYDEV_BASE_LOC + "org.python.pydev.parser/"; } if (TEST_PYDEV_REFACTORING_PLUGIN_LOC == null) { TEST_PYDEV_REFACTORING_PLUGIN_LOC = TEST_PYDEV_BASE_LOC + "org.python.pydev.refactoring/"; } if (TEST_COM_REFACTORING_PYSRC_LOC == null) { TEST_COM_REFACTORING_PYSRC_LOC = TEST_PYDEV_BASE_LOC + "com.python.pydev.refactoring/tests/pysrcrefactoring/"; } } catch (Exception e) { System.err.println( "--- Error getting contents to properly initialize TestDependent.java values ---"); e.printStackTrace(); } }