def set_hypotheses(head, config): # Formulate a VEP hypothesis manually hyp_builder = HypothesisBuilder(head.connectivity.number_of_regions, config) # .set_normalize(0.99) # Regions of Pathological Excitability hypothesis: x0_indices = [2, 24] x0_values = [0.01, 0.01] hyp_builder.set_x0_hypothesis(x0_indices, x0_values) # Regions of Model Epileptogenicity hypothesis: e_indices = [1, 26] # e_indices = list(range(head.connectivity.number_of_regions)) # e_indices.remove(2) # e_indices.remove(25) # e_values = np.zeros((head.connectivity.number_of_regions,)) + 0.01 # e_values[[1, 26]] = 0.99 # e_values = np.delete(e_values, [2, 25]).tolist() e_values = np.array([1.5, 1.25]) # np.array([0.99] * 2) hyp_builder.set_e_hypothesis(e_indices, e_values) # Regions of Connectivity hypothesis: # w_indices = [] # [(0, 1), (0, 2)] # w_values = [] # [0.5, 2.0] # hypo_builder.set_w_indices(w_indices).set_w_values(w_values) hypothesis1 = hyp_builder.build_hypothesis() e_indices = [1, 26] # [1, 2, 25, 26] hypothesis2 = hyp_builder.build_hypothesis_from_file( "clinical_hypothesis_postseeg", e_indices) # Change something manually if necessary # hypothesis2.x0_values = [0.01, 0.01] return (hypothesis1, hypothesis2)
def from_head_to_hypotheses(ep_name, config, plot_head=False): # -------------------------------Reading model_data----------------------------------- reader = TVBReader() if config.input.IS_TVB_MODE else H5Reader() logger.info("Reading from: " + config.input.HEAD) head = reader.read_head(config.input.HEAD) if plot_head: plotter = Plotter(config) plotter.plot_head(head) # --------------------------Hypothesis definition----------------------------------- # # Manual definition of hypothesis...: # x0_indices = [20] # x0_values = [0.9] # e_indices = [70] # e_values = [0.9] # disease_values = x0_values + e_values # disease_indices = x0_indices + e_indices # ...or reading a custom file: # FOLDER_RES = os.path.join(data_folder, ep_name) hypo_builder = HypothesisBuilder(head.connectivity.number_of_regions, config=config).set_normalize(0.95) # This is an example of Excitability Hypothesis: hyp_x0 = hypo_builder.build_hypothesis_from_file(ep_name) # This is an example of Epileptogenicity Hypothesis: hyp_E = hypo_builder.build_hypothesis_from_file( ep_name, e_indices=hyp_x0.x0_indices) # This is an example of Mixed Hypothesis: x0_indices = [hyp_x0.x0_indices[-1]] x0_values = [hyp_x0.x0_values[-1]] e_indices = hyp_x0.x0_indices[0:-1].tolist() e_values = hyp_x0.x0_values[0:-1].tolist() hyp_x0_E = hypo_builder.set_x0_hypothesis(x0_indices, x0_values). \ set_e_hypothesis(e_indices, e_values).build_hypothesis() hypos = (hyp_x0, hyp_E, hyp_x0_E) return head, hypos
def main_cc_vep(config, head_folder, ep_name="clinical_hypothesis", x0_indices=[], pse_flag=False, sim_flag=True): if not (os.path.isdir(config.out.FOLDER_RES)): os.mkdir(config.out.FOLDER_RES) logger = initialize_logger(__name__, config.out.FOLDER_LOGS) # -------------------------------Reading data----------------------------------- reader = TVBReader() if config.input.IS_TVB_MODE else H5Reader() writer = H5Writer() logger.info("Reading from: %s", head_folder) head = reader.read_head(head_folder) plotter = Plotter(config) plotter.plot_head(head) # --------------------------Hypothesis definition----------------------------------- hypo_builder = HypothesisBuilder(head.connectivity.number_of_regions) all_regions_indices = np.array(range(head.number_of_regions)) # This is an example of Epileptogenicity Hypothesis: hyp_E = hypo_builder.build_hypothesis_from_file(ep_name, x0_indices) # This is an example of Excitability Hypothesis: hyp_x0 = hypo_builder.build_hypothesis_from_file(ep_name) disease_indices = hyp_E.e_indices + hyp_x0.x0_indices healthy_indices = np.delete(all_regions_indices, disease_indices).tolist() if len(x0_indices) > 0: # This is an example of x0_values mixed Excitability and Epileptogenicity Hypothesis: disease_values = reader.read_epileptogenicity(head_folder, name=ep_name) disease_values = disease_values.tolist() x0_values = [] for ix0 in x0_indices: ind = disease_indices.index(ix0) del disease_indices[ind] x0_values.append(disease_values.pop(ind)) e_indices = disease_indices e_values = np.array(disease_values) x0_values = np.array(x0_values) hyp_x0_E = hypo_builder.set_x0_hypothesis( x0_indices, x0_values).set_e_hypothesis(e_indices, e_values).build_hypothesis() hypotheses = (hyp_E, hyp_x0, hyp_x0_E) else: hypotheses = ( hyp_E, hyp_x0, ) # --------------------------Hypothesis and LSA----------------------------------- for hyp in hypotheses: logger.info("Running hypothesis: %s", hyp.name) logger.info("Creating model configuration...") builder = ModelConfigurationBuilder(hyp.number_of_regions) writer.write_model_configuration_builder( builder, os.path.join(config.out.FOLDER_RES, "model_config_service.h5")) if hyp.type == "Epileptogenicity": model_configuration = builder.build_model_from_E_hypothesis( hyp, head.connectivity.normalized_weights) else: model_configuration = builder.build_model_from_hypothesis( hyp, head.connectivity.normalized_weights) writer.write_model_configuration( model_configuration, os.path.join(config.out.FOLDER_RES, "ModelConfiguration.h5")) # Plot nullclines and equilibria of model configuration plotter.plot_state_space(model_configuration, region_labels=head.connectivity.region_labels, special_idx=disease_indices, model="2d", zmode="lin", figure_name=hyp.name + "_StateSpace") logger.info("Running LSA...") lsa_service = LSAService(eigen_vectors_number=None, weighted_eigenvector_sum=True) lsa_hypothesis = lsa_service.run_lsa(hyp, model_configuration) writer.write_hypothesis( lsa_hypothesis, os.path.join(config.out.FOLDER_RES, lsa_hypothesis.name + ".h5")) writer.write_lsa_service( lsa_service, os.path.join(config.out.FOLDER_RES, "lsa_config_service.h5")) plotter.plot_lsa(lsa_hypothesis, model_configuration, lsa_service.weighted_eigenvector_sum, lsa_service.eigen_vectors_number, head.connectivity.region_labels, None) if pse_flag: n_samples = 100 # --------------Parameter Search Exploration (PSE)------------------------------- logger.info("Running PSE LSA...") pse_results = pse_from_lsa_hypothesis( lsa_hypothesis, head.connectivity.normalized_weights, head.connectivity.region_labels, n_samples, param_range=0.1, global_coupling=[{ "indices": all_regions_indices }], healthy_regions_parameters=[{ "name": "x0_values", "indices": healthy_indices }], model_configuration_builder=builder, lsa_service=lsa_service, save_flag=True, folder_res=config.out.FOLDER_RES, filename="PSE_LSA", logger=logger)[0] plotter.plot_lsa(lsa_hypothesis, model_configuration, lsa_service.weighted_eigenvector_sum, lsa_service.eigen_vectors_number, head.connectivity.region_labels, pse_results, title="Hypothesis PSE LSA Overview") if sim_flag: config.out.subfolder = "simulations" for folder in (config.out.FOLDER_RES, config.out.FOLDER_FIGURES): if not (os.path.isdir(folder)): os.mkdir(folder) dynamical_models = ["EpileptorDP2D", "EpileptorDPrealistic"] for dynamical_model, sim_type in zip(dynamical_models, ["fitting", "realistic"]): ts_file = None # os.path.join(sim_folder_res, dynamical_model + "_ts.h5") vois_ts_dict = \ from_model_configuration_to_simulation(model_configuration, head, lsa_hypothesis, sim_type=sim_type, dynamical_model=dynamical_model, ts_file=ts_file, plot_flag=True, config=config)