Last active
October 17, 2022 00:52
-
-
Save galenseilis/1fcbc467b9387265b96944ba294d996b to your computer and use it in GitHub Desktop.
Download and prepare https://doi.org/10.1038/nature15759
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from dateutil import parser | |
| import os | |
| import requests | |
| import zipfile | |
| import matplotlib.pyplot as plt | |
| import numpy as np | |
| import pandas as pd | |
| pd.set_option('display.max_rows', 500) | |
| pd.set_option('display.max_columns', 500) | |
| pd.set_option('display.width', 1000) | |
| columns = ['event_ready_timestamp', | |
| 'day_number', | |
| 'run_number', | |
| 'event_ready_click1_time', | |
| 'event_ready_click1_channel', | |
| 'event_ready_click2_time', | |
| 'event_ready_click2_channel', | |
| 'random_number_A', | |
| 'random_number_B', | |
| 'random_number_A_time', | |
| 'random_number_B_time', | |
| 'readout_click_A_time', | |
| 'readout_click_B_time', | |
| 'click_after_excite_A_time', | |
| 'click_after_excite_B_time', | |
| 'last_invalid_marker_A', | |
| 'last_invalid_marker_B'] | |
| event_ready_window_start_channel0 = 5426350 # picoseconds after last sync-pulse | |
| event_ready_window_start_channel1 = 5425700 # picoseconds after last sync-pulse | |
| event_ready_window_length = 55000 - 2550 # picoseconds | |
| event_ready_window_separation = 250000 # picoseconds | |
| readout_window_start = 10620 # nanoseconds after last sync-pulse | |
| readout_window_length = 3700 # nanoseconds | |
| check_for_invalid_marker_in_past = 250 # number of attemps (sync-pulses) | |
| if not os.path.isfile('data.zip'): | |
| with open("data.zip", "wb") as f_out: | |
| r = requests.get("https://data.4tu.nl/ndownloader/files/24056582") | |
| f_out.write(r.content) | |
| archive = zipfile.ZipFile('data.zip', 'r') | |
| data = archive.read('bell_open_data.txt').decode('utf-8') | |
| data = [s.split(',') for s in data.split('\r\n')[:-1]] | |
| data = np.array(data) | |
| df = pd.DataFrame(data[:,1:].astype(int), columns=columns[1:]) | |
| df['event_ready_timestamp'] = data[:,0] | |
| df['event_ready_timestamp'] = df['event_ready_timestamp'].apply(parser.parse) | |
| df['event_ready_window1_channel0_filter'] = ((event_ready_window_start_channel0 <= df['event_ready_click1_time'])\ | |
| & (df['event_ready_click1_time'] < (event_ready_window_start_channel0 + event_ready_window_length))\ | |
| & (df['event_ready_click1_channel'] == 0)) | |
| df['event_ready_window1_channel1_filter'] = ((event_ready_window_start_channel1 <= df['event_ready_click1_time'])\ | |
| & (df['event_ready_click1_time'] < (event_ready_window_start_channel1 + event_ready_window_length))\ | |
| & (df['event_ready_click1_channel'] == 1)) | |
| df['event_ready_window1_filter'] = df['event_ready_window1_channel0_filter'] | df['event_ready_window1_channel1_filter'] | |
| df['event_ready_window2_channel0_filter'] = ((event_ready_window_start_channel0 + event_ready_window_separation <= df['event_ready_click2_time'])\ | |
| & (df['event_ready_click2_time'] < (event_ready_window_start_channel0 + event_ready_window_separation + event_ready_window_length))\ | |
| & (df['event_ready_click2_channel'] == 0)) | |
| df['event_ready_window2_channel1_filter'] = ((event_ready_window_start_channel1 + event_ready_window_separation <= df['event_ready_click2_time'])\ | |
| & (df['event_ready_click2_time'] < (event_ready_window_start_channel1 + event_ready_window_separation + event_ready_window_length))\ | |
| & (df['event_ready_click2_channel'] == 1)) | |
| df['event_ready_window2_filter'] = df['event_ready_window2_channel0_filter'] | df['event_ready_window2_channel1_filter'] | |
| df['event_ready_psi_min_filter'] = (df['event_ready_click1_channel'] != df['event_ready_click2_channel']) | |
| df['event_ready_window_filter'] = (df['event_ready_window1_filter'] & df['event_ready_window2_filter'] & df['event_ready_psi_min_filter']) | |
| df['no_invalid_marker_A_filter'] = ((df['last_invalid_marker_A'] == 0) | (df['last_invalid_marker_A'] > check_for_invalid_marker_in_past)) | |
| df['no_invalid_marker_B_filter'] = ((df['last_invalid_marker_B'] == 0) | (df['last_invalid_marker_B'] > check_for_invalid_marker_in_past)) | |
| df['no_invalid_marker_AB_filter'] = (df['no_invalid_marker_A_filter'] & df['no_invalid_marker_B_filter']) | |
| df['no_excitation_click_AB_filter'] = (df['click_after_excite_A_time'] == 0) & (df['click_after_excite_B_time'] == 0) | |
| df['bell_trial_filter'] = (df['event_ready_window_filter'] & df['no_invalid_marker_AB_filter'] & df['no_excitation_click_AB_filter']) | |
| df['detection_in_readout_window_A'] = (df['readout_click_A_time'] > readout_window_start)\ | |
| & (df['readout_click_A_time'] <= readout_window_start + readout_window_length) | |
| df['detection_in_readout_window_B'] = (df['readout_click_B_time'] > readout_window_start)\ | |
| & (df['readout_click_B_time'] <= readout_window_start + readout_window_length) | |
| df[[key for key in df.keys() if 'timestamp' not in key]] = df[[key for key in df.keys() if 'timestamp' not in key]] * 1 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment