List of usage examples for org.apache.solr.client.solrj SolrQuery set
public ModifiableSolrParams set(String name, String... val)
From source file:uk.ac.ebi.phenotype.service.ObservationService.java
License:Apache License
public Map<String, List<DiscreteTimePoint>> getTimeSeriesMutantData(String parameter, List<String> genes, ArrayList<String> strains, String[] center, String[] sex) throws SolrServerException { Map<String, List<DiscreteTimePoint>> finalRes = new HashMap<String, List<DiscreteTimePoint>>(); // <allele_accession, // timeSeriesData> SolrQuery query = new SolrQuery().addFilterQuery(ObservationDTO.BIOLOGICAL_SAMPLE_GROUP + ":experimental") .addFilterQuery(ObservationDTO.PARAMETER_STABLE_ID + ":" + parameter); String q = (strains.size() > 1) ? "(" + ObservationDTO.STRAIN_ACCESSION_ID + ":\"" + StringUtils.join(strains.toArray(), "\" OR " + ObservationDTO.STRAIN_ACCESSION_ID + ":\"") + "\")" : ObservationDTO.STRAIN_ACCESSION_ID + ":\"" + strains.get(0) + "\""; if (genes != null && genes.size() > 0) { q += " AND ("; q += (genes.size() > 1) ? ObservationDTO.GENE_ACCESSION_ID + ":\"" + StringUtils.join(genes.toArray(), "\" OR " + ObservationDTO.GENE_ACCESSION_ID + ":\"") + "\"" : ObservationDTO.GENE_ACCESSION_ID + ":\"" + genes.get(0) + "\""; q += ")"; }/*from www . j a v a2s . co m*/ if (center != null && center.length > 0) { q += " AND ("; q += (center.length > 1) ? ObservationDTO.PHENOTYPING_CENTER + ":\"" + StringUtils.join(center, "\" OR " + ObservationDTO.PHENOTYPING_CENTER + ":\"") + "\"" : ObservationDTO.PHENOTYPING_CENTER + ":\"" + center[0] + "\""; q += ")"; } if (sex != null && sex.length == 1) { q += " AND " + ObservationDTO.SEX + ":\"" + sex[0] + "\""; } query.setQuery(q); query.set("group.field", ObservationDTO.GENE_SYMBOL); query.set("group", true); query.set("fl", ObservationDTO.DATA_POINT + "," + ObservationDTO.DISCRETE_POINT); query.set("group.limit", 100000); // number of documents to be returned // per group query.set("group.sort", ObservationDTO.DISCRETE_POINT + " asc"); query.setRows(10000); // System.out.println("+_+_+ " + solr.getBaseURL() + "/select?" + // query); List<Group> groups = solr.query(query).getGroupResponse().getValues().get(0).getValues(); // for mutants it doesn't seem we need binning // groups are the alleles for (Group gr : groups) { SolrDocumentList resDocs = gr.getResult(); DescriptiveStatistics stats = new DescriptiveStatistics(); float discreteTime = (float) resDocs.get(0).getFieldValue(ObservationDTO.DISCRETE_POINT); ArrayList<DiscreteTimePoint> res = new ArrayList<DiscreteTimePoint>(); for (int i = 0; i < resDocs.getNumFound(); i++) { SolrDocument doc = resDocs.get(i); stats.addValue((float) doc.getFieldValue(ObservationDTO.DATA_POINT)); if (discreteTime != (float) doc.getFieldValue(ObservationDTO.DISCRETE_POINT) || i == resDocs.getNumFound() - 1) { // we // are // at // the // end // of // the // document // list // add to list float discreteDataPoint = (float) stats.getMean(); DiscreteTimePoint dp = new DiscreteTimePoint(discreteTime, discreteDataPoint, new Float(stats.getStandardDeviation())); List<Float> errorPair = new ArrayList<>(); Float lower = new Float(discreteDataPoint); Float higher = new Float(discreteDataPoint); errorPair.add(lower); errorPair.add(higher); dp.setErrorPair(errorPair); res.add(dp); // update discrete point discreteTime = Float.valueOf(doc.getFieldValue(ObservationDTO.DISCRETE_POINT).toString()); // update stats stats = new DescriptiveStatistics(); } } // add list finalRes.put(gr.getGroupValue(), res); } return finalRes; }
From source file:uk.ac.ebi.phenotype.service.ObservationService.java
License:Apache License
public List<DiscreteTimePoint> getTimeSeriesControlData(String parameter, ArrayList<String> strains, String[] center, String[] sex) throws SolrServerException { ArrayList<DiscreteTimePoint> res = new ArrayList<DiscreteTimePoint>(); SolrQuery query = new SolrQuery().addFilterQuery(ObservationDTO.BIOLOGICAL_SAMPLE_GROUP + ":control") .addFilterQuery(ObservationDTO.PARAMETER_STABLE_ID + ":" + parameter); String q = (strains.size() > 1) ? "(" + ObservationDTO.STRAIN_ACCESSION_ID + ":\"" + StringUtils.join(strains.toArray(), "\" OR " + ObservationDTO.STRAIN_ACCESSION_ID + ":\"") + "\")" : ObservationDTO.STRAIN_ACCESSION_ID + ":\"" + strains.get(0) + "\""; if (center != null && center.length > 0) { q += " AND ("; q += (center.length > 1)//from ww w.j a va 2 s .c o m ? ObservationDTO.PHENOTYPING_CENTER + ":\"" + StringUtils.join(center, "\" OR " + ObservationDTO.PHENOTYPING_CENTER + ":\"") + "\"" : ObservationDTO.PHENOTYPING_CENTER + ":\"" + center[0] + "\""; q += ")"; } if (sex != null && sex.length == 1) { q += " AND " + ObservationDTO.SEX + ":\"" + sex[0] + "\""; } query.setQuery(q); query.set("group.field", ObservationDTO.DISCRETE_POINT); query.set("group", true); query.set("fl", ObservationDTO.DATA_POINT + "," + ObservationDTO.DISCRETE_POINT); query.set("group.limit", 100000); // number of documents to be returned // per group query.set("sort", ObservationDTO.DISCRETE_POINT + " asc"); query.setRows(10000); // System.out.println("+_+_+ " + solr.getBaseURL() + "/select?" + // query); List<Group> groups = solr.query(query).getGroupResponse().getValues().get(0).getValues(); boolean rounding = false; // decide if binning is needed i.e. is the increment points are too // scattered, as for calorimetry if (groups.size() > 30) { // arbitrary value, just piced it because it // seems reasonable for the size of our // graphs if (Float.valueOf(groups.get(groups.size() - 1).getGroupValue()) - Float.valueOf(groups.get(0).getGroupValue()) <= 30) { // then // rounding // will // be // enough rounding = true; } } if (rounding) { int bin = Math.round(Float.valueOf(groups.get(0).getGroupValue())); for (Group gr : groups) { int discreteTime = Math.round(Float.valueOf(gr.getGroupValue())); // for calormetry ignore what's before -5 and after 16 if (parameter.startsWith("IMPC_CAL") || parameter.startsWith("ESLIM_003_001") || parameter.startsWith("M-G-P_003_001")) { if (discreteTime < -5) { continue; } else if (discreteTime > 16) { break; } } float sum = 0; SolrDocumentList resDocs = gr.getResult(); DescriptiveStatistics stats = new DescriptiveStatistics(); for (SolrDocument doc : resDocs) { sum += (float) doc.getFieldValue(ObservationDTO.DATA_POINT); stats.addValue((float) doc.getFieldValue(ObservationDTO.DATA_POINT)); } if (bin < discreteTime || groups.indexOf(gr) == groups.size() - 1) { // finished // the // groups // of // filled // the // bin float discreteDataPoint = sum / resDocs.getNumFound(); DiscreteTimePoint dp = new DiscreteTimePoint((float) discreteTime, discreteDataPoint, new Float(stats.getStandardDeviation())); List<Float> errorPair = new ArrayList<>(); double std = stats.getStandardDeviation(); Float lower = new Float(discreteDataPoint - std); Float higher = new Float(discreteDataPoint + std); errorPair.add(lower); errorPair.add(higher); dp.setErrorPair(errorPair); res.add(dp); bin = discreteTime; } } } else { for (Group gr : groups) { Float discreteTime = Float.valueOf(gr.getGroupValue()); float sum = 0; SolrDocumentList resDocs = gr.getResult(); DescriptiveStatistics stats = new DescriptiveStatistics(); for (SolrDocument doc : resDocs) { sum += (float) doc.getFieldValue(ObservationDTO.DATA_POINT); stats.addValue((float) doc.getFieldValue(ObservationDTO.DATA_POINT)); } float discreteDataPoint = sum / resDocs.getNumFound(); DiscreteTimePoint dp = new DiscreteTimePoint(discreteTime, discreteDataPoint, new Float(stats.getStandardDeviation())); List<Float> errorPair = new ArrayList<>(); double std = stats.getStandardDeviation(); Float lower = new Float(discreteDataPoint - std); Float higher = new Float(discreteDataPoint + std); errorPair.add(lower); errorPair.add(higher); dp.setErrorPair(errorPair); res.add(dp); } } return res; }
From source file:uk.ac.ebi.phenotype.service.ObservationService.java
License:Apache License
/** * * @param p/*from w ww. j a v a 2 s .com*/ * @param genes * @param strains * @param biologicalSample * @return list of centers and sexes for the given parameters * @throws SolrServerException */ public Set<String> getCenters(Parameter p, List<String> genes, ArrayList<String> strains, String biologicalSample) throws SolrServerException { Set<String> centers = new HashSet<String>(); SolrQuery query = new SolrQuery() .addFilterQuery(ObservationDTO.BIOLOGICAL_SAMPLE_GROUP + ":" + biologicalSample) .addFilterQuery(ObservationDTO.PARAMETER_STABLE_ID + ":" + p.getStableId()); String q = (strains.size() > 1) ? "(" + ObservationDTO.STRAIN_ACCESSION_ID + ":\"" + StringUtils.join(strains.toArray(), "\" OR " + ObservationDTO.STRAIN_ACCESSION_ID + ":\"") + "\")" : ObservationDTO.STRAIN_ACCESSION_ID + ":\"" + strains.get(0) + "\""; String fq = ""; if (genes != null && genes.size() > 0) { fq += " ("; fq += (genes.size() > 1) ? ObservationDTO.GENE_ACCESSION_ID + ":\"" + StringUtils.join(genes.toArray(), "\" OR " + ObservationDTO.GENE_ACCESSION_ID + ":\"") + "\"" : ObservationDTO.GENE_ACCESSION_ID + ":\"" + genes.get(0) + "\""; fq += ")"; } query.addFilterQuery(fq); query.setQuery(q); query.setRows(100000000); query.setFields(ObservationDTO.GENE_ACCESSION_ID, ObservationDTO.DATA_POINT); query.set("group", true); query.set("group.field", ObservationDTO.PHENOTYPING_CENTER); List<Group> groups = solr.query(query, METHOD.POST).getGroupResponse().getValues().get(0).getValues(); for (Group gr : groups) { centers.add((String) gr.getGroupValue()); } System.out.println("CENTERS ::: " + centers); return centers; }
From source file:uk.ac.ebi.phenotype.service.ObservationService.java
License:Apache License
public double getMeanPValue(Parameter p, ArrayList<String> strains, String biologicalSample, String[] center, SexType sex) throws SolrServerException { System.out.println("GETTING THE MEAN"); SolrQuery query = new SolrQuery() .addFilterQuery(ObservationDTO.BIOLOGICAL_SAMPLE_GROUP + ":" + biologicalSample) .addFilterQuery(ObservationDTO.PARAMETER_STABLE_ID + ":" + p.getStableId()); String q = (strains.size() > 1) ? "(" + ObservationDTO.STRAIN_ACCESSION_ID + ":\"" + StringUtils.join(strains.toArray(), "\" OR " + ObservationDTO.STRAIN_ACCESSION_ID + ":\"") + "\")" : ObservationDTO.STRAIN_ACCESSION_ID + ":\"" + strains.get(0) + "\""; double mean = 0; if (center != null && center.length > 0) { q += " AND ("; q += (center.length > 1)//from w w w . java 2s . com ? ObservationDTO.PHENOTYPING_CENTER + ":\"" + StringUtils.join(center, "\" OR " + ObservationDTO.PHENOTYPING_CENTER + ":\"") + "\"" : ObservationDTO.PHENOTYPING_CENTER + ":\"" + center[0] + "\""; q += ")"; } if (sex != null) { q += " AND " + ObservationDTO.SEX + ":\"" + sex.getName() + "\""; } query.setQuery(q); query.setRows(0); query.set("stats", true); query.set("stats.field", ObservationDTO.DATA_POINT); query.set("omitHeader", true); query.set("wt", "json"); try { JSONObject response = JSONRestUtil.getResults(solr.getBaseURL() + "/select?" + query); mean = response.getJSONObject("stats").getJSONObject("stats_fields").getJSONObject("data_point") .getDouble("mean"); } catch (JSONException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (URISyntaxException e) { e.printStackTrace(); } return mean; }
From source file:uk.ac.ebi.phenotype.service.ObservationService.java
License:Apache License
public CategoricalSet getCategories(Parameter parameter, ArrayList<String> genes, String biologicalSampleGroup, ArrayList<String> strains, String[] center, String[] sex) throws SolrServerException, SQLException { CategoricalSet resSet = new CategoricalSet(); resSet.setName(biologicalSampleGroup); SolrQuery query = new SolrQuery() .addFilterQuery(ObservationDTO.BIOLOGICAL_SAMPLE_GROUP + ":" + biologicalSampleGroup) .addFilterQuery(ObservationDTO.PARAMETER_STABLE_ID + ":" + parameter.getStableId()); String q = (strains.size() > 1) ? "(" + ObservationDTO.STRAIN_ACCESSION_ID + ":\"" + StringUtils.join(strains.toArray(), "\" OR " + ObservationDTO.STRAIN_ACCESSION_ID + ":\"") + "\")" : ObservationDTO.STRAIN_ACCESSION_ID + ":\"" + strains.get(0) + "\""; if (genes != null && genes.size() > 0) { q += " AND ("; q += (genes.size() > 1) ? ObservationDTO.GENE_ACCESSION_ID + ":\"" + StringUtils.join(genes.toArray(), "\" OR " + ObservationDTO.GENE_ACCESSION_ID + ":\"") + "\"" : ObservationDTO.GENE_ACCESSION_ID + ":\"" + genes.get(0) + "\""; q += ")"; }/*from ww w . jav a 2 s . c o m*/ if (center != null && center.length > 0) { q += " AND ("; q += (center.length > 1) ? ObservationDTO.PHENOTYPING_CENTER + ":\"" + StringUtils.join(center, "\" OR " + ObservationDTO.PHENOTYPING_CENTER + ":\"") + "\"" : ObservationDTO.PHENOTYPING_CENTER + ":\"" + center[0] + "\""; q += ")"; } if (sex != null && sex.length == 1) { q += " AND " + ObservationDTO.SEX + ":\"" + sex[0] + "\""; } query.setQuery(q); query.set("group.field", ObservationDTO.CATEGORY); query.set("group", true); query.setRows(100); List<String> categories = new ArrayList<String>(); List<Group> groups = solr.query(query).getGroupResponse().getValues().get(0).getValues(); for (Group gr : groups) { categories.add((String) gr.getGroupValue()); CategoricalDataObject catObj = new CategoricalDataObject(); catObj.setCount((long) gr.getResult().getNumFound()); String catLabel = parameterDAO.getCategoryDescription(parameter.getId(), gr.getGroupValue()); catObj.setCategory(catLabel); resSet.add(catObj); } return resSet; }
From source file:uk.ac.ebi.phenotype.service.ObservationService.java
License:Apache License
public ObservationType getObservationTypeForParameterStableId(String paramStableId) throws SolrServerException { SolrQuery q = new SolrQuery().setQuery(ObservationDTO.PARAMETER_STABLE_ID + ":" + paramStableId); q.set("rows", 1); QueryResponse response = solr.query(q); String type = (String) response.getResults().get(0).getFieldValue(ObservationDTO.OBSERVATION_TYPE); if (type.equalsIgnoreCase(ObservationType.unidimensional.toString())) { return ObservationType.unidimensional; }/* w w w . j a v a 2 s .co m*/ if (type.equalsIgnoreCase(ObservationType.categorical.toString())) { return ObservationType.categorical; } if (type.equalsIgnoreCase(ObservationType.time_series.toString())) { return ObservationType.time_series; } if (type.equalsIgnoreCase(ObservationType.image_record.toString())) { return ObservationType.image_record; } if (type.equalsIgnoreCase(ObservationType.metadata.toString())) { return ObservationType.metadata; } if (type.equalsIgnoreCase(ObservationType.multidimensional.toString())) { return ObservationType.multidimensional; } if (type.equalsIgnoreCase(ObservationType.text.toString())) { return ObservationType.text; } return null; }
From source file:uk.ac.ebi.phenotype.service.ObservationService.java
License:Apache License
public Set<String> getTestedGenes(String sex, List<String> parameters) throws SolrServerException { HashSet<String> genes = new HashSet<String>(); int i = 0;//from w w w .j a va2 s . c o m while (i < parameters.size()) { // Add no more than 10 params at the time so the url doesn't get too // long String parameter = parameters.get(i++); String query = "(" + ObservationDTO.PARAMETER_STABLE_ID + ":" + parameter; while (i % 15 != 0 && i < parameters.size()) { parameter = parameters.get(i++); query += " OR " + ObservationDTO.PARAMETER_STABLE_ID + ":" + parameter; } query += ")"; SolrQuery q = new SolrQuery().setQuery(query).addField(ObservationDTO.GENE_ACCESSION_ID) .setFilterQueries( ObservationDTO.STRAIN_ACCESSION_ID + ":\"" + StringUtils.join(OverviewChartsController.OVERVIEW_STRAINS, "\" OR " + ObservationDTO.STRAIN_ACCESSION_ID + ":\"") + "\"") .setRows(-1); q.set("group.field", ObservationDTO.GENE_ACCESSION_ID); q.set("group", true); if (sex != null) { q.addFilterQuery(ObservationDTO.SEX + ":" + sex); } List<Group> groups = solr.query(q).getGroupResponse().getValues().get(0).getValues(); for (Group gr : groups) { genes.add((String) gr.getGroupValue()); } } return genes; }
From source file:uk.ac.ebi.phenotype.service.ObservationService.java
License:Apache License
/** * Returns a list of <code>count</code> parameter stable ids matching <code>observationType</code>. * //from www .j a va 2 s. co m * @param observationType desired observation type * @param count the number of parameter stable ids to return * * @return a list of <code>count</code> parameter stable ids matching <code>observationType</code>. * @throws SolrServerException */ public List<String> getParameterStableIdsByObservationType(ObservationType observationType, int count) throws SolrServerException { List<String> retVal = new ArrayList(); if (count < 1) return retVal; SolrQuery query = new SolrQuery(); // http://ves-ebi-d0:8090/mi/impc/dev/solr/experiment/select?q=observation_type%3Acategorical&rows=12&wt=json&indent=true&facet=true&facet.field=parameter_stable_id query.setQuery("observation_type:" + observationType.name()) .addFacetField(ObservationDTO.PARAMETER_STABLE_ID).setFacetMinCount(1).setFacet(true).setRows(count) .set("facet.limit", count); QueryResponse response = solr.query(query); for (Count facet : response.getFacetField(ObservationDTO.PARAMETER_STABLE_ID).getValues()) { retVal.add(facet.getName()); } return retVal; }
From source file:uk.ac.ebi.phenotype.service.StatisticalResultService.java
License:Apache License
public Map<String, Long> getColoniesNoMPHit(ArrayList<String> resourceName, ZygosityType zygosity) throws SolrServerException { Map<String, Long> res = new HashMap<>(); Long time = System.currentTimeMillis(); SolrQuery q = new SolrQuery(); if (resourceName != null) { q.setQuery(GenotypePhenotypeDTO.RESOURCE_NAME + ":" + StringUtils.join(resourceName, " OR " + GenotypePhenotypeDTO.RESOURCE_NAME + ":")); } else {/*from w w w . ja v a 2 s .c o m*/ q.setQuery("*:*"); } if (zygosity != null) { q.addFilterQuery(GenotypePhenotypeDTO.ZYGOSITY + ":" + zygosity.name()); } q.addFilterQuery(GenotypePhenotypeDTO.P_VALUE + ":[" + this.P_VALUE_THRESHOLD + " TO 1]"); q.addFacetField(StatisticalResultDTO.COLONY_ID); q.setFacetMinCount(1); q.setFacet(true); q.setRows(1); q.set("facet.limit", -1); System.out.println("Solr url for getColoniesNoMPHit " + solr.getBaseURL() + "/select?" + q); QueryResponse response = solr.query(q); for (Count facet : response.getFacetField(StatisticalResultDTO.COLONY_ID).getValues()) { String value = facet.getName(); long count = facet.getCount(); res.put(value, count); } System.out.println("Done in " + (System.currentTimeMillis() - time)); return res; }
From source file:uk.ac.ebi.phenotype.service.StatisticalResultService.java
License:Apache License
public StackedBarsData getUnidimensionalData(Parameter p, List<String> genes, ArrayList<String> strains, String biologicalSample, String[] center, String[] sex) throws SolrServerException { String urlParams = ""; SolrQuery query = new SolrQuery() .addFilterQuery(StatisticalResultDTO.PARAMETER_STABLE_ID + ":" + p.getStableId()); String q = "*:*"; query.addFilterQuery((strains.size() > 1) ? "(" + StatisticalResultDTO.STRAIN_ACCESSION_ID + ":\"" + StringUtils.join(strains.toArray(), "\" OR " + StatisticalResultDTO.STRAIN_ACCESSION_ID + ":\"") + "\")" : StatisticalResultDTO.STRAIN_ACCESSION_ID + ":\"" + strains.get(0) + "\""); if (strains.size() > 0) { urlParams += "&strain=" + StringUtils.join(strains.toArray(), "&strain="); }/*from www .j a va 2 s .c o m*/ if (center != null && center.length > 0) { query.addFilterQuery( "(" + ((center.length > 1) ? StatisticalResultDTO.PHENOTYPING_CENTER + ":\"" + StringUtils.join(center, "\" OR " + StatisticalResultDTO.PHENOTYPING_CENTER + ":\"") + "\"" : StatisticalResultDTO.PHENOTYPING_CENTER + ":\"" + center[0] + "\"") + ")"); urlParams += "&phenotyping_center=" + StringUtils.join(center, "&phenotyping_center="); } if (sex != null && sex.length == 1) { if (sex[0].equalsIgnoreCase("male")) { query.addFilterQuery(StatisticalResultDTO.MALE_CONTROL_COUNT + ":[4 TO 100000]"); query.addFilterQuery(StatisticalResultDTO.MALE_MUTANT_COUNT + ":[4 TO 100000]"); } else { query.addFilterQuery(StatisticalResultDTO.FEMALE_CONTROL_COUNT + ":[4 TO 100000]"); query.addFilterQuery(StatisticalResultDTO.FEMALE_MUTANT_COUNT + ":[4 TO 100000]"); } } query.setQuery(q); query.addFilterQuery("(" + StatisticalResultDTO.FEMALE_CONTROL_COUNT + ":[4 TO 100000] OR " + StatisticalResultDTO.MALE_CONTROL_COUNT + ":[4 TO 100000])"); query.setRows(10000000); query.setFields(StatisticalResultDTO.MARKER_ACCESSION_ID, StatisticalResultDTO.FEMALE_CONTROL_MEAN, StatisticalResultDTO.MARKER_SYMBOL, StatisticalResultDTO.FEMALE_MUTANT_MEAN, StatisticalResultDTO.MALE_CONTROL_MEAN, StatisticalResultDTO.MALE_MUTANT_MEAN, StatisticalResultDTO.FEMALE_CONTROL_COUNT, StatisticalResultDTO.FEMALE_MUTANT_COUNT, StatisticalResultDTO.MALE_CONTROL_COUNT, StatisticalResultDTO.MALE_MUTANT_COUNT); query.set("group", true); query.set("group.field", StatisticalResultDTO.COLONY_ID); query.set("group.limit", 1); List<Group> groups = solr.query(query).getGroupResponse().getValues().get(0).getValues(); double[] meansArray = new double[groups.size()]; String[] genesArray = new String[groups.size()]; String[] geneSymbolArray = new String[groups.size()]; int size = 0; for (Group gr : groups) { SolrDocumentList resDocs = gr.getResult(); String sexToDisplay = null; OverviewRatio overviewRatio = new OverviewRatio(); for (SolrDocument doc : resDocs) { sexToDisplay = getSexToDisplay(sex, sexToDisplay, doc); overviewRatio.add(doc); } if (sexToDisplay != null) { Double ratio = overviewRatio.getPlotRatio(sexToDisplay); if (ratio != null) { genesArray[size] = (String) resDocs.get(0).get(StatisticalResultDTO.MARKER_ACCESSION_ID); geneSymbolArray[size] = (String) resDocs.get(0).get(StatisticalResultDTO.MARKER_SYMBOL); meansArray[size] = ratio; size++; } } } // we do the binning for all the data but fill the bins after that to // keep tract of phenotype associations int binCount = Math.min((int) Math.floor((double) groups.size() / 2), 20); ArrayList<String> mutantGenes = new ArrayList<String>(); ArrayList<String> controlGenes = new ArrayList<String>(); ArrayList<String> mutantGeneAcc = new ArrayList<String>(); ArrayList<String> controlGeneAcc = new ArrayList<String>(); ArrayList<Double> upperBounds = new ArrayList<Double>(); EmpiricalDistribution distribution = new EmpiricalDistribution(binCount); if (size > 0) { distribution.load(ArrayUtils.subarray(meansArray, 0, size - 1)); for (double bound : distribution.getUpperBounds()) { upperBounds.add(bound); } // we we need to distribute the control mutants and the // phenotype-mutants in the bins ArrayList<Double> controlM = new ArrayList<Double>(); ArrayList<Double> phenMutants = new ArrayList<Double>(); for (int j = 0; j < upperBounds.size(); j++) { controlM.add((double) 0); phenMutants.add((double) 0); controlGenes.add(""); mutantGenes.add(""); controlGeneAcc.add(""); mutantGeneAcc.add(""); } for (int j = 0; j < size; j++) { // find out the proper bin int binIndex = getBin(upperBounds, meansArray[j]); if (genes.contains(genesArray[j])) { phenMutants.set(binIndex, 1 + phenMutants.get(binIndex)); String genesString = mutantGenes.get(binIndex); if (!genesString.contains(geneSymbolArray[j])) { if (genesString.equals("")) { mutantGenes.set(binIndex, geneSymbolArray[j]); mutantGeneAcc.set(binIndex, "accession=" + genesArray[j]); } else { mutantGenes.set(binIndex, genesString + ", " + geneSymbolArray[j]); mutantGeneAcc.set(binIndex, mutantGeneAcc.get(binIndex) + "&accession=" + genesArray[j]); } } } else { // treat as control because they don't have this phenotype association String genesString = controlGenes.get(binIndex); if (!genesString.contains(geneSymbolArray[j])) { if (genesString.equalsIgnoreCase("")) { controlGenes.set(binIndex, geneSymbolArray[j]); controlGeneAcc.set(binIndex, "accession=" + genesArray[j]); } else { controlGenes.set(binIndex, genesString + ", " + geneSymbolArray[j]); controlGeneAcc.set(binIndex, controlGeneAcc.get(binIndex) + "&accession=" + genesArray[j]); } } controlM.set(binIndex, 1 + controlM.get(binIndex)); } } // System.out.println(" Mutants list " + phenMutants); // add the rest of parameters to the graph urls for (int t = 0; t < controlGeneAcc.size(); t++) { controlGeneAcc.set(t, controlGeneAcc.get(t) + urlParams); mutantGeneAcc.set(t, mutantGeneAcc.get(t) + urlParams); } StackedBarsData data = new StackedBarsData(); data.setUpperBounds(upperBounds); data.setControlGenes(controlGenes); data.setControlMutatns(controlM); data.setMutantGenes(mutantGenes); data.setPhenMutants(phenMutants); data.setControlGeneAccesionIds(controlGeneAcc); data.setMutantGeneAccesionIds(mutantGeneAcc); return data; } return null; }