Skip to content

Commit c85197b

Browse files
committed
added option to specify save/load dir
1 parent fdc9239 commit c85197b

File tree

2 files changed

+48
-30
lines changed

2 files changed

+48
-30
lines changed

worm_algorithm/count_bonds.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class CountBonds(object):
3131
performed.
3232
"""
3333
def __init__(self, L, block_val=None, num_blocks=10, data_dir=None,
34-
save_dir=None, save=True, verbose=False):
34+
save_dir=None, save=True, load=False, verbose=False):
3535
self._L = L
3636
self._block_val = block_val
3737
self._num_blocks = num_blocks
@@ -46,6 +46,8 @@ def __init__(self, L, block_val=None, num_blocks=10, data_dir=None,
4646
self._data_dir = data_dir
4747
if save_dir is None:
4848
self._save_dir = '../data/bond_stats/{}_lattice/'.format(L)
49+
else:
50+
self._save_dir = save_dir
4951
else:
5052
self._width = L
5153
if data_dir is None:
@@ -60,6 +62,8 @@ def __init__(self, L, block_val=None, num_blocks=10, data_dir=None,
6062
L, block_val
6163
)
6264
)
65+
else:
66+
self._save_dir = save_dir
6367
config_files = os.listdir(self._data_dir)
6468
self._config_files = sorted([
6569
self._data_dir + i for i in config_files if i.endswith('.txt')
@@ -68,7 +72,11 @@ def __init__(self, L, block_val=None, num_blocks=10, data_dir=None,
6872
i.split('_')[-1].rstrip('.txt') for i in self._config_files
6973
]
7074
self._temp_strings = [i.rstrip('0') for i in temp_strings]
71-
self.count_bonds()
75+
self.bond_stats = {}
76+
if not load:
77+
self.count_bonds()
78+
else:
79+
self._load()
7280
if save:
7381
self._save()
7482

@@ -159,7 +167,6 @@ def _count_bonds_with_err(self, data, num_blocks=10):
159167

160168
def count_bonds(self):
161169
"""Calculate bond statistics for all configuration data."""
162-
self.bond_stats = {}
163170
for idx, config_file in enumerate(self._config_files):
164171
if self._verbose:
165172
print("Reading in from: {}\n".format(config_file))
@@ -193,6 +200,17 @@ def _save(self):
193200
val[1],
194201
val[2],
195202
val[3]))
203+
def _load(self, data_file=None):
204+
"""Load previously computed bond_stats data from .txt file."""
205+
if data_file is None:
206+
data_file = self._save_dir + 'bond_stats_{}.txt'.format(self._L)
207+
raw_data = pd.read_csv(data_file, engine='c', header=None,
208+
delim_whitespace=True).values
209+
for row in raw_data:
210+
key = str(row[0])
211+
self.bond_stats[key] = [row[1], row[2], row[3], row[4]]
212+
213+
196214

197215
def main(argv):
198216
parser = argparse.ArgumentParser()

worm_algorithm/pca.py

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class PrincipalComponent(object):
3434
performed.
3535
"""
3636
def __init__(self, L, block_val=None, num_blocks=10, data_dir=None,
37-
save_dir=None, save=True, verbose=False):
37+
save_dir=None, save=True, load=False, verbose=False):
3838
self._L = L
3939
self._block_val = block_val
4040
self._num_blocks = num_blocks
@@ -74,12 +74,12 @@ def __init__(self, L, block_val=None, num_blocks=10, data_dir=None,
7474
])
7575
temp_strings = [i.split('_')[-1].rstrip('.txt') for i in config_files]
7676
self._temp_strings = [i.rstrip('0') for i in temp_strings]
77-
78-
self._PCA()
79-
# self._leading_eig_val_avg = self.average_data()
80-
# self._leading_eig_val_err = list(self._err.values())
81-
if save:
82-
self._save()
77+
if not load:
78+
self._PCA()
79+
if save:
80+
self._save()
81+
else:
82+
self._load()
8383

8484
def _get_data(self, _file=None):
8585
""" Read in configuration data from file. """
@@ -145,28 +145,10 @@ def _PCA(self, num_components=1):
145145
self._err[key] = jackknife_err(y_i=eig_pairs_rs,
146146
y_full=eig_pairs[0][0],
147147
num_blocks=self._num_blocks)
148-
# self._eig_vals = OrderedDict(
149-
# self._eig_vals.items(), key=lambda t: t[0]
150-
# )
151-
# self._leading_eig_val = OrderedDict(
152-
# self._leading_eig_val.items(), key=lambda t: t[0]
153-
# )
154-
155-
# def average_data(self):
156-
# """ Average leading eigenvalue data and use jackknife resampling for
157-
# error bars.
158-
# """
159-
# leading_eig_val_avg = []
160-
# #leading_eig_val_err = []
161-
# for val in self._leading_eig_val.values():
162-
# if
163-
# leading_eig_val_avg.append(np.mean(val))
164-
# # leading_eig_val_err.append(
165-
# # jackknife_stats(np.array(val), np.std)[2]
166-
# # t
167-
# return leading_eig_val_avg#, leading_eig_val_err
168148

169149
def _save(self):
150+
"""Save PCA results from calculation to .txt file to avoid repeating
151+
calculation."""
170152
if not os.path.exists(self._save_dir):
171153
os.makedirs(self._save_dir)
172154
save_file = self._save_dir + 'leading_eigenvalue_{}.txt'.format(self._L)
@@ -183,6 +165,24 @@ def _save(self):
183165
for key, val in self._eig_vals.items():
184166
f.write("{} {} {}\n".format(key, val[0][0], self._err[key]))
185167

168+
def _load(self, data_dir=None):
169+
"""Load PCA results from .txt file instead of recalculating results."""
170+
if data_dir is None:
171+
data_file = (
172+
self._save_dir + 'leading_eigenvalue_{}.txt'.format(self._L)
173+
)
174+
try:
175+
raw_data = pd.read_csv(data_file, engine='c', header=None,
176+
delim_whitespace=True).values
177+
except:
178+
print("Unable to read from {}".format(data_file))
179+
raise
180+
for row in raw_data:
181+
key = str(row[0])
182+
self._eig_vals[key] = [row[1], row[2]]
183+
self._err[key] = row[2]
184+
185+
186186
def main(argv):
187187
parser = argparse.ArgumentParser()
188188

0 commit comments

Comments
 (0)