aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Oliver <contact@pauloliver.dev>2024-02-29 01:50:45 +0100
committerPaul Oliver <contact@pauloliver.dev>2024-02-29 01:50:45 +0100
commitcbabefebf76a7c288648752812e87bd41999757f (patch)
tree0659aad01825ed157d3a402c524fc5452adea39f
parentec53566f5ccb4fb88f2f42c3099ab630c0f2375d (diff)
Plugin updates. Scroll to top command is now 'Q'.
-rw-r--r--.gitignore1
-rwxr-xr-xplugins/grapher.py50
-rwxr-xr-xplugins/imager.py44
-rw-r--r--tsalis/README.md2
-rw-r--r--tsalis/src/handler.c2
5 files changed, 84 insertions, 15 deletions
diff --git a/.gitignore b/.gitignore
index 90e856e..cb1e921 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@
*.auto
*.exe
bin/*.png
+bin/auto/*
diff --git a/plugins/grapher.py b/plugins/grapher.py
new file mode 100755
index 0000000..bd93205
--- /dev/null
+++ b/plugins/grapher.py
@@ -0,0 +1,50 @@
+#!/usr/bin/python
+'''
+This script generates a data file that can be read by gnuplot or similar
+software. Columns, representing different data fields, may be generated via
+command line arguments. Current available columns include:
+
+- current cycle: always present
+- number of organisms: activate with '-o' flag
+
+To run it, simply call it from within the ./bin/ directory inside the SALIS
+main directory, such as:
+
+../plugins/grapher.py -o def.sim.*.auto
+
+Calling this will create a single DATA file including data from all files
+matching the given pattern. This file may, in turn, be passed into gnuplot
+for generating graphs.
+'''
+import os
+import sys
+from ctypes import *
+
+current_arg = 1
+data_flags = []
+
+while sys.argv[current_arg][0] == '-':
+ if sys.argv[current_arg] == '-o':
+ data_flags.append('organism_count')
+ print('organism count will be graphed')
+ else:
+ print('{} is not a valid flag'.format(sys.argv[current_arg]))
+
+ current_arg += 1
+
+files = sys.argv[current_arg:]
+oname = 'output.data'
+salis = CDLL('libsalis.so')
+salis.s_getCycle.restype = c_uint
+salis.s_getEpoch.restype = c_uint
+salis.sp_getCount.restype = c_uint
+
+with open(oname, 'w') as output:
+ for f in files:
+ salis.s_load(bytes(f, 'utf-8'))
+ cycle = salis.s_getCycle()
+ epoch = salis.s_getEpoch()
+ date = cycle + (epoch * (2 ** 32))
+ output.write('{} {}\n'.format(date, salis.sp_getCount()))
+ print('info of date {} added to output.data'.format(date))
+ salis.s_quit()
diff --git a/plugins/imager.py b/plugins/imager.py
index 76d93b3..fc7d77b 100755
--- a/plugins/imager.py
+++ b/plugins/imager.py
@@ -1,28 +1,47 @@
-#!/usr/bin/python3
-"""
-This script generates an PNG image from a SALIS save file (or a list of saved
+#!/usr/bin/python
+'''
+This script generates a PNG image from a SALIS save file (or a list of saved
files), on which each pixel corresponds to a single byte on the simulation.
It's useful for identifying large scale structures and appreciating the
-large-scale evolution of the world.
+macro-evolution of the world.
Tu run it, simply call it from within the ./bin/ directory inside the SALIS
main directory, such as:
-../plugins/imager.py def.sim*
+../plugins/imager.py def.sim.*.auto
-Calling this will create a PNG image for each file beggining with "def.sim".
-"""
+Calling this will create a PNG image for each file matching the given pattern.
+
+By default, this script ignores any existing simulation files whose name
+matches an existing image on the same directory. You may force it to overwrite
+existing images by passing the '-o' flag before the file list parameter.
+'''
+import os
import sys
from ctypes import *
from PIL import Image
-files = sys.argv[1:]
-salis = CDLL("libsalis.so")
+
+if sys.argv[1] == '-o':
+ overwrite = True
+ files = sys.argv[2:]
+else:
+ overwrite = False
+ files = sys.argv[1:]
+
+salis = CDLL('libsalis.so')
salis.sm_getSize.restype = c_uint
def makeImage(iname):
- salis.s_load(bytes(iname, "utf-8"))
+ oname = iname + '.png'
+
+ if not overwrite:
+ if os.path.isfile('./' + oname):
+ print(oname + ' skipped')
+ return
+
+ salis.s_load(bytes(iname, 'utf-8'))
lsize = int(salis.sm_getSize() ** 0.5)
- image = Image.new("L", (lsize, lsize), "black")
+ image = Image.new('L', (lsize, lsize), 'black')
pixels = image.load()
for y in range(lsize):
@@ -32,9 +51,8 @@ def makeImage(iname):
pixels[x, y] = byte
salis.s_quit()
- oname = iname + ".png"
image.save(oname)
- print(oname + " generated")
+ print(oname + ' generated')
for f in files:
makeImage(f)
diff --git a/tsalis/README.md b/tsalis/README.md
index fd81a19..bb50c38 100644
--- a/tsalis/README.md
+++ b/tsalis/README.md
@@ -33,7 +33,7 @@ renamed and reloaded as needed.
|Left arrow |Previous page |
|Right arrow |Next page |
|wasd |Scroll (PROCESS and WORLD page) |
-|W |Scroll to top (PROCESS and WORLD page) |
+|Q |Scroll to top (PROCESS and WORLD page) |
|A |Scroll to left (PROCESS page) |
|zx |Zoom in/out (WORLD page) |
|op |Select previous/next organism |
diff --git a/tsalis/src/handler.c b/tsalis/src/handler.c
index e886733..f5be2c8 100644
--- a/tsalis/src/handler.c
+++ b/tsalis/src/handler.c
@@ -240,7 +240,7 @@ tsh_handleEvent(int event)
tsp_scrollRight();
break;
- case 'W':
+ case 'Q':
tsp_scrollToTop();
break;