--- a
+++ b/palCareEval.py
@@ -0,0 +1,157 @@
+from collections import Counter
+from datetime import datetime, timedelta
+
+from loader import get_data
+
+class Range:
+    def __init__(self, low, high):
+        self.low = self.icd9_to_float(low)
+        self.high = self.icd9_to_float(high)
+    def icd9_to_float(self, icd9):
+        try:
+            return float(icd9)
+        except ValueError:
+            extension = float(icd9[1:])
+            letter = icd9[0]
+            return ord(letter)*1000 + extension
+    def __eq__(self, other):
+        other = self.icd9_to_float(other)
+        return other >= self.low and other <= self.high
+    def __ne__(self, other):
+        return not self.__eq__(other)
+
+num_patients = 1579
+#num_patients = 100
+
+dead_patients = []
+gender = []
+age = []
+is_cancer = []
+consult_time = []
+cancer_time = []
+cancer_mgh_time = []
+cardio_mgh_time = []
+noncancer_time = []
+utilization = []
+utilization_cancer = []
+utilization_mgh_cancer = []
+utilization_noncancer = []
+utilization_mgh_cardio = []
+for i in range(num_patients):
+    p = get_data([i])[0]
+    # Filter to only dead patients
+    if p['Vital_status'] == 'Date of Death reported from SS Death Master File':
+        if p['Consult_Date'] not in [None, '']:
+            dead_patients.append(p['EMPI'])
+            gender.append(p['Gender'])
+
+            # Dates
+            dob = datetime.strptime(p['Date_of_Birth'], "%m/%d/%Y")
+            dod = datetime.strptime(p['Date_Of_Death\r'], "%m/%d/%Y")
+            doc = datetime.strptime(p['Consult_Date'], "%m/%d/%Y")
+            age.append((dod - dob).days/365.0)
+            timing = dod - doc
+            consult_time.append(timing.days)
+
+            # Diagnoses
+            cancer_icds = [Range(140.00, 209.99), Range(230.00, 239.99)]
+            is_cancer_patient = False
+            for d in p['Dia']:
+                if d['Code_Type'] == 'ICD9':
+                    try:
+                        if d['Code'] in cancer_icds:
+                            is_cancer_patient = True
+                    except:
+                        pass
+            is_cancer.append(is_cancer_patient)
+
+
+            # Stratify
+            if is_cancer_patient:
+                cancer_time.append(timing.days)
+            else:
+                noncancer_time.append(timing.days)
+
+            # Utilization
+            mgh_onc_enc_count = 0
+            mgh_cardio_enc_count = 0
+            utilization_cutoff = timedelta(days=30*3)
+            num_eol_enc = 0
+            len_eol_enc = 0
+            died_in_hospital = False
+            for enc in p['Enc']:
+                admitted = datetime.strptime(enc['Admit_Date'], "%m/%d/%Y")
+
+                # MGH?
+                if (dod - admitted) < timedelta(days=365):
+                    if enc['Clinic_Name'] == 'Medical Oncology Group (609)':
+                        mgh_onc_enc_count += 1
+                    elif enc['Clinic_Name'] == 'Cardiology (12)':
+                        mgh_cardio_enc_count += 1
+
+                if (dod - admitted) < utilization_cutoff:
+                    num_eol_enc += 1
+                    try:
+                        discharged = datetime.strptime(enc['Discharge_Date'], "%m/%d/%Y")
+                        if enc['Inpatient_Outpatient'] == 'Inpatient':
+                            len_eol_enc += (discharged-admitted).days
+                            if dod == discharged:
+                                died_in_hospital = True
+                    except:
+                        pass
+            utilization.append((timing.days, num_eol_enc, len_eol_enc, died_in_hospital))
+            if is_cancer_patient:
+                utilization_cancer.append((timing.days, num_eol_enc, len_eol_enc, died_in_hospital))
+            else:
+                utilization_noncancer.append((timing.days, num_eol_enc, len_eol_enc, died_in_hospital))
+
+            # Is an MGH Oncology patient
+            if mgh_onc_enc_count >= 2:
+                utilization_mgh_cancer.append((timing.days, num_eol_enc, len_eol_enc, died_in_hospital))
+                cancer_mgh_time.append(timing.days)
+
+            if not is_cancer_patient and mgh_cardio_enc_count >= 2:
+                utilization_mgh_cardio.append((timing.days, num_eol_enc, len_eol_enc, died_in_hospital))
+                cardio_mgh_time.append(timing.days)
+    else:
+        if p['Vital_status'] != 'Not reported as deceased':
+            print "***********************"
+            print p['Vital_status'] 
+            print "***********************"
+# Step 1:
+print "Percent of patients dead: " + str(float(len(dead_patients))/num_patients)
+
+# Step 2:
+# Age
+print "Age distribution:"
+print age
+# Gender
+print "Gender Distribution: " + str(Counter(gender))
+# Cancer?
+print "Is Cancer Patient: " + str(Counter(is_cancer))
+
+# Step 3:
+print "Consult timing distribution:"
+print consult_time
+
+# Step 4:
+print "Cancer patient consult times:"
+print cancer_time
+print "MGH Cancer patient consult times:"
+print cancer_mgh_time
+print "Non-Cancer patient consult times:"
+print noncancer_time 
+print "MGH Cardio patient consult times:"
+print cardio_mgh_time
+
+# Step 5:
+print "Utilization"
+print utilization
+print "Utilization: Cancer"
+print utilization_cancer
+print "Utilization: MGH Cancer"
+print utilization_mgh_cancer
+print "Utilization: Non Cancer"
+print utilization_noncancer
+print "Utilization: MGH Cardio"
+print utilization_mgh_cardio