def _write_adni_sessions_tsv(
df_subj_sessions: pd.DataFrame, bids_subjs_paths: list[Path]
):
"""Write the result of method create_session_dict into several TSV files.
Args:
df_subj_sessions: global dataframe containing clinical sessions data for all subjects
bids_subjs_paths: a list with the path to all bids subjects
"""
df_subj_sessions["adas_memory"] = (
df_subj_sessions["adas_Q1"]
+ df_subj_sessions["adas_Q4"]
+ df_subj_sessions["adas_Q7"]
+ df_subj_sessions["adas_Q8"]
+ df_subj_sessions["adas_Q9"]
) # / 45
df_subj_sessions["adas_language"] = (
df_subj_sessions["adas_Q2"]
+ df_subj_sessions["adas_Q5"]
+ df_subj_sessions["adas_Q10"]
+ df_subj_sessions["adas_Q11"]
+ df_subj_sessions["adas_Q12"]
) # / 25
df_subj_sessions["adas_praxis"] = (
df_subj_sessions["adas_Q3"] + df_subj_sessions["adas_Q6"]
) # / 10
df_subj_sessions["adas_concentration"] = df_subj_sessions["adas_Q13"] # / 5
df_subj_sessions = df_subj_sessions.fillna("n/a")
# compute the amyloid and ptau status
df_subj_sessions["a_stat"] = df_subj_sessions.apply(
lambda x: _compute_amyloid_status(
x[["adni_av45", "adni_pib", "adni_abeta"]].apply(
pd.to_numeric, errors="coerce"
)
),
axis=1,
)
df_subj_sessions["tau_stat"] = df_subj_sessions.apply(
lambda x: _compute_ptau_status(
x[["adni_ptau"]].apply(pd.to_numeric, errors="coerce")
),
axis=1,
)
for subject_path in bids_subjs_paths:
subject_path.mkdir(parents=True, exist_ok=True)
if subject_path.name == "conversion_info":
continue
df_tmp = df_subj_sessions[df_subj_sessions["RID"] == subject_path.name[12:]]
df_tmp.to_csv(
subject_path / f"{subject_path.name}_sessions.tsv",
sep="\t",
index=False,
encoding="utf-8",
)