MedPC data conversion#

MedPC output files contain information about operant behavior such as nose pokes and rewards. Install NeuroConv with the additional dependencies necessary for writing medpc behavioral data.

pip install neuroconv[medpc]

Convert MedPC output data to NWB using MedPCInterface.

from datetime import datetime
from zoneinfo import ZoneInfo
from neuroconv.datainterfaces import MedPCInterface

# For this data interface we need to pass the output file from MedPC
file_path = f"{BEHAVIOR_DATA_PATH}/medpc/example_medpc_file_06_06_2024.txt"
# Change the folder_path to the appropriate location in your system
session_conditions = {"Start Date": "04/18/19", "Start Time": "10:41:42"}
start_variable = "Start Date",
metadata_medpc_name_to_info_dict = dict(
    "Start Date": {"name": "start_date", "is_array": False},
    "Start Time": {"name": "start_time", "is_array": False},
    "Subject": {"name": "subject", "is_array": False},
    "Box": {"name": "box", "is_array": False},
    "MSN": {"name": "MSN", "is_array": False},
)
interface = MedPCInterface(
    file_path=file_path,
    session_conditions=session_conditions,
    start_variable=start_variable,
    metadata_medpc_name_to_info_dict=metadata_medpc_name_to_info_dict
)

# Extract what metadata we can from the source file
metadata = interface.get_metadata()
# We add the time zone information, which is required by NWB
session_start_time = metadata["NWBFile"]["session_start_time"].replace(tzinfo=ZoneInfo("US/Pacific"))
metadata["NWBFile"].update(session_start_time=session_start_time)
metadata["MedPC"]["medpc_name_to_info_dict"] = {
        "A": {"name": "left_nose_poke_times", "is_array": True},
        "B": {"name": "left_reward_times", "is_array": True},
        "C": {"name": "right_nose_poke_times", "is_array": True},
        "D": {"name": "right_reward_times", "is_array": True},
        "E": {"name": "duration_of_port_entry", "is_array": True},
        "G": {"name": "port_entry_times", "is_array": True},
        "H": {"name": "footshock_times", "is_array": True},
}
metadata["MedPC"]["Events"] = [
    {
        "name": "left_nose_poke_times",
        "description": "Left nose poke times.",
    },
    {
        "name": "left_reward_times",
        "description": "Left reward times.",
    },
    {
        "name": "right_nose_poke_times",
        "description": "Right nose poke times.",
    },
    {
        "name": "right_reward_times",
        "description": "Right reward times.",
    },
    {
        "name": "footshock_times",
        "description": "Footshock times.",
    },
]
metadata["MedPC"]["IntervalSeries"] = [
    {
        "name": "reward_port_intervals",
        "description": "Interval of time spent in reward port (1 is entry, -1 is exit).",
        "onset_name": "port_entry_times",
        "duration_name": "duration_of_port_entry",
    },
]

# Choose a path for saving the nwb file and run the conversion
nwbfile_path = f"{path_to_save_nwbfile}"  # This should be something like: "./saved_file.nwb"
interface.run_conversion(nwbfile_path=nwbfile_path, metadata=metadata)