diff --git a/redcap_bridge/test_redcap/test_utils.py b/redcap_bridge/test_redcap/test_utils.py index 39536170..687f17aa 100644 --- a/redcap_bridge/test_redcap/test_utils.py +++ b/redcap_bridge/test_redcap/test_utils.py @@ -7,7 +7,7 @@ import pytest from redcap_bridge.utils import compress_record -from redcap_bridge.utils import conversion_csv_to_json +from redcap_bridge.utils import conversion_csv_to_json, conversion_to_odml_table_descriptor test_directory = pathlib.Path(tempfile.gettempdir()) / 'diglabtools_testfiles' project_dir = test_directory / 'testfiles' / 'TestProject' @@ -58,3 +58,7 @@ def test_conversion_csv_to_json(initialize_test_dir): elab_conversion = conversion_csv_to_json(test_dir / 'csvRecord.csv') assert elab_conversion == elab_final +def test_conversion_to_odml_table_descriptor(initialize_test_dir): + test_dir = test_directory / 'testfiles' / 'conversionDescriptor' + + conversion_to_odml_table_descriptor(test_dir / 'Vision4Action_DATA_2023-04-13_1110.csv', session_number=5) diff --git a/redcap_bridge/test_redcap/testfiles/conversionDescriptor/Vision4Action_DATA_2023-04-13_1110.csv b/redcap_bridge/test_redcap/testfiles/conversionDescriptor/Vision4Action_DATA_2023-04-13_1110.csv new file mode 100644 index 00000000..126a2645 --- /dev/null +++ b/redcap_bridge/test_redcap/testfiles/conversionDescriptor/Vision4Action_DATA_2023-04-13_1110.csv @@ -0,0 +1,4 @@ +record_id,redcap_repeat_instrument,redcap_repeat_instance,redcap_survey_identifier,diglabform_v4a_timestamp,ethical_protocol_id,user,date,exp_name,guid,ses_number,ses_custom_field,modality___behaviour_eye,modality___behaviour_hand,modality___single_electrode,modality___multi_electrode,modality___emg,modality___int,modality___vsdi,modality___drug_injection,modality___neuronal_stimulation,modality___ecog,modality___seeg,weight,comments_exp,comments_setup,comments_animal,data_quality,incomplete,animal_behaviour___very_motivated,animal_behaviour___working,animal_behaviour___thirsty,animal_behaviour___sleepy,animal_behaviour___unmotivated,animal_behaviour___agitated,animal_behaviour_multi,time_last_trial,animal_behaviour_2___agitated,animal_behaviour_2___resting,animal_behaviour_2___sleeping,animal_behaviour_2___working,reward_fluid,reward_fluid_additional,reward_other___fruit_fresh,reward_other___fruit_dry,reward_other___seeds,reward_other___treats,reward_other___insects,special_event,special_event_time,kinarm_recorded_hand,kinarm_shoulder,kinarm_elbow,data_quality_hand,eyelink_recorded_eye,eyelink_offset_x,eyelink_offset_y,eyelink_gain_x,eyelink_gain_y,data_quality_eye,eye_screen_distance_x,eye_screen_distance_y,eye_screen_distance_z,diglabform_v4a_complete +1,diglabform_v4a,1,,,APAFIS_13894_2018030217116218_v4,toto,2017-12-28,land,FRM10042901,1,,1,1,0,1,0,0,0,0,0,0,0,,,,,,,0,0,0,0,0,0,,,0,0,0,0,200,,0,0,0,0,0,,,right,6,115,,left,,,,,,9,20,18,2 +2,diglabform_v4a,1,,,APAFIS_13894_2018030217116218_v4,toto,2017-12-29,land,FRM10042901,5,,1,1,0,1,0,0,0,0,0,0,0,,,,,,,0,0,0,0,0,0,,,0,0,0,0,100,,0,0,0,0,0,,,right,6,115,,left,,,,,,9,20,18,2 +3,diglabform_v4a,1,,,APAFIS_13894_2018030217116218_v4,xxx,2018-01-04,land,FRM10042901,3,,1,1,0,1,0,0,0,0,0,0,0,,,,,,,0,0,0,0,0,0,,,0,0,0,0,,,0,0,0,0,0,,,right,6,115,,left,,,,,,9,20,18,2 \ No newline at end of file diff --git a/redcap_bridge/utils.py b/redcap_bridge/utils.py index b6f527a4..55bb5f2a 100644 --- a/redcap_bridge/utils.py +++ b/redcap_bridge/utils.py @@ -295,3 +295,30 @@ def parse_choices(choice_str, annotation_str): default_choice_label = re.sub(r'\{.*?\}', '', default_choice_label) return list(choice_labels), default_choice_label + +def conversion_to_odml_table_descriptor(full_elabbook_csv, session_number): + """ + Create odml descriptor file base on the full elabbook csv file + + Args: + full_elabbook_csv: path to the full csv file + session_number: number of the session you want to create descriptor csv file + + Returns: + descriptor_elabbook_csv: csv descriptor file of the specific session given + + """ + + df = pd.read_csv(full_elabbook_csv) + + df_ses = df.loc[df['ses_number'] == session_number] + + cols_to_melt = df_ses.columns[df_ses.columns.get_loc('ethical_protocol_id'):] + + print(cols_to_melt) + + df_melted = df_ses.melt(id_vars='record_id', value_vars=cols_to_melt) + + df_melted = df_melted.rename(columns={'variable': 'Property name'}) + + print(df_melted.to_string()) \ No newline at end of file