def cancer_table(conn, cursor, file_number): table_cancer = "previous_cancer_history" type_of_cancer_list = [] year_diagnosis_list = [] treat_all = [] type_all = [] duration_all = [] data_return = [] add_cancer = True while add_cancer: type_of_cancer = input("Type of Cancer: ") type_of_cancer_list.append(type_of_cancer) year_diagnosis = input("Year of diagnosis: ") year_diagnosis_list.append(year_diagnosis) col = ("File_number, Type_Cancer, Year_diagnosis") data = file_number, type_of_cancer, year_diagnosis sql.insert(conn, cursor, table_cancer, col, data) print("Please enter the type of treatment used: ") treat_list = [] type_list = [] duration_list = [] treated, type, duration = ("NA", ) * 3 for treatment in PatientInfo.previous_cancer_treatment: treat = ask_y_n(treatment) if treat: treat_list.append(treatment) type_treat = input("Type of " + treatment) type_list.append(type_treat) duration_treat = input("Duration of " + treatment) duration_list.append(duration_treat) data = treatment, type_treat, duration_treat columns = [ treatment, ("type_" + treatment), ("duration_" + treatment) ] treated = "; ".join(treat_list) type = "; ".join(type_list) duration = "; ".join(duration_list) sql.update_multiple(conn, cursor, table_cancer, columns, file_number, data) elif not treat: index_no = "No " + treatment type_treat, duration_treat = ("NA", ) * 2 data = index_no, type_treat, duration_treat columns = [ treatment, ("type_" + treatment), ("duration_" + treatment) ] sql.update_multiple(conn, cursor, table_cancer, columns, file_number, data) treat_all.append(treated) type_all.append(type) duration_all.append(duration) add_cancer = ask_y_n("Additional cancer history") all_data = [ type_of_cancer_list, year_diagnosis_list, treat_all, type_all, duration_all ] for index in all_data: data_joint = "|".join(index) data_return.append(data_joint) return tuple(data_return)
def cancer_table(conn, cursor, file_number): table_cancer = "Previous_Cancer_History" type_of_cancer_list = [] year_diagnosis_list = [] treat_all = [] type_all = [] duration_all = [] data_return = [] add_cancer = True while add_cancer: type_of_cancer = input("Type of Cancer: ") type_of_cancer_list.append(type_of_cancer) year_diagnosis = input("Year of diagnosis: ") year_diagnosis_list.append(year_diagnosis) col = ("File_number, Type_Cancer, Year_diagnosis") data = file_number, type_of_cancer, year_diagnosis insert(conn, cursor, table_cancer, col, data) print("Please enter the type of treatment used: ") treatment = [ "Surgery", "Radiation", "Chemotherapy", "Hormone", "Alternative", "HomeRemedy" ] treat_list = [] type_list = [] duration_list = [] treated, type, duration = ("NA", ) * 3 for index in treatment: treat = ask_y_n(index) if treat: treat_list.append(index) type_treat = input("Type of " + index) type_list.append(type_treat) duration_treat = input("Duration of " + index) duration_list.append(duration_treat) data = index, type_treat, duration_treat columns = [index, ("Type_" + index), ("Duration_" + index)] treated = "; ".join(treat_list) type = "; ".join(type_list) duration = "; ".join(duration_list) update_multiple(conn, cursor, table_cancer, columns, file_number, data) elif not treat: index_no = "No " + index type_treat, duration_treat = ("NA", ) * 2 data = index_no, type_treat, duration_treat columns = [index, ("Type_" + index), ("Duration_" + index)] update_multiple(conn, cursor, table_cancer, columns, file_number, data) treat_all.append(treated) type_all.append(type) duration_all.append(duration) add_cancer = ask_y_n("Additional cancer history") all_data = [ type_of_cancer_list, year_diagnosis_list, treat_all, type_all, duration_all ] for index in all_data: data_joint = "|".join(index) data_return.append(data_joint) return tuple(data_return)
def family_cancer_table(conn, cursor, file_number): add_family = True type_cancer_list, relation_degree_list, type_relation_list, age_detect_list = [], [], [], [] all_data = [] while add_family: type_of_cancer = input("Type of Cancer: ") type_cancer_list.append(type_of_cancer) relation_to_patient = ask_option( "Relation to patient", ["Immediate Family", "Maternal Family", "Paternal Family"]) relation_degree_list.append(relation_to_patient) type_relation = input("Specific Relationship:") type_relation_list.append(type_relation) age_at_detection_yrs = input('Age at detection (yrs) :') age_detect_list.append(age_at_detection_yrs) family_history = file_number, type_of_cancer, relation_to_patient, type_relation, age_at_detection_yrs family_history_list = "; ".join([ type_of_cancer, relation_to_patient, type_relation, age_at_detection_yrs ]) all_data.append(family_history_list) columns = 'File_number, Type_Cancer, Relation_to_Patient, Type_Relation, Age_at_detection_yrs' table = "Family_Cancer_History" insert(conn, cursor, table, columns, family_history) add_family = ask_y_n("Add more family cancer history? ") all_data_flat = "|".join(all_data) return (all_data_flat)
def physical_activity_table(conn, cursor, file_number): table_act = "Physical_Activity" columns = ", ".join(pccm_names.names_info("phys_act_table")) add_act = True type_phys_list, freq_phys_list = [], [] while add_act: type_phys_act = input("Type of physical activity: ") type_phys_list.append(type_phys_act) freq_phys_act = input("Frequency of physical activity: ") freq_phys_list.append(freq_phys_act) data = file_number, type_phys_act, freq_phys_act insert(conn, cursor, table_act, columns, data) add_act = ask_y_n("Add further activities?") type_phys = '; '.join(type_phys_list) freq_phys = '; '.join(freq_phys_list) return (type_phys, freq_phys)
def med_history_table(conn, cursor, file_number): add_history = True diagnosis_date_list, treatment_list, condition_list = [], [], [] while add_history: condition = input("Condition : ") condition_list.append(condition) diagnosis_date = input("Date of diagnosis: ") diagnosis_date_list.append(diagnosis_date) treatment = input("Treatment: ") treatment_list.append(treatment) history = file_number, condition, diagnosis_date, treatment table_med = "General_Medical_History" columns = "File_number, Condition, Diagnosis_date, Treatment" insert(conn, cursor, table_med, columns, history) add_history = ask_y_n('Add more history') condition_hist = '; '.join(condition_list) treatment_hist = '; '.join(treatment_list) diagnosis_date_hist = "; ".join(diagnosis_date_list) return (condition_hist, diagnosis_date_hist, treatment_hist)
def feed_duration(conn, cursor, file_number, children_number): table = "breast_feeding" child_list, feeding_duration_list, feeding_details_list = [], [], [] child_number = int(children_number) for index in range(0, child_number): kid = str(index + 1) kid_add = "Child " + kid child_list.append(kid_add) feeding_duration = input("Breast feeding duration for " + kid_add + " (months) ?") feeding_duration_list.append(feeding_duration) feeding_details = ask_option("Breast feeding for child " + kid, PatientInfo.breast_feeding) feeding_details_list.append(feeding_details) columns = 'file_number, child_number, feeding_duration, breast_usage_feeding' data = file_number, kid, feeding_duration, feeding_details sql.insert(conn, cursor, table, columns, data) data_list = [child_list, feeding_duration_list, feeding_details_list] data_return = join_lists(data_list, "; ") return (data_return)
def nut_supp_table(conn, cursor, file_number): type_nut_list, quant_nut_list, duration_nut_list = [], [], [] add_supp = True table_nut = "Nutritional_Supplements" columns = ", ".join(pccm_names.names_info("nut_sup")) while add_supp: nut_supplements_type = input("Type of nutritional supplements taken: ") type_nut_list.append(nut_supplements_type) nut_supplements_quant = input( "Quantity of nutritional supplements taken per day: ") quant_nut_list.append(nut_supplements_quant) nut_supplements_duration = input( "Duration of nutritional supplements use: ") duration_nut_list.append(nut_supplements_duration) new_data = file_number, nut_supplements_type, nut_supplements_quant, nut_supplements_duration insert(conn, cursor, table_nut, columns, new_data) add_supp = ask_y_n('Add more nutritional supplements?') type_nut = '; '.join(type_nut_list) quant_nut = '; '.join(quant_nut_list) duration_nut = "; ".join(duration_nut_list) return (type_nut, quant_nut, duration_nut)
def feed_duration(conn, cursor, file_number, children_number): table = "Breast_Feeding" child_list, feeding_duration_list, feeding_details_list = [], [], [] child_number = int(children_number) for index in range(0, child_number): kid = str(index + 1) kid_add = "Child " + kid child_list.append(kid_add) feeding_duration = input("Breast feeding duration for " + kid_add + " (months) ?") feeding_duration_list.append(feeding_duration) category = "Breast feeding for child " + kid options = ["Right Breast", "Left Breast", "Both Breasts", "Other"] feeding_details = ask_option(category, options) feeding_details_list.append(feeding_details) columns = 'File_number, Child_number, Feeding_duration, Breast_usage_feeding' data = file_number, kid, feeding_duration, feeding_details insert(conn, cursor, table, columns, data) data_list = [child_list, feeding_duration_list, feeding_details_list] data_return = join_lists(data_list, "; ") return (data_return)
#read from excel with same col names and distribution as in table file_to_read = "D:/Documents/IISER/Prashanti_docs/Breast_Cancer_FFPE_blocks_database_Biopsy_dk08062018.xlsx" data = pd.read_excel(file_to_read, header=1, dtype='object', usecols='A:AB') update_by = "dk from ruhi/shaheen data" last_update = datetime.now().strftime("%Y-%b-%d %H:%M") module_names = ["biopsy_report_info", "tumour_biopsy_data", "lymphnode_biopsy"] col_list = ["File_number"] for index in module_names: col_list = col_list + pccm_names.names_biopsy(index) columns = ", ".join(col_list) for index in range(0, len(data)): data_list = list(data.loc[index]) data_list.append(update_by) data_list.append(last_update) sql.insert(conn_all, cursor_all, table, columns, data_list) #for surgery_report table = "Surgery_Block_Report_Data" if sql.table_check(cursor_all, table) == 0: cursor_all.execute('CREATE TABLE {tn}({nf})'.format(tn=table, nf=file_number)) module_names = [ "surgery_block_information_1", "surgery_block_information_2", "surgery_block_information_3", "path_stage" ] for index in module_names: col_name = pccm_names.names_surgery(index) sql.add_columns(cursor_all, table, col_name) #add data
def multiple_mass(table, conn, cursor, file_number): import helper_function.ask_y_n_statement as ask import sql.add_update_sql as add_update_sql import helper_function.pccm_names as pccm_names mass_number = int(input("Number of masses detected: ")) if table == "SonnoMammography_Multiple_Mass": sonno_quad, sonno_location, sonno_clock, sonno_shape, sonno_depth, sonno_distance, sonno_pect,sonno_orientation,\ sonno_margin, sonno_echo, sonno_posterior = [list([]) for _ in range(11)] if table == "Mammography_Multiple_Mass": location, quad, pect, depth, distance, shape, margin, density = [ list([]) for _ in range(8) ] if table == "MRI_Multiple_Mass": location, quad, shape, margin, internal = [list([]) for _ in range(5)] for index in range(0, mass_number): check = False while not check: mass_id = index + 1 if table == "Mammography_Multiple_Mass": mass_location = ask_y_n_statement.ask_option( "Location of mass " + str(mass_id), ["Right Breast", "Left Breast"]) location_quad = lesion_location(mass_location) mass_depth = ask_y_n_statement.ask_option( "Depth of " + str(mass_id), ["Anterior", "Middle", "Posterior", "Other"]) mass_dist = ask_y_n_statement.ask_option( "Distance from nipple", ["<0.5 cm", ">0.5 cm", "Other"]) pect_check = ask_y_n_statement.ask_y_n( "Is distance from Pectoralis Major described for " + str(mass_id)) if pect_check: mass_pect = input("Distance from Pectoralis Major (cm): ") else: mass_pect = "Distance from Pectoralis Major not described" depth.append(mass_depth) location.append(mass_location) distance.append(mass_dist) quad.append(location_quad) pect.append(mass_pect) mammo_mass_shape = ask_y_n_statement.ask_option( "Shape of mass", ["Oval", "Round", "Irregular", "Other"]) shape.append(mammo_mass_shape) mammo_mass_margin = ask_y_n_statement.ask_option( "Margins of mass", [ "Circumscribed", "Obscured", "Microlobulated", "Indistinct", "Spiculated", "Other" ]) margin.append(mammo_mass_margin) mammo_mass_density = ask_y_n_statement.ask_option( "Density of mass", [ "High density", "Equal density", "Low density", "Fat-containing", "Other" ]) density.append(mammo_mass_density) mass_id = "Mass " + str(index + 1) data_list = [ file_number, mass_id, mass_location, location_quad, mass_depth, mass_dist, mass_pect, mammo_mass_shape, mammo_mass_margin, mammo_mass_density ] elif table == "MRI_Multiple_Mass": mass_location = ask_y_n_statement.ask_option( "Location of mass " + str(mass_id), ["Right Breast", "Left Breast"]) location.append(mass_location) location_quad = lesion_location(mass_location) quad.append(location_quad) mri_mass_shape = ask_y_n_statement.ask_option( "Shape of mass", ["Oval", "Round", "Irregular", "Other"]) shape.append(mri_mass_shape) mri_mass_margin = ask_y_n_statement.ask_option( "Margins of mass", ["Circumscribed", "Not circumscribed", "Other"]) if mri_mass_margin == "Not circumscribed": mri_mass_notc = ask_y_n_statement.ask_option( "Not circumscribed margins of mass", ["Irregular", "Spiculated"]) mri_mass_margin = mri_mass_margin + ": " + mri_mass_notc margin.append(mri_mass_margin) mri_mass_internal = ask_y_n_statement.ask_option( "Internal enhancement characteristics", [ "Homogeneous", "Heterogeneous", "Rim enhancement", "Dark internal septations" ]) internal.append(mri_mass_internal) mass_id = "Mass " + str(index + 1) data_list = [ file_number, mass_id, mass_location, location_quad, mri_mass_shape, mri_mass_margin, mri_mass_internal ] elif table == "SonnoMammography_Multiple_Mass": mass_location = ask_y_n_statement.ask_option( "Location of mass " + str(mass_id), ["Right Breast", "Left Breast"]) sonno_location.append(mass_location) location_quad = lesion_location(mass_location) sonno_quad.append(location_quad) location_clock = input("What is the clock position of mass " + str(mass_id) + "?") location_clock = location_clock + " o'clock" sonno_clock.append(location_clock) mass_shape = ask_y_n_statement.ask_option( "Shape of mass " + str(mass_id), ["Oval", "Round", "Irregular", "Other"]) mass_depth = input("Depth of mass " + str(mass_id) + "(cm): ") mass_dist = ask_y_n_statement.ask_option( "Distance from nipple", ["<0.5 cm", ">0.5 cm", "Other"]) pect_check = ask_y_n_statement.ask_y_n( "Is distance from Pectoralis Major described for mass " + str(mass_id)) if pect_check: mass_pect = input("Distance from Pectoralis Major (cm): ") else: mass_pect = "NA" sonno_depth.append(mass_depth) sonno_distance.append(mass_dist) sonno_pect.append(mass_pect) sonno_shape.append(mass_shape) mass_orientation = ask_y_n_statement.ask_option( "Orientation of mass " + str(mass_id), ["Parallel", "Not parallel"]) sonno_orientation.append(mass_orientation) mass_margin = ask_y_n_statement.ask_option( "Margin of mass " + str(mass_id), ["Circumscribed", "Not circumscribed"]) if mass_margin == "Not circumscribed": mass_margin = ask_y_n_statement.ask_option( "Is Not circumscribed margin", [ "Indistinct", "Angular", "Microlobulated", "Spiculated" ]) sonno_margin.append(mass_margin) mass_echo = ask_y_n_statement.ask_option( "Echo pattern of mass " + str(mass_id), [ "Anechoic", "Hyperechoic", "Complex cystic " "and solid", "Hypoechoic", "Isoechoic", "Heterogeneous", "Other" ]) sonno_echo.append(mass_echo) mass_posterior = ask_y_n_statement.ask_option( "Posterior Acoustic features", [ "No posterior features", "Enhancement", "Shadowing", "Combined pattern", "Other" ]) sonno_posterior.append(mass_posterior) mass_id = "Mass " + str(index + 1) data_list = [ file_number, mass_id, mass_location, location_quad, location_clock, mass_depth, mass_location, mass_dist, mass_shape, mass_orientation, mass_margin, mass_echo, mass_posterior ] col_list = pccm_names.names_radio(table) check = add_update_sql.review_input(file_number, col_list, data_list) columns = ", ".join(col_list) add_update_sql.insert(conn, cursor, table, columns, tuple(data_list)) if table == "SonnoMammography_Multiple_Mass": all_data = [[str(mass_number)], sonno_quad, sonno_location, sonno_clock, sonno_depth, sonno_distance, sonno_pect, sonno_shape, sonno_orientation, sonno_margin, sonno_echo, sonno_posterior] elif table == "Mammography_Multiple_Mass": all_data = [[str(mass_number)], location, quad, depth, distance, pect, shape, margin, density] elif table == "MRI_Multiple_Mass": all_data = [[str(mass_number)], location, quad, shape, margin, internal] else: all_data = [] data_return = ask_y_n_statement.join_lists(all_data, "; ") return tuple(data_return)
def write_file(self, new_data): for i in range(0, new_data.shape[0]): data_add = list(new_data.loc[i, :]) + [self.file_name] sql.insert(self.conn, self.cursor, self.table, self.columns, data_add)
#read from excel with same col names and distribution as in table file_to_read = "D:/Documents/IISER/Prashanti_docs/Breast_Cancer_FFPE_blocks_database_Biopsy_dk08062018.xlsx" data = pd.read_excel(file_to_read, header=1, dtype='object', usecols='A:AB') update_by = "dk from ruhi/shaheen data" module_names = ["biopsy_report_info", "tumour_biopsy_data", "lymphnode_biopsy"] col_list = ["File_number"] for index in module_names: col_list = col_list + pccm_names.names_biopsy(index) columns = ", ".join(col_list) for index in range(0, len(data)): data_list = list(data.loc[index]) data_list.append(update_by) data_list.append(sql.last_update()) sql.insert(conn_all, cursor_all, table, columns, data_list) #for surgery_report table = "Surgery_Block_Report_Data" if sql.table_check(cursor_all, table) == 0: cursor_all.execute('CREATE TABLE {tn}({nf})'.format(tn=table, nf=file_number)) module_names = [ "surgery_block_information_1", "surgery_block_information_2", "surgery_block_information_3", "path_stage" ] for index in module_names: col_name = pccm_names.names_surgery(index) sql.add_columns(cursor_all, table, col_name) #add data