List of usage examples for org.apache.solr.client.solrj SolrQuery addSort
public SolrQuery addSort(String field, ORDER order)
From source file:edu.vt.vbi.patric.common.OrganismTreeBuilder.java
License:Apache License
/** * Builds an array of nodes for Genome List view * /*w w w .j a v a2s .co m*/ * @param taxonId root taxon ID * @return json array of feed for Genome List */ public static JSONArray buildGenomeList(DataApiHandler dataApi, int taxonId) throws IOException { JSONArray treeJSON = new JSONArray(); SolrQuery query = new SolrQuery("taxon_lineage_ids:" + taxonId); query.addField("taxon_id,genome_id,genome_name").setRows(1000000); query.addSort("genome_name", SolrQuery.ORDER.asc); LOGGER.trace("buildGenomeList:{}", query.toString()); String apiResponse = dataApi.solrQuery(SolrCore.GENOME, query); Map resp = jsonReader.readValue(apiResponse); Map respBody = (Map) resp.get("response"); List<Genome> genomeList = dataApi.bindDocuments((List<Map>) respBody.get("docs"), Genome.class); Set<TaxonomyGenomeNode> children = new LinkedHashSet<>(); for (Genome genome : genomeList) { TaxonomyGenomeNode node = new TaxonomyGenomeNode(genome); node.setParentId("0"); children.add(node); } TaxonomyGenomeNode rootTaxonomyGenomeNode = new TaxonomyGenomeNode(); Taxonomy rootTaxonomy = dataApi.getTaxonomy(taxonId); rootTaxonomyGenomeNode.setName(rootTaxonomy.getTaxonName() + " (" + rootTaxonomy.getGenomeCount() + ")"); rootTaxonomyGenomeNode.setTaxonId(rootTaxonomy.getId()); rootTaxonomyGenomeNode.setId("0"); rootTaxonomyGenomeNode.setChildren(children); treeJSON.add(rootTaxonomyGenomeNode.getJSONObject()); return treeJSON; }
From source file:edu.vt.vbi.patric.common.OrganismTreeBuilder.java
License:Apache License
/** * Build an array of nodes for Taxonomy Tree view * /*from w ww. j a v a2 s. co m*/ * @param taxonId root taxon ID * @return json array of feed for Taxonomy Tree */ public static JSONArray buildGenomeTree(DataApiHandler dataApi, int taxonId) throws IOException { JSONArray treeJSON = new JSONArray(); SolrQuery query = new SolrQuery("lineage_ids:" + taxonId + " AND genomes:[1 TO *]"); query.addField("taxon_id,taxon_rank,taxon_name,genomes,lineage_ids").setRows(1000000); query.addSort("lineage", SolrQuery.ORDER.asc); LOGGER.trace("buildGenomeTree:{}", query.toString()); String apiResponse = dataApi.solrQuery(SolrCore.TAXONOMY, query); Map resp = jsonReader.readValue(apiResponse); Map respBody = (Map) resp.get("response"); List<Taxonomy> taxonomyList = dataApi.bindDocuments((List<Map>) respBody.get("docs"), Taxonomy.class); Map<Integer, Taxonomy> taxonomyMap = new HashMap<>(); // 1 populate map for detail info for (Taxonomy tx : taxonomyList) { taxonomyMap.put(tx.getId(), tx); } // 2 add to rawData array List<List<TaxonomyTreeNode>> rawData = new ArrayList<>(); for (Taxonomy tx : taxonomyList) { List<Integer> lineage = tx.getLineageIds(); List<Integer> descendantIds = lineage; if (lineage.indexOf(taxonId) > 0) { descendantIds = lineage.subList(lineage.indexOf(taxonId), lineage.size()); } List<TaxonomyTreeNode> descendant = new LinkedList<>(); for (Integer txId : descendantIds) { if (taxonomyMap.containsKey(txId)) { descendant.add(new TaxonomyTreeNode(taxonomyMap.get(txId))); } } rawData.add(descendant); } // 3 build a tree TaxonomyTreeNode wrapper = new TaxonomyTreeNode(); TaxonomyTreeNode current = wrapper; for (List<TaxonomyTreeNode> tree : rawData) { TaxonomyTreeNode root = current; int parentId = taxonId; for (TaxonomyTreeNode node : tree) { node.setParentId(parentId); current = current.child(node); parentId = node.getTaxonId(); } current = root; } TaxonomyTreeNode root = wrapper.getFirstChild(); treeJSON.add(root.getJSONObject()); return treeJSON; }
From source file:edu.vt.vbi.patric.portlets.CompPathwayMap.java
License:Apache License
private void processEcTable(ResourceRequest request, ResourceResponse response) throws IOException { String genomeId = request.getParameter("genomeId"); String taxonId = request.getParameter("taxonId"); String cType = request.getParameter("cType"); String map = request.getParameter("map"); String algorithm = request.getParameter("algorithm"); String pk = request.getParameter("pk"); Map<String, String> key = null; if (pk != null && !pk.isEmpty()) { key = jsonReader.readValue(SessionHandler.getInstance().get(SessionHandler.PREFIX + pk)); }/*from ww w. j a v a 2s .c o m*/ int count_total = 0; JSONArray results = new JSONArray(); try { Set<String> ecNumbers = new HashSet<>(); DataApiHandler dataApi = new DataApiHandler(request); SolrQuery query = new SolrQuery("pathway_id:" + map + " AND annotation:" + algorithm); if (taxonId != null && !taxonId.equals("")) { query.addFilterQuery( SolrCore.GENOME.getSolrCoreJoin("genome_id", "genome_id", "taxon_lineage_ids:" + taxonId)); } if (genomeId != null && !genomeId.equals("")) { query.addFilterQuery(SolrCore.GENOME.getSolrCoreJoin("genome_id", "genome_id", "genome_id:(" + genomeId.replaceAll(",", " OR ") + ")")); } if (key != null && key.containsKey("genomeId") && !key.get("genomeId").equals("")) { query.addFilterQuery("genome_id:(" + key.get("genomeId").replaceAll(",", " OR ") + ")"); } query.setRows(0).setFacet(true); query.add("json.facet", "{stat:{field:{field:ec_number,limit:-1,facet:{genome_count:\"unique(genome_id)\",gene_count:\"unique(feature_id)\"}}}}"); String apiResponse = dataApi.solrQuery(SolrCore.PATHWAY, query); Map resp = jsonReader.readValue(apiResponse); Map respBody = (Map) resp.get("response"); int numFound = (Integer) respBody.get("numFound"); if (numFound > 0) { List<Map> buckets = (List<Map>) ((Map) ((Map) resp.get("facets")).get("stat")).get("buckets"); Map<String, Map> mapStat = new HashMap<>(); for (Map value : buckets) { if (Integer.parseInt(value.get("gene_count").toString()) > 0) { mapStat.put(value.get("val").toString(), value); ecNumbers.add(value.get("val").toString()); } } if (!ecNumbers.isEmpty()) { query = new SolrQuery( "pathway_id:" + map + " AND ec_number:(" + StringUtils.join(ecNumbers, " OR ") + ")"); query.setRows(ecNumbers.size()).setFields("ec_number,ec_description,occurrence"); query.addSort("ec_number", SolrQuery.ORDER.asc); apiResponse = dataApi.solrQuery(SolrCore.PATHWAY_REF, query); resp = jsonReader.readValue(apiResponse); Map respBdoby = (Map) resp.get("response"); count_total = (Integer) respBdoby.get("numFound"); List<Map> sdl = (List<Map>) respBdoby.get("docs"); for (Map doc : sdl) { String ecNumber = doc.get("ec_number").toString(); Map stat = mapStat.get(ecNumber); JSONObject item = new JSONObject(); item.put("algorithm", algorithm); item.put("ec_name", doc.get("ec_description")); item.put("ec_number", ecNumber); item.put("occurrence", doc.get("occurrence")); item.put("gene_count", stat.get("gene_count")); item.put("genome_count", stat.get("genome_count")); results.add(item); } } } } catch (IOException e) { LOGGER.error(e.getMessage(), e); } JSONObject jsonResult = new JSONObject(); try { jsonResult.put("total", count_total); jsonResult.put("results", results); } catch (Exception ex) { LOGGER.error(ex.getMessage(), ex); } PrintWriter writer = response.getWriter(); jsonResult.writeJSONString(writer); writer.close(); }
From source file:edu.vt.vbi.patric.portlets.FeatureCommentsPortlet.java
License:Apache License
protected void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { response.setContentType("text/html"); String cType = request.getParameter("context_type"); String cId = request.getParameter("context_id"); if (cType != null && cId != null && cType.equals("feature")) { List<Map> listAnnotation = new LinkedList<>(); DataApiHandler dataApi = new DataApiHandler(request); GenomeFeature feature = dataApi.getPATRICFeature(cId); if (feature != null) { if (feature.hasRefseqLocusTag()) { SolrQuery query = new SolrQuery("refseq_locus_tag:" + feature.getRefseqLocusTag()); query.addFilterQuery("!property:Interaction"); query.addSort("property", SolrQuery.ORDER.asc).addSort("evidence_code", SolrQuery.ORDER.asc); query.setRows(dataApi.MAX_ROWS); LOGGER.debug("[{}]: {}", SolrCore.STRUCTURED_ASSERTION.getSolrCoreName(), query); String apiResponse = dataApi.solrQuery(SolrCore.STRUCTURED_ASSERTION, query); Map resp = jsonReader.readValue(apiResponse); Map respBody = (Map) resp.get("response"); listAnnotation.addAll((List<Map>) respBody.get("docs")); query.setFilterQueries("property:Interaction"); query.setSort("value", SolrQuery.ORDER.asc).addSort("evidence_code", SolrQuery.ORDER.asc); LOGGER.debug("[{}]: {}", SolrCore.STRUCTURED_ASSERTION.getSolrCoreName(), query); apiResponse = dataApi.solrQuery(SolrCore.STRUCTURED_ASSERTION, query); resp = jsonReader.readValue(apiResponse); respBody = (Map) resp.get("response"); listAnnotation.addAll((List<Map>) respBody.get("docs")); }/* w w w . j a v a 2s . c om*/ if (!listAnnotation.isEmpty()) { request.setAttribute("listAnnotation", listAnnotation); PortletRequestDispatcher prd = getPortletContext() .getRequestDispatcher("/WEB-INF/jsp/overview/feature_comments.jsp"); prd.include(request, response); } else { PrintWriter writer = response.getWriter(); writer.write("<!-- no feature comment found -->"); writer.close(); } } } else { PrintWriter writer = response.getWriter(); writer.write("<p>Invalid Parameter - missing context information</p>"); writer.close(); } }
From source file:edu.vt.vbi.patric.portlets.GenomeBrowser.java
License:Apache License
private void printTrackInfo(ResourceRequest request, ResourceResponse response) throws IOException { String accession = request.getParameter("accession"); String annotation = request.getParameter("annotation"); String genomeId = request.getParameter("genomeId"); // LOGGER.debug("printTrackInfo: {}", request.getParameterMap().toString()); if (accession != null && annotation != null) { DataApiHandler dataApi = new DataApiHandler(request); JSONArray ncList = new JSONArray(); List<Integer> histogram = this.getFeatureCountHistogram(request); Integer sum = 0;//w w w .j a va2 s. c o m for (Integer hist : histogram) { sum += hist; } double avgCount = sum.doubleValue() / histogram.size(); SolrQuery query = new SolrQuery("genome_id:" + genomeId + " AND accession:" + accession + " AND annotation:" + annotation + " AND !(feature_type:source)"); query.setRows(dataApi.MAX_ROWS); query.addSort("start", SolrQuery.ORDER.asc); LOGGER.trace("[{}] {}", SolrCore.FEATURE.getSolrCoreName(), query.toString()); String apiResponse = dataApi.solrQuery(SolrCore.FEATURE, query); Map resp = jsonReader.readValue(apiResponse); Map respBody = (Map) resp.get("response"); List<GenomeFeature> features = dataApi.bindDocuments((List<Map>) respBody.get("docs"), GenomeFeature.class); for (GenomeFeature f : features) { JSONArray alist = new JSONArray(); alist.addAll(Arrays.asList(0, (f.getStart() - 1), f.getStart(), f.getEnd(), (f.getStrand().equals("+") ? 1 : -1), f.getStrand(), f.getId(), f.hasPatricId() ? f.getPatricId() : "", f.hasRefseqLocusTag() ? f.getRefseqLocusTag() : "", f.hasAltLocusTag() ? f.getAltLocusTag() : "", annotation, f.getFeatureType(), f.hasProduct() ? f.getProduct() : "", f.hasGene() ? f.getGene() : "", (f.getFeatureType().equals("CDS") ? 0 : (f.getFeatureType().contains("RNA") ? 1 : 2)))); ncList.add(alist); } // { // "featureCount": <%=features_count %>, // "formatVersion": 1, // "histograms": { // "meta": [{ // "arrayParams": { // "chunkSize": 10000, // "length": <%=hist.size()%>, // "urlTemplate": "Hist.json.jsp?accession=<%=_accession%>&algorithm=<%=_algorithm%>&chunk={Chunk}&format=.json" // }, // "basesPerBin": "10000" // }], // "stats": [{ // "basesPerBin": "10000", // "max": <%=(hist.isEmpty())?"0":Collections.max(hist)%>, // "mean": <%=hist_avg%> // }] // }, // "intervals": { // "classes": [{ // "attributes": [ // "Start", "Start_str", "End", "Strand", "strand_str", // "id", "locus_tag", "source", "type", "product", // "gene", "refseq", "phase"], // "isArrayAttr": {} // }], // "count": <%=features_count %>, // "lazyClass": 5, // "maxEnd": 20000, // "minStart": 1, // "nclist": [<%=nclist.toString() %>], // "urlTemplate": "lf-{Chunk}.json" // } // } JSONObject track = new JSONObject(); track.put("featureCount", features.size()); track.put("formatVersion", 1); // histogram JSONObject histograms = new JSONObject(); // meta JSONArray meta = new JSONArray(); JSONObject aMeta = new JSONObject(); // arrayParams JSONObject arrayParams = new JSONObject(); arrayParams.put("chunkSize", 10000); arrayParams.put("length", histogram.size()); arrayParams.put("urlTemplate", "/portal/portal/patric/GenomeBrowser/GBWindow?action=b&cacheability=PAGE&mode=getHistogram&accession=" + accession + "&annotation=" + annotation + "&chunk={Chunk}"); aMeta.put("arrayParams", arrayParams); aMeta.put("basesPerBin", 10000); meta.add(aMeta); // stats JSONArray stats = new JSONArray(); JSONObject aStat = new JSONObject(); aStat.put("basesPerBin", 10000); aStat.put("max", (histogram.isEmpty() ? 0 : Collections.max(histogram))); aStat.put("mean", avgCount); stats.add(aStat); histograms.put("meta", meta); histograms.put("stats", stats); // intervals JSONObject intervals = new JSONObject(); // classes JSONArray classes = new JSONArray(); JSONObject aClass = new JSONObject(); JSONArray attributes = new JSONArray(); attributes.addAll(Arrays.asList("Start", "Start_str", "End", "Strand", "strand_str", "id", "patric_id", "refseq_locus_tag", "alt_locus_tag", "source", "type", "product", "gene", "phase")); aClass.put("attributes", attributes); aClass.put("isArrayAttr", new JSONObject()); classes.add(aClass); intervals.put("classes", classes); intervals.put("count", features.size()); intervals.put("lazyClass", 5); intervals.put("maxEnd", 20000); intervals.put("minStart", 1); intervals.put("nclist", ncList); intervals.put("urlTemplate", "lf-{Chunk}.json"); track.put("histograms", histograms); track.put("intervals", intervals); // print track info response.setContentType("application/json"); track.writeJSONString(response.getWriter()); } }
From source file:edu.vt.vbi.patric.portlets.SequenceSummaryPortlet.java
License:Apache License
public void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException, IOException { String contextType = request.getParameter("context_type"); String contextId = request.getParameter("context_id"); String genomeFilter = request.getParameter("genome_filter"); DataApiHandler dataApi = new DataApiHandler(request); if (contextType != null && contextId != null) { if (contextType.equals("genome")) { Genome genome = dataApi.getGenome(contextId); if (genome != null) { // check genome_amr data is available. SolrQuery query = new SolrQuery("genome_id:" + genome.getId()); query.addSort("antibiotic", SolrQuery.ORDER.asc).addSort("resistant_phenotype", SolrQuery.ORDER.asc); query.setRows(dataApi.MAX_ROWS); dataApi = new DataApiHandler(request); String apiResponse = dataApi.solrQuery(SolrCore.GENOME_AMR, query); Map resp = jsonReader.readValue(apiResponse); Map respBody = (Map) resp.get("response"); List<Map> amr = (List<Map>) respBody.get("docs"); request.setAttribute("genome", genome); request.setAttribute("amr", amr); response.setContentType("text/html"); PortletRequestDispatcher prd = getPortletContext() .getRequestDispatcher("/WEB-INF/jsp/overview/sequence_summary.jsp"); prd.include(request, response); }//from ww w. j a va 2 s . c om } else { // taxon level List<String> annotations = Arrays.asList("PATRIC", "RefSeq"); for (String annotation : annotations) { String queryParam; switch (annotation) { case "PATRIC": queryParam = "patric_cds:[1 TO *]"; break; case "RefSeq": queryParam = "refseq_cds:[1 TO *]"; break; default: queryParam = "*:*"; break; } if (genomeFilter != null && !genomeFilter.equals("")) { queryParam += " AND (" + genomeFilter + ")"; } Map counts = dataApi.getFieldFacets(SolrCore.GENOME, queryParam, "taxon_lineage_ids:" + contextId, "genome_status"); request.setAttribute(annotation, counts); } response.setContentType("text/html"); PortletRequestDispatcher prd = getPortletContext() .getRequestDispatcher("/WEB-INF/jsp/overview/sequence_summary.jsp"); prd.include(request, response); } } }
From source file:edu.vt.vbi.patric.portlets.SpecialtyGeneEvidencePortlet.java
License:Apache License
@Override protected void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { response.setContentType("text/html"); SiteHelper.setHtmlMetaElements(request, response, "Specialty Gene Evidence"); response.setTitle("Specialty Gene Evidence"); String source = request.getParameter("sp_source"); String sourceId = request.getParameter("sp_source_id"); //lmo0433, Rv3875 if (source != null && !source.equals("") && sourceId != null && !sourceId.equals("")) { List<String> properties = Arrays.asList("property", "source", "source_id", "gene_name", "organism", "product", "gi", "gene_id"); List<String> headers = Arrays.asList("Property", "Source", "Source ID", "Gene", "Organism", "Product", "GI Number", "Gene ID"); // get properties of gene Map<String, Object> gene = null; SolrQuery query = new SolrQuery("source:" + source + " AND source_id:" + sourceId); DataApiHandler dataApi = new DataApiHandler(request); String apiResponse = dataApi.solrQuery(SolrCore.SPECIALTY_GENE, query); Map resp = jsonReader.readValue(apiResponse); Map respBody = (Map) resp.get("response"); List<Map> sdl = (List<Map>) respBody.get("docs"); if (!sdl.isEmpty()) { gene = sdl.get(0);/*from w ww . j av a 2s . com*/ } // get PATRIC feature GenomeFeature feature = null; query = new SolrQuery("source:" + source + " AND source_id:" + sourceId + " AND evidence:Literature"); query.setFields("feature_id"); apiResponse = dataApi.solrQuery(SolrCore.SPECIALTY_GENE_MAPPING, query); resp = jsonReader.readValue(apiResponse); respBody = (Map) resp.get("response"); sdl = (List<Map>) respBody.get("docs"); if (!sdl.isEmpty()) { Map doc = sdl.get(0); feature = dataApi.getFeature(doc.get("feature_id").toString()); } else { query = new SolrQuery("alt_locus_tag:" + sourceId); apiResponse = dataApi.solrQuery(SolrCore.FEATURE, query); resp = jsonReader.readValue(apiResponse); respBody = (Map) resp.get("response"); List<GenomeFeature> features = dataApi.bindDocuments((List<Map>) respBody.get("docs"), GenomeFeature.class); if (!features.isEmpty()) { feature = features.get(0); } } // get Homolog count int cntHomolog = 0; query = new SolrQuery("source:" + source + " AND source_id:" + sourceId); apiResponse = dataApi.solrQuery(SolrCore.SPECIALTY_GENE_MAPPING, query); resp = jsonReader.readValue(apiResponse); respBody = (Map) resp.get("response"); cntHomolog = (Integer) respBody.get("numFound"); // get list of evidence List<Map<String, Object>> specialtyGeneEvidence = new ArrayList<>(); query = new SolrQuery("source:" + source + " AND source_id:" + sourceId); query.addSort("specific_organism", SolrQuery.ORDER.asc); query.addSort("specific_host", SolrQuery.ORDER.asc); query.addSort("classification", SolrQuery.ORDER.asc); apiResponse = dataApi.solrQuery(SolrCore.SPECIALTY_GENE_EVIDENCE, query); resp = jsonReader.readValue(apiResponse); respBody = (Map) resp.get("response"); List<Map> evidence = (List<Map>) respBody.get("docs"); for (Map doc : evidence) { specialtyGeneEvidence.add(doc); } request.setAttribute("source", source); request.setAttribute("sourceId", sourceId); request.setAttribute("gene", gene); request.setAttribute("properties", properties); request.setAttribute("headers", headers); request.setAttribute("feature", feature); request.setAttribute("cntHomolog", cntHomolog); request.setAttribute("specialtyGeneEvidence", specialtyGeneEvidence); PortletRequestDispatcher prd = getPortletContext() .getRequestDispatcher("/WEB-INF/jsp/overview/specialty_gene_evidence.jsp"); prd.include(request, response); } }
From source file:edu.vt.vbi.patric.portlets.SpecialtyGenePropertiesPortlet.java
License:Apache License
protected void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { response.setContentType("text/html"); String cType = request.getParameter("context_type"); String cId = request.getParameter("context_id"); if (cType != null && cId != null && cType.equals("feature")) { DataApiHandler dataApi = new DataApiHandler(request); SolrQuery query = new SolrQuery("feature_id:" + cId); query.setFields(// w w w . ja va 2 s . c om "evidence,property,source,source_id,organism,pmid,subject_coverage,query_coverage,identity,e_value"); query.addSort("evidence", SolrQuery.ORDER.desc); query.addSort("property", SolrQuery.ORDER.asc); query.addSort("source", SolrQuery.ORDER.asc); String apiResponse = dataApi.solrQuery(SolrCore.SPECIALTY_GENE_MAPPING, query); Map resp = jsonReader.readValue(apiResponse); Map respBody = (Map) resp.get("response"); List<SpecialtyGene> listSpecialtyGenes = dataApi.bindDocuments((List<Map>) respBody.get("docs"), SpecialtyGene.class); if (!listSpecialtyGenes.isEmpty()) { request.setAttribute("listSpecialtyGenes", listSpecialtyGenes); PortletRequestDispatcher prd = getPortletContext() .getRequestDispatcher("/WEB-INF/jsp/overview/specialty_gene_properties.jsp"); prd.include(request, response); } else { PrintWriter writer = response.getWriter(); writer.write("<!-- no specialty gene property found -->"); writer.close(); } } else { PrintWriter writer = response.getWriter(); writer.write("<p>Invalid Parameter - missing context information</p>"); writer.close(); } }
From source file:edu.vt.vbi.patric.proteinfamily.FIGfamData.java
License:Apache License
public JSONArray getSyntonyOrder(ResourceRequest request) { String genomeId = request.getParameter("syntonyId"); final String familyType = request.getParameter("familyType"); final String familyId = familyType + "_id"; JSONArray json_arr = null;/*w w w .j a va 2 s . c o m*/ if (genomeId != null) { DataApiHandler dataApi = new DataApiHandler(request); long end_ms, start_ms = System.currentTimeMillis(); SolrQuery solr_query = new SolrQuery("genome_id:" + genomeId); // solr_query.addFilterQuery("end:[3200 TO 4300] OR end:[4400 TO 4490] OR end:[4990 TO 4999]"); solr_query.addFilterQuery("annotation:PATRIC AND feature_type:CDS AND " + familyId + ":[* TO *]"); solr_query.addField(familyId); solr_query.setRows(DataApiHandler.MAX_ROWS); solr_query.addSort("accession", SolrQuery.ORDER.asc); solr_query.addSort("start", SolrQuery.ORDER.asc); LOGGER.debug("getSyntonyOrder() [{}] {}", SolrCore.FEATURE.getSolrCoreName(), solr_query); int orderSet = 0; List<SyntonyOrder> collect = new ArrayList<>(); try { String apiResponse = dataApi.solrQuery(SolrCore.FEATURE, solr_query); Map resp = jsonReader.readValue(apiResponse); Map respBody = (Map) resp.get("response"); List<GenomeFeature> features = dataApi.bindDocuments((List<Map>) respBody.get("docs"), GenomeFeature.class); end_ms = System.currentTimeMillis(); LOGGER.debug("Genome anchoring query time - {}", (end_ms - start_ms)); start_ms = System.currentTimeMillis(); for (GenomeFeature feature : features) { if (familyType.equals("figfam") && feature.hasFigfamId()) { collect.add(new SyntonyOrder(feature.getFigfamId(), orderSet)); ++orderSet; } else if (familyType.equals("plfam") && feature.hasPlfamId()) { collect.add(new SyntonyOrder(feature.getPlfamId(), orderSet)); ++orderSet; } else if (familyType.equals("pgfam") && feature.hasPgfamId()) { collect.add(new SyntonyOrder(feature.getPgfamId(), orderSet)); ++orderSet; } } } catch (IOException e) { LOGGER.error(e.getMessage(), e); } if (0 < collect.size()) { json_arr = new JSONArray(); SyntonyOrder[] orderSave = new SyntonyOrder[collect.size()]; collect.toArray(orderSave);// orderSave is array in order of Figfam ID SyntonyOrder[] toSort = new SyntonyOrder[collect.size()]; System.arraycopy(orderSave, 0, toSort, 0, toSort.length);// copy the array so it can be sorted based on position in the genome Arrays.sort(toSort); // sort based on figfamIDs SyntonyOrder start = toSort[0]; for (int i = 1; i < toSort.length; i++) { start = start.mergeSameId(toSort[i]);// set syntonyAt -1 to those objects which occur multiple times } orderSet = 0; for (SyntonyOrder anOrderSave : orderSave) { orderSet = (anOrderSave).compressAt(orderSet); // adjusts the syntonyAt number to get the correct // column based on replicon with -1's removed } for (SyntonyOrder aToSort : toSort) {// writes all those that don't have -1's (aToSort).write(json_arr); } } end_ms = System.currentTimeMillis(); LOGGER.debug("Genome anchoring post processing time - {} ms", (end_ms - start_ms)); } return json_arr; }
From source file:edu.vt.vbi.patric.proteinfamily.FIGfamData.java
License:Apache License
@SuppressWarnings("unchecked") public void getGroupStats(ResourceRequest request, PrintWriter writer) throws IOException { DataApiHandler dataApi = new DataApiHandler(request); JSONObject figfams = new JSONObject(); Set<String> figfamIdList = new HashSet<>(); List<String> genomeIdList = new LinkedList<>(); // get family Type final String familyType = request.getParameter("familyType"); final String familyId = familyType + "_id"; // get genome list in order String genomeIds = request.getParameter("genomeIds"); try {/*from www . j av a 2s . co m*/ SolrQuery query = new SolrQuery("genome_id:(" + genomeIds.replaceAll(",", " OR ") + ")"); query.addSort("genome_name", SolrQuery.ORDER.asc).addField("genome_id") .setRows(DataApiHandler.MAX_ROWS); LOGGER.trace("[{}] {}", SolrCore.GENOME.getSolrCoreName(), query); String apiResponse = dataApi.solrQuery(SolrCore.GENOME, query); Map resp = jsonReader.readValue(apiResponse); Map respBody = (Map) resp.get("response"); List<Genome> genomes = dataApi.bindDocuments((List<Map>) respBody.get("docs"), Genome.class); for (final Genome genome : genomes) { genomeIdList.add(genome.getId()); } if (genomeIdList.size() == 25000) { query.setStart(25000); apiResponse = dataApi.solrQuery(SolrCore.GENOME, query); resp = jsonReader.readValue(apiResponse); respBody = (Map) resp.get("response"); genomes = dataApi.bindDocuments((List<Map>) respBody.get("docs"), Genome.class); for (final Genome genome : genomes) { genomeIdList.add(genome.getId()); } } } catch (IOException e) { LOGGER.error(e.getMessage(), e); } // LOGGER.debug("genomeIdList: {}", genomeIdList); // getting genome counts per figfamID (figfam) // {stat:{field:{field:figfam_id,limit:-1,facet:{min:"min(aa_length)",max:"max(aa_length)",mean:"avg(aa_length)",ss:"sumsq(aa_length)",sum:"sum(aa_length)",dist:"percentile(aa_length,50,75,99,99.9)",field:{field:genome_id}}}}} try { long start = System.currentTimeMillis(); SolrQuery query = new SolrQuery("annotation:PATRIC AND feature_type:CDS"); // query.addFilterQuery("end:[3200 TO 4300] OR end:[4400 TO 4490] OR end:[4990 TO 4999]"); query.addFilterQuery(getSolrQuery(request)); query.addFilterQuery("!" + familyId + ":\"\""); query.setRows(0).setFacet(true).set("facet.threads", 15); query.add("json.facet", "{stat:{type:field,field:genome_id,limit:-1,facet:{figfams:{type:field,field:" + familyId + ",limit:-1,sort:{index:asc}}}}}"); LOGGER.trace("getGroupStats() 1/3: [{}] {}", SolrCore.FEATURE.getSolrCoreName(), query); String apiResponse = dataApi.solrQuery(SolrCore.FEATURE, query); long point = System.currentTimeMillis(); LOGGER.debug("1st query: {} ms", (point - start)); start = point; Map resp = jsonReader.readValue(apiResponse); Map facets = (Map) resp.get("facets"); Map stat = (Map) facets.get("stat"); final Map<String, String> figfamGenomeIdStr = new LinkedHashMap<>(); final Map<String, Integer> figfamGenomeCount = new LinkedHashMap<>(); final int genomeTotal = genomeIdList.size(); final Map<String, Integer> genomePosMap = new LinkedHashMap<>(); for (String genomeId : genomeIdList) { genomePosMap.put(genomeId, genomeIdList.indexOf(genomeId)); } final Map<String, List> figfamGenomeIdCountMap = new ConcurrentHashMap<>(); final Map<String, Set> figfamGenomeIdSet = new ConcurrentHashMap<>(); List<Map> genomeBuckets = (List<Map>) stat.get("buckets"); for (final Map bucket : genomeBuckets) { final String genomeId = (String) bucket.get("val"); final List<Map> figfamBucket = (List<Map>) ((Map) bucket.get("figfams")).get("buckets"); for (final Map figfam : figfamBucket) { final String figfamId = (String) figfam.get("val"); final String genomeCount = String.format("%02x", (Integer) figfam.get("count")); if (figfamGenomeIdCountMap.containsKey(figfamId)) { figfamGenomeIdCountMap.get(figfamId).set(genomePosMap.get(genomeId), genomeCount); } else { final List<String> genomeIdCount = new LinkedList<>(Collections.nCopies(genomeTotal, "00")); genomeIdCount.set(genomePosMap.get(genomeId), genomeCount); figfamGenomeIdCountMap.put(figfamId, genomeIdCount); } if (figfamGenomeIdSet.containsKey(figfamId)) { figfamGenomeIdSet.get(figfamId).add(genomeId); } else { final Set<String> genomeIdSet = new HashSet<>(); genomeIdSet.add(genomeId); figfamGenomeIdSet.put(figfamId, genomeIdSet); } } } for (String figfamId : figfamGenomeIdCountMap.keySet()) { final List genomeIdStr = figfamGenomeIdCountMap.get(figfamId); figfamGenomeIdStr.put(figfamId, StringUtils.join(genomeIdStr, "")); figfamGenomeCount.put(figfamId, figfamGenomeIdSet.get(figfamId).size()); } point = System.currentTimeMillis(); LOGGER.debug("1st query process : {} ms, figfamGenomeIdStr:{}, figfamGenomeCount:{}", (point - start), figfamGenomeIdStr.size(), figfamGenomeCount.size()); long start2nd = System.currentTimeMillis(); // 2nd query query.set("json.facet", "{stat:{type:field,field:" + familyId + ",limit:-1,facet:{min:\"min(aa_length)\",max:\"max(aa_length)\",mean:\"avg(aa_length)\",ss:\"sumsq(aa_length)\",sum:\"sum(aa_length)\"}}}"); LOGGER.trace("getGroupStats() 2/3: [{}] {}", SolrCore.FEATURE.getSolrCoreName(), query); apiResponse = dataApi.solrQuery(SolrCore.FEATURE, query); point = System.currentTimeMillis(); LOGGER.debug("2st query: {} ms", (point - start2nd)); start2nd = point; resp = jsonReader.readValue(apiResponse); facets = (Map) resp.get("facets"); stat = (Map) facets.get("stat"); List<Map> buckets = (List<Map>) stat.get("buckets"); for (Map bucket : buckets) { final String figfamId = (String) bucket.get("val"); final int count = (Integer) bucket.get("count"); double min, max, mean, sumsq, sum; if (bucket.get("min") instanceof Double) { min = (Double) bucket.get("min"); } else if (bucket.get("min") instanceof Integer) { min = ((Integer) bucket.get("min")).doubleValue(); } else { min = 0; } if (bucket.get("max") instanceof Double) { max = (Double) bucket.get("max"); } else if (bucket.get("max") instanceof Integer) { max = ((Integer) bucket.get("max")).doubleValue(); } else { max = 0; } if (bucket.get("mean") instanceof Double) { mean = (Double) bucket.get("mean"); } else if (bucket.get("mean") instanceof Integer) { mean = ((Integer) bucket.get("mean")).doubleValue(); } else { mean = 0; } if (bucket.get("ss") instanceof Double) { sumsq = (Double) bucket.get("ss"); } else if (bucket.get("ss") instanceof Integer) { sumsq = ((Integer) bucket.get("ss")).doubleValue(); } else { sumsq = 0; } if (bucket.get("sum") instanceof Double) { sum = (Double) bucket.get("sum"); } else if (bucket.get("sum") instanceof Integer) { sum = ((Integer) bucket.get("sum")).doubleValue(); } else { sum = 0; } // LOGGER.debug("bucket:{}, sumsq:{}, count: {}", bucket, sumsq, count); double std; if (count > 1) { // std = Math.sqrt(sumsq / (count - 1)); final double realSq = sumsq - (sum * sum) / count; std = Math.sqrt(realSq / (count - 1)); } else { std = 0; } final JSONObject aaLength = new JSONObject(); aaLength.put("min", min); aaLength.put("max", max); aaLength.put("mean", mean); aaLength.put("stddev", std); figfamIdList.add(figfamId); final JSONObject figfam = new JSONObject(); figfam.put("genomes", figfamGenomeIdStr.get(figfamId)); figfam.put("genome_count", figfamGenomeCount.get(figfamId)); figfam.put("feature_count", count); figfam.put("stats", aaLength); figfams.put(figfamId, figfam); } point = System.currentTimeMillis(); LOGGER.debug("2st query process: {} ms", (point - start2nd)); } catch (IOException e) { LOGGER.error(e.getMessage(), e); } // getting distinct figfam_product if (!figfamIdList.isEmpty()) { figfamIdList.remove(""); try { SolrQuery query = new SolrQuery("family_id:(" + StringUtils.join(figfamIdList, " OR ") + ")"); query.addFilterQuery("family_type:" + familyType); query.addField("family_id,family_product").setRows(figfamIdList.size()); LOGGER.debug("getGroupStats() 3/3: [{}] {}", SolrCore.FIGFAM_DIC.getSolrCoreName(), query); String apiResponse = dataApi.solrQuery(SolrCore.FIGFAM_DIC, query); Map resp = jsonReader.readValue(apiResponse); Map respBody = (Map) resp.get("response"); List<Map> sdl = (List<Map>) respBody.get("docs"); for (final Map doc : sdl) { final JSONObject figfam = (JSONObject) figfams.get(doc.get("family_id")); figfam.put("description", doc.get("family_product")); figfams.put(doc.get("family_id").toString(), figfam); } int i = 1; while (sdl.size() == 25000) { query.setStart(25000 * i); apiResponse = dataApi.solrQuery(SolrCore.FIGFAM_DIC, query); resp = jsonReader.readValue(apiResponse); respBody = (Map) resp.get("response"); sdl = (List<Map>) respBody.get("docs"); for (final Map doc : sdl) { final JSONObject figfam = (JSONObject) figfams.get(doc.get("family_id")); figfam.put("description", doc.get("family_product")); figfams.put(doc.get("family_id").toString(), figfam); } i++; } } catch (IOException e) { LOGGER.error(e.getMessage(), e); LOGGER.debug("::getGroupStats() 3/3, params: {}", request.getParameterMap().toString()); } figfams.writeJSONString(writer); } }