Skip to content

Commit e4d81e7

Browse files
Chore/compat arianna v0.2 (#68)
Files are changed to comply with the new `Arianna` version. Now, each `chain` has its own numbered folder, where individual callbacks+ trajectories are stored. The acceptance is not a callback anymore and the `StoreAcceptance` algorithm is now used. The `StoreAcceptance` algorithm is now parsed, when running commands from CLI. Callbacks have changed names and are not named `function callback_*`. Callback functions are not written as: ```julia Arianna.@callback function my_callback() ```
1 parent e962a6e commit e4d81e7

14 files changed

Lines changed: 89 additions & 45 deletions

File tree

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
1818

1919
[compat]
2020
Aqua = "0.8"
21-
Arianna = "0.1"
21+
Arianna = "0.2"
2222
Comonicon = "1.0"
2323
ComponentArrays = "0.15"
2424
ConcreteStructs = "0.2"

examples/lj-mixture/run-validation.py

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,12 @@ def create_params(parameters: dict, path_to_params: str) -> None:
116116
117117
[[simulation.output]]
118118
algorithm = "StoreCallbacks"
119-
callbacks = ["energy", "acceptance"]
119+
callbacks = ["energy"]
120+
scheduler_params = {{linear_interval = 100}}
121+
122+
[[simulation.output]]
123+
algorithm = "StoreAcceptance"
124+
dependencies = ["Metropolis"]
120125
scheduler_params = {{linear_interval = 100}}
121126
122127
[[simulation.output]]
@@ -128,12 +133,12 @@ def create_params(parameters: dict, path_to_params: str) -> None:
128133

129134

130135
def run_simulations(output_path: str) -> None:
131-
df = pd.read_csv("reference-data.csv")
136+
df_ref = pd.read_csv("reference-data.csv")
132137

133138
path_to_config = "config.exyz"
134139
path_to_params = "params.toml"
135140
data = []
136-
for i, row in df.iterrows():
141+
for i, row in df_ref.iterrows():
137142
workdir = f"./tmp/{i}"
138143
os.makedirs(workdir, exist_ok=True)
139144

@@ -168,17 +173,31 @@ def run_simulations(output_path: str) -> None:
168173
)
169174

170175
# Post-process the energies
171-
energies = pd.read_csv(f"{workdir}/energy.dat", sep="\\s+", names=["i", "e"])[
176+
energies = pd.read_csv(f"{workdir}/chains/1/energy.dat", sep="\\s+", names=["i", "e"])[
172177
"e"
173178
]
174179
# Remove the first half as equilibration, just to be sure
175180
energies = energies[int(len(energies) / 2) :]
181+
182+
moves = {
183+
1: "displacement",
184+
2: "swap",
185+
}
176186

177-
df_acceptance_rates = pd.read_csv(
178-
f"{workdir}/acceptance.dat", sep="\\s+", names=["i", "move", "swap"]
179-
)
180-
displacement_acceptance = float(df_acceptance_rates["move"].iloc[-1][1:-2])
181-
swap_acceptance = float(df_acceptance_rates["swap"].iloc[-1][:-1])
187+
dfs = []
188+
189+
for move_id, move_name in moves.items():
190+
path = f"{workdir}/moves/{move_id}/acceptance.dat"
191+
df = pd.read_csv(path, sep=r"\s+", names=["i", move_name])
192+
dfs.append(df)
193+
194+
# Merge all on column "i"
195+
df_acceptance_rates = dfs[0]
196+
for df in dfs[1:]:
197+
df_acceptance_rates = df_acceptance_rates.merge(df, on="i")
198+
199+
displacement_acceptance = float(df_acceptance_rates["displacement"].iloc[-1])
200+
swap_acceptance = float(df_acceptance_rates["swap"].iloc[-1])
182201

183202
# Compute long-range corrections from the cutoff
184203
# Formula from Gromacs https://manual.gromacs.org/current/reference-manual/functions/long-range-vdw.html
@@ -207,8 +226,7 @@ def run_simulations(output_path: str) -> None:
207226
"acceptance_rate_swap": swap_acceptance,
208227
}
209228
)
210-
211-
df.merge(pd.DataFrame(data)).to_csv(output_path)
229+
df_ref.merge(pd.DataFrame(data)).to_csv(output_path)
212230

213231

214232
def plot_results(path_to_energies: str) -> None:

examples/movie/params.toml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@ parameters = {sigma = 0.05}
2020

2121
[[simulation.output]]
2222
algorithm = "StoreCallbacks"
23-
callbacks = ["energy", "acceptance"]
23+
callbacks = ["energy"]
24+
scheduler_params = {linear_interval = 500}
25+
26+
[[simulation.output]]
27+
algorithm = "StoreAcceptance"
28+
dependencies = ["Metropolis"]
2429
scheduler_params = {linear_interval = 500}
2530

2631
[[simulation.output]]

examples/ortho-terphenyl/2-equilibrate-at-different-temperatures/params-template.toml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,12 @@ policy = "DoubleUniform"
6969

7070
[[simulation.output]]
7171
algorithm = "StoreCallbacks"
72-
callbacks = ["energy", "acceptance"]
72+
callbacks = ["energy"]
73+
scheduler_params = {linear_interval = 1000}
74+
75+
[[simulation.output]]
76+
algorithm = "StoreAcceptance"
77+
dependencies = ["Metropolis"]
7378
scheduler_params = {linear_interval = 1000}
7479

7580
[[simulation.output]]

examples/ortho-terphenyl/3-run-production/params-template.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ policy = "DoubleUniform"
6969

7070
[[simulation.output]]
7171
algorithm = "StoreCallbacks"
72-
callbacks = ["energy", "acceptance"]
72+
callbacks = ["energy"]
7373
scheduler_params = {linear_interval = 1000}
7474

7575
[[simulation.output]]

examples/ortho-terphenyl/4-compute-correlation-functions/compute-observables.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def compute_fskt() -> pd.DataFrame:
2020
df_list = []
2121
for T in temperatures:
2222
print(f"T = {T}")
23-
traj = Trajectory(f"../3-run-production/{T}/trajectories/1/trajectory.xyz")
23+
traj = Trajectory(f"../3-run-production/{T}/chains/1/trajectory.xyz")
2424

2525
cf = pp.SelfIntermediateScatteringFast(
2626
traj,

src/ParticlesMC.jl

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ function compute_energy_particle(system::Particles, ids::AbstractVector)
112112
end
113113

114114

115-
export callback_energy
115+
export energy
116116
#export nearest_image_distance
117117
export Model, GeneralKG, JBB, BHHP, SoftSpheres, KobAndersen, Trimer
118118
export NeighbourList, LinkedList, CellList, EmptyList, VerletList
@@ -249,6 +249,7 @@ ParticlesMC implemented in Comonicon.
249249
for output in sim["output"]
250250
alg = output["algorithm"]
251251
scheduler_params = output["scheduler_params"]
252+
dependencies = get(output, "dependencies", nothing)
252253
callbacks = get(output, "callbacks", [])
253254
fmt = get(output, "fmt", "XYZ")
254255
interval = scheduler_params["linear_interval"]
@@ -259,12 +260,19 @@ ParticlesMC implemented in Comonicon.
259260
sched = build_schedule(steps, burn, interval)
260261
end
261262
if alg == "StoreCallbacks"
262-
callbacks = map(c -> eval(Meta.parse("callback_$c")), callbacks)
263+
callbacks = map(c -> eval(Meta.parse("$c")), callbacks)
263264
algorithm = (
264265
algorithm = eval(Meta.parse(alg)),
265266
callbacks = callbacks,
266267
scheduler = sched,
267268
)
269+
elseif alg == "StoreAcceptance"
270+
dependencies = map(d -> eval(Meta.parse("$d")), dependencies)
271+
algorithm = (
272+
algorithm = eval(Meta.parse(alg)),
273+
dependencies = dependencies,
274+
scheduler = sched,
275+
)
268276
elseif alg == "StoreTrajectories" || alg == "StoreLastFrames"
269277
algorithm = (
270278
algorithm = eval(Meta.parse(alg)),

src/molecules.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,3 +240,7 @@ function compute_chain_correlation(system::Molecules)
240240
end
241241
return sum(correlation_array.^2)
242242
end
243+
244+
Arianna.@callback function chain_correlation(system::Molecules)
245+
return compute_chain_correlation(system)
246+
end

src/utils.jl

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,8 @@ function SpeciesList(species)
4848
return SpeciesList(ids, heads)
4949
end
5050

51-
function callback_energy(simulation)
52-
return mean(system.energy[1] / length(system) for system in simulation.chains)
53-
end
54-
55-
function callback_chain_correlation(simulation)
56-
return mean(compute_chain_correlation(system) for system in simulation.chains)
51+
Arianna.@callback function energy(system::Particles)
52+
return system.energy[1] / length(system)
5753
end
5854

5955
function volume_sphere(r, d::Int)

test/gerhard_energy_distribution.jl

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ steps = 1000
2929
burn = 0
3030
block = [0, 10]
3131
sampletimes = build_schedule(steps, burn, block)
32-
callbacks = (callback_energy, callback_acceptance)
3332

3433
# NO SWAPS
3534
pswap = 0.0
@@ -41,7 +40,8 @@ pool = (
4140

4241
algorithm_list = (
4342
(algorithm=Metropolis, pool=pool, seed=seed, parallel=false, sweepstep=system.N),
44-
(algorithm=StoreCallbacks, callbacks=(callback_energy, callback_acceptance), scheduler=sampletimes),
43+
(algorithm=StoreCallbacks, callbacks=(energy,), scheduler=sampletimes),
44+
(algorithm=StoreAcceptance, dependencies=(Metropolis,), scheduler=sampletimes),
4545
(algorithm=StoreTrajectories, scheduler=sampletimes, fmt=EXYZ()),
4646
(algorithm=StoreLastFrames, scheduler=[steps], fmt=EXYZ()),
4747
(algorithm=PrintTimeSteps, scheduler=build_schedule(steps, burn, steps ÷ 10)),
@@ -72,7 +72,8 @@ pool = (
7272
)
7373
algorithm_list = (
7474
(algorithm=Metropolis, pool=pool, seed=seed, parallel=false, sweepstep=system.N),
75-
(algorithm=StoreCallbacks, callbacks=(callback_energy, callback_acceptance), scheduler=sampletimes),
75+
(algorithm=StoreCallbacks, callbacks=(energy,), scheduler=sampletimes),
76+
(algorithm=StoreAcceptance, dependencies=(Metropolis,), scheduler=sampletimes),
7677
(algorithm=StoreTrajectories, scheduler=sampletimes, fmt=LAMMPS()),
7778
(algorithm=StoreLastFrames, scheduler=[steps], fmt=EXYZ()),
7879
(algorithm=PrintTimeSteps, scheduler=build_schedule(steps, burn, steps ÷ 10)),
@@ -105,7 +106,8 @@ pool = (
105106
)
106107
algorithm_list = (
107108
(algorithm=Metropolis, pool=pool, seed=seed, parallel=false, sweepstep=system.N),
108-
(algorithm=StoreCallbacks, callbacks=(callback_energy, callback_acceptance), scheduler=sampletimes),
109+
(algorithm=StoreCallbacks, callbacks=(energy,), scheduler=sampletimes),
110+
(algorithm=StoreAcceptance, dependencies=(Metropolis,), scheduler=sampletimes),
109111
(algorithm=StoreTrajectories, scheduler=sampletimes, fmt=LAMMPS()),
110112
(algorithm=StoreLastFrames, scheduler=[steps], fmt=LAMMPS()),
111113
(algorithm=PrintTimeSteps, scheduler=build_schedule(steps, burn, steps ÷ 10)),

0 commit comments

Comments
 (0)