From d1c762eb97f48f35b7b5f869866d92acfeb84933 Mon Sep 17 00:00:00 2001 From: Sharon Christine Yates <sharoncy@uio.no> Date: Thu, 4 Apr 2024 14:39:00 +0200 Subject: [PATCH] New script for converting WALN to JSON format Script for converting Waln files from Webalign and Webwarp to VisuAlign compatible JSON files. The intention is to use the script for testing purposes (make sure the online tools produce the same results as the offline tools). --- scripts/waln_to_json.py | 61 +++++++++++++++++++++++++++++++++++ testOOP.py | 6 ++-- test_data/PyNutil_test_2.waln | 1 + 3 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 scripts/waln_to_json.py create mode 100644 test_data/PyNutil_test_2.waln diff --git a/scripts/waln_to_json.py b/scripts/waln_to_json.py new file mode 100644 index 0000000..f44cba5 --- /dev/null +++ b/scripts/waln_to_json.py @@ -0,0 +1,61 @@ +import json +import re +import os + +''' +Sharon Yates, 04.04.24. +This is a script for converting WALN and WWRP files from WebAlign and WebWarp to VisuAlign compatible JSON files. +To be used for testing purposes. +''' + +def waln_to_json(filename): + with open(filename) as f: + vafile = json.load(f) + if filename.endswith(".waln") or filename.endswith("wwrp"): + slices = vafile["sections"] # define slices as "section" in waln + vafile["slices"] = slices + + for slice in slices: + print(slice) # this prints info from waln to screen. + if "filename" in slice: + base_name = os.path.basename(slice["filename"]).split('.')[0] + new_filename = base_name + '.png' + slice["filename"] = new_filename + slice["nr"] = int(re.search(r"_s(\d+)", slice["filename"]).group(1)) + if "ouv" in slice: + slice["anchoring"] = slice["ouv"] + + ''' + for slice in slices: + print(slice) # this prints info from waln to screen. + if "filename" in slice: + name, old_extension = slice["filename"].rsplit('.',1) + new_filename = name + '.png' + slice["filename"] = new_filename + slice["nr"] = int(re.search(r"_s(\d+)", slice["filename"]).group(1)) + if "ouv" in slice: + slice["anchoring"] = slice["ouv"] + ''' + + name = os.path.basename(filename) + va_compat_file = { + "name": name.replace(".waln",".json"), + "target": vafile["atlas"] + '.cutlas', + "target-resolution": [456, 528, 320], + "slices": slices + } + # save with .json extension need to see if i can remove this + with open( + filename.replace(".waln", ".json").replace(".wwrp", ".json"), "w" + ) as f: + #json.dump(va_compat_file, f, indent=4) + json.dump(va_compat_file, f, indent=4) + + print("Waln or Wwrp converted successfully to JSON") + + else: + pass + +waln_to_json("PyNutil_test_2.waln") + + diff --git a/testOOP.py b/testOOP.py index 0cab45c..3109bb8 100644 --- a/testOOP.py +++ b/testOOP.py @@ -6,9 +6,9 @@ os.chdir("..") pnt = PyNutil(settings_file=r"PyNutil/test/test10_PyNutil_web.json") -##Use flat can be set to True if you want to use the flat file -# instead of the visualign json (this is only useful for testing and will be removed) -pnt.get_coordinates(object_cutoff=0, method="per_pixel") +##use_flat can be set to True if you want to use the flat file +## for method select between "all", "per_pixel" and "per_object" +pnt.get_coordinates(object_cutoff=0, method="per_pixel", use_flat=False) pnt.quantify_coordinates() diff --git a/test_data/PyNutil_test_2.waln b/test_data/PyNutil_test_2.waln new file mode 100644 index 0000000..a14a830 --- /dev/null +++ b/test_data/PyNutil_test_2.waln @@ -0,0 +1 @@ +{"atlas":"ABA_Mouse_CCFv3_2017_25um","sections":[{"filename":"PyNutil_test/test_s001.dzip","width":1500,"height":1000,"snr":1,"format":"png","current":0,"tilesize":254,"overlap":1,"mode":0,"ouv":[-5.145275115966797,361.8014440433213,331.1490739071843,456,0,0,0,0,-320],"markers":[[440.0000000000001,289,450,323]]},{"filename":"PyNutil_test/test_s002.dzip","width":1500,"height":1000,"snr":2,"format":"png","current":0,"tilesize":254,"overlap":1,"mode":0,"ouv":[-3.8589563369750977,318.7157039711191,340.24552914037605,456,0,0,0,0,-320],"markers":[[636.8098159509204,603.4958601655935,672.6993865030674,593.3762649494021],[902.9868982011025,615.5567336628567,843.8650306748466,610.8555657773691],[561.2609204260139,750.3661510917975,558.5889570552147,775.5289788408462]]},{"filename":"PyNutil_test/test_s003.dzip","width":1500,"height":1000,"snr":3,"format":"png","current":0,"tilesize":254,"overlap":1,"mode":0,"ouv":[-2.8942172527313232,275.6299638989171,350.0189942541106,456,0,0,0,0,-320],"markers":[[761.0429447852762,629.2548298068077,741,500],[204.29447852760745,613.6154553817848,365.3374233128834,612.695492180313],[482.6376861494953,714.9876920193675,623.0061349693251,747.0101195952162],[434.00208292806684,606.7676930120547,578.8343558282207,601.6559337626494],[959.8159509202455,636.6145354185834,980.0613496932516,628.3348666053357],[957.8161415293836,523.3987679117937,953.3742331288344,547.3781048758049]]},{"filename":"PyNutil_test/test_s004.dzip","width":1500,"height":1000,"snr":4,"format":"png","current":0,"tilesize":254,"overlap":1,"mode":0,"ouv":[-3.0282087922096252,232.54422382671487,364.1366059225139,456,0,0,0,0,-320],"markers":[[522.6993865030674,712.9714811407543,530.6338374725239,715.7313707451705],[630.6438500513034,523.1833943062713,550.3067484662577,519.7792088316469],[916.4047791164191,534.1886045162021,962.5766871165645,523.4590616375344],[950.8076359295408,705.46368100121,925,668],[1096.1208774051677,649.3153717520049,1115,675],[1030.2378410339393,594.2011916220456,1065.644171779141,604.4158233670653]]},{"filename":"PyNutil_test/test_s005.dzip","width":1500,"height":1000,"snr":5,"format":"png","current":0,"tilesize":254,"overlap":1,"mode":0,"ouv":[-0.6163610816001892,189.45848375451277,374.2485759765199,456,0,0,0,0,-320]}],"bucket":"ewb-3d1dc41f-4256-4db5-bc75-0642369e1354"} \ No newline at end of file -- GitLab