@@ -446,6 +446,11 @@ def main():
446446 runp .add_argument ("--begin" , default = "7-6" , help = "run period start M-D" )
447447 runp .add_argument ("--end" , default = "7-12" , help = "run period end M-D" )
448448 runp .add_argument ("--mode" , default = "airloop" , choices = ["airloop" , "plant" ])
449+ runp .add_argument ("--reuse" , action = "store_true" ,
450+ help = "reuse an existing eplusout.csv instead of re-running EnergyPlus" )
451+ runp .add_argument ("--bias" , default = None , metavar = "POINT=DELTA" ,
452+ help = "TPR mode: add DELTA to POINT in the replayed inputs "
453+ "(faulted-sensor-as-seen-by-FDD); FAILs are DETECTIONS" )
449454 args = ap .parse_args ()
450455
451456 bdir = Path (args .building )
@@ -464,8 +469,10 @@ def main():
464469 patched = patch_plant (b , pn , begin , end )
465470 pj = out / "patched.epjson"
466471 pj .write_text (json .dumps (patched ))
467- print (f"plant loops: { list (pn )} ; running EnergyPlus…" )
468- csv_path = run_energyplus (pj , epw , out / "ep" )
472+ csv_path = out / "ep" / "eplusout.csv"
473+ if not (args .reuse and csv_path .is_file ()):
474+ print (f"plant loops: { list (pn )} ; running EnergyPlus…" )
475+ csv_path = run_energyplus (pj , epw , out / "ep" )
469476 fams = extract_plant (csv_path , pn , b )
470477 rules = {}
471478 for fam in fams :
@@ -519,9 +526,18 @@ def main():
519526 patched = patch (b , loops , begin , end )
520527 pj = out / "patched.epjson"
521528 pj .write_text (json .dumps (patched ))
522- print (f"loops: { list (loops )} ; running EnergyPlus…" )
523- csv_path = run_energyplus (pj , epw , out / "ep" )
529+ csv_path = out / "ep" / "eplusout.csv"
530+ if not (args .reuse and csv_path .is_file ()):
531+ print (f"loops: { list (loops )} ; running EnergyPlus…" )
532+ csv_path = run_energyplus (pj , epw , out / "ep" )
524533 loops_pts = extract (csv_path , loops )
534+ if args .bias :
535+ pt , delta = args .bias .split ("=" )
536+ delta = float (delta )
537+ for pts in loops_pts .values ():
538+ if pt in pts :
539+ pts [pt ] = [round (v + delta , ROUND ) for v in pts [pt ]]
540+ print (f"TPR bias applied: { pt } += { delta } — FAILs below are DETECTIONS" )
525541 rules = eligible_rules ()
526542 print (f"eligible rules (points ⊆ mapped): { sorted (rules )} " )
527543 log = emit_and_replay (bdir .name , loops_pts , rules , out )
0 commit comments