CB Database Example Queries

Experimental data analysis (Oct / Nov 2023)

Authors
Affiliations

Cathrynne Henshall

Michael J. Booth

Published

Tue Nov 12, 2024 11:38 AM

Abstract

Querying the data from the database

Purpose of This Notebook

This notebook serves as an exploratory tool for examining the log file data from the horse behavioural experiments conducted in October and November 2023 that are loaded into a local DuckDB database using logfile-to-database-CB.ipynb.

It facilitates loading and querying the data from the database using some example SQL queries.

Setup project & directories

This is the init_notebook_mode cell from ITables v2.1.4
(you should not see this message - is your notebook trusted?)
INFO     | Data directory: /Users/mjboothaus/code/github/databooth/horse-logic/data
INFO     | Data directory purpose: Parent directory for raw and processed data
INFO     | Sql directory: /Users/mjboothaus/code/github/databooth/horse-logic/sql
INFO     | Sql directory purpose: Store SQL scripts
INFO     | Output directory: /Users/mjboothaus/code/github/databooth/horse-logic/notebooks/results/CB
INFO     | Output directory purpose: Store output files and results by experiment type
INFO     | Logfiles directory: /Users/mjboothaus/code/github/databooth/horse-logic/data/results/zips/cb_data
INFO     | Logfiles directory purpose: Store for the raw log files
INFO     | Notebooks directory: /Users/mjboothaus/code/github/databooth/horse-logic/notebooks
INFO     | Notebooks directory purpose: Jupyter notebooks for performing analysis
INFO     | Database file path: /Users/mjboothaus/code/github/databooth/horse-logic/data/Experiments_CB_2023_Q4.ddb
INFO     | Database purpose: Main project databases (outputs) by experiment type
INFO     | Project initialised (CB): config defined in project_config.yaml
INFO     | Connected to database: /Users/mjboothaus/code/github/databooth/horse-logic/data/Experiments_CB_2023_Q4.ddb
INFO     | DuckDB version: v1.1.2

Perform some example database queries (local DuckDB)

Show the tables in the database - should be EventCBs, ExperimentCBs, ResponseCBs and TrialCBs.

┌───────────────┐
│     name      │
│    varchar    │
├───────────────┤
│ CorrectedData │
│ Corrections   │
│ EventCBs      │
│ ExperimentCBs │
│ ResponseCBs   │
│ TrialCBs      │
└───────────────┘
┌──────────────┐
│ count_star() │
│    int64     │
├──────────────┤
│          183 │
└──────────────┘

Check that Direction is not null.

ExperimentID Cohort SubjectName SubjectNumber SessionNumber SessionType ExperimentType Direction Comment DateTime LogFileName
Loading ITables v2.1.4 from the init_notebook_mode cell... (need help?)

List all of the Experiments

ExperimentID Cohort SubjectName SubjectNumber SessionNumber SessionType ExperimentType Direction Comment DateTime LogFileName
Loading ITables v2.1.4 from the init_notebook_mode cell... (need help?)

List of all the log filenames

LogFileName
Loading ITables v2.1.4 from the init_notebook_mode cell... (need help?)
'Experiment_2023-10-06T12:49:44.174442_atom_2_Training - fixed.log'

Reconstruct the trial/event/response details for a particular experiment (via log filename)

example_log = DATA_DIR / "results" / "zips" / "cb_data" / filenames_df.iloc[0, 0]
example_log.name
'Experiment_2023-10-06T12:49:44.174442_atom_2_Training - fixed.log'
sql_recreate_logfile(example_log.name)
"\n        WITH log_events AS (\n        SELECT \n            e.EventTime,\n            e.EventType,\n            t.TrialNumber,\n            t.ResponseType,\n            t.TrialSubType,\n            r.ResponseTime\n        FROM EventCBs e\n        LEFT JOIN TrialCBs t ON e.TrialID = t.TrialID\n        LEFT JOIN ResponseCBs r ON e.TrialID = r.TrialID\n        JOIN ExperimentCBs ex ON t.ExperimentID = ex.ExperimentID\n        WHERE ex.LogFileName = 'Experiment_2023-10-06T12:49:44.174442_atom_2_Training - fixed.log'\n        ORDER BY e.EventTime\n        )\n        SELECT \n        strftime('%Y-%m-%d %H:%M:%S.%f', EventTime) || ': ' ||\n        CASE \n            WHEN EventType LIKE 'GO for Trial%' OR EventType LIKE 'NOGO for Trial%'\n            THEN EventType || \n                CASE \n                    WHEN ResponseTime IS NOT NULL THEN ' - response time ' || CAST(ResponseTime AS TEXT)\n                    ELSE ''\n                END\n            ELSE EventType\n        END AS Experiment_2023_10_06T124944174442_atom_2_Training___fixed\n        FROM log_events;\n    "
Experiment_2023_10_06T124944174442_atom_2_Training___fixed
Loading ITables v2.1.4 from the init_notebook_mode cell... (need help?)
data_dir = example_log.parent
example_log
PosixPath('/Users/mjboothaus/code/github/databooth/horse-logic/data/results/zips/cb_data/Experiment_2023-10-06T12:49:44.174442_atom_2_Training - fixed.log')
sql = f"""
    SELECT *
    FROM ExperimentCBs
    WHERE LogFileName = '{example_log.name}';
"""

con.sql(sql)
┌──────────────┬─────────┬─────────────┬───────────────┬───────────────┬─────────────┬──────────────────┬───────────┬───────────────┬────────────────────────────┬───────────────────────────────────────────────────────────────────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ ExperimentID │ Cohort  │ SubjectName │ SubjectNumber │ SessionNumber │ SessionType │  ExperimentType  │ Direction │    Comment    │          DateTime          │                            LogFileName                            │                                                                                                                                                                                                                                                                                                                                                 Parameters                                                                                                                                                                                                                                                                                                                                                  │
│    int32     │ varchar │   varchar   │     int32     │     int32     │   varchar   │     varchar      │  varchar  │    varchar    │         timestamp          │                              varchar                              │                                                                                                                                                                                                                                                                                                                                                    json                                                                                                                                                                                                                                                                                                                                                     │
├──────────────┼─────────┼─────────────┼───────────────┼───────────────┼─────────────┼──────────────────┼───────────┼───────────────┼────────────────────────────┼───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│            1 │ HD      │ atom        │             1 │             2 │ test        │ Training - fixed │ LEFT      │ First session │ 2023-10-06 12:49:44.174442 │ Experiment_2023-10-06T12:49:44.174442_atom_2_Training - fixed.log │ {"CRITERION_TIMEOUT_TRAINING": 20, "FEED_DISPENSE": 20, "FIRST_TRIAL_DURATION": 4, "INITIAL_DELAY": 10, "MAX_TIME_START_TO_TOUCH_EVENT": 300, "MAX_TRIAL_PER_SESSION": 20, "MODE": "test", "NEGATIVE_RESPONSE_TIMEOUT": 60, "N_SUBJECT": 20, "N_TOUCH": 3, "PAUSE_BETWEEN_TRIALS": 5, "POSITIVE_RESPONSE_TIMEOUT": 60, "SENSITIVITY": 5, "SERVO_CHANNEL": 1, "SERVO_CLOSE": 0, "SERVO_DELAY": 0.7, "SERVO_DELAY_AFTER_FEED": 3, "SERVO_MODE": "pellets", "SERVO_OPEN": 180, "SESSION_STARTED_SOUND_DURATION": 2, "SESSION_TERMINATED_SOUND_DURATION": 2, "SYSTEM_READY_SOUND_DURATION": 2, "TEST_TIMEOUT": 30, "TOUCH_PAD_DELAY": 0.1, "TRIAL_LIMIT": 20, "TRIAL_SLEEP_TIME": 8, "TRIAL_SOUND_DURATION": 1} │
└──────────────┴─────────┴─────────────┴───────────────┴───────────────┴─────────────┴──────────────────┴───────────┴───────────────┴────────────────────────────┴───────────────────────────────────────────────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
def get_experiment_data(con, logfile_name):

    experiment_df = con.execute(
        """
        SELECT * EXCLUDE Parameters FROM ExperimentCBs WHERE LogFileName = ?
    """,
        [logfile_name],
    ).df()

    trials_df = con.execute(
        """
        SELECT t.*
        FROM TrialCBs t
        JOIN ExperimentCBs e ON t.ExperimentID = e.ExperimentID
        WHERE e.LogFileName = ?
        ORDER BY t.TrialNumber
    """,
        [logfile_name],
    ).df()

    responses_df = con.execute(
        """
        SELECT r.*
        FROM ResponseCBs r
        JOIN TrialCBs t ON r.TrialID = t.TrialID
        JOIN ExperimentCBs e ON t.ExperimentID = e.ExperimentID
        WHERE e.LogFileName = ?
        ORDER BY t.TrialNumber, r.ResponseID
    """,
        [logfile_name],
    ).df()

    events_df = con.execute(
        """
        SELECT ev.*
        FROM EventCBs ev
        JOIN TrialCBs t ON ev.TrialID = t.TrialID
        JOIN ExperimentCBs e ON t.ExperimentID = e.ExperimentID
        WHERE e.LogFileName = ?
        ORDER BY t.TrialNumber, ev.EventTime
    """,
        [logfile_name],
    ).df()

    return experiment_df, trials_df, responses_df, events_df
experiment_df, trials_df, responses_df, events_df = get_experiment_data(con, example_log.name)
experiment_df
ExperimentID Cohort SubjectName SubjectNumber SessionNumber SessionType ExperimentType Direction Comment DateTime LogFileName
Loading ITables v2.1.4 from the init_notebook_mode cell... (need help?)
trials_df
TrialID ExperimentID TrialNumber ResponseType TrialSubType CriterionType CriterionCount TrialStartTime TrialEndTime
Loading ITables v2.1.4 from the init_notebook_mode cell... (need help?)
responses_df
ResponseID TrialID ResponseTime EventDateTime
Loading ITables v2.1.4 from the init_notebook_mode cell... (need help?)
events_df
EventID TrialID EventType EventTime ElapsedTime
Loading ITables v2.1.4 from the init_notebook_mode cell... (need help?)
# Compare the actual file contents - ignoring the PARAMETERS header

display_file_contents(example_log)
2023-10-06 12:49:48.949943: Data directory: /home/horselogic/Code/cb_data
2023-10-06 12:49:48.951292: Log file: Experiment_2023-10-06T12:49:44.174442_atom_2_Training - fixed.log
2023-10-06 12:49:48.952159: Quantity file: Experiment_2023-10-06T12:49:44.174442_atom_2_Training - fixed.csv
2023-10-06 12:49:48.954120: Subject atom - Session 2 started...
2023-10-06 12:50:08.018492: Green button pressed - system ready
2023-10-06 12:50:08.019770: System is ready for atom 2 Session type Training - fixed
2023-10-06 12:50:18.025708: Current Trial Trial 1 - P - positive
2023-10-06 12:50:18.872826: Green button pressed - horse released
2023-10-06 12:50:36.543201: GO for Trial 1 - P - positive - response time 17.670339 - positive criterion count 1
2023-10-06 12:50:54.546579: Current Trial Trial 2 - P - positive
2023-10-06 12:51:42.291332: Green button pressed - horse released
2023-10-06 12:51:53.268573: GO for Trial 2 - P - positive - response time 10.97722 - positive criterion count 2
2023-10-06 12:52:11.277622: Current Trial Trial 3 - P - positive
2023-10-06 12:52:51.630356: Green button pressed - horse released
2023-10-06 12:53:01.531667: GO for Trial 3 - P - positive - response time 9.901265 - positive criterion count 3
2023-10-06 12:53:19.533683: Current Trial Trial 4 - P - positive
2023-10-06 12:54:26.634533: Green button pressed - horse released
2023-10-06 12:54:37.725440: GO for Trial 4 - P - positive - response time 11.090858 - positive criterion count 4
2023-10-06 12:54:55.736546: Current Trial Trial 5 - P - positive
2023-10-06 12:55:24.875527: Green button pressed - horse released
2023-10-06 12:55:33.610711: GO for Trial 5 - P - positive - response time 8.735194 - positive criterion count 5
2023-10-06 12:55:51.616551: Current Trial Trial 6 - P - positive
2023-10-06 12:56:12.517965: Green button pressed - horse released
2023-10-06 12:56:22.610633: GO for Trial 6 - P - positive - response time 10.093112 - positive criterion count 6
2023-10-06 12:56:40.621605: Current Trial Trial 7 - P - positive
2023-10-06 12:56:48.216922: Green button pressed - horse released
2023-10-06 12:57:35.760606: GO for Trial 7 - P - positive - response time 47.543691
2023-10-06 12:57:53.775553: Current Trial Trial 8 - P - positive
2023-10-06 12:58:31.699808: Green button pressed - horse released
2023-10-06 12:58:39.385306: GO for Trial 8 - P - positive - response time 7.686065 - positive criterion count 7
2023-10-06 12:58:57.394583: Current Trial Trial 9 - P - positive
2023-10-06 12:59:08.053932: Green button pressed - horse released
2023-10-06 12:59:17.085578: GO for Trial 9 - P - positive - response time 9.031617 - positive criterion count 8
2023-10-06 12:59:35.095534: Current Trial Trial 10 - P - positive
2023-10-06 12:59:46.129396: Green button pressed - horse released
2023-10-06 12:59:56.947294: GO for Trial 10 - P - positive - response time 10.817912 - positive criterion count 9
2023-10-06 13:00:14.964550: Current Trial Trial 11 - N - negative
2023-10-06 13:00:32.579564: Green button pressed - horse released
2023-10-06 13:00:51.172825: GO for Trial 11 - N - negative - response time 18.593252
2023-10-06 13:01:09.182557: Current Trial Trial 12 - N - negative
2023-10-06 13:01:20.989600: Green button pressed - horse released
2023-10-06 13:01:30.495559: GO for Trial 12 - N - negative - response time 9.505987
2023-10-06 13:01:48.504807: Current Trial Trial 13 - N - negative
2023-10-06 13:01:50.179606: Green button pressed - horse released
2023-10-06 13:02:23.942294: GO for Trial 13 - N - negative - response time 33.762633
2023-10-06 13:02:41.945548: Current Trial Trial 14 - N - negative
2023-10-06 13:02:43.702448: Green button pressed - horse released
2023-10-06 13:03:09.516276: GO for Trial 14 - N - negative - response time 25.813766
2023-10-06 13:03:27.526517: Current Trial Trial 15 - N - negative
2023-10-06 13:03:28.896875: Green button pressed - horse released
2023-10-06 13:04:28.896964: NOGO for Trial 15 - N - negative - negative criterion count 1
2023-10-06 13:04:46.914554: Current Trial Trial 16 - N - negative
2023-10-06 13:04:47.236090: Green button pressed - horse released
2023-10-06 13:05:47.236139: NOGO for Trial 16 - N - negative - negative criterion count 2
2023-10-06 13:06:05.239541: Current Trial Trial 17 - N - negative
2023-10-06 13:06:05.555654: Green button pressed - horse released
2023-10-06 13:07:05.555701: NOGO for Trial 17 - N - negative - negative criterion count 3
2023-10-06 13:07:23.560555: Current Trial Trial 18 - N - negative
2023-10-06 13:07:31.725137: Green button pressed - horse released
2023-10-06 13:08:31.725067: NOGO for Trial 18 - N - negative - negative criterion count 4
2023-10-06 13:08:49.735573: Current Trial Trial 19 - N - negative
2023-10-06 13:08:54.660715: Green button pressed - horse released
2023-10-06 13:09:54.660676: NOGO for Trial 19 - N - negative - negative criterion count 5
2023-10-06 13:10:07.647448: Keyboard interrupt - exiting...

Deep dives:

deep_dive_filename = "Experiment_2023-10-09T17:45:46.540359_apollo_5_Training randomised Type 1.log"
@project.sql_to_csv(purpose="Retrieve experiment details for a specific log file")
def get_experiment_details(project, filename):
    query = f"""
        SELECT * EXCLUDE Parameters
        FROM ExperimentCBs
        WHERE LogFileName = '{filename}';
    """
    with project.db_connection() as con:
        return con.sql(query).df()


# result_df = get_experiment_details(deep_dive_filename)
@project.sql_to_csv(purpose="Retrieve trial details for a specific log file")
def get_trials_details(project, filename):
    query = f"""
        SELECT 
            e.ExperimentID,
            t.TrialID,
            t.TrialNumber,
            t.TrialStartTime,
            t.TrialEndTime,
            t.ResponseType,
            t.TrialSubType,
            t.CriterionType,
            t.CriterionCount
        FROM TrialCBs t
        JOIN ExperimentCBs e ON t.ExperimentID = e.ExperimentID
        WHERE e.LogFileName = '{filename}'
        ORDER BY t.TrialNumber
    """
    with project.db_connection() as con:
        return con.sql(query).df()


# result_df = get_trials_details(deep_dive_filename)
@project.sql_to_csv(purpose="Retrieve event details for a specific log file")
def get_events_details(project, filename):
    query = f"""
        SELECT 
            t.ExperimentID,
            ev.TrialID,
            ev.EventID,
            ev.EventTime,
            ev.EventType,
        FROM EventCBs ev
        JOIN TrialCBs t ON ev.TrialID = t.TrialID
        JOIN ExperimentCBs e ON t.ExperimentID = e.ExperimentID
        WHERE e.LogFileName = '{filename}'
        ORDER BY t.ExperimentID, ev.TrialID, ev.EventTime
    """
    with project.db_connection() as con:
        return con.sql(query).df()


# result_df = get_events_details(deep_dive_filename)
@project.sql_to_csv(purpose="Retrieve detailed response information for a specific log file")
def get_responses_details(project, filename):
    query = f"""
        SELECT 
            e.SessionType,
            t.ExperimentID,
            r.TrialID,
            r.ResponseID,
            r.ResponseTime,
            t.TrialNumber,
            t.TrialSubType,
            e.Direction,
            t.CriterionType,
            t.CriterionCount,
            t.TrialStartTime,
            t.TrialEndTime,
        FROM ResponseCBs r
        JOIN TrialCBs t ON r.TrialID = t.TrialID
        JOIN ExperimentCBs e ON t.ExperimentID = e.ExperimentID
        WHERE e.LogFileName = '{filename}'
        ORDER BY t.ExperimentID, r.TrialID, r.ResponseID
    """
    with project.db_connection() as con:
        return con.sql(query).df()


# result_df = get_responses_details(deep_dive_filename)
def compare_experiment_data(project, filename):
    display(Markdown(f"#### Database: {filename}"))

    display(Markdown("##### ExperimentCBs:\n"))
    experiment_df = get_experiment_details(filename)

    display(Markdown("##### TrialCBs:\n"))
    trials_df = get_trials_details(filename)

    display(Markdown("##### EventCBs:\n"))
    events_df = get_events_details(filename)

    display(Markdown("##### ResponseCBs:\n"))
    responses_df = get_responses_details(filename)

    # Display original logfile contents
    display(Markdown("#### Logfile:\n"))
    display_file_contents(LOGFILES_DIR / filename)

    display(Markdown("----"))

    # Return the four DataFrames as separate arguments
    return experiment_df, trials_df, events_df, responses_df
experiment_df, trials_df, events_df, responses_df = compare_experiment_data(project, deep_dive_filename)

Database: Experiment_2023-10-09T17:45:46.540359_apollo_5_Training randomised Type 1.log

ExperimentCBs:
ExperimentID Cohort SubjectName SubjectNumber SessionNumber SessionType ExperimentType Direction Comment DateTime LogFileName
Loading ITables v2.1.4 from the init_notebook_mode cell... (need help?)
TrialCBs:
ExperimentID TrialID TrialNumber TrialStartTime TrialEndTime ResponseType TrialSubType CriterionType CriterionCount
Loading ITables v2.1.4 from the init_notebook_mode cell... (need help?)
EventCBs:
ExperimentID TrialID EventID EventTime EventType
Loading ITables v2.1.4 from the init_notebook_mode cell... (need help?)
ResponseCBs:
SessionType ExperimentID TrialID ResponseID ResponseTime TrialNumber TrialSubType Direction CriterionType CriterionCount TrialStartTime TrialEndTime
Loading ITables v2.1.4 from the init_notebook_mode cell... (need help?)

Logfile:

2023-10-09 17:49:55.132535: Data directory: /home/horselogic/Code/cb_data
2023-10-09 17:49:55.135556: Log file: Experiment_2023-10-09T17:45:46.540359_apollo_5_Training randomised Type 1.log
2023-10-09 17:49:55.139327: Quantity file: Experiment_2023-10-09T17:45:46.540359_apollo_5_Training randomised Type 1.csv
2023-10-09 17:49:55.143599: Subject apollo - Session 5 started...
2023-10-09 17:50:04.135331: Green button pressed - system ready
2023-10-09 17:50:04.136761: System is ready for apollo 5 Session type Training randomised Type 1
2023-10-09 17:50:14.143264: Current Trial Trial 1 - P - positive
2023-10-09 17:50:17.768052: Green button pressed - horse released
2023-10-09 17:50:26.919705: GO for Trial 1 - P - positive - response time 9.151622 - positive criterion count 1
2023-10-09 17:50:38.927073: Current Trial Trial 2 - N - negative
2023-10-09 17:52:29.968279: Green button pressed - horse released
2023-10-09 17:53:29.968300: NOGO for Trial 2 - N - negative - negative criterion count 1
2023-10-09 17:53:41.971244: Current Trial Trial 3 - P - positive
2023-10-09 17:54:09.722465: Green button pressed - horse released
2023-10-09 17:54:21.266292: GO for Trial 3 - P - positive - response time 11.543718 - positive criterion count 2
2023-10-09 17:54:33.274255: Current Trial Trial 4 - N - negative
2023-10-09 17:55:48.518037: Green button pressed - horse released
2023-10-09 17:56:00.046265: GO for Trial 4 - N - negative - response time 11.528231
2023-10-09 17:56:12.054307: Current Trial Trial 5 - N - negative
2023-10-09 17:56:19.116396: Green button pressed - horse released
2023-10-09 17:57:19.116385: NOGO for Trial 5 - N - negative - negative criterion count 2
2023-10-09 17:57:31.119283: Current Trial Trial 6 - P - positive
2023-10-09 17:57:45.320918: Green button pressed - horse released
2023-10-09 17:57:55.169267: GO for Trial 6 - P - positive - response time 9.848299 - positive criterion count 3
2023-10-09 17:58:07.178272: Current Trial Trial 7 - N - negative
2023-10-09 17:59:31.704638: Green button pressed - horse released
2023-10-09 17:59:53.701160: GO for Trial 7 - N - negative - response time 21.996519
2023-10-09 18:00:05.709267: Current Trial Trial 8 - P - positive
2023-10-09 18:00:38.920273: Green button pressed - horse released
2023-10-09 18:00:50.038745: GO for Trial 8 - P - positive - response time 11.117833 - positive criterion count 4
2023-10-09 18:01:02.043238: Current Trial Trial 9 - P - positive
2023-10-09 18:02:25.080445: Green button pressed - horse released
2023-10-09 18:02:35.342735: GO for Trial 9 - P - positive - response time 10.262957 - positive criterion count 5
2023-10-09 18:02:47.345237: Current Trial Trial 10 - N - negative
2023-10-09 18:03:28.534260: Green button pressed - horse released
2023-10-09 18:04:28.534258: NOGO for Trial 10 - N - negative - negative criterion count 3
2023-10-09 18:04:40.539254: Current Trial Trial 11 - P - positive
2023-10-09 18:04:59.035480: Green button pressed - horse released
2023-10-09 18:05:11.801773: GO for Trial 11 - P - positive - response time 12.766254 - positive criterion count 6
2023-10-09 18:05:23.808218: Current Trial Trial 12 - N - negative
2023-10-09 18:07:02.642547: Green button pressed - horse released
2023-10-09 18:08:02.642448: NOGO for Trial 12 - N - negative - negative criterion count 4
2023-10-09 18:08:14.645842: Current Trial Trial 13 - N - negative
2023-10-09 18:08:25.615940: Green button pressed - horse released
2023-10-09 18:08:45.246303: GO for Trial 13 - N - negative - response time 19.630359
2023-10-09 18:08:57.248272: Current Trial Trial 14 - P - positive
2023-10-09 18:09:18.531072: Green button pressed - horse released
2023-10-09 18:09:29.922994: GO for Trial 14 - P - positive - response time 11.391896 - positive criterion count 7
2023-10-09 18:09:41.927216: Current Trial Trial 15 - N - negative
2023-10-09 18:11:17.276917: Green button pressed - horse released
2023-10-09 18:12:17.276907: NOGO for Trial 15 - N - negative - negative criterion count 5
2023-10-09 18:12:29.285217: Current Trial Trial 16 - P - positive
2023-10-09 18:12:51.918371: Green button pressed - horse released
2023-10-09 18:13:03.342167: GO for Trial 16 - P - positive - response time 11.423845 - positive criterion count 8
2023-10-09 18:13:15.347257: Current Trial Trial 17 - P - positive
2023-10-09 18:14:42.986387: Green button pressed - horse released
2023-10-09 18:14:53.377774: GO for Trial 17 - P - positive - response time 10.391335 - positive criterion count 9
2023-10-09 18:15:05.382236: Current Trial Trial 18 - N - negative
2023-10-09 18:16:17.926250: Green button pressed - horse released
2023-10-09 18:17:17.925594: NOGO for Trial 18 - N - negative - negative criterion count 6
2023-10-09 18:17:29.928718: Current Trial Trial 19 - P - positive
2023-10-09 18:17:51.391368: Green button pressed - horse released
2023-10-09 18:18:01.437739: GO for Trial 19 - P - positive - response time 10.046309 - positive criterion count 10
2023-10-09 18:18:13.441239: Current Trial Trial 20 - N - negative
2023-10-09 18:19:42.720723: Green button pressed - horse released
2023-10-09 18:20:42.720777: NOGO for Trial 20 - N - negative - negative criterion count 7
2023-10-09 18:20:52.728277: Session terminated - session complete
2023-10-09 18:20:59.741475: Positive criterion reached - 10

# experiment_df, trials_df, events_df, responses_df = compare_experiment_data(project, "Experiment_2023-10-11T10:26:14.965471_atom_8_Test Type 1.log")

Close the connection to the database

INFO     | Database connection closed