/
config.py
executable file
·100 lines (81 loc) · 3.01 KB
/
config.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
import os
import pandas as pd
import lasagna.conditions_
import lasagna.utils
home = os.path.dirname(__file__)
paths = None
calibration = None
calibration_short = None
# so calls to lasagna.config.paths.full resolve
paths = type('', (), {})()
paths.full = lambda s: s
experiment = None
fiji_target = os.path.expanduser('~/transfer/')
fonts = os.path.join(home, 'resources', 'fonts')
luts = os.path.join(home, 'resources', 'luts')
visitor_font = os.path.join(fonts, 'visitor1.ttf')
credentials = os.path.join(home, 'resources', 'gspread-da2f80418147.json')
wolfram = os.path.join(home, 'resources', 'wolfram.txt')
cloning = None
# overwritten by j = lasagna.config.j = lasagna.utils.start_client()
j = None
# relative magnification, empirical
magnification = {'100X': 0.066,
'40X': 0.168,
}
def get_appender(queue):
def appender(arg):
queue.append(arg)
return appender
queue = []
queue_log = []
def launch_thread():
thread = lasagna.utils.launch_queue(queue, queue_log)
queue_appender = get_appender(queue)
def load_sheets():
"""Load from google spreadsheet. Report duplicates on key "name". Drops empty rows.
Column names must be in first row.
:return:
"""
g_file = 'Lasagna Cloning'
name = 'name'
x = lasagna.conditions_.load_sheet(None, g_file=g_file)
global cloning
cloning = {}
for title, values in x.items():
df = pd.DataFrame(values[1:], columns=values[0])
# drop empty rows
df = df[(df != '').any(axis=1)]
duplicates = df[df.duplicated(subset=name)]
if duplicates.size:
print '[%s: %s] dropped duplicates in column [%s]' % (g_file, title, name)
print list(duplicates['name'])
# useful for pivoting
df['dummy'] = 1
cloning[title] = df.drop_duplicates(subset=name).set_index('name')
def set_linear_model_defaults(model):
"""
Default is not set for index j, corresponding to round.
:param model:
:return:
"""
pr = cloning['probes']
pr = lasagna.utils.comma_split(pr, 'targets')
pr['oligos'] = pr['oligos'].convert_objects(convert_numeric=True).fillna(0)
x = pr.reset_index().pivot_table(values='oligos', fill_value=0, index='name', columns='targets')
tiles = (cloning['barcodes'].loc[:, 'tiles'])
tiles = {k: v.split(', ') for k,v in dict(tiles).items()}
B = pd.DataFrame()
for barcode, tiles_ in tiles.items():
B[barcode] = x[tiles_].sum(axis=1)
model.tables['B'] = B
model.tables['C'] = (cloning['dyes'].drop('dummy', 1)
.astype(float))
model.tables['D'] = (cloning['probes'].reset_index()
.pivot_table(values='dummy', index='name',
columns='dye', fill_value=0))
# default indices
model.indices['k'] = list(model.tables['C'].index)
model.indices['l'] = list(model.tables['B'].index)
model.indices['m'] = list(model.tables['B'].columns)
model.indices['n'] = list(model.tables['C'].columns)