-
Notifications
You must be signed in to change notification settings - Fork 1
/
mm_app_core.py
142 lines (108 loc) · 4.23 KB
/
mm_app_core.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
"""
mm_app_core.py
~~~~~~~~~~~~
This module supports accessing image acquisition functionality, similar to the
main Micro-Manager dialog.
:copyright: (c) 2012 by Albert Boehmler
:license: GNU Affero General Public License, see LICENSE for more details.
"""
import sys, os, time, thread
from flask import Blueprint, render_template, abort, url_for, redirect, request
from pylab import imsave, cm
import MMCorePy
from settings import mm_core as mmc
import settings
import configurations
import mm_util
mm_app_core = Blueprint('mm_app_core', __name__,
template_folder='templates')
@mm_app_core.route('/')
def index():
return render_template('acquisition.html',
mm_app_core=sys.modules[__name__],
configurations=configurations._get_configs_listing())
def get_allowed_binning_values():
return mmc.getAllowedPropertyValues(mmc.getCameraDevice(),
MMCorePy.g_Keyword_Binning)
def get_available_shutters():
return mmc.getLoadedDevicesOfType(MMCorePy.ShutterDevice)
@mm_app_core.route('/binning/')
def get_binning():
return mmc.getProperty(mmc.getCameraDevice(),
MMCorePy.g_Keyword_Binning)
@mm_app_core.route('/binning/', methods=['POST'])
def set_binning():
binning_value = int(request.form['binning'])
return _set_binning(binning_value)
@mm_app_core.route('/shutter/')
def get_shutter():
return mmc.getShutterDevice()
@mm_app_core.route('/exposure/')
def get_exposure():
return mmc.getExposure()
@mm_app_core.route('/exposure/', methods=['POST'])
def set_exposure():
exposure_value = float(request.form['exposure'])
return _set_exposure(exposure_value)
@mm_app_core.route('/auto-shutter/')
def get_auto_shutter():
return mmc.getAutoShutter()
@mm_app_core.route('/auto-shutter/', methods=['POST'])
def set_auto_shutter():
auto_shutter_value = mm_util.from_js_boolean(request.form['auto-shutter'])
return _set_auto_shutter(auto_shutter_value)
@mm_app_core.route('/open-shutter/')
def get_shutter_open():
return mmc.getShutterOpen()
@mm_app_core.route('/open-shutter/', methods=['POST'])
def set_shutter_open():
open_shutter_value = mm_util.from_js_boolean(request.form['open-shutter'])
return _set_shutter_open(open_shutter_value)
@mm_app_core.route('/active-shutter/')
def get_active_shutter():
return mmc.getShutter()
@mm_app_core.route('/active-shutter/', methods=['POST'])
def set_active_shutter():
active_shutter_value = str(request.form['active-shutter'])
return _set_active_shutter(active_shutter_value)
@mm_app_core.route('/snap-image/')
def snap_image():
image_name = _snap_image()
return render_template('snap-image.html',
img_url=url_for('acq.download_acquired_image',
image_name=image_name))
def _is_camera_available():
return None != mmc.getCameraDevice()
def _set_binning(binning_value):
if (_is_camera_available()):
mmc.setProperty(mmc.getCameraDevice(),
MMCorePy.g_Keyword_Binning,
binning_value)
return mmc.getProperty(mmc.getCameraDevice(),
MMCorePy.g_Keyword_Binning)
def _set_exposure(exposure_value):
mmc.setExposure(exposure_value)
return str(mmc.getExposure())
def _set_auto_shutter(auto_shutter_value):
mmc.setAutoShutter(auto_shutter_value)
return str(mmc.getAutoShutter())
def _set_shutter_open(shutter_open_value):
mmc.setShutterOpen(shutter_open_value);
return str(mmc.getShutterOpen())
def _set_active_shutter(active_shutter_value):
return mmc.setShutterDevice(active_shutter_value)
return mmc.getShutterDevice()
def _snap_image():
image_name = "acq-%s.png" % int(time.time() * 1000)
save_location = os.path.join(settings.MM_ANYWHERE_HOST_DATA_PATH,
image_name)
camera = ""
## thread.start_new_thread(_execute_snap_image, (camera, save_location))
## time.sleep(0.1)
_execute_snap_image(camera, save_location)
return image_name
def _execute_snap_image(camera, save_location):
mmc.snapImage()
mmc.waitForSystem()
img = mmc.getImage()
imsave(save_location, img, cmap = cm.gray)