Mercurial > repos > muon-spectroscopy-computational-project > muspinsim_config
comparison build_file.py @ 4:e1e338f56656 draft default tip
planemo upload for repository https://github.com/muon-spectroscopy-computational-project/muon-galaxy-tools/main/muspinsim_config commit 70a4d37ecdf5d586703cfc509922311e95d3205c
author | muon-spectroscopy-computational-project |
---|---|
date | Tue, 18 Jul 2023 13:26:20 +0000 |
parents | 331d0776abb4 |
children |
comparison
equal
deleted
inserted
replaced
3:331d0776abb4 | 4:e1e338f56656 |
---|---|
1 import json | 1 import json |
2 import re | 2 import re |
3 import sys | 3 import sys |
4 from typing import List | |
4 | 5 |
5 from muspinsim import MuSpinInput | 6 from muspinsim import MuSpinInput |
6 | 7 |
7 | 8 |
8 def write_file(file_name, content): | 9 def write_file(file_name, content): |
393 ) | 394 ) |
394 err_found = True | 395 err_found = True |
395 return err_found | 396 return err_found |
396 | 397 |
397 | 398 |
399 def append_template_file( | |
400 template_path: str, | |
401 mu_params: dict, | |
402 file_contents: List[str] | |
403 ): | |
404 """ | |
405 Loads an input file generated using muspinsim-gen and appends its contents | |
406 to what has already been created from config. Also ensures that the spins | |
407 are appended correctly. | |
408 """ | |
409 # Check if we have already defined spins in the file | |
410 spins_line = None | |
411 spins_line_index = None | |
412 if ("spins" in mu_params): | |
413 # Find the current line definition in the file | |
414 # In the format 'spins\n e\n' | |
415 for i, line in enumerate(file_contents): | |
416 if line.startswith("spins"): | |
417 spins_line = line.split("\n")[1].strip() | |
418 spins_line_index = i | |
419 if spins_line_index is not None: | |
420 del file_contents[spins_line_index] | |
421 | |
422 # Append the template file's contents | |
423 with open(template_path, encoding="utf-8") as template_file: | |
424 for line in template_file: | |
425 # Append the spins if needed | |
426 if line.startswith("spins") and spins_line is not None: | |
427 next_line = template_file.readline().strip() | |
428 file_contents += f"spins\n {next_line} {spins_line}\n" | |
429 else: | |
430 file_contents += line | |
431 | |
432 | |
398 def main(): | 433 def main(): |
399 """ | 434 """ |
400 Entry point | 435 Entry point |
401 """ | 436 """ |
402 input_json_path = sys.argv[1] | 437 input_json_path = sys.argv[1] |
403 mu_params = json.load(open(input_json_path, "r", encoding="utf-8")) | 438 mu_input_params = json.load(open(input_json_path, "r", encoding="utf-8")) |
404 | 439 |
405 out_file_name = mu_params["out_file_prefix"].strip().replace(" ", "_") | 440 out_file_name = mu_input_params["out_file_prefix"].strip().replace( |
441 " ", "_") | |
442 | |
443 # Check if using a template | |
444 template_path = None | |
445 if (mu_input_params["use_structure_file_conditional"] | |
446 ["use_structure_file"]) == "true": | |
447 template_path = "muspinsim_gen_out.in" | |
406 | 448 |
407 # combine all sections | 449 # combine all sections |
408 mu_params = { | 450 mu_params = { |
409 **mu_params["spins"], | 451 **mu_input_params["use_structure_file_conditional"]["spins"], |
410 **mu_params["interaction_params"], | 452 ** (mu_input_params["use_structure_file_conditional"] |
411 **mu_params["experiment_params"], | 453 ["interaction_params"]), |
412 **mu_params["fitting_params"]["fitting_options"], | 454 **mu_input_params["experiment_params"], |
455 **mu_input_params["fitting_params"]["fitting_options"], | |
413 } | 456 } |
414 | 457 |
415 # get experiment parameters | 458 # get experiment parameters |
416 experiment = mu_params["experiment"] | 459 experiment = mu_params["experiment"] |
417 mu_params = {**mu_params, **experiment} | 460 mu_params = {**mu_params, **experiment} |
427 build_block("name", [out_file_name.strip().replace(" ", "_")]) | 470 build_block("name", [out_file_name.strip().replace(" ", "_")]) |
428 ] | 471 ] |
429 | 472 |
430 if parse_dict(parse_func_dict, mu_params, file_contents): | 473 if parse_dict(parse_func_dict, mu_params, file_contents): |
431 sys.exit(1) | 474 sys.exit(1) |
475 | |
476 # Load and append the template if specified | |
477 if template_path is not None: | |
478 append_template_file(template_path, mu_params, file_contents) | |
432 | 479 |
433 write_file("outfile.in", file_contents) | 480 write_file("outfile.in", file_contents) |
434 | 481 |
435 try: | 482 try: |
436 MuSpinInput(open("outfile.in", encoding="utf-8")) | 483 MuSpinInput(open("outfile.in", encoding="utf-8")) |