This commit is contained in:
Axel Kohlmeyer
2022-08-20 11:14:36 -04:00
parent d3101898f1
commit 8d6b62d936

View File

@ -38,6 +38,7 @@ d.map(1,"id",3,"x") assign names to atom columns (1-N)
d.tselect.all() select all timesteps d.tselect.all() select all timesteps
d.tselect.one(N) select only timestep N d.tselect.one(N) select only timestep N
d.tselect.one(N1,N2,N3) select only timestep N1,N2,N3
d.tselect.none() deselect all timesteps d.tselect.none() deselect all timesteps
d.tselect.skip(M) select every Mth step d.tselect.skip(M) select every Mth step
d.tselect.test("$t >= 100 and $t < 10000") select matching timesteps d.tselect.test("$t >= 100 and $t < 10000") select matching timesteps
@ -299,9 +300,9 @@ class dump:
# if snapshots are scaled, unscale them # if snapshots are scaled, unscale them
if (not "x" in self.names) or \ if ("x" not in self.names) or \
(not "y" in self.names) or \ ("y" not in self.names) or \
(not "z" in self.names): ("z" not in self.names):
print("no unscaling could be performed") print("no unscaling could be performed")
elif self.nsnaps > 0: elif self.nsnaps > 0:
if self.scaled(self.nsnaps-1): self.unscale() if self.scaled(self.nsnaps-1): self.unscale()
@ -582,8 +583,8 @@ class dump:
pairs = self.names.items() pairs = self.names.items()
str = "" str = ""
for i in range(ncol): for i in range(ncol):
for p in pairs: for k,v in pairs:
if p[1] == i: str += p[0] + ' ' if v == i: str += k + ' '
return str return str
# -------------------------------------------------------------------- # --------------------------------------------------------------------
@ -723,7 +724,7 @@ class dump:
column = self.names[name] column = self.names[name]
insert = "snap.atoms[i][%d]" % (column) insert = "snap.atoms[i][%d]" % (column)
eq = eq.replace(item,insert) eq = eq.replace(item,insert)
ceq = compile(eq,'','single') ceq = compile(eq,'<string>','single')
for snap in self.snaps: for snap in self.snaps:
if not snap.tselect: continue if not snap.tselect: continue
@ -1117,24 +1118,23 @@ class tselect:
# -------------------------------------------------------------------- # --------------------------------------------------------------------
def one(self,n): def one(self,*steps):
data = self.data data = self.data
data.nselect = 0
for snap in data.snaps: for snap in data.snaps:
snap.tselect = 0 snap.tselect = 0
for n in steps:
i = data.findtime(n) i = data.findtime(n)
data.snaps[i].tselect = 1 data.snaps[i].tselect = 1
data.nselect = 1 data.nselect += 1
data.aselect.all() data.aselect.all()
print("%d snapshots selected out of %d" % (data.nselect,data.nsnaps)) print("%d snapshots selected out of %d" % (data.nselect,data.nsnaps))
# -------------------------------------------------------------------- # --------------------------------------------------------------------
def none(self): def none(self):
data = self.data self.one()
for snap in data.snaps:
snap.tselect = 0
data.nselect = 0
print("%d snapshots selected out of %d" % (data.nselect,data.nsnaps))
# -------------------------------------------------------------------- # --------------------------------------------------------------------
@ -1157,11 +1157,11 @@ class tselect:
def test(self,teststr): def test(self,teststr):
data = self.data data = self.data
snaps = data.snaps snaps = data.snaps
cmd = "flag = " + teststr.replace("$t","snaps[i].time") cmd = teststr.replace("$t","snaps[i].time")
ccmd = compile(cmd,'','single') ccmd = compile(cmd,'<string>','eval')
for i in range(data.nsnaps): for i in range(data.nsnaps):
if not snaps[i].tselect: continue if not snaps[i].tselect: continue
exec(ccmd) flag = eval(ccmd)
if not flag: if not flag:
snaps[i].tselect = 0 snaps[i].tselect = 0
data.nselect -= 1 data.nselect -= 1
@ -1199,21 +1199,20 @@ class aselect:
# replace all $var with snap.atoms references and compile test string # replace all $var with snap.atoms references and compile test string
pattern = "\$\w*" pattern = "\$\w*"
list = re.findall(pattern,teststr) matches = re.findall(pattern,teststr)
for item in list: for item in matches:
name = item[1:] name = item[1:]
column = data.names[name] column = data.names[name]
insert = "snap.atoms[i][%d]" % column insert = "snap.atoms[i][%d]" % column
teststr = teststr.replace(item,insert) teststr = teststr.replace(item,insert)
cmd = "flag = " + teststr ccmd = compile(teststr,'<string>','eval')
ccmd = compile(cmd,'','single')
if len(args) == 0: # all selected timesteps if len(args) == 0: # all selected timesteps
for snap in data.snaps: for snap in data.snaps:
if not snap.tselect: continue if not snap.tselect: continue
for i in range(snap.natoms): for i in range(snap.natoms):
if not snap.aselect[i]: continue if not snap.aselect[i]: continue
exec(ccmd) flag = eval(ccmd)
if not flag: if not flag:
snap.aselect[i] = 0 snap.aselect[i] = 0
snap.nselect -= 1 snap.nselect -= 1