Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cohort reporting additions #230

Merged
merged 8 commits into from
Aug 10, 2017
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package org.ohdsi.webapi.cohortresults;


/**
*
*/
public class DataCompletenessAttr {
private String covariance;
private float genderP;
private float raceP;
private float ethP;

/**
* @return the covariance
*/
public String getCovariance() {
return covariance;
}

/**
* @param covariance the covariance to set
*/
public void setCovariance(String covariance) {
this.covariance = covariance;
}

/**
* @return the genderP
*/
public float getGenderP() {
return genderP;
}

/**
* @param genderP the genderP to set
*/
public void setGenderP(float genderP) {
this.genderP = genderP;
}

/**
* @return the raceP
*/
public float getRaceP() {
return raceP;
}

/**
* @param raceP the raceP to set
*/
public void setRaceP(float raceP) {
this.raceP = raceP;
}

/**
* @return the ethP
*/
public float getEthP() {
return ethP;
}

/**
* @param ethP the ethP to set
*/
public void setEthP(float ethP) {
this.ethP = ethP;
}


}
56 changes: 56 additions & 0 deletions src/main/java/org/ohdsi/webapi/cohortresults/EntropyAttr.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package org.ohdsi.webapi.cohortresults;

/**
*
*/
public class EntropyAttr {

private String date;

private float entropy;

private String insitution;

/**
* @return the date
*/
public String getDate() {
return date;
}

/**
* @param date the date to set
*/
public void setDate(String date) {
this.date = date;
}

/**
* @return the entropy
*/
public float getEntropy() {
return entropy;
}

/**
* @param entropy the entropy to set
*/
public void setEntropy(float entropy) {
this.entropy = entropy;
}

/**
* @return the insitution
*/
public String getInsitution() {
return insitution;
}

/**
* @param insitution the insitution to set
*/
public void setInsitution(String insitution) {
this.insitution = insitution;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package org.ohdsi.webapi.cohortresults.mapper;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.ohdsi.webapi.model.results.AnalysisResults;
import org.springframework.jdbc.core.RowMapper;


/**
*
*/
public class AnalysisResultsMapper implements RowMapper<AnalysisResults> {

/**
* @see org.springframework.jdbc.core.RowMapper#mapRow(java.sql.ResultSet, int)
*/
@Override
public AnalysisResults mapRow(ResultSet rs, int rowNum) throws SQLException {
AnalysisResults ar = new AnalysisResults();
ar.setAnalysisId(rs.getInt("ANALYSIS_ID"));
ar.setCohortDefinitionId(rs.getInt("COHORT_DEFINITION_ID"));
ar.setStratum1(rs.getString("STRATUM_1"));
ar.setStratum2(rs.getString("STRATUM_2"));
ar.setStratum3(rs.getString("STRATUM_3"));
ar.setStratum4(rs.getString("STRATUM_4"));
ar.setStratum5(rs.getString("STRATUM_5"));
ar.setCountValue(rs.getInt("count_value"));

return ar;
}

}
128 changes: 128 additions & 0 deletions src/main/java/org/ohdsi/webapi/service/CohortResultsService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -44,12 +45,16 @@
import org.ohdsi.webapi.cohortresults.CohortSpecificSummary;
import org.ohdsi.webapi.cohortresults.CohortSpecificTreemap;
import org.ohdsi.webapi.cohortresults.CohortVisitsDrilldown;
import org.ohdsi.webapi.cohortresults.DataCompletenessAttr;
import org.ohdsi.webapi.cohortresults.EntropyAttr;
import org.ohdsi.webapi.cohortresults.HierarchicalConceptRecord;
import org.ohdsi.webapi.cohortresults.ScatterplotRecord;
import org.ohdsi.webapi.cohortresults.VisualizationData;
import org.ohdsi.webapi.cohortresults.VisualizationDataRepository;
import org.ohdsi.webapi.cohortresults.mapper.AnalysisResultsMapper;
import org.ohdsi.webapi.helper.ResourceHelper;
import org.ohdsi.webapi.model.results.Analysis;
import org.ohdsi.webapi.model.results.AnalysisResults;
import org.ohdsi.webapi.source.Source;
import org.ohdsi.webapi.source.SourceDaimon;
import org.ohdsi.webapi.util.SessionUtils;
Expand Down Expand Up @@ -1595,7 +1600,130 @@ public List<CohortAttribute> getHeraclesHeel(@PathParam("id") final int id,

return attrs;
}

public List<AnalysisResults> getCohortAnalysesForDataCompleteness(@PathParam("id") final int id,
@PathParam("sourceKey") String sourceKey) {

String sql = null;
sql = ResourceHelper.GetResourceAsString("/resources/cohortresults/sql/datacompleteness/getCohortDataCompleteness.sql");

Source source = getSourceRepository().findBySourceKey(sourceKey);
String resultsTableQualifier = source.getTableQualifier(SourceDaimon.DaimonType.Results);

sql = SqlRender.renderSql(sql, new String[]{"tableQualifier", "cohortDefinitionId"},
new String[]{resultsTableQualifier, String.valueOf(id)});
sql = SqlTranslate.translateSql(sql, getSourceDialect(), source.getSourceDialect());


AnalysisResultsMapper arm = new AnalysisResultsMapper();

return getSourceJdbcTemplate(source).query(sql, arm);
}

@GET
@Path("{sourceKey}/{id}/datacompleteness")
@Produces(MediaType.APPLICATION_JSON)
public List<DataCompletenessAttr> getDataCompleteness(@PathParam("id") final int id,
@PathParam("sourceKey") String sourceKey) {
List<AnalysisResults> arl = this.getCohortAnalysesForDataCompleteness(id, sourceKey);

List<DataCompletenessAttr> dcal = new ArrayList<DataCompletenessAttr>();

Map<Integer, AnalysisResults> resultMap = new HashMap<Integer, AnalysisResults>();

for(AnalysisResults ar : arl){
resultMap.put(ar.getAnalysisId(), ar);
}

DataCompletenessAttr aca = new DataCompletenessAttr();
aca.setCovariance("0~10");
aca.setGenderP(Float.parseFloat(resultMap.get(2001).getStratum1()));
aca.setRaceP(Float.parseFloat(resultMap.get(2011).getStratum1()));
aca.setEthP(Float.parseFloat(resultMap.get(2021).getStratum1()));
dcal.add(aca);

aca = new DataCompletenessAttr();
aca.setCovariance("10~20");
aca.setGenderP(Float.parseFloat(resultMap.get(2002).getStratum1()));
aca.setRaceP(Float.parseFloat(resultMap.get(2012).getStratum1()));
aca.setEthP(Float.parseFloat(resultMap.get(2022).getStratum1()));
dcal.add(aca);

aca = new DataCompletenessAttr();
aca.setCovariance("20~30");
aca.setGenderP(Float.parseFloat(resultMap.get(2003).getStratum1()));
aca.setRaceP(Float.parseFloat(resultMap.get(2013).getStratum1()));
aca.setEthP(Float.parseFloat(resultMap.get(2023).getStratum1()));
dcal.add(aca);

aca = new DataCompletenessAttr();
aca.setCovariance("30~40");
aca.setGenderP(Float.parseFloat(resultMap.get(2004).getStratum1()));
aca.setRaceP(Float.parseFloat(resultMap.get(2014).getStratum1()));
aca.setEthP(Float.parseFloat(resultMap.get(2024).getStratum1()));
dcal.add(aca);

aca = new DataCompletenessAttr();
aca.setCovariance("40~50");
aca.setGenderP(Float.parseFloat(resultMap.get(2005).getStratum1()));
aca.setRaceP(Float.parseFloat(resultMap.get(2015).getStratum1()));
aca.setEthP(Float.parseFloat(resultMap.get(2025).getStratum1()));
dcal.add(aca);

aca = new DataCompletenessAttr();
aca.setCovariance("50~60");
aca.setGenderP(Float.parseFloat(resultMap.get(2006).getStratum1()));
aca.setRaceP(Float.parseFloat(resultMap.get(2016).getStratum1()));
aca.setEthP(Float.parseFloat(resultMap.get(2026).getStratum1()));
dcal.add(aca);

aca = new DataCompletenessAttr();
aca.setCovariance("60+");
aca.setGenderP(Float.parseFloat(resultMap.get(2007).getStratum1()));
aca.setRaceP(Float.parseFloat(resultMap.get(2017).getStratum1()));
aca.setEthP(Float.parseFloat(resultMap.get(2027).getStratum1()));
dcal.add(aca);

return dcal;
}

public List<AnalysisResults> getCohortAnalysesEntropy(final int id, String sourceKey) {

String sql = null;
sql = ResourceHelper
.GetResourceAsString("/resources/cohortresults/sql/entropy/getEntropy.sql");

Source source = getSourceRepository().findBySourceKey(sourceKey);
String resultsTableQualifier = source.getTableQualifier(SourceDaimon.DaimonType.Results);

sql = SqlRender.renderSql(sql, new String[] { "tableQualifier", "cohortDefinitionId" },
new String[] { resultsTableQualifier, String.valueOf(id) });
sql = SqlTranslate.translateSql(sql, getSourceDialect(), source.getSourceDialect());

AnalysisResultsMapper arm = new AnalysisResultsMapper();

return getSourceJdbcTemplate(source).query(sql, arm);
}

@GET
@Path("{sourceKey}/{id}/entropy")
@Produces(MediaType.APPLICATION_JSON)
public List<EntropyAttr> getEntropy(@PathParam("id") final int id,
@PathParam("sourceKey") String sourceKey) {
List<AnalysisResults> arl = this.getCohortAnalysesEntropy(id, sourceKey);

List<EntropyAttr> el = new ArrayList<EntropyAttr>();

for(AnalysisResults ar : arl){
EntropyAttr ea = new EntropyAttr();
ea.setDate(ar.getStratum1());
ea.setEntropy(Float.parseFloat(ar.getStratum2()));
el.add(ea);
}

return el;
}

private String JoinArray(final String[] array) {
String result = "";

Expand Down
Loading