Skip to content
Snippets Groups Projects
Commit eb60aea3 authored by Tamas Gal's avatar Tamas Gal :speech_balloon:
Browse files

Merge branch 'master' of git.km3net.de:km3py/km3mon

parents b8fe612f 2539a6bd
No related branches found
No related tags found
No related merge requests found
...@@ -37,7 +37,7 @@ start: ...@@ -37,7 +37,7 @@ start:
@echo Starting the web server on 0.0.0.0:${WEBSERVER_PORT} @echo Starting the web server on 0.0.0.0:${WEBSERVER_PORT}
@# @#
@tmux send-keys -t ${SESSION_NAME}:main.3 \ @tmux send-keys -t ${SESSION_NAME}:main.3 \
"gunicorn -w 4 -b 0.0.0.0:${WEBSERVER_PORT} km3mon:app" Enter "gunicorn --pid gunicorn.pid -w 4 -b 0.0.0.0:${WEBSERVER_PORT} km3mon:app" Enter
@tmux select-layout even-vertical @tmux select-layout even-vertical
@echo Starting the monitoring scripts @echo Starting the monitoring scripts
...@@ -99,17 +99,21 @@ start: ...@@ -99,17 +99,21 @@ start:
"python scripts/k40_calibration.py -d ${DETECTOR_ID} -p ${MONITORING_LIGIER_PORT}" Enter "python scripts/k40_calibration.py -d ${DETECTOR_ID} -p ${MONITORING_LIGIER_PORT}" Enter
@tmux select-layout even-vertical @tmux select-layout even-vertical
@# Log.io @# Logs
@# @#
@tmux new-window -n logio -t ${SESSION_NAME} @tmux new-window -n log -t ${SESSION_NAME}
@tmux split-window -v -t ${SESSION_NAME}:logio @tmux split-window -v -t ${SESSION_NAME}:log
@tmux send-keys -t ${SESSION_NAME}:logio.1 \ @tmux send-keys -t ${SESSION_NAME}:log.1 \
"python scripts/logio.py -p ${MONITORING_LIGIER_PORT} -x ${LOGIO_IP} -q ${LOGIO_PORT}" Enter "python scripts/msg_dumper.py -l 127.0.0.1 -p ${MONITORING_LIGIER_PORT} -f logs/MSG.log" Enter
@tmux send-keys -t ${SESSION_NAME}:log.2 \
"touch logs/MSG.log && frontail logs/*.log --ui-highlight --ui-highlight-preset frontail.json --theme dark -l 10000 -n 200 -p 8082" Enter
@tmux select-layout even-vertical @tmux select-layout even-vertical
stop: stop:
@echo Stopping monitoring session...
tmux kill-session -t ${SESSION_NAME} tmux kill-session -t ${SESSION_NAME}
killall gunicorn kill -9 $(shell cat gunicorn.pid)
@sleep 5
clean: clean:
rm Makefile rm Makefile
......
...@@ -19,7 +19,7 @@ Options: ...@@ -19,7 +19,7 @@ Options:
from __future__ import division from __future__ import division
from datetime import datetime from datetime import datetime
from collections import deque from collections import deque, defaultdict
import os import os
import shutil import shutil
import time import time
...@@ -54,16 +54,20 @@ from km3pipe.logger import logging ...@@ -54,16 +54,20 @@ from km3pipe.logger import logging
lock = threading.Lock() lock = threading.Lock()
class DOMHits(Module): class TriggerMap(Module):
def configure(self): def configure(self):
self.plots_path = self.require('plots_path') self.plots_path = self.require('plots_path')
det_id = self.require('det_id') det_id = self.require('det_id')
self.max_events = self.get("max_events", default=1000)
self.det = kp.hardware.Detector(det_id=det_id) self.det = kp.hardware.Detector(det_id=det_id)
self.run = True self.run = True
self.max_events = 1000 self.hits = deque(maxlen=self.max_events)
self.hits = deque(maxlen=1000) self.triggered_hits = deque(maxlen=self.max_events)
self.triggered_hits = deque(maxlen=1000) self.runchanges = defaultdict(int)
self.current_run_id = 0
self.n_events = 0
self.thread = threading.Thread(target=self.plot).start() self.thread = threading.Thread(target=self.plot).start()
def process(self, blob): def process(self, blob):
...@@ -74,6 +78,19 @@ class DOMHits(Module): ...@@ -74,6 +78,19 @@ class DOMHits(Module):
event_hits = blob['Hits'] event_hits = blob['Hits']
with lock: with lock:
run_id = blob['EventInfo'].run_id[0]
if run_id > self.current_run_id:
self.current_run_id = run_id
for _run_id in set(list(self.runchanges.keys()) + [run_id]):
self.runchanges[_run_id] += 1
if _run_id != self.current_run_id and \
self.runchanges[_run_id] > self.max_events:
self.print("Removing run {} from the annotation list".
format(_run_id))
del self.runchanges[_run_id]
self.n_events += 1
hits = np.zeros(self.det.n_doms) hits = np.zeros(self.det.n_doms)
for dom_id in event_hits.dom_id: for dom_id in event_hits.dom_id:
du, floor, _ = self.det.doms[dom_id] du, floor, _ = self.det.doms[dom_id]
...@@ -131,6 +148,30 @@ class DOMHits(Module): ...@@ -131,6 +148,30 @@ class DOMHits(Module):
cb = fig.colorbar(im, pad=0.05) cb = fig.colorbar(im, pad=0.05)
cb.set_label("number of hits") cb.set_label("number of hits")
for run, n_events_since_runchange in self.runchanges.items():
if n_events_since_runchange >= self.max_events:
continue
self.print("Annotating run {} ({} events passed)".format(
run, n_events_since_runchange))
x_pos = min(self.n_events,
self.max_events) - n_events_since_runchange
plt.text(
x_pos,
self.det.n_doms,
"\nRUN %s " % run,
rotation=60,
verticalalignment='top',
fontsize=12,
color='black',
zorder=10)
ax.axvline(
x_pos,
linewidth=3,
color='#ff0f5b',
linestyle='--',
alpha=0.8,
zorder=10)
fig.tight_layout() fig.tight_layout()
f = os.path.join(self.plots_path, filename + '.png') f = os.path.join(self.plots_path, filename + '.png')
...@@ -163,7 +204,7 @@ def main(): ...@@ -163,7 +204,7 @@ def main():
timeout=60 * 60 * 24 * 7, timeout=60 * 60 * 24 * 7,
max_queue=2000) max_queue=2000)
pipe.attach(kp.io.daq.DAQProcessor) pipe.attach(kp.io.daq.DAQProcessor)
pipe.attach(DOMHits, det_id=det_id, plots_path=plots_path) pipe.attach(TriggerMap, det_id=det_id, plots_path=plots_path)
pipe.drain() pipe.drain()
......
...@@ -42,6 +42,7 @@ class MSGDumper(Module): ...@@ -42,6 +42,7 @@ class MSGDumper(Module):
entry = "{} [{}]: {}\n".format( entry = "{} [{}]: {}\n".format(
os.path.basename(self.filename), source, data) os.path.basename(self.filename), source, data)
self.fobj.write(entry) self.fobj.write(entry)
self.fobj.flush()
return blob return blob
def finish(self): def finish(self):
......
...@@ -96,7 +96,7 @@ class PMTRates(kp.Module): ...@@ -96,7 +96,7 @@ class PMTRates(kp.Module):
def update_plot(self): def update_plot(self):
filename = os.path.join(self.plot_path, self.filename) filename = os.path.join(self.plot_path, self.filename)
print("Updating plot at {}".format(filename)) self.log.debug("Updating plot at {}".format(filename))
now = time.time() now = time.time()
max_x = self.max_x max_x = self.max_x
interval = self.interval interval = self.interval
......
...@@ -59,6 +59,8 @@ lock = threading.Lock() ...@@ -59,6 +59,8 @@ lock = threading.Lock()
class ZTPlot(Module): class ZTPlot(Module):
def configure(self): def configure(self):
self.plots_path = self.require('plots_path') self.plots_path = self.require('plots_path')
self.ytick_distance = self.get('ytick_distance', default=200)
self.min_dus = self.get('min_dus', default=1)
det_id = self.require('det_id') det_id = self.require('det_id')
self.calib = kp.calib.Calibration(det_id=det_id) self.calib = kp.calib.Calibration(det_id=det_id)
...@@ -77,7 +79,7 @@ class ZTPlot(Module): ...@@ -77,7 +79,7 @@ class ZTPlot(Module):
event_info = blob['EventInfo'] event_info = blob['EventInfo']
n_triggered_dus = np.unique(hits[hits.triggered == True].du) n_triggered_dus = np.unique(hits[hits.triggered == True].du)
if n_triggered_dus < 1: if n_triggered_dus < self.min_dus:
print("Skipping...") print("Skipping...")
return blob return blob
...@@ -125,11 +127,12 @@ class ZTPlot(Module): ...@@ -125,11 +127,12 @@ class ZTPlot(Module):
c='#FF6363', c='#FF6363',
label='triggered hit') label='triggered hit')
ax.set_title( ax.set_title(
'DU{0}'.format(du), fontsize=fontsize, fontweight='bold') 'DU{0}'.format(int(du)), fontsize=fontsize, fontweight='bold')
for idx, ax in enumerate(axes): for idx, ax in enumerate(axes):
ax.tick_params(labelsize=fontsize) ax.tick_params(labelsize=fontsize)
ax.yaxis.set_major_locator(ticker.MultipleLocator(200)) ax.yaxis.set_major_locator(
ticker.MultipleLocator(self.ytick_distance))
xlabels = ax.get_xticklabels() xlabels = ax.get_xticklabels()
for label in xlabels: for label in xlabels:
label.set_rotation(45) label.set_rotation(45)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment