Skip to content

Instantly share code, notes, and snippets.

@galenseilis
Last active October 17, 2022 00:52
Show Gist options
  • Select an option

  • Save galenseilis/1fcbc467b9387265b96944ba294d996b to your computer and use it in GitHub Desktop.

Select an option

Save galenseilis/1fcbc467b9387265b96944ba294d996b to your computer and use it in GitHub Desktop.
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