Source code for allensdk.brain_observatory.ecephys.ecephys_project_api.warehouse_patches
import os
import pandas as pd
import numpy as np
[docs]def structure_assignment_fname_map():
return {
733744647: "732592105_probeB_733744647.csv",
733744649: "732592105_probeC_733744649.csv",
733744651: "732592105_probeD_733744651.csv",
733744653: "732592105_probeE_733744653.csv",
733744655: "732592105_probeF_733744655.csv",
805579698: "799864342_probeA_805579698.csv",
832129149: "829720705_probeA_832129149.csv",
837761710: "835479236_probeC_837761710.csv"
}
[docs]def load_structure_assignments(probe_ids=None):
fnames = structure_assignment_fname_map()
dirname = os.path.join(os.path.dirname(__file__), "data")
output = []
for probe_id, fname in fnames.items():
if probe_ids is not None and probe_id not in probe_ids:
continue
full_path = os.path.join(dirname, fname)
df = pd.read_csv(full_path)
df["ecephys_probe_id"] = np.zeros([len(df)], dtype=int) + probe_id
output.append(df)
return pd.concat(output)
[docs]def replace_bad_structure_assignments(
channels,
structure_id_key="ecephys_structure_id",
structure_acronym_key="ecephys_structure_acronym",
inplace=False
):
if not inplace:
channels = channels.copy()
probes = set(channels["ecephys_probe_id"].unique().tolist())
assignments = load_structure_assignments()
reassigned_probes = set(assignments["ecephys_probe_id"].unique().tolist())
reassigned = channels[channels["ecephys_probe_id"].isin(reassigned_probes)]
reassigned = pd.merge(
reassigned.reset_index(), assignments,
how="left",
left_on=["ecephys_probe_id", "local_index"],
right_on=["ecephys_probe_id", "local_index"],
suffixes=["_original", "_corrected"]
)
reassigned.set_index("id", inplace=True)
reassigned.drop(columns=[
f"{structure_id_key}_original",
f"{structure_acronym_key}_original"
], inplace=True)
reassigned.rename(columns={
f"{structure_id_key}_corrected": structure_id_key,
f"{structure_acronym_key}_corrected": structure_acronym_key
}, inplace=True)
channels.loc[reassigned.index.values, [structure_id_key, structure_acronym_key]] = \
reassigned.loc[:, [structure_id_key, structure_acronym_key]]
if not inplace:
return reassigned