def condition_2_gen_conf(self, gen_conf_1): gen_conf_2 = deepcopy(gen_conf_1) if self.experiment == 1: for i in range(len(gen_conf_2)): gen_conf_2[i]['magnitude'] = \ self.experiment_1_magnitude_multiplier *\ gen_conf_2[i]['magnitude'] if self.experiment == 2: for i in range(len(gen_conf_2)): gen_conf_2[i]['magnitude'] = \ uniform(0,10) * gen_conf_2[i]['magnitude'] gen_conf_2 = scale_generator_configuration( gen_conf_2, self.final_magnitude)[0] if self.experiment == 3: # TODO: Generator magnitude stddev scaling not implemented gen_conf_2 = random_generator_configuration( self.limits_number, self.limits_depth, self.limits_orientation, self.limits_magnitude, self.final_magnitude)[0] if self.experiment == 4: gen_conf_new = random_generator_configuration( (1,1), self.limits_depth, self.limits_orientation, self.limits_magnitude, uniform(2,4))[0] gen_conf_2.append(gen_conf_new[0]) return gen_conf_2
def run(self, run_generators=True, run_noise=True, run_reference=True): smallest_p = create_scaled_data_structure([]) sig_p_count = create_scaled_data_structure(0) sig_p_count_interaction = create_scaled_data_structure(0) for simulation_number in range(self.number_of_simulations): if run_generators: if simulation_number == 0 or self.configuration == 'random': gen_conf_1 = self.condition_1_gen_conf() gen_conf_2 = self.condition_2_gen_conf(gen_conf_1) if self.configuration == 'uandk': gen_conf_1 = [{'depth': 7.0,\ 'magnitude': -1050.0,\ 'orientation': 0.0,\ 'orientation_phi': 0.0,\ 'phi': -0.65,\ 'theta': 0.6}] #print('Ran from here') [gen_conf_1, magnitude_stddev] =\ scale_generator_configuration(gen_conf_1, 3.5, 2) #print('STOP') #print('HUUUUUGE FAILLLL!') #print magnitude_stddev gen_conf_2 = self.condition_2_gen_conf(gen_conf_1) if simulation_number == 0 or self.configuration == 'random' or \ self.generator_magnitude_stddev != 0: [simulated_gen_1, gen_conf_1, simulated_gen_2, gen_conf_2, electrodes] = self.simulate_sources(gen_conf_1, gen_conf_2) self.electrodes = electrodes else: simulated_gen_1 = deepcopy(self.simulated_gen_1[simulation_number]) simulated_gen_2 = deepcopy(self.simulated_gen_2[simulation_number]) gen_conf_1 = deepcopy(self.gen_conf_1[simulation_number]) gen_conf_2 = deepcopy(self.gen_conf_2[simulation_number]) simulated_data_1 = deepcopy(simulated_gen_1) simulated_data_2 = deepcopy(simulated_gen_2) if run_noise: [normal_noise_1, topographic_noise_1, normal_noise_2, topographic_noise_2, constant_noise] =\ self.simulate_noise(simulated_gen_1.shape) else: normal_noise_1 = deepcopy(self.normal_noise_1[simulation_number]) normal_noise_2 = deepcopy(self.normal_noise_2[simulation_number]) topographic_noise_1 = deepcopy(self.topographic_noise_1[simulation_number]) topographic_noise_2 = deepcopy(self.topographic_noise_2[simulation_number]) constant_noise = deepcopy(self.constant_noise[simulation_number]) if normal_noise_1 != None and normal_noise_2 != None: simulated_data_1 += normal_noise_1 simulated_data_2 += normal_noise_2 if constant_noise != None: simulated_data_1 += constant_noise simulated_data_2 += constant_noise if topographic_noise_1 != None and topographic_noise_2 != None: simulated_data_1 += topographic_noise_1 simulated_data_2 += topographic_noise_2 if run_reference and self.reference != 'none': [simulated_data_1, simulated_data_2] =\ self.rereference(simulated_data_1, simulated_data_2, self.electrodes) electrode_indices = select_electrodes(self.hemispheres, self.sites, self.locations, self.electrodes)[4] simulated_data_1_scaled = perform_scaling(simulated_data_1, electrode_indices) simulated_data_2_scaled = perform_scaling(simulated_data_2, electrode_indices) self.electrode_indices = electrode_indices anova_results_scaled = \ create_scaled_data_structure(None) [anova_results, electrode_indices] = \ run_anova(self.hemispheres, self.sites, self.locations, simulated_data_1, simulated_data_2, self.electrodes, self.doElectrodesAsFactor, printResults=False, name='testu_sim') p = self.find_smallest_interaction_p(anova_results) smallest_p['Unrescaled'].append(p) if p < 0.05: found_interaction_on_unrescaled = True sig_p_count['Unrescaled'] += 1 else: found_interaction_on_unrescaled = False for key1 in anova_results_scaled.keys(): if key1 == 'Unrescaled': break for key2 in anova_results_scaled[key1].keys(): for key3 in anova_results_scaled[key1][key2].keys(): anova_results_scaled[key1][key2][key3] = \ run_anova(self.hemispheres, self.sites, self.locations, simulated_data_1_scaled[key1][key2][key3], simulated_data_2_scaled[key1][key2][key3], self.electrodes, self.doElectrodesAsFactor, printResults=False, name='testu_sim_scaled')[0] p = self.find_smallest_interaction_p\ (anova_results_scaled[key1][key2][key3]) smallest_p[key1][key2][key3].append(p) if p <0.05: sig_p_count[key1][key2][key3] += 1 if found_interaction_on_unrescaled: sig_p_count_interaction[key1][key2][key3] += 1 if self.collect: if len(self.gen_conf_1) == self.number_of_simulations: self.gen_conf_1[simulation_number] = gen_conf_1 self.gen_conf_2[simulation_number] = gen_conf_2 self.simulated_gen_1[simulation_number] = simulated_gen_1 self.simulated_gen_2[simulation_number] = simulated_gen_2 self.normal_noise_1[simulation_number] = normal_noise_1 self.normal_noise_2[simulation_number] = normal_noise_2 self.constant_noise[simulation_number] = constant_noise self.topographic_noise_1[simulation_number] = topographic_noise_1 self.topographic_noise_2[simulation_number] = topographic_noise_2 self.simulated_data_1[simulation_number] = simulated_data_1 self.simulated_data_2[simulation_number] = simulated_data_2 if self.electrodes == None: self.electrodes = electrodes self.sig_p_count[simulation_number] = sig_p_count self.sig_p_count_interaction[simulation_number] = sig_p_count_interaction if not (len(self.gen_conf_1) == self.number_of_simulations): self.gen_conf_1.append(gen_conf_1) self.gen_conf_2.append(gen_conf_2) self.simulated_gen_1.append(simulated_gen_1) self.simulated_gen_2.append(simulated_gen_2) self.normal_noise_1.append(normal_noise_1) self.normal_noise_2.append(normal_noise_2) self.constant_noise.append(constant_noise) self.topographic_noise_1.append(topographic_noise_1) self.topographic_noise_2.append(topographic_noise_2) self.simulated_data_1.append(simulated_data_1) self.simulated_data_2.append(simulated_data_2) if self.electrodes == None: self.electrodes = electrodes self.sig_p_count.append(sig_p_count) self.sig_p_count_interaction.append(sig_p_count_interaction) self.print_stats(sig_p_count, sig_p_count_interaction) return [simulated_data_1, simulated_data_2, simulated_data_1_scaled, simulated_data_2_scaled, gen_conf_1, gen_conf_2, smallest_p, sig_p_count, topographic_noise_1, topographic_noise_2, constant_noise]