|
8 | 8 | parser.add_argument('-t', '--template_ma', type=str, default="template_sirs_zhong_ma", help='Path to zhong .ma template')
|
9 | 9 | parser.add_argument('-m', '--template_macros', type=str, default="template_sirs_zhong_macros", help='Path to zhong macros template')
|
10 | 10 | parser.add_argument('-o', '--out_ma_file', type=str, default="out.ma", help='Output path of the .ma file')
|
11 |
| -parser.add_argument('-p', '--out_macros_file', type=str, default="sirs_zhong_macros.inc", help='Output path of the macros file') |
12 |
| -parser.add_argument('-v', '--virulences', type=str, default="0.6", help='Default virulence values per state') |
| 11 | +parser.add_argument('-om', '--out_macros_file', type=str, default="sirs_zhong_macros.inc", help='Output path of the macros file') |
| 12 | +parser.add_argument('-ov', '--out_var_file', type=str, default="sirs_zhong.var", help='Output path of the .var file') |
| 13 | +parser.add_argument('-v', '--virulences', type=str, default="0.6", help='Default virulence values per infected state') |
| 14 | +parser.add_argument('-c', '--cured_rates', type=str, default="0.0", help='Default cured rates values per infected state') |
13 | 15 |
|
14 | 16 | args = parser.parse_args()
|
15 | 17 |
|
|
33 | 35 | with open(args.template_ma, "r") as f:
|
34 | 36 | content = f.read()
|
35 | 37 |
|
36 |
| -internal_vars = ["i_%s" % s for s in states] + ["v_%d" % n for n in range(1, args.infected_steps + 1)] |
| 38 | +internal_vars = ["i_%s" % s for s in states] + \ |
| 39 | + ["v_%d" % n for n in range(1, args.infected_steps + 1)] + \ |
| 40 | + ["cr_%d" % n for n in range(1, args.infected_steps)] |
37 | 41 | content = content.replace("[[internal_vars]]", " ".join(internal_vars))
|
38 | 42 |
|
39 | 43 | internal_vars_values = " ".join(steps_per_state + ["1.0"] + ["0.0"] * (len(states) - 1))
|
40 | 44 | if "," in args.virulences:
|
41 | 45 | virulences = list(args.virulences.split(","))
|
42 | 46 | else:
|
43 | 47 | virulences = [args.virulences] * args.infected_steps
|
| 48 | + |
44 | 49 | internal_vars_values += " %s" % " ".join(virulences)
|
| 50 | + |
| 51 | +if "," in args.cured_rates: |
| 52 | + cured_rates = list(args.cured_rates.split(",")) |
| 53 | +else: |
| 54 | + cured_rates = [args.cured_rates] * (args.infected_steps - 1) |
| 55 | + |
| 56 | +internal_vars_values += " %s" % " ".join(cured_rates) |
| 57 | + |
45 | 58 | content = content.replace("[[internal_vars_values]]", internal_vars_values)
|
46 | 59 | update_ports_str = " ".join(["~%s := $i_%s;" % (s, s) for s in states])
|
47 | 60 | content = content.replace("[[initial_ports_set_up]]", update_ports_str)
|
|
55 | 68 | update_rules += "$i_%s := $i_%s + #macro(local_cured);\n\n" % (states[idx_first_rec], states[idx_first_rec-1])
|
56 | 69 |
|
57 | 70 | for i in range(idx_first_rec-1, 1, -1):
|
58 |
| - update_rules += "$i_%s := round(min((1 - $cured_rate) * $i_%s, 1)*100)/100;\n" % (states[i], states[i - 1]) |
| 71 | + cr = "$cr_%s" % states[i - 1].split("_")[-1] |
| 72 | + update_rules += "$i_%s := round(min((1 - %s) * $i_%s, 1)*100)/100;\n" % (states[i], cr, states[i - 1]) |
59 | 73 | update_rules += "$i_%s := #macro(internal_infected) + #macro(external_infected);\n\n" % states[1]
|
60 | 74 |
|
61 | 75 | update_rules += "$i_%s := 1 " % states[0]
|
|
77 | 91 |
|
78 | 92 | local_cured_rules = []
|
79 | 93 | for i in range(idx_first_rec-2, 0, -1):
|
80 |
| - local_cured_rules.append("round(min($cured_rate * $i_%s, 1)*100)" % states[i]) |
| 94 | + cr = "$cr_%s" % states[i].split("_")[-1] |
| 95 | + local_cured_rules.append("round(min(%s * $i_%s, 1)*100)" % (cr, states[i])) |
81 | 96 |
|
82 | 97 | content = content.replace("[[local_cured]]", "(( %s ) / 100 )" % " +\n".join(local_cured_rules))
|
83 | 98 | content = content.replace("[[infected_vars]]", " + ".join(["i_%s" % s for s in states[idx_first_rec:0]]))
|
|
118 | 133 |
|
119 | 134 | with open(args.out_macros_file, "w") as f:
|
120 | 135 | f.write(content)
|
| 136 | + |
| 137 | + |
| 138 | +################################# |
| 139 | +# GENERATION OF THE .VAR FILE |
| 140 | +################################# |
| 141 | + |
| 142 | +with open(args.out_var_file, "w") as f: |
| 143 | + ivv = internal_vars_values.split() |
| 144 | + assert ivv[2] == "1.0" or ivv[2] == "1", "Unexpected vals (original susceptible: %s)" % ivv[2] |
| 145 | + ivv[2] = "0.7" |
| 146 | + ivv[3] = "0.3" |
| 147 | + stimulus = "(25,25) = 100 1 0.6 %s\n" % " ".join(ivv) |
| 148 | + f.write(stimulus) |
0 commit comments