All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edu.emory.cci.aiw.dsb.mimicii.MIMIC2v26DataSourceBackend Maven / Gradle / Ivy

The newest version!
package edu.emory.cci.aiw.dsb.mimicii;

import java.io.IOException;
import org.protempa.backend.annotations.BackendInfo;
import org.protempa.backend.dsb.relationaldb.ColumnSpec;
import org.protempa.backend.dsb.relationaldb.Operator;
import org.protempa.backend.dsb.relationaldb.EntitySpec;
import org.protempa.backend.dsb.relationaldb.JDBCDateTimeTimestampDateValueFormat;
import org.protempa.backend.dsb.relationaldb.JDBCDateTimeTimestampPositionParser;
import org.protempa.backend.dsb.relationaldb.JDBCPositionFormat;
import org.protempa.backend.dsb.relationaldb.JoinSpec;
import org.protempa.backend.dsb.relationaldb.PropertySpec;
import org.protempa.backend.dsb.relationaldb.ReferenceSpec;
import org.protempa.backend.dsb.relationaldb.RelationalDbDataSourceBackend;
import org.protempa.backend.dsb.relationaldb.StagingSpec;
import org.protempa.backend.dsb.relationaldb.mappings.Mappings;
import org.protempa.backend.dsb.relationaldb.mappings.ResourceMappingsFactory;
import org.protempa.proposition.value.AbsoluteTimeGranularity;
import org.protempa.proposition.value.AbsoluteTimeUnit;
import org.protempa.proposition.value.ValueType;

/**
 *
 * @author Andrew Post
 */
@BackendInfo(displayName = "MIMIC II")
public class MIMIC2v26DataSourceBackend extends RelationalDbDataSourceBackend {

    private static JDBCPositionFormat jdbcTimestampPositionParser =
            new JDBCDateTimeTimestampPositionParser();
    public MIMIC2v26DataSourceBackend() {
        setSchemaName("mimic2v26");
        setDefaultKeyIdTable("d_patients");
        setDefaultKeyIdColumn("subject_id");
        setDefaultKeyIdJoinKey("subject_id");
        setMappingsFactory(new ResourceMappingsFactory("/etc/mimic2v26/", getClass()));
    }

    @Override
    protected EntitySpec[] constantSpecs(String keyIdSchema, String keyIdTable, String keyIdColumn, String keyIdJoinKey) throws IOException {
        String schemaName = getSchemaName();
        EntitySpec[] constantSpecs = {
            new EntitySpec("Patients", 
                null, 
                new String[]{"Patient"}, 
                false, 
                new ColumnSpec(keyIdSchema, keyIdTable, keyIdColumn), 
                new ColumnSpec[]{new ColumnSpec(keyIdSchema, keyIdTable, keyIdColumn)}, 
                null, 
                null, 
                new PropertySpec[]{
                    new PropertySpec("patientId", null, new ColumnSpec(keyIdSchema, keyIdTable, "subject_id"), ValueType.NOMINALVALUE)
                }, 
                new ReferenceSpec[]{
                    new ReferenceSpec("encounters", "Encounters", new ColumnSpec[]{new ColumnSpec(keyIdSchema, keyIdTable, new JoinSpec("subject_id", "subject_id", new ColumnSpec(schemaName, "demographic_detail", "hadm_id")))}, ReferenceSpec.Type.MANY), 
                    new ReferenceSpec("patientDetails", "Patient Details", new ColumnSpec[]{new ColumnSpec(keyIdSchema, keyIdTable, new JoinSpec("subject_id", "subject_id", new ColumnSpec(schemaName, "demographic_detail", "hadm_id")))}, ReferenceSpec.Type.MANY)}, 
                null, null, null, null, null, null, null, null),
            new EntitySpec("Patient Details", 
                null, 
                new String[]{"PatientDetails"}, 
                true, 
                new ColumnSpec(keyIdSchema, keyIdTable, keyIdColumn, new JoinSpec("subject_id", "subject_id", new ColumnSpec(schemaName, "demographic_detail", "hadm_id"))), 
                new ColumnSpec[]{new ColumnSpec(schemaName, "demographic_detail", "hadm_id")}, 
                null, 
                null, 
                new PropertySpec[]{
                    new PropertySpec("patientId", null, new ColumnSpec(schemaName, "demographic_detail", "hadm_id"), ValueType.NOMINALVALUE), 
                    new PropertySpec("gender", null, new ColumnSpec(schemaName, "demographic_detail", new JoinSpec("subject_id", "subject_id", new ColumnSpec(schemaName, "d_patients", "sex", Operator.EQUAL_TO, getMappingsFactory().getInstance("gender_09102013.txt"), true))), ValueType.NOMINALVALUE), 
                    new PropertySpec("race", null, new ColumnSpec(schemaName, "demographic_detail", "ethnicity_itemid", Operator.EQUAL_TO, getMappingsFactory().getInstance("race_09102013.txt"), true), ValueType.NOMINALVALUE), 
                    new PropertySpec("ethnicity", null, new ColumnSpec(schemaName, "demographic_detail", "ethnicity_itemid", Operator.EQUAL_TO, getMappingsFactory().getInstance("ethnicity_09102013.txt"), true), ValueType.NOMINALVALUE),
                    new PropertySpec("dateOfBirth", null, new ColumnSpec(schemaName, "demographic_detail", new JoinSpec("subject_id", "subject_id", new ColumnSpec(schemaName, "d_patients", "dob"))), ValueType.DATEVALUE, new JDBCDateTimeTimestampDateValueFormat()),
                    new PropertySpec("dateOfDeath", null, new ColumnSpec(schemaName, "demographic_detail", new JoinSpec("subject_id", "subject_id", new ColumnSpec(schemaName, "d_patients", "dod"))), ValueType.DATEVALUE, new JDBCDateTimeTimestampDateValueFormat()),
                    new PropertySpec("maritalStatus", null, new ColumnSpec(schemaName, keyIdTable, new JoinSpec("subject_id", "subject_id", new ColumnSpec(schemaName, "demographic_detail", "marital_status_itemid", Operator.EQUAL_TO, getMappingsFactory().getInstance("marital_status_09102013.txt"), true))), ValueType.NOMINALVALUE),
                    new PropertySpec("vitalStatus", null, new ColumnSpec(schemaName, "demographic_detail", new JoinSpec("subject_id", "subject_id", new ColumnSpec(schemaName, "d_patients", "hospital_expire_flg", Operator.EQUAL_TO, getMappingsFactory().getInstance("demographics_vital_status_09182015.txt"), true))), ValueType.NOMINALVALUE),
                }, 
                new ReferenceSpec[]{
                    new ReferenceSpec("encounters", "Encounters", new ColumnSpec[]{new ColumnSpec(schemaName, "demographic_detail", "hadm_id")}, ReferenceSpec.Type.MANY), 
                    new ReferenceSpec("patient", "Patients", new ColumnSpec[]{new ColumnSpec(schemaName, "demographic_detail", "subject_id")}, ReferenceSpec.Type.ONE)
                }, 
                null, null, null, null, null, null, null, null),};
        return constantSpecs;
    }

    @Override
    protected EntitySpec[] eventSpecs(String keyIdSchema, String keyIdTable, String keyIdColumn, String keyIdJoinKey) throws IOException {
        String schemaName = getSchemaName();
        Mappings icd9DxMappings = getMappingsFactory().getInstance("icd9_diagnosis_09102013.txt");
        Mappings icd9PxMappings = getMappingsFactory().getInstance("icd9v32_procedure_09102015.txt");
        EntitySpec[] eventSpecs = {
            new EntitySpec("Encounters", 
                null,
                new String[]{"Encounter"}, 
                true, 
                new ColumnSpec(keyIdSchema, keyIdTable, keyIdColumn, new JoinSpec(getDefaultKeyIdJoinKey(), "subject_id", new ColumnSpec(schemaName, "demographic_detail", new JoinSpec("hadm_id", "hadm_id", new ColumnSpec(schemaName, "admissions"))))), 
                new ColumnSpec[]{new ColumnSpec(schemaName, "admissions", "hadm_id")}, 
                new ColumnSpec(schemaName, "admissions", "admit_dt"), 
                new ColumnSpec(schemaName, "admissions", "disch_dt"), 
                new PropertySpec[]{
                    new PropertySpec("encounterId", null, new ColumnSpec(schemaName, "admissions", "hadm_id"), ValueType.NOMINALVALUE), 
                    new PropertySpec("type", null, new ColumnSpec(schemaName, "admissions", new JoinSpec("hadm_id", "hadm_id", new ColumnSpec(schemaName, "demographic_detail", "admission_type_itemid", Operator.EQUAL_TO, getMappingsFactory().getInstance("type_encounter_09102013.txt"), true))), ValueType.NOMINALVALUE), 
                }, 
                new ReferenceSpec[]{
                    new ReferenceSpec("patient", "Patients", new ColumnSpec[]{new ColumnSpec(schemaName, "admissions", "subject_id")}, ReferenceSpec.Type.ONE), 
                    new ReferenceSpec("EK_ICD9D", "Diagnosis Codes", new ColumnSpec[]{new ColumnSpec(schemaName, "admissions", "hadm_id"), new ColumnSpec(schemaName, "admissions", new JoinSpec("hadm_id", "hadm_id", new ColumnSpec(schemaName, "icd9", "sequence")))}, ReferenceSpec.Type.MANY), 
                    new ReferenceSpec("EK_ICD9P", "Procedure Codes", new ColumnSpec[]{new ColumnSpec(schemaName, "admissions", "hadm_id"), new ColumnSpec(schemaName, "admissions", new JoinSpec("hadm_id", "hadm_id", new ColumnSpec(schemaName, "procedureevents", "sequence_num")))}, ReferenceSpec.Type.MANY), 
                    new ReferenceSpec("patientDetails", "Patient Details", new ColumnSpec[]{new ColumnSpec(schemaName, "admissions", "hadm_id")}, ReferenceSpec.Type.ONE),
                    new ReferenceSpec("EK_LABS", "Labs", new ColumnSpec[]{new ColumnSpec(schemaName, "admissions", "hadm_id"), new ColumnSpec(schemaName, "admissions", new JoinSpec("hadm_id", "hadm_id", new ColumnSpec(schemaName, "labevents", "itemid"))), new ColumnSpec(schemaName, "admissions", new JoinSpec("hadm_id", "hadm_id", new ColumnSpec(schemaName, "labevents", "charttime")))}, ReferenceSpec.Type.MANY)
                }, 
                null, null, null, null, null, AbsoluteTimeGranularity.DAY, jdbcTimestampPositionParser, null),
            new EntitySpec("Diagnosis Codes", 
                null, 
                icd9DxMappings.readTargets(), 
                true, 
                new ColumnSpec(keyIdSchema, keyIdTable, keyIdColumn, new JoinSpec("subject_id", "subject_id", new ColumnSpec(schemaName, "demographic_detail", new JoinSpec("hadm_id", "hadm_id", new ColumnSpec(schemaName, "admissions", new JoinSpec("hadm_id", "hadm_id", new ColumnSpec(schemaName, "icd9", "code"))))))), 
                new ColumnSpec[]{new ColumnSpec(schemaName, "icd9", "hadm_id"), new ColumnSpec(schemaName, "icd9", "sequence")}, 
                new ColumnSpec(schemaName, "icd9", new JoinSpec("hadm_id", "hadm_id", new ColumnSpec(schemaName, "admissions", "disch_dt"))), 
                null, 
                new PropertySpec[]{
                    new PropertySpec("code", null, new ColumnSpec(schemaName, "icd9", "code"), ValueType.NOMINALVALUE), 
                    new PropertySpec("DXPRIORITY", null, new ColumnSpec(schemaName, "icd9", "sequence", Operator.EQUAL_TO, getMappingsFactory().getInstance("icd9_diagnosis_position_09102013.txt")), ValueType.NOMINALVALUE)}, 
                null, 
                null, 
                new ColumnSpec(schemaName, "icd9", "code", Operator.EQUAL_TO, icd9DxMappings, true), 
                null, null, null, AbsoluteTimeGranularity.DAY, jdbcTimestampPositionParser, AbsoluteTimeUnit.YEAR,
                new int[]{5,2}),
            new EntitySpec("Procedure Codes", 
                null, 
                icd9PxMappings.readTargets(), 
                true, 
                new ColumnSpec(keyIdSchema, keyIdTable, keyIdColumn, new JoinSpec("subject_id", "subject_id", new ColumnSpec(schemaName, "demographic_detail", new JoinSpec("hadm_id", "hadm_id", new ColumnSpec(schemaName, "admissions", new JoinSpec("hadm_id", "hadm_id", new ColumnSpec(schemaName, "procedureevents"))))))), 
                new ColumnSpec[]{new ColumnSpec(schemaName, "procedureevents", "hadm_id"), new ColumnSpec(schemaName, "procedureevents", "sequence_num")}, 
                new ColumnSpec(schemaName, "procedureevents", "proc_dt"), 
                null, 
                new PropertySpec[]{
                    new PropertySpec("code", null, new ColumnSpec(schemaName, "procedureevents", new JoinSpec("itemid", "itemid", new ColumnSpec(schemaName, "d_codeditems", "code"))), ValueType.NOMINALVALUE)
                },
                null, 
                null, 
                new ColumnSpec(schemaName, "procedureevents", new JoinSpec("itemid", "itemid", new ColumnSpec(schemaName, "d_codeditems", "code", Operator.EQUAL_TO, icd9PxMappings, true))), 
                null, null, null, AbsoluteTimeGranularity.MINUTE, jdbcTimestampPositionParser, null,
                new int[]{5, 2}),
        };
        return eventSpecs;
    }

    @Override
    protected EntitySpec[] primitiveParameterSpecs(String keyIdSchema, String keyIdTable, String keyIdColumn, String keyIdJoinKey) throws IOException {
        String schemaName = getSchemaName();
        Mappings labsMappings = getMappingsFactory().getInstance("lab_09102015.txt");
//        Mappings cardiacOutputMappings = getMappingsFactory().getInstance("cardiac_output_09102015.txt");
        EntitySpec[] entitySpecs = {
            new EntitySpec("Labs", null,
		labsMappings.readTargets(),
		true, 
                new ColumnSpec(keyIdSchema, keyIdTable, keyIdColumn, new JoinSpec("subject_id", "subject_id", new ColumnSpec(schemaName, "demographic_detail", new JoinSpec("hadm_id", "hadm_id", new ColumnSpec(schemaName, "admissions", new JoinSpec("hadm_id", "hadm_id", new ColumnSpec(schemaName, "labevents"))))))), 
                new ColumnSpec[]{new ColumnSpec(schemaName, "labevents", "hadm_id"), new ColumnSpec(schemaName, "labevents", "itemid"), new ColumnSpec(schemaName, "labevents", "charttime")}, 
		new ColumnSpec(schemaName, "labevents", "charttime"),
		null, 
                new PropertySpec[]{
				new PropertySpec("unitOfMeasure", null, new ColumnSpec(schemaName, "labevents", "valueuom"), ValueType.NOMINALVALUE),
				/*new PropertySpec("referenceRangeLow", null, new ColumnSpec(schemaName, "fact_result_lab", "reference_range_low_val"), ValueType.NUMBERVALUE), new PropertySpec("referenceRangeHigh", null, new ColumnSpec(schemaName, "fact_result_lab", "reference_range_high_val"), ValueType.NUMBERVALUE), */
				new PropertySpec("interpretation", null, new ColumnSpec(schemaName, "labevents", "flag"), ValueType.NOMINALVALUE)}, 
                null,
                null,
		new ColumnSpec(schemaName, "labevents", new JoinSpec("itemid", "itemid", new ColumnSpec(schemaName, "d_labitems", "loinc_code", Operator.EQUAL_TO, labsMappings, true))), 
                null,
		new ColumnSpec(schemaName, "labevents", "value"),
                ValueType.VALUE, AbsoluteTimeGranularity.MINUTE,
		jdbcTimestampPositionParser, null),
        };
        return entitySpecs;
    }

    @Override
    protected StagingSpec[] stagedSpecs(String keyIdSchema, String keyIdTable, String keyIdColumn, String keyIdJoinKey) throws IOException {
        return new StagingSpec[0];
    }

    @Override
    public String getKeyType() {
        return "Patient";
    }

    @Override
    public String getKeyTypeDisplayName() {
        return "patient";
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy