Skip to content

Commit

Permalink
multilevel data frames
Browse files Browse the repository at this point in the history
  • Loading branch information
vedina committed Mar 31, 2024
1 parent 59cefd1 commit d44ad53
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 4 deletions.
46 changes: 43 additions & 3 deletions src/pynanomapper/datamodel/templates/blueprint.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,10 +117,50 @@ def get_nmparser_config(json_blueprint):
config = json.load(json_file)
return config

def pchem_format_2excel(file_path,json_blueprint):
def create_nested_headers_dataframe(dicts,
keys={"METADATA_PARAMETERS" : {'group' : 'param_group', 'name' : 'param_name', 'unit' : 'param_unit'}},
levels = ['group','name','unit'],lookup = {}):
# Initialize an empty DataFrame
df = pd.DataFrame()
# Iterate through the dictionaries
for key in keys:
params = dicts.get(key,[])
for param in params:
try:
tags = [lookup.get(key,key)]
for level in levels:
tags.append(param.get(keys[key][level], "") )
#print(tags)
df[tuple(tags)] = None
except Exception as err:
print(err)
pass
# Create MultiIndex DataFrame
names = ['']
names.extend(levels)
df.columns = pd.MultiIndex.from_tuples(df.columns, names=names)
return df

def pchem_format_2excel(file_path_xlsx,json_blueprint):
current_script_directory = os.path.dirname(os.path.abspath(__file__))
resource_file = os.path.join(current_script_directory, "../../resource/nmparser","template_pchem.xlsx")
shutil.copy2(resource_file, file_path)
shutil.copy2(resource_file, file_path_xlsx)
with pd.ExcelWriter(file_path_xlsx, engine='openpyxl', mode='a') as writer:
df = create_nested_headers_dataframe(json_blueprint,keys={"METADATA_PARAMETERS" : {'group' : 'param_group', 'name' : 'param_name', 'unit' : 'param_unit'}})
df.to_excel(writer,sheet_name="Measuring_conditions")
df = create_nested_headers_dataframe(json_blueprint,keys=
{"METADATA_SAMPLE_INFO" : {'group' : 'param_sample_group', 'name' : 'param_sample_name'},
"METADATA_SAMPLE_PREP" : {'group' : 'param_sampleprep_group', 'name' : 'param_sampleprep_name'}},
levels = ['group','name'])
df.to_excel(writer,sheet_name="SAMPLES")
df = create_nested_headers_dataframe(json_blueprint,keys=
{"raw_data_report" : {'name' : 'raw_endpoint', 'unit' : 'raw_unit'},
"question3" : {'name' : 'result_name', 'unit' : 'result_unit'}},
levels = ['name','unit'],
lookup = {"raw_data_report" : "Raw data","question3" : "Results"}
)
df.to_excel(writer,sheet_name="Results_TABLE")


def add_plate_layout(file_path_xlsx,json_blueprint):
print(json_blueprint.get("data_sheets"))
Expand Down Expand Up @@ -183,7 +223,7 @@ def get_template_frame(json_blueprint):
result_df[["param_name","type","position","datamodel","value"]],
treatment[["param_name","type","position","datamodel","value"]]
], ignore_index=True)
print(df_info)
#print(df_info)
#:END: Please do not add information below this line
#Template version {{ || version }}
#Template authors {{ || acknowledgements }}
Expand Down
Binary file modified src/pynanomapper/resource/nmparser/template_pchem.xlsx
Binary file not shown.
1 change: 1 addition & 0 deletions tests/resources/templates/tga.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"PROTOCOL_TOP_CATEGORY":"P-CHEM","raw_data":false,"template_status":"DRAFT","template_name":"TGA","template_author":"KA","template_acknowledgment":"POLYRISK","user_role":["role_lab"],"METHOD":"TGA","EXPERIMENT":"TGA","question3":[{"results_conditions":["Concentration","Time","Experiment","Replicate"],"result_name":"Mass loss 1","result_unit":"%","result_type":"value_num"},{"result_name":"Mass loss 1 (temperature range)","result_unit":"°C","result_type":"value_num"},{"result_name":"Mass loss 2","result_unit":"%","result_type":"value_num"},{"result_name":"Mass loss 2 (temperature range)","result_unit":"°C","result_type":"value_num"},{"result_name":"Mass loss 3","result_unit":"%","result_type":"value_num"},{"result_name":"Mass loss 3 (temperature range)","result_unit":"°C","result_type":"value_num"},{"result_name":"Mass loss 4","result_unit":"%","result_type":"value_num"},{"result_name":"Mass loss 4 (temperature range)","result_unit":"°C","result_type":"value_num"},{"result_name":"DTG -1 ","result_aggregate":"MAX","result_unit":"°C","result_type":"value_num"},{"result_name":"DTG -2","result_aggregate":"MAX","result_unit":"°C","result_type":"value_num"},{"result_name":"DTG -3","result_aggregate":"MAX","result_unit":"°C","result_type":"value_num"},{"result_name":"DTG -4","result_aggregate":"MAX","result_unit":"°C","result_type":"value_num"},{"result_name":"Residue after purge gas-1","result_unit":"%","result_type":"value_num"},{"result_name":"Residue after purge gas-2","result_unit":"%","result_type":"value_num"}],"RESULTS":"Mass loss\t\t\t\t\t\t\t\nTemperature of decomposition gas\t\t\t\nSpectra","METADATA_PARAMETERS":[{"param_subgroup":"TGA instrument","param_name":"Device","param_group":"INSTRUMENT","param_type":"value_text","param_hint":"TGA/DSC 3+"},{"param_subgroup":"TGA instrument\t\t \t\t","param_name":"Company","param_group":"INSTRUMENT","param_type":"value_text","param_hint":"Mettler-Toledo, USA"},{"param_subgroup":"TGA instrument","param_name":"Autosampler available","param_group":"INSTRUMENT","param_type":"value_boolean","param_hint":"yes"},{"param_subgroup":"Crucible","param_hint":"Al2O3","param_name":"Crucible material","param_group":"MEASUREMENT CONDITIONS","param_type":"value_text"},{"param_subgroup":"Crucible","param_hint":"150 µl","param_name":"Crucible size","param_unit":" µl","param_group":"MEASUREMENT CONDITIONS","param_type":"value_num"},{"param_subgroup":"Temperatures","param_hint":"20","param_name":"Initial temperature","param_unit":"°C","param_group":"MEASUREMENT CONDITIONS","param_type":"value_num"},{"param_subgroup":"Temperatures","param_hint":"900","param_name":"Final temperature","param_unit":"°C","param_group":"MEASUREMENT CONDITIONS","param_type":"value_num"},{"param_subgroup":"Temperatures","param_name":"Heating rate","param_unit":"K per min","param_group":"MEASUREMENT CONDITIONS","param_type":"value_num","param_hint":"10"},{"param_hint":"nitrogen","param_subgroup":"Gases","param_name":"Type of purge gas 1","param_group":"MEASUREMENT CONDITIONS","param_type":"value_text"},{"param_subgroup":"Gases","param_hint":"synthetic air","param_name":"Type of purge gas 2","param_group":"MEASUREMENT CONDITIONS","param_type":"value_text"},{"param_hint":"30","param_name":"Flow of purge gas 1","param_unit":"ml per min","param_group":"MEASUREMENT CONDITIONS","param_type":"value_num","param_subgroup":"Gases"},{"param_subgroup":"Gases","param_name":"Flow of purge gas 2","param_unit":"ml per min","param_group":"MEASUREMENT CONDITIONS","param_type":"value_num","param_hint":"30"},{"param_subgroup":"Gases","param_name":"Temperature range of purge gas 1","param_unit":"°C","param_group":"MEASUREMENT CONDITIONS","param_type":"value_num","param_hint":"25-600"},{"param_hint":"600-900","param_name":"Temperature range of purge gas 2","param_unit":"°C","param_group":"MEASUREMENT CONDITIONS","param_type":"value_num","param_subgroup":"Gases"}],"METADATA_SAMPLE_PREP":[{"param_sampleprep_name":"Sample weight","param_sampleprep_unit":"mg","param_sampleprep_group":"OTHER_SAMPLEPREP","param_type":"value_num"},{"param_sampleprep_name":"Corrected with buoyancy blank value","param_sampleprep_group":"OTHER_SAMPLEPREP","param_type":"value_boolean"}],"origin_uuid":"d919bbde-cb34-464e-9f75-ec3ac8602a30","SOP":"protocol_research","EXPERIMENT_PROTOCOL":"TGA measurements are used to gravimetrically monitor the degradation behaviour of polymers. The degradation profile provides information about characteristic polymer degradation temperatures and material compositions. \t\t\t\t\t\t\t\n","data_sheets":["data_raw","data_processed"],"raw_data_report":[{"raw_endpoint":"Refers to spectra","raw_aggregate":"RAW_DATA","raw_type":"value_file"}],"METADATA_SAMPLE_INFO":[{"param_sample_name":"ID","param_sample_group":"ID"},{"param_sample_name":"Name","param_sample_group":"NAME"},{"param_sample_name":"CAS","param_sample_group":"CASRN"}],"PROTOCOL_CATEGORY_CODE":"PC_THERMAL_STABILITY_SECTION","template_layout":"pchem"}
3 changes: 2 additions & 1 deletion tests/test_blueprint.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

TEMPLATE_DIR = Path(__file__).parent / "resources/templates"
TEST_JSON_PATH = f"{TEMPLATE_DIR}/dose_response.json"
TEST_PCHEM_PATH = f"{TEMPLATE_DIR}/tga.json"

TEST_EXCEL_ERROR_UUID = "015690ac-b26a-4845-826e-c479a62eef62"
TEST_EXCEL_ERROR = f"{TEMPLATE_DIR}/{TEST_EXCEL_ERROR_UUID}.json"
Expand Down Expand Up @@ -64,7 +65,7 @@ def test_doseresponse_resultsonly_template():
assert "Materials" in xls.sheet_names

def test_pchem_template():
with open(TEST_JSON_PATH, "r") as file:
with open(TEST_PCHEM_PATH, "r") as file:
json_blueprint = json.load(file)
json_blueprint["template_layout"] = ["pchem"]
json_blueprint["data_sheets"] = ["data_processed"]
Expand Down

0 comments on commit d44ad53

Please sign in to comment.