ds003604/code/func_qa/acc_rt/ELP_acc_rt.ipynb
2021-04-08 18:48:11 +00:00

180 lines
11 KiB (Stored with Git Annex)
Text

{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import glob\n",
"import os\n",
"\n",
"task='Phon'\n",
"stim_path='/home/wangj57/'\n",
"path='/dors/booth/JBooth-Lab/BDL/ELP/Jin_code/bids'\n",
"stim_table=pd.read_excel(stim_path + task + '.xlsx')\n",
"tsvfiles=glob.glob(path+\"/**/*\"+ task +\"*run\" +\"*.tsv\", recursive=True) \n",
"#print(tsvfiles)\n",
"for i in range(len(tsvfiles)): \n",
" run_data=pd.read_table(tsvfiles[i], header=0)\n",
" print('going')\n",
" #print(tsvfiles[i])\n",
" root=os.path.split(tsvfiles[i])[0]\n",
" file=os.path.split(tsvfiles[i])[1]\n",
" run_data.drop(['calculated_accuracy', 'calculated_RT'], axis=1, inplace=True )\n",
" run_data['calculated_response']=0\n",
" run_data['calculated_accuracy']=0\n",
" run_data['calculated_RT']=0\n",
" \n",
" for trial in range(len(run_data['onset'].values)):\n",
" #print(trial)\n",
" cur_stim=run_data['stim_file'].iloc[trial]\n",
" filt=(stim_table['stim_file']==cur_stim)\n",
" preptime=list(stim_table.loc[filt,'preptime'])[0]\n",
" \n",
" #if this is the last trial of a run\n",
" if trial==(len(run_data['onset'].values)-1):\n",
" if preptime != 0 :\n",
" if (run_data['window2_response'].iloc[trial] !='n/a') and (pd.to_numeric(run_data['window2_RT'].iloc[trial]) > preptime): \n",
" run_data.loc[trial,'calculated_response'] = run_data['window2_response'].iloc[trial]\n",
" run_data.loc[trial,'calculated_RT']=pd.to_numeric(run_data['window2_RT'].iloc[trial])-preptime\n",
" #print('1')\n",
" \n",
" elif ((run_data['window2_response'].iloc[trial] =='n/a') or (pd.to_numeric(run_data['window2_RT'].iloc[trial]) < preptime)):\n",
" run_data.loc[trial,'calculated_response'] = 'n/a'\n",
" run_data.loc[trial,'calculated_RT'] = 'n/a'\n",
" #print('2')\n",
" \n",
" if preptime == 0:\n",
" if (run_data['window1_response'].iloc[trial] !='n/a'): \n",
" run_data.loc[trial,'calculated_response'] = run_data['window1_response'].iloc[trial]\n",
" run_data.loc[trial,'calculated_RT']=pd.to_numeric(run_data['window1_RT'].iloc[trial])\n",
" #print('3')\n",
" \n",
" elif (run_data['window2_response'].iloc[trial] !='n/a'):\n",
" run_data.loc[trial,'calculated_response'] = run_data['window2_response'].iloc[trial]\n",
" run_data.loc[trial,'calculated_RT'] = pd.to_numeric(run_data['window2_RT'].iloc[trial]) + 0.75\n",
" #print('4')\n",
" \n",
" elif (run_data['window1_response'].iloc[trial] =='n/a') and (run_data['window2_response'].iloc[trial]=='n/a'):\n",
" run_data.loc[trial,'calculated_response'] = 'n/a'\n",
" run_data.loc[trial,'calculated_RT'] = 'n/a'\n",
" #print('5')\n",
" \n",
" else:\n",
" next_stim=run_data['stim_file'].iloc[trial+1]\n",
" filt2=(stim_table['stim_file']==next_stim)\n",
" preptime2=list(stim_table.loc[filt2,'preptime'])[0]\n",
" #print('6')\n",
" \n",
" #if this is not the last trial of a run\n",
" if trial!=(len(run_data['onset'].values)-1):\n",
" if (preptime != 0):\n",
" if (run_data['window2_response'].iloc[trial] !='n/a') and (pd.to_numeric(run_data['window2_RT'].iloc[trial]) > preptime): \n",
" run_data.loc[trial,'calculated_response'] = run_data['window2_response'].iloc[trial]\n",
" run_data.loc[trial,'calculated_RT']=pd.to_numeric(run_data['window2_RT'].iloc[trial])-preptime\n",
" #print('7')\n",
" elif ((run_data['window2_response'].iloc[trial] =='n/a') or ((pd.to_numeric(run_data['window2_RT'].iloc[trial])) < preptime))\\\n",
" and (preptime2 == 0):\n",
" run_data.loc[trial,'calculated_response'] = 'n/a'\n",
" run_data.loc[trial,'calculated_RT'] = 'n/a'\n",
" #print('8')\n",
" elif ((run_data['window2_response'].iloc[trial]=='n/a') or (pd.to_numeric(run_data['window2_RT'].iloc[trial]) < preptime)) \\\n",
" and (preptime2 != 0) and (run_data['window1_response'].iloc[trial+1] !='n/a'):\n",
" run_data.loc[trial,'calculated_response'] = run_data['window1_response'].iloc[trial+1]\n",
" if run_data['window1_RT'].iloc[trial+1] !='n/a':\n",
" run_data.loc[trial,'calculated_RT'] = pd.to_numeric(run_data['window1_RT'].iloc[trial+1]) + pd.to_numeric(run_data['duration'].iloc[trial])-preptime-0.75\n",
" #print('9')\n",
" else:\n",
" run_data.loc[trial,'calculated_RT'] = 'n/a'\n",
" print('attention!', tsvfiles[i])\n",
" elif ((run_data['window2_response'].iloc[trial]=='n/a') or (pd.to_numeric(run_data['window2_RT'].iloc[trial]) < preptime))\\\n",
" and (preptime2 != 0) and (run_data['window1_response'].iloc[trial+1]=='n/a')\\\n",
" and (run_data['window2_response'].iloc[trial+1]!='n/a') and (pd.to_numeric(run_data['window2_RT'].iloc[trial+1]) < preptime2):\n",
" run_data.loc[trial,'calculated_response'] = run_data['window2_response'].iloc[trial+1]\n",
" run_data.loc[trial,'calculated_RT'] = pd.to_numeric(run_data['duration'].iloc[trial]) - preptime -0.75 + 0.75 + pd.to_numeric(run_data['window2_RT'].iloc[trial+1])\n",
" #print('10')\n",
" else:\n",
" run_data.loc[trial,'calculated_response'] ='n/a'\n",
" run_data.loc[trial,'calculated_RT'] ='n/a'\n",
" \n",
" if (preptime == 0):\n",
" if (run_data['window1_response'].iloc[trial] !='n/a'): \n",
" run_data.loc[trial,'calculated_response'] = run_data['window1_response'].iloc[trial]\n",
" if (run_data['window1_RT'].iloc[trial]!='n/a'):\n",
" run_data.loc[trial,'calculated_RT']=pd.to_numeric(run_data['window1_RT'].iloc[trial])\n",
" else: \n",
" run_data.loc[trial,'calculated_RT']='n/a';\n",
" print('attention!', tsvfiles[i])\n",
" #print('12')\n",
" elif (run_data['window2_response'].iloc[trial] !='n/a'):\n",
" run_data.loc[trial,'calculated_response'] = run_data['window2_response'].iloc[trial]\n",
" run_data.loc[trial,'calculated_RT'] = pd.to_numeric(run_data['window2_RT'].iloc[trial]) + 0.75\n",
" #print('13')\n",
" elif (run_data['window1_response'].iloc[trial] =='n/a') and (run_data['window2_response'].iloc[trial]=='n/a') \\\n",
" and (preptime2==0):\n",
" run_data.loc[trial,'calculated_response'] = 'n/a'\n",
" run_data.loc[trial,'calculated_RT'] = 'n/a'\n",
" #print('14')\n",
" elif (run_data['window1_response'].iloc[trial] =='n/a') and (run_data['window2_response'].iloc[trial]=='n/a') \\\n",
" and (preptime2 != 0) and (run_data['window1_response'].iloc[trial+1]!='n/a'):\n",
" run_data.loc[trial,'calculated_response'] = run_data['window1_response'].iloc[trial+1]\n",
" if (run_data['window1_RT'].iloc[trial+1] !='n/a'):\n",
" run_data.loc[trial,'calculated_RT'] = pd.to_numeric(run_data['duration'].iloc[trial]) + pd.to_numeric(run_data['window1_RT'].iloc[trial+1])\n",
" else:\n",
" run_data.loc[trial,'calculated_RT']='n/a';\n",
" print('attention!', tsvfiles[i])\n",
" #print('15')\n",
" elif (run_data['window1_response'].iloc[trial] =='n/a') and (run_data['window2_response'].iloc[trial]=='n/a') \\\n",
" and (preptime2 != 0) and (run_data['window1_response'].iloc[trial+1]=='n/a')\\\n",
" and run_data['window2_RT'].iloc[trial+1] =='n/a':\n",
" run_data.loc[trial,'calculated_response'] = 'n/a'\n",
" run_data.loc[trial,'calculated_RT'] = 'n/a'\n",
" #print('18')\n",
" elif (run_data['window1_response'].iloc[trial] =='n/a') and (run_data['window2_response'].iloc[trial]=='n/a') \\\n",
" and (preptime2 != 0) and (run_data['window1_response'].iloc[trial+1]=='n/a')\\\n",
" and pd.to_numeric(run_data['window2_RT'].iloc[trial+1])<preptime2:\n",
" run_data.loc[trial,'calculated_response'] = run_data['window2_response'].iloc[trial+1]\n",
" run_data.loc[trial,'calculated_RT'] = pd.to_numeric(run_data['duration'].iloc[trial]) + 0.75 + pd.to_numeric(run_data['window2_RT'].iloc[trial+1])\n",
" #print('16')\n",
" else:\n",
" run_data.loc[trial,'calculated_response'] = 'n/a'\n",
" run_data.loc[trial,'calculated_RT'] = 'n/a'\n",
" #print('17')\n",
" \n",
" for ans in range(len(run_data['correct'].values)):\n",
" if run_data['calculated_response'].iloc[ans] == 'n/a':\n",
" run_data.loc[ans,'calculated_accuracy'] = 0\n",
" elif pd.to_numeric(run_data['correct'].iloc[ans]) == pd.to_numeric(run_data['calculated_response'].iloc[ans]):\n",
" run_data.loc[ans,'calculated_accuracy'] = 1\n",
" elif pd.to_numeric(run_data['correct'].iloc[ans]) != pd.to_numeric(run_data['calculated_response'].iloc[ans]):\n",
" run_data.loc[ans,'calculated_accuracy'] = 0\n",
" #run_data.drop('calculated_response', axis=1, inplace=True)\n",
" run_data.to_csv(root+'/'+file, sep='\\t', index=False)\n",
"print('done')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}