immucellai2 2.1.24__tar.gz → 2.1.25__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {immucellai2-2.1.24 → immucellai2-2.1.25}/PKG-INFO +1 -1
- {immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2/Deconvolution.py +136 -71
- {immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2/ObtainCategory.py +1 -1
- {immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2/PrepareData.py +41 -34
- {immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2/__init__.py +7 -7
- {immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2/myclasses.py +31 -22
- {immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2/myconfig/Celltype.category +15 -15
- {immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2/myconfig/MarkerUsedDeconvolution.txt +0 -0
- {immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2/myconfig/reference_normalCelltypes.txt +1 -1
- {immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2/myconfig/reference_tumorCelltypes.txt +1 -1
- {immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2.egg-info/PKG-INFO +1 -1
- {immucellai2-2.1.24 → immucellai2-2.1.25}/setup.cfg +1 -1
- {immucellai2-2.1.24 → immucellai2-2.1.25}/README.md +0 -0
- {immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2/Drawplot.py +0 -0
- {immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2/Time.py +0 -0
- {immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2.egg-info/SOURCES.txt +0 -0
- {immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2.egg-info/dependency_links.txt +0 -0
- {immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2.egg-info/entry_points.txt +0 -0
- {immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2.egg-info/requires.txt +0 -0
- {immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2.egg-info/top_level.txt +0 -0
- {immucellai2-2.1.24 → immucellai2-2.1.25}/pyproject.toml +0 -0
|
@@ -8,13 +8,9 @@ from immucellai2.myclasses import CLASS_FOR_RUN, CLASS_FOR_RUNRESULT, CLASS_FOR_
|
|
|
8
8
|
import scipy
|
|
9
9
|
import os
|
|
10
10
|
import tqdm
|
|
11
|
-
import joblib
|
|
12
|
-
import dask
|
|
13
|
-
import dask.delayed
|
|
14
|
-
import dask.multiprocessing
|
|
15
|
-
from dask.distributed import Client, LocalCluster
|
|
16
11
|
from concurrent.futures import ProcessPoolExecutor, as_completed
|
|
17
12
|
from itertools import chain
|
|
13
|
+
import joblib
|
|
18
14
|
import multiprocessing
|
|
19
15
|
from copy import deepcopy
|
|
20
16
|
|
|
@@ -26,6 +22,7 @@ class Move:
|
|
|
26
22
|
raise NotImplementedError
|
|
27
23
|
def propose(self, state, random_state):
|
|
28
24
|
raise NotImplementedError
|
|
25
|
+
|
|
29
26
|
class GibbsMHMove(Move):
|
|
30
27
|
def __init__(self, phi, alpha, sp):
|
|
31
28
|
self.phi = phi
|
|
@@ -37,12 +34,13 @@ class GibbsMHMove(Move):
|
|
|
37
34
|
q, _ = self.get_proposal(state.coords, random_state)
|
|
38
35
|
new_state = State(q)
|
|
39
36
|
return new_state, np.ones(state.coords.shape[0], dtype=bool)
|
|
37
|
+
|
|
40
38
|
def gibbs_proposal_function(coords, random, phi, alpha, sp):
|
|
41
39
|
min_threshold = 1e-6
|
|
42
40
|
updated_coords = np.copy(coords)
|
|
43
41
|
column_sums = np.sum(phi, axis=0)
|
|
44
42
|
normalized_matrix = phi / column_sums
|
|
45
|
-
G, K = normalized_matrix.shape
|
|
43
|
+
G, K = normalized_matrix.shape
|
|
46
44
|
for n in range(len(coords)):
|
|
47
45
|
theta_n = updated_coords[n, :]
|
|
48
46
|
prob_mat = np.multiply(normalized_matrix, theta_n)
|
|
@@ -50,7 +48,7 @@ def gibbs_proposal_function(coords, random, phi, alpha, sp):
|
|
|
50
48
|
for g in range(G):
|
|
51
49
|
row_sum = np.sum(prob_mat[g, :]) # ʹ�� NumPy ���������к�
|
|
52
50
|
pvals = np.full(K, 1/K) if row_sum < min_threshold else prob_mat[g, :] / row_sum
|
|
53
|
-
Z_n.append(
|
|
51
|
+
Z_n.append(random_state.multinomial(n=round(sp[g]), pvals=pvals))
|
|
54
52
|
Z_nk = np.sum(Z_n, axis=0)
|
|
55
53
|
alpha_param = Z_nk + alpha
|
|
56
54
|
updated_coords[n, :] = np.random.dirichlet(alpha=alpha_param)
|
|
@@ -66,7 +64,7 @@ class EnsembleSampler:
|
|
|
66
64
|
self.alpha_value = alpha_value
|
|
67
65
|
self.sp_value = sp_value
|
|
68
66
|
self.backend = Backend(nwalkers=nwalkers, ndim=ndim, iterations=iterations)
|
|
69
|
-
self.
|
|
67
|
+
self.random_state = np.random.mtrand.RandomState()
|
|
70
68
|
def sample(self, initial_state, iterations=1, progress=False, progress_kwargs=None):
|
|
71
69
|
if progress_kwargs is None:
|
|
72
70
|
progress_kwargs = {}
|
|
@@ -128,36 +126,101 @@ def get_progress_bar(display, total, **kwargs):
|
|
|
128
126
|
return getattr(tqdm, "tqdm_" + display)(total=total, **kwargs)
|
|
129
127
|
return _NoOpPBar()
|
|
130
128
|
|
|
129
|
+
'''
|
|
130
|
+
def mcse_python(samples):
|
|
131
|
+
n_iter, n_dim = samples.shape
|
|
132
|
+
mcse_vec = np.empty(n_dim)
|
|
133
|
+
for k in range(n_dim):
|
|
134
|
+
x = samples[:, k]
|
|
135
|
+
rho = np.correlate(x - x.mean(), x - x.mean(), mode='full')
|
|
136
|
+
rho = rho[n_iter - 1:] / rho[n_iter - 1]
|
|
137
|
+
lag = next((i for i, r in enumerate(rho[1:], 1) if r < 0.05), n_iter)
|
|
138
|
+
ess = n_iter / (1 + 2 * rho[1:lag + 1].sum())
|
|
139
|
+
mcse_vec[k] = np.std(x, ddof=1) / np.sqrt(ess)
|
|
140
|
+
return mcse_vec
|
|
141
|
+
def mcse_python(segment):
|
|
142
|
+
return np.std(segment, axis=0) / np.sqrt(len(segment))
|
|
131
143
|
def ThreadRunEachSamples(
|
|
132
|
-
|
|
133
|
-
|
|
144
|
+
EmceeParameters = None,
|
|
145
|
+
referenceMatrix = None,
|
|
146
|
+
SampleExpressionData = None,
|
|
147
|
+
SampleName=None,
|
|
148
|
+
MAPorMLE = ('MAP','MLE'),
|
|
149
|
+
*args):
|
|
150
|
+
samplename = SampleName
|
|
151
|
+
phi_value = referenceMatrix
|
|
152
|
+
alpha_value = 1
|
|
153
|
+
sp_value = SampleExpressionData
|
|
154
|
+
K = EmceeParameters.ndims
|
|
155
|
+
rng = np.random.RandomState(seed)
|
|
156
|
+
max_iter = EmceeParameters.nsteps
|
|
157
|
+
nwalkers = EmceeParameters.nwalkers
|
|
158
|
+
tol_ratio = 0.01
|
|
159
|
+
eval_step = 50
|
|
160
|
+
theta = EmceeParameters.position
|
|
161
|
+
if theta.ndim == 1:
|
|
162
|
+
theta = theta.reshape(nwalkers, K)
|
|
163
|
+
else:
|
|
164
|
+
theta = theta[:nwalkers, :K]
|
|
165
|
+
full_chain = np.zeros((max_iter, nwalkers, K))
|
|
166
|
+
converged = False
|
|
167
|
+
converged_step = None
|
|
168
|
+
for i in range(max_iter):
|
|
169
|
+
gibbs_move = GibbsMHMove(phi_value, alpha_value, sp_value)
|
|
170
|
+
state, _ = gibbs_move.propose(State(theta), rng)
|
|
171
|
+
theta = state.coords
|
|
172
|
+
full_chain[i] = theta
|
|
173
|
+
if (i + 1) % eval_step == 0 and i + 1 >= eval_step:
|
|
174
|
+
segment = full_chain[(i + 1 - eval_step): (i + 1)].reshape(-1, K)
|
|
175
|
+
mcse_vec = mcse_python(segment)
|
|
176
|
+
theta_hat = segment.mean(axis=0)
|
|
177
|
+
theta_hat_safe = np.where(theta_hat == 0, 1e-10, theta_hat)
|
|
178
|
+
ratio = mcse_vec / theta_hat_safe
|
|
179
|
+
if np.all(np.abs(ratio) <= tol_ratio):
|
|
180
|
+
converged = True
|
|
181
|
+
converged_step = i + 1
|
|
182
|
+
break
|
|
183
|
+
if converged and converged_step is not None:
|
|
184
|
+
start_step = max(0, converged_step - 100)
|
|
185
|
+
truncated_chain = full_chain[start_step:converged_step]
|
|
186
|
+
else:
|
|
187
|
+
start_step = max(0, max_iter - 100)
|
|
188
|
+
truncated_chain = full_chain[start_step:max_iter]
|
|
189
|
+
flat_samples = truncated_chain.reshape(-1, K)
|
|
190
|
+
return full_chain, flat_samples'''
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def ThreadRunEachSamples(
|
|
194
|
+
EmceeParameters = None, referenceMatrix = None,
|
|
195
|
+
SampleExpressionData = None, SampleName=None, MAPorMLE = ('MAP','MLE'), *args):
|
|
134
196
|
nwalkers, ndims = EmceeParameters.nwalkers, EmceeParameters.ndims
|
|
135
197
|
position, nsteps = EmceeParameters.position, EmceeParameters.nsteps
|
|
136
|
-
discard, thin = EmceeParameters.discard, EmceeParameters.thin
|
|
198
|
+
discard, thin = EmceeParameters.discard, EmceeParameters.thin
|
|
137
199
|
samplename = SampleName
|
|
138
|
-
phi_value = referenceMatrix
|
|
139
|
-
alpha_value = 1
|
|
140
|
-
sp_value = SampleExpressionData
|
|
141
|
-
print(" create new threading for sample '%s'"%str(samplename))
|
|
142
|
-
if MAPorMLE == 'MAP':
|
|
200
|
+
phi_value = referenceMatrix
|
|
201
|
+
alpha_value = 1
|
|
202
|
+
sp_value = SampleExpressionData
|
|
203
|
+
print(" create new threading for sample '%s'"%str(samplename))
|
|
204
|
+
if MAPorMLE == 'MAP':
|
|
143
205
|
sampler = EnsembleSampler(nwalkers, ndims, phi_value, alpha_value, sp_value)
|
|
144
206
|
sampler.run_mcmc(position, nsteps, progress=True)
|
|
145
207
|
mcmc_samples, flat_samples = [[[]]], [[]]
|
|
146
208
|
mcmc_samples = sampler.get_chain()
|
|
147
209
|
flat_samples = sampler.get_chain( discard = discard, thin = thin, flat = True)
|
|
148
210
|
print( "Threading for sample '%s' run over, exiting..."%str(samplename))
|
|
149
|
-
return mcmc_samples, flat_samples
|
|
150
|
-
|
|
211
|
+
return mcmc_samples, flat_samples
|
|
212
|
+
|
|
151
213
|
class MultiprocessesResult(object):
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
214
|
+
def __init__(self, SampleName, SamplingResult, CellType):
|
|
215
|
+
self.SampleName = SampleName
|
|
216
|
+
self.CellTypeList = CellType
|
|
217
|
+
self.ResultObjectOne = CLASS_FOR_RUNRESULT(
|
|
218
|
+
SampleNameList = [ self.SampleName ] ,
|
|
219
|
+
McmcSamplingResultList = np.array([ SamplingResult[0] ]) ,
|
|
220
|
+
FlatSamplingResultList = np.array([ SamplingResult[1] ]) ,
|
|
221
|
+
CellTypeList = CellType
|
|
222
|
+
)
|
|
223
|
+
|
|
161
224
|
def MergeResultsForAllSample(ThreadList=list(), OtherParams=[], *args):
|
|
162
225
|
print("Merge all results from deconvolution into one ResultObject...")
|
|
163
226
|
if len(ThreadList) < 1:
|
|
@@ -180,60 +243,62 @@ def MergeResultsForAllSample(ThreadList=list(), OtherParams=[], *args):
|
|
|
180
243
|
FileCellTypeCategory = OtherParams[1]
|
|
181
244
|
# Creating the final merged result object
|
|
182
245
|
MergeResultsObject = CLASS_FOR_RUNRESULT(
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
246
|
+
SampleNameList=SampleNameWhole,
|
|
247
|
+
CellTypeList=CellTypeWhole,
|
|
248
|
+
FileCellTypeCategory=FileCellTypeCategory,
|
|
249
|
+
McmcSamplingResultList=McmcSamplingWhole,
|
|
250
|
+
FlatSamplingResultList=FlatSamplingWhole,
|
|
251
|
+
CellTypeRatioResult=CellTypeRatioResultWhole,
|
|
252
|
+
CellTypeRatioResultFinal=CellTypeRatioResultFinalWhole)
|
|
190
253
|
return MergeResultsObject
|
|
191
|
-
|
|
192
|
-
|
|
254
|
+
|
|
255
|
+
def MainRun(RunObject, seed=42, MultithreadModule = 'joblib'):
|
|
256
|
+
EnvironmentRun = RunObject.EnvironmentRun
|
|
193
257
|
RecordTime = CLASS_FOR_TIME()
|
|
194
258
|
nsamples = len(RunObject.SampleList)
|
|
195
|
-
|
|
196
|
-
CelltypesReferenceMatrix = RunObject.CelltypesReferenceMatrix
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
for SampleNameii in range(nsamples):
|
|
200
|
-
SampleName = RunObject.SampleList[SampleNameii]
|
|
201
|
-
SampleIndex = SampleNameToIndex[SampleName] # ��ȡ����
|
|
259
|
+
parameterlist = []
|
|
260
|
+
#CelltypesReferenceMatrix = RunObject.CelltypesReferenceMatrix
|
|
261
|
+
for sample_index in range(nsamples):
|
|
262
|
+
SampleName = RunObject.SampleList[sample_index]
|
|
202
263
|
parameterlist.append((
|
|
203
|
-
|
|
204
|
-
CelltypesReferenceMatrix,
|
|
205
|
-
RunObject.SamplesBulkRNAseqExpression[
|
|
206
|
-
|
|
207
|
-
RunObject.MAPorMLE
|
|
208
|
-
))
|
|
264
|
+
(RunObject.EmceeParameter).mycopy(),
|
|
265
|
+
RunObject.CelltypesReferenceMatrix ,
|
|
266
|
+
RunObject.SamplesBulkRNAseqExpression[sample_index],
|
|
267
|
+
RunObject.SampleList[sample_index],
|
|
268
|
+
RunObject.MAPorMLE
|
|
269
|
+
))
|
|
270
|
+
#EmceeParameterCopy = RunObject.EmceeParameter.mycopy()
|
|
209
271
|
MultiprocessingReturnValue = []
|
|
210
272
|
if MultithreadModule == 'joblib':
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
273
|
+
try:
|
|
274
|
+
results = joblib.Parallel(n_jobs=int(EnvironmentRun.ThreadNum), backend='loky',verbose=0)(joblib.delayed(ThreadRunEachSamples)(*arg) for arg in parameterlist)
|
|
275
|
+
except:
|
|
276
|
+
print('error occurs while paralleling')
|
|
277
|
+
finally:
|
|
278
|
+
del parameterlist
|
|
279
|
+
print('finished all!')
|
|
218
280
|
elif MultithreadModule == 'multiprocessing':
|
|
219
281
|
with multiprocessing.Pool(processes=int(EnvironmentRun.ThreadNum)) as pool:
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
282
|
+
results = pool.starmap(
|
|
283
|
+
ThreadRunEachSamples,
|
|
284
|
+
[(EmceeParameterCopy,
|
|
285
|
+
CelltypesReferenceMatrix,
|
|
286
|
+
RunObject.SamplesBulkRNAseqExpression[sample_index],
|
|
287
|
+
RunObject.SampleList[sample_index],
|
|
288
|
+
seed + sample_index,
|
|
289
|
+
RunObject.MAPorMLE
|
|
290
|
+
) for sample_index in range(nsamples)]
|
|
291
|
+
)
|
|
228
292
|
MergedResultObject = MergeResultsForAllSample(
|
|
229
|
-
ThreadList
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
)
|
|
293
|
+
ThreadList=[MultiprocessesResult(
|
|
294
|
+
RunObject.SampleList[i],
|
|
295
|
+
result,
|
|
296
|
+
deepcopy(RunObject.CellType)
|
|
297
|
+
) for i, result in enumerate(results)],
|
|
234
298
|
OtherParams=[deepcopy(RunObject.CellType), RunObject.FileCellTypeCategory]
|
|
235
|
-
|
|
299
|
+
)
|
|
236
300
|
RecordTime.ShowCostTime()
|
|
237
|
-
if os.path.exists("TempThread"):
|
|
301
|
+
if os.path.exists("TempThread"):
|
|
302
|
+
os.system("rm -rf TempThread")
|
|
238
303
|
print("###<----Main program Run finished...")
|
|
239
304
|
return MergedResultObject
|
|
@@ -49,7 +49,7 @@ def ObtainInformation2(line, SearchString, DictValue):
|
|
|
49
49
|
else:
|
|
50
50
|
DictValue[SearchString] = obcontent
|
|
51
51
|
|
|
52
|
-
def
|
|
52
|
+
def ObtainCellTypeCateogry(CellTypeCateogry):
|
|
53
53
|
if CellTypeCateogry is None or not os.path.isfile(CellTypeCateogry):
|
|
54
54
|
try:
|
|
55
55
|
from importlib.resources import files
|
|
@@ -1,38 +1,46 @@
|
|
|
1
1
|
#!/usr/bin/python3
|
|
2
|
-
from .myclasses import CLASS_FOR_RUN
|
|
3
|
-
from .ObtainCategory import
|
|
2
|
+
from immucellai2.myclasses import CLASS_FOR_RUN
|
|
3
|
+
from immucellai2.ObtainCategory import ObtainCellTypeCateogry
|
|
4
4
|
import pandas
|
|
5
5
|
import os
|
|
6
|
-
import importlib.util
|
|
7
6
|
import re
|
|
8
7
|
import sys
|
|
9
8
|
import multiprocessing as mp
|
|
9
|
+
from importlib_resources import files
|
|
10
|
+
|
|
11
|
+
def SelectGeneForDeconvolution(DFReferenceProfile, FileCoveredGenes="", Method="UsedMarker"):
|
|
12
|
+
print("Select the gene for the following deconvolution...")
|
|
13
|
+
GeneUsedForDeconvolution = []
|
|
14
|
+
DFReferenceProfileGenes = DFReferenceProfile.index.values
|
|
15
|
+
if Method == "UsedMarker":
|
|
16
|
+
if FileCoveredGenes == "":
|
|
17
|
+
try:
|
|
18
|
+
marker_path = files("immucellai2.myconfig").joinpath("MarkerUsedDeconvolution.txt")
|
|
19
|
+
FileCoveredGenes = str(marker_path)
|
|
20
|
+
except Exception as e:
|
|
21
|
+
script_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
|
|
22
|
+
FileCoveredGenes = os.path.join(script_dir, "immucellai2/myconfig/MarkerUsedDeconvolution.txt")
|
|
23
|
+
print(f"[WARNING] Using fallback path: {FileCoveredGenes}")
|
|
24
|
+
try:
|
|
25
|
+
GeneUsedForDeconvolution0 = pandas.read_table(FileCoveredGenes, sep="\t", header=None).iloc[1].tolist()
|
|
26
|
+
print(f"[DEBUG] head:\n list(islice(GeneUsedForDeconvolution0, 3))")
|
|
27
|
+
GeneUsedForDeconvolution = list(set(GeneUsedForDeconvolution0).intersection(set(DFReferenceProfileGenes)))
|
|
28
|
+
print(f"Successfully loaded {len(GeneUsedForDeconvolution)} marker genes")
|
|
29
|
+
except FileNotFoundError:
|
|
30
|
+
print(f"Error: Marker file not found - {FileCoveredGenes}")
|
|
31
|
+
print("Please check:")
|
|
32
|
+
print("1. Package is installed correctly (pip install --upgrade immucellai2)")
|
|
33
|
+
print("2. Environment variable IMMUCELLAI_CONFIG_DIR is set")
|
|
34
|
+
return []
|
|
35
|
+
except Exception as e:
|
|
36
|
+
print(f"Error reading marker file: {str(e)}")
|
|
37
|
+
return []
|
|
38
|
+
return GeneUsedForDeconvolution
|
|
10
39
|
|
|
11
40
|
def Obtainmyconfigpath():
|
|
12
41
|
script_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
|
|
13
42
|
return os.path.join(script_dir, "immucellai2", "myconfig", "")
|
|
14
43
|
|
|
15
|
-
def get_package_dir(package_name):
|
|
16
|
-
spec = importlib.util.find_spec(package_name)
|
|
17
|
-
if spec is None:
|
|
18
|
-
raise ModuleNotFoundError(f"Package '{package_name}' not found")
|
|
19
|
-
path = spec.origin or spec.submodule_search_locations[0]
|
|
20
|
-
return os.path.dirname(path)
|
|
21
|
-
|
|
22
|
-
def SelectGeneForDeconvolution(DFReferenceProfile, FileCoveredGenes="", Method="UsedMarker"):
|
|
23
|
-
print("Select the gene for the following deconvolution...")
|
|
24
|
-
GeneUsedForDeconvolution = []
|
|
25
|
-
DFReferenceProfileGenes = DFReferenceProfile.index.values
|
|
26
|
-
if Method == "UsedMarker":
|
|
27
|
-
if FileCoveredGenes == "":
|
|
28
|
-
pkg_marker_path = os.path.join(get_package_dir("immucellai2"), "myconfig/MarkerUsedDeconvolution.txt")
|
|
29
|
-
if os.path.exists(pkg_marker_path):
|
|
30
|
-
FileCoveredGenes = pkg_marker_path
|
|
31
|
-
print(f"[INFO] Found marker file in immucellai2 package: {FileCoveredGenes}")
|
|
32
|
-
GeneUsedForDeconvolution0 = (pandas.read_table(FileCoveredGenes, sep= "\t")).iloc[0].to_list()
|
|
33
|
-
GeneUsedForDeconvolution = list(set(GeneUsedForDeconvolution0).intersection(set(DFReferenceProfileGenes)))
|
|
34
|
-
return GeneUsedForDeconvolution
|
|
35
|
-
|
|
36
44
|
def CelltypeCategoryCheck(FileCellTypeCategory = "", celltypelist = [] ):
|
|
37
45
|
print("Check the Celltype covered by configfile")
|
|
38
46
|
if FileCellTypeCategory == "":
|
|
@@ -67,11 +75,11 @@ def InitialCellTypeRatioCheck(InitialCellTypeRatio, FileInitialCellTypeRatio = "
|
|
|
67
75
|
elif Expactedcelltypenum in [ ncelltype, ncelltype -1 ]:
|
|
68
76
|
return FileInitialCellTypeRatio
|
|
69
77
|
else:
|
|
70
|
-
InitialCellTypeRatio = 'randn'
|
|
78
|
+
InitialCellTypeRatio = 'randn'
|
|
71
79
|
|
|
72
80
|
def PrepareData(FileReferenceProfile ,
|
|
73
81
|
FileSampleExpressionProfile ,
|
|
74
|
-
EnvironmentConfig =
|
|
82
|
+
EnvironmentConfig = "" ,
|
|
75
83
|
FileCoveredGenes = "" ,
|
|
76
84
|
FileCellTypeCategory = "" ,
|
|
77
85
|
FileInitialCellTypeRatio = "" ,
|
|
@@ -80,27 +88,26 @@ def PrepareData(FileReferenceProfile ,
|
|
|
80
88
|
if FileReferenceProfile.shape[1] < 2:
|
|
81
89
|
print("warning: When open Reference File, might sep = ' ' not '\t'")
|
|
82
90
|
print("celltype reference raw matrix:\n", FileReferenceProfile.iloc[0:4, 0:4])
|
|
83
|
-
ReferenceCelltype = {}
|
|
91
|
+
ReferenceCelltype = {}
|
|
84
92
|
for oneCellType in FileReferenceProfile.columns.values.tolist():
|
|
85
93
|
numbertail = re.findall("\.[0-9]*$", oneCellType)
|
|
86
94
|
oneCellType0 = oneCellType
|
|
87
95
|
if numbertail != []: oneCellType = oneCellType[:-len(numbertail)]
|
|
88
|
-
if oneCellType in ReferenceCelltype.keys():
|
|
96
|
+
if oneCellType in ReferenceCelltype.keys():
|
|
89
97
|
ReferenceCelltype[oneCellType].append(ReferenceCelltype[oneCellType])
|
|
90
98
|
else: ReferenceCelltype[oneCellType] = [oneCellType0]
|
|
91
99
|
DFReferenceProfile = pandas.DataFrame(columns = list(ReferenceCelltype.keys()),
|
|
92
100
|
index = FileReferenceProfile.index.values)
|
|
93
101
|
for celltype in DFReferenceProfile.columns.values:
|
|
94
|
-
DFReferenceProfile[celltype] = (
|
|
102
|
+
DFReferenceProfile[celltype] = (
|
|
95
103
|
FileReferenceProfile.loc[:, ReferenceCelltype[celltype] ]).mean(axis = 1)
|
|
96
|
-
print("celltype reference matrix:\n", DFReferenceProfile.iloc[0:4, 0:4])
|
|
104
|
+
print("celltype reference matrix:\n", DFReferenceProfile.iloc[0:4, 0:4])
|
|
97
105
|
DFSampleExpressionProfile = pandas.read_table(FileSampleExpressionProfile, sep = "\t", header = 0, index_col = 0)
|
|
98
|
-
print(" initialize a Object For running...")
|
|
99
|
-
print("environment config(
|
|
106
|
+
print(" initialize a Object For running...")
|
|
107
|
+
print("environment config(threads): ", EnvironmentConfig)
|
|
100
108
|
GeneUsedForDeconvolution = SelectGeneForDeconvolution(DFReferenceProfile)
|
|
101
109
|
#FileCellTypeCategory = CelltypeCategoryCheck(FileCellTypeCategory, celltypelist = list(ReferenceCelltype.keys()))
|
|
102
|
-
FileInitialCellTypeRatio = InitialCellTypeRatioCheck(InitialCellTypeRatio,
|
|
103
|
-
FileInitialCellTypeRatio, ncelltype = DFReferenceProfile.shape[1])
|
|
110
|
+
FileInitialCellTypeRatio = InitialCellTypeRatioCheck(InitialCellTypeRatio, FileInitialCellTypeRatio, ncelltype = DFReferenceProfile.shape[1])
|
|
104
111
|
DFReferenceProfile0 = DFReferenceProfile.loc[GeneUsedForDeconvolution, ]
|
|
105
112
|
DFReferenceProfile0 = DFReferenceProfile0[DFReferenceProfile0.index.isin(DFSampleExpressionProfile.index)]
|
|
106
113
|
selected_DFSampleExpressionProfile = DFSampleExpressionProfile.loc[DFReferenceProfile0.index]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
from .
|
|
2
|
-
from .
|
|
3
|
-
from .
|
|
4
|
-
from .
|
|
1
|
+
from .myfunction1 import MainRun # MainRun
|
|
2
|
+
from .myfunction2 import PrepareData # PrepareDate
|
|
3
|
+
from .myfunction3 import ExtractResult, SummaryCellRatio # ExtractResult()
|
|
4
|
+
from .myfunction4 import DrawPlotFunction1, DrawPlotFunction2 # visualization()
|
|
5
5
|
import os
|
|
6
6
|
import pandas
|
|
7
7
|
import argparse
|
|
@@ -11,12 +11,12 @@ import numpy as np
|
|
|
11
11
|
import random
|
|
12
12
|
|
|
13
13
|
def load_tumor_reference_data():
|
|
14
|
-
from
|
|
14
|
+
from importlib_resources import path
|
|
15
15
|
with path("immucellai2.myconfig", "reference_tumorCelltypes.txt") as file_path:
|
|
16
16
|
return pandas.read_table(file_path, sep="\t", header=0, index_col=0)
|
|
17
17
|
|
|
18
18
|
def load_normal_reference_data():
|
|
19
|
-
from
|
|
19
|
+
from importlib_resources import path
|
|
20
20
|
with path("immucellai2.myconfig", "reference_normalCelltypes.txt") as file_path:
|
|
21
21
|
return pandas.read_table(file_path, sep="\t", header=0, index_col=0)
|
|
22
22
|
|
|
@@ -41,7 +41,7 @@ def main():
|
|
|
41
41
|
mp.set_start_method('fork', force=True)
|
|
42
42
|
parser = argparse.ArgumentParser(description='ImmuCellAI2 deconvolution tool')
|
|
43
43
|
parser.add_argument('-f', '--reference', dest = 'reference', default="", help = 'celltype reference experession matrix')
|
|
44
|
-
parser.add_argument('-g', '--genes', dest = 'CoveredGenes', action = 'store_const', help = 'The genes used in the following deconvolution process selected by BayesPrism, temporary variance')
|
|
44
|
+
parser.add_argument('-g', '--genes', dest = 'CoveredGenes', action = 'store_const', const=True, help = 'The genes used in the following deconvolution process selected by BayesPrism, temporary variance')
|
|
45
45
|
parser.add_argument('-s', '--sample', dest = 'sample', required = True, help = 'the samples gene expression profile')
|
|
46
46
|
parser.add_argument('-t', '--thread', dest = 'thread', type=int, default = 16, help = "threading numbers for deconvolution")
|
|
47
47
|
parser.add_argument('--sample-type', dest="sample_type", default = 'normal', choices=['tumor','normal'], help='Sample type (tumor/normal, default normal)')
|
|
@@ -99,19 +99,25 @@ class CLASS_FOR_RUNRESULT(object):
|
|
|
99
99
|
self.EmceeFunction2( McSamplingResultList[sampleii, :, :, :] )
|
|
100
100
|
return NewMcSamplingResultList
|
|
101
101
|
def optimized_calculation(self, FlatSamplingResultOne, nCellType):
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
102
|
+
row_sums = FlatSamplingResultOne.sum(axis=1, keepdims=True)
|
|
103
|
+
row_sums_safe = row_sums + 1e-10
|
|
104
|
+
if FlatSamplingResultOne.shape[1] == nCellType:
|
|
105
|
+
return FlatSamplingResultOne / row_sums_safe
|
|
106
|
+
elif FlatSamplingResultOne.shape[1] + 1 == nCellType:
|
|
107
|
+
normalized = FlatSamplingResultOne / row_sums_safe
|
|
108
|
+
last_col = 1 - normalized.sum(axis=1, keepdims=True)
|
|
109
|
+
return numpy.column_stack((normalized, last_col))
|
|
110
|
+
else:
|
|
111
|
+
raise ValueError(f"Dimension mismatch: input {FlatSamplingResultOne.shape[1]} columns, target {nCellType}columns")
|
|
112
|
+
def EmceeFunction2(self, FlatSamplingResultList):
|
|
113
|
+
fshape = FlatSamplingResultList.shape
|
|
114
|
+
nCellType = len(self.CellType)
|
|
115
|
+
NewFlatSamplingResultList = numpy.zeros((fshape[0], fshape[1], nCellType))
|
|
116
|
+
for sampleii in range(fshape[0]):
|
|
117
|
+
FlatSamplingResultOne = FlatSamplingResultList[sampleii, :, :]
|
|
118
|
+
NewFlatSamplingResultOne = self.optimized_calculation(FlatSamplingResultOne, nCellType)
|
|
119
|
+
NewFlatSamplingResultList[sampleii, :, :] = NewFlatSamplingResultOne
|
|
120
|
+
return NewFlatSamplingResultList
|
|
115
121
|
def CalculateCellTypeRatio(self):
|
|
116
122
|
CellTypeRatioResult = pandas.DataFrame(numpy.zeros(( len(self.SampleName),
|
|
117
123
|
len(self.CellType) )),
|
|
@@ -127,7 +133,7 @@ class CLASS_FOR_RUNRESULT(object):
|
|
|
127
133
|
CellTypeRatioResult.loc[SampleNameOne, ] = FlatSamplingAverageOne
|
|
128
134
|
FinalSampling = self.McmcSamplingResult[Oneii, -1, :, :]
|
|
129
135
|
CellTypeRatioResultFinal.loc[SampleNameOne, ] = numpy.mean(FinalSampling, axis = 0)
|
|
130
|
-
return CellTypeRatioResult, CellTypeRatioResultFinal
|
|
136
|
+
return CellTypeRatioResult, CellTypeRatioResultFinal
|
|
131
137
|
def CalculateRatioOld(self):
|
|
132
138
|
CellTypeRatioResult = pandas.DataFrame([[]], columns = self.CellType, index = self.SampleName )
|
|
133
139
|
for Oneii in range(len(self.FlatSamplingResult)):
|
|
@@ -135,19 +141,19 @@ class CLASS_FOR_RUNRESULT(object):
|
|
|
135
141
|
SampleNameOne = self.SampleName[Oneii]
|
|
136
142
|
CellTypeRatioOne = list()
|
|
137
143
|
for ii in range(len(self.Celltype)):
|
|
138
|
-
|
|
139
|
-
CellTypeRatioResult.loc[SampleNameOne
|
|
144
|
+
CellTypeRatioOne.append((FlatSamplingOne[:, :, ii].sum(axis =1))[1])
|
|
145
|
+
CellTypeRatioResult.loc[SampleNameOne,:] = CellTypeRatioOne
|
|
140
146
|
return CellTypeRatioResult
|
|
141
147
|
def save_result(self, FilenameToSave, ResultIndex = 0):
|
|
142
148
|
DataCelltypeRatio = self.get_result( ResultIndex = ResultIndex )
|
|
143
149
|
(DataCelltypeRatio.T).to_excel(FilenameToSave, index = True, header = True)
|
|
144
150
|
def get_result(self, ResultIndex = 0):
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
+
if ResultIndex == 0:
|
|
152
|
+
return self.CellTypeRatioResult
|
|
153
|
+
elif ResultIndex == 1:
|
|
154
|
+
return self.CellTypeRatioResultFinal
|
|
155
|
+
else:
|
|
156
|
+
pass
|
|
151
157
|
@property
|
|
152
158
|
def CellTypeCateogryContent(self):
|
|
153
159
|
return self._CellTypeCateogryContent
|
|
@@ -156,6 +162,7 @@ class CLASS_FOR_RUNRESULT(object):
|
|
|
156
162
|
self._CellTypeCateogryContent = CellTypeCateogryContent
|
|
157
163
|
del self.FileCellTypeCategory
|
|
158
164
|
|
|
165
|
+
|
|
159
166
|
class CLASS_FOR_EMCEEPARAMETER(object):
|
|
160
167
|
def __init__(self, position, CellType = list(), nsteps = 1000,
|
|
161
168
|
nwalkers = 1,
|
|
@@ -241,4 +248,6 @@ class CLASS_ENVIRONMENT_CONFIG(object):
|
|
|
241
248
|
def __init__(self, Environment):
|
|
242
249
|
self.ThreadNum = Environment
|
|
243
250
|
|
|
251
|
+
|
|
244
252
|
|
|
253
|
+
#exmaples1 = CLASSONE(111)
|
|
@@ -58,8 +58,8 @@
|
|
|
58
58
|
RankedLayer: 3
|
|
59
59
|
RelatedNode:
|
|
60
60
|
HisParentNode: Lymplhoid Cells
|
|
61
|
-
HisChidNode: ['MZB', 'FOB', 'Breg', '
|
|
62
|
-
HisChidNode: ['
|
|
61
|
+
HisChidNode: ['MZB', 'FOB', 'Breg', 'GC_B', 'plasmablast']
|
|
62
|
+
HisChidNode: ['memoryB', 'plasma', 'exhaustedB', 'Bnaive']
|
|
63
63
|
Description: ...
|
|
64
64
|
|
|
65
65
|
#[NewNode]
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
RankedLayer: 3
|
|
69
69
|
RelatedNode:
|
|
70
70
|
HisParentNode: Lymplhoid Cells
|
|
71
|
-
HisChidNode: ['
|
|
71
|
+
HisChidNode: ['gdT', 'CD4T', 'CD8T','NKT']
|
|
72
72
|
Description: ...
|
|
73
73
|
|
|
74
74
|
#[NewNode]
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
RankedLayer: 3
|
|
96
96
|
RelatedNode:
|
|
97
97
|
HisParentNode: Myeloid Cells
|
|
98
|
-
HisChidNode: ['
|
|
98
|
+
HisChidNode: ['basophils', 'eosinophils', 'mast_cell', 'neutrophils']
|
|
99
99
|
Description: ...
|
|
100
100
|
|
|
101
101
|
#[NewNode]
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
RankedLayer: 3
|
|
114
114
|
RelatedNode:
|
|
115
115
|
HisParentNode: Myeloid Cells
|
|
116
|
-
HisChidNode: ['
|
|
116
|
+
HisChidNode: ['classical Monocytes', 'intermediate monocytes', 'nonclassical monocytes']
|
|
117
117
|
Description: ...
|
|
118
118
|
|
|
119
119
|
#[NewNode]
|
|
@@ -142,8 +142,8 @@
|
|
|
142
142
|
|
|
143
143
|
|
|
144
144
|
#[NewNode]
|
|
145
|
-
CellType:
|
|
146
|
-
AlsoKnownAs: ['
|
|
145
|
+
CellType: gdT
|
|
146
|
+
AlsoKnownAs: ['gd T', 'gamma delta T']
|
|
147
147
|
RankedLayer: 4
|
|
148
148
|
RelatedNode:
|
|
149
149
|
HisParentNode: T cells
|
|
@@ -156,9 +156,9 @@
|
|
|
156
156
|
RankedLayer: 4
|
|
157
157
|
RelatedNode:
|
|
158
158
|
HisParentNode: T cells
|
|
159
|
-
HisChidNode: ['
|
|
159
|
+
HisChidNode: ['Th1/Th17', 'CD4Tnaive', 'Th1','Th', 'Th2','Th0','Th9']
|
|
160
160
|
HisChidNode: ['Treg', 'Th17', 'Th22', 'Tfh','Tfr']
|
|
161
|
-
HisChidNode: ['CD4Tcm', 'CD4Temra', 'CD4Trm', 'CD4Tem']
|
|
161
|
+
HisChidNode: ['CD4Tcm', 'CD4Temra', 'CD4Trm', 'CD4Tem','memoryCD4T']
|
|
162
162
|
Description: ...
|
|
163
163
|
|
|
164
164
|
#[NewNode]
|
|
@@ -167,8 +167,8 @@
|
|
|
167
167
|
RankedLayer: 4
|
|
168
168
|
RelatedNode:
|
|
169
169
|
HisParentNode: T cells
|
|
170
|
-
HisChidNode: ['
|
|
171
|
-
HisChidNode: ['
|
|
170
|
+
HisChidNode: ['CD8aa', 'memory T', 'Tc', 'exhausted_T', 'MAIT']
|
|
171
|
+
HisChidNode: ['CD8Tnaive', 'CD8Tcm', 'CD8Tem', 'CD8Temra', 'CD8Trm','memoryCD8T']
|
|
172
172
|
Description: ...
|
|
173
173
|
|
|
174
174
|
#[NewNode]
|
|
@@ -177,7 +177,7 @@
|
|
|
177
177
|
RankedLayer: 4
|
|
178
178
|
RelatedNode:
|
|
179
179
|
HisParentNode: ILC
|
|
180
|
-
HisChidNode: ['
|
|
180
|
+
HisChidNode: ['cytotoxicNK', 'regulatoryNK']
|
|
181
181
|
Description: ...
|
|
182
182
|
|
|
183
183
|
#[NewNode]
|
|
@@ -186,15 +186,15 @@
|
|
|
186
186
|
|
|
187
187
|
#[NewNode]
|
|
188
188
|
CellType: classical monocyes
|
|
189
|
-
AlsoKnownAs: ['
|
|
189
|
+
AlsoKnownAs: ['CMonocyte']
|
|
190
190
|
|
|
191
191
|
#[NewNode]
|
|
192
192
|
CellType: intermediate monocyes
|
|
193
|
-
AlsoKnownAs: ['
|
|
193
|
+
AlsoKnownAs: ['IMonocyte']
|
|
194
194
|
|
|
195
195
|
#[NewNode]
|
|
196
196
|
CellType: nonclassical monocyes
|
|
197
|
-
AlsoKnownAs: ['
|
|
197
|
+
AlsoKnownAs: ['NMonocyte']
|
|
198
198
|
|
|
199
199
|
|
|
200
200
|
#[NewNode]
|
|
File without changes
|
{immucellai2-2.1.24 → immucellai2-2.1.25}/immucellai2/myconfig/reference_normalCelltypes.txt
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
Bnaive Breg CD4Tcm CD4Tem CD4Temra CD4Tnaive CD4Trm CD8Tcm CD8Tem CD8Temra CD8Tnaive CD8Trm CMonocyte FOB GC_B ILC1 ILC2 ILC3 IMonocyte Langerhans M0 M2 M1 MAIT MZB NKT NMonocyte Tc Tfh Th1 Th1/Th17 Th17 Th2 Tr1 Treg basophils cDC1 cDC2 cytotoxicNK eosinophils exhaustedB exhausted_T gdT mast_cell memoryB monoDC neutrophils pDC plasma plasmablast regulatoryNK
|
|
2
2
|
5S_rRNA 3.72288814625436 3.9839937277119 1.04242543528017 1.10166388743374 0.262488492500141 2.88442409468091 0 3.30505460913788 1.45668126858648 3.52551723641445 2.33293862772959 0.375938524543258 1.52075220597206 0.53956901678129 1.14602167759865 0.648102507997582 2.07420233648288 3.61611516932655 1.55950430705335 0.467424934673458 0.291947100896851 0.22030068960234 0.134254802991306 0.848662289189787 0.944633890126093 1.53743580579717 1.84858717816614 0.526258168262494 2.42911337811475 2.78786344420041 2.09601566178111 2.07881195299172 1.39542673326364 1.3598615912259 2.87883993797047 2.66510105106112 0.78799772271775 0.594872868455309 2.06158466154722 0 1.347781563304 0.297028643797706 0.749424409087233 1.61335777803813 2.09866985018597 0.734770517655795 1.26902966694485 4.1043228059796 0.184496474993528 0.449509458267856 2.05754437374052
|
|
3
3
|
5_8S_rRNA 101.778179517657 0.0463120820428233 0 0.0496320942187055 0.265334278384527 0.860297885120605 0 6.25571737372557 5.13478501586834 0.415958809032976 0.79772882086214 0 0.0304645464561831 0.334650831196325 0.00921571406148335 0 0 0 0 0 0.0128361639986559 0.0281038018431943 0 0.0543925389724701 0 0 0 0 0.147384211618789 0.262500332744139 0 0.222284293889944 0.269170643471795 0 0.514434164711424 0 0 0.0234670992913785 0.191980797126382 0.0817242103291416 0 0.839573510430039 0.0351727765855236 0.177577371480421 289.739908229461 0.00377841407068054 0.0549230277282921 0 0.00657589261577782 0 0
|
|
4
4
|
7SK 0.412388345004592 0.0663967103450191 0.182523114342318 0.207720273509821 0.514981680258264 0.521358838337904 0.460635430456313 1.00809400229153 1.12585366118991 0.56793244714343 0.2720010973473 0.815221481921778 0.17309616176035 0.0968227096452869 0.0144270543501783 0.204828258784804 0.00988163659248495 0.146042989572289 0.00727501711135191 0 0.00246636867612614 0.0159919858772734 0.00563765152325374 0.127323629110979 0 0.103696656575346 0.0304256600508641 0.0150509509702144 0.908954887880856 0.291518944612427 0 0.0849652097172878 0.0916391005871732 0.0503021990514254 0.705293673449258 0.380813553028531 0.0224173017522048 0.0179368881616202 0.0772749331826404 0.372073616748534 0 0.067085881126663 0.0405615798133645 0.206343302300748 0.00592984431685868 0.0156476955683151 0.349801575252531 0.0373479564796323 0.029113861512623 0.0122842568022437 0.301372936346232
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
Bnaive Breg CD4Tcm CD4Tem CD4Temra CD4Tnaive CD4Trm CD8Tcm CD8Tem CD8Temra CD8Tnaive CD8Trm CMonocyte FOB GC_B ILC1 ILC2 ILC3 IMonocyte Langerhans M0 M2 M1 MAIT MDSCs MZB NKT NMonocyte TAM Tc Tfh Th1 Th1/Th17 Th17 Th2 Tr1 Treg basophils cDC1 cDC2 cytotoxicNK eosinophils exhaustedB exhausted_T gdT mast_cell memoryB monoDC neutrophils pDC plasma plasmablast regulatoryNK
|
|
2
2
|
5S_rRNA 3.72288814625436 3.9839937277119 1.04242543528017 1.10166388743374 0.262488492500141 2.88442409468091 0 3.30505460913788 1.45668126858648 3.52551723641445 2.33293862772959 0.375938524543258 1.52075220597206 0.53956901678129 1.14602167759865 0.648102507997582 2.07420233648288 3.61611516932655 1.55950430705335 0.467424934673458 0.291947100896851 0.22030068960234 0.134254802991306 0.848662289189787 3.56282877292757 0.944633890126093 1.53743580579717 1.84858717816614 0.179985792652513 0.526258168262494 2.42911337811475 2.78786344420041 2.09601566178111 2.07881195299172 1.39542673326364 1.3598615912259 2.87883993797047 2.66510105106112 0.78799772271775 0.594872868455309 2.06158466154722 0 1.347781563304 0.297028643797706 0.749424409087233 1.61335777803813 2.09866985018597 0.734770517655795 1.26902966694485 4.1043228059796 0.184496474993528 0.449509458267856 2.05754437374052
|
|
3
3
|
5_8S_rRNA 101.778179517657 0.0463120820428233 0 0.0496320942187055 0.265334278384527 0.860297885120605 0 6.25571737372557 5.13478501586834 0.415958809032976 0.79772882086214 0 0.0304645464561831 0.334650831196325 0.00921571406148335 0 0 0 0 0 0.0128361639986559 0.0281038018431943 0 0.0543925389724701 0.148570234219534 0 0 0 0.00673730545389831 0 0.147384211618789 0.262500332744139 0 0.222284293889944 0.269170643471795 0 0.514434164711424 0 0 0.0234670992913785 0.191980797126382 0.0817242103291416 0 0.839573510430039 0.0351727765855236 0.177577371480421 289.739908229461 0.00377841407068054 0.0549230277282921 0 0.00657589261577782 0 0
|
|
4
4
|
7SK 0.412388345004592 0.0663967103450191 0.182523114342318 0.207720273509821 0.514981680258264 0.521358838337904 0.460635430456313 1.00809400229153 1.12585366118991 0.56793244714343 0.2720010973473 0.815221481921778 0.17309616176035 0.0968227096452869 0.0144270543501783 0.204828258784804 0.00988163659248495 0.146042989572289 0.00727501711135191 0 0.00246636867612614 0.0159919858772734 0.00563765152325374 0.127323629110979 0.285124375928072 0 0.103696656575346 0.0304256600508641 0.00348914401853447 0.0150509509702144 0.908954887880856 0.291518944612427 0 0.0849652097172878 0.0916391005871732 0.0503021990514254 0.705293673449258 0.380813553028531 0.0224173017522048 0.0179368881616202 0.0772749331826404 0.372073616748534 0 0.067085881126663 0.0405615798133645 0.206343302300748 0.00592984431685868 0.0156476955683151 0.349801575252531 0.0373479564796323 0.029113861512623 0.0122842568022437 0.301372936346232
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|