44
55import argparse
66import sys
7+ from pathlib import Path
78
89from . import equilibrate
910from . import make_crystal
@@ -20,26 +21,55 @@ def _single_command_cli(command: str) -> None:
2021
2122 if command == "param_prot" :
2223 parser .add_argument ("--pdb-id" , default = "6B8X" )
24+ parser .add_argument (
25+ "--project-root" ,
26+ type = Path ,
27+ default = None ,
28+ help = "Directory containing artifacts/ and optional <PDB>.pdb (default: cwd)" ,
29+ )
2330 elif command == "make_crystal" :
2431 parser .add_argument ("--ix" , type = int , default = 1 )
2532 parser .add_argument ("--iy" , type = int , default = None )
2633 parser .add_argument ("--iz" , type = int , default = None )
27- parser .add_argument ("--chimerax-exec" , default = "chimerax" )
34+ parser .add_argument (
35+ "--work-dir" ,
36+ type = Path ,
37+ default = None ,
38+ help = "Run directory with prot.pdb, pdb_clean.pdb, etc. (default: cwd)" ,
39+ )
2840 elif command == "make_waterbox" :
2941 parser .add_argument ("--ntomp" , type = int , default = 26 )
30- parser .add_argument ("--min-water" , dest = "min_water_mdp" , default = "artifacts/min_water.mdp" , help = "Path to min_water.mdp file" )
31- parser .add_argument ("--equil-water" , dest = "equil_water_mdp" , default = "artifacts/equil_water.mdp" , help = "Path to equil_water.mdp file" )
42+ parser .add_argument ("--work-dir" , type = Path , default = None )
43+ parser .add_argument (
44+ "--artifacts-dir" ,
45+ type = Path ,
46+ default = None ,
47+ help = "Override MDP directory (default: <project-root>/artifacts)" ,
48+ )
49+ parser .add_argument (
50+ "--project-root" ,
51+ type = Path ,
52+ default = None ,
53+ help = "Project root containing artifacts/ (default: cwd; inferred from --work-dir if possible)" ,
54+ )
3255 elif command == "solvate" :
33- pass
56+ parser . add_argument ( "--work-dir" , type = Path , default = None )
3457 elif command == "minimize" :
3558 parser .add_argument ("--ntomp" , type = int , default = 26 )
36- parser .add_argument ("--min" , dest = "min_mdp" , default = "artifacts/min.mdp" , help = "Path to min.mdp file" )
59+ parser .add_argument ("--work-dir" , type = Path , default = None )
60+ parser .add_argument ("--artifacts-dir" , type = Path , default = None )
61+ parser .add_argument ("--project-root" , type = Path , default = None )
3762 elif command == "equilibrate" :
3863 parser .add_argument ("--ntomp" , type = int , default = 26 )
39- parser .add_argument ("--equil" , dest = "equil_mdp" , default = "artifacts/equil.mdp" , help = "Path to equil.mdp file" )
64+ parser .add_argument ("--work-dir" , type = Path , default = None )
65+ parser .add_argument ("--artifacts-dir" , type = Path , default = None )
66+ parser .add_argument ("--project-root" , type = Path , default = None )
4067 elif command == "resolvate" :
4168 parser .add_argument ("--ntmpi" , type = int , default = 8 )
4269 parser .add_argument ("--ntomp" , type = int , default = 1 )
70+ parser .add_argument ("--work-dir" , type = Path , default = None )
71+ parser .add_argument ("--artifacts-dir" , type = Path , default = None )
72+ parser .add_argument ("--project-root" , type = Path , default = None )
4373 elif command == "run_params_gaussian" :
4474 parser .add_argument ("--g16root" , default = "/Users/mewall/packages" )
4575 parser .add_argument ("--nproc" , type = int , default = 8 )
@@ -49,19 +79,52 @@ def _single_command_cli(command: str) -> None:
4979 args = parser .parse_args (sys .argv [1 :])
5080
5181 if command == "param_prot" :
52- param_prot .run (pdb_id = args .pdb_id )
82+ root = (args .project_root or Path .cwd ()).resolve ()
83+ wd = param_prot .run (pdb_id = args .pdb_id , project_root = root )
84+ print (wd )
5385 elif command == "make_crystal" :
54- make_crystal .run (ix = args .ix , iy = args .iy , iz = args .iz , chimerax_exec = args .chimerax_exec )
86+ wd = (args .work_dir or Path .cwd ()).resolve ()
87+ make_crystal .run (ix = args .ix , iy = args .iy , iz = args .iz , work_dir = wd )
5588 elif command == "make_waterbox" :
56- make_waterbox .run (ntomp = args .ntomp , min_water_mdp = args .min_water_mdp , equil_water_mdp = args .equil_water_mdp )
89+ wd = (args .work_dir or Path .cwd ()).resolve ()
90+ pr = args .project_root .resolve () if args .project_root else None
91+ make_waterbox .run (
92+ ntomp = args .ntomp ,
93+ work_dir = wd ,
94+ artifacts_dir = args .artifacts_dir ,
95+ project_root = pr ,
96+ )
5797 elif command == "solvate" :
58- solvate .run ()
98+ wd = (args .work_dir or Path .cwd ()).resolve ()
99+ solvate .run (work_dir = wd )
59100 elif command == "minimize" :
60- minimize .run (ntomp = args .ntomp , min_mdp = args .min_mdp )
101+ wd = (args .work_dir or Path .cwd ()).resolve ()
102+ pr = args .project_root .resolve () if args .project_root else None
103+ minimize .run (
104+ ntomp = args .ntomp ,
105+ work_dir = wd ,
106+ artifacts_dir = args .artifacts_dir ,
107+ project_root = pr ,
108+ )
61109 elif command == "equilibrate" :
62- equilibrate .run (ntomp = args .ntomp , equil_mdp = args .equil_mdp )
110+ wd = (args .work_dir or Path .cwd ()).resolve ()
111+ pr = args .project_root .resolve () if args .project_root else None
112+ equilibrate .run (
113+ ntomp = args .ntomp ,
114+ work_dir = wd ,
115+ artifacts_dir = args .artifacts_dir ,
116+ project_root = pr ,
117+ )
63118 elif command == "resolvate" :
64- resolvate .run (ntmpi = args .ntmpi , ntomp = args .ntomp )
119+ wd = (args .work_dir or Path .cwd ()).resolve ()
120+ pr = args .project_root .resolve () if args .project_root else None
121+ resolvate .run (
122+ ntmpi = args .ntmpi ,
123+ ntomp = args .ntomp ,
124+ work_dir = wd ,
125+ artifacts_dir = args .artifacts_dir ,
126+ project_root = pr ,
127+ )
65128 elif command == "run_params_gaussian" :
66129 run_params_gaussian .run (
67130 g16root = args .g16root ,
0 commit comments