immucellai2 2.1.24__py3-none-any.whl → 2.1.25__py3-none-any.whl

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.
@@ -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 # ʹ�� normalized_matrix ����״
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(np.random.multinomial(n=round(sp[g]), pvals=pvals))
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._random = np.random.mtrand.RandomState()
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
- EmceeParameters = None, referenceMatrix = None,
133
- SampleExpressionData = None, SampleName=None, MAPorMLE = ('MAP','MLE'), *args):
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
- def __init__(self, SampleName, SamplingResult, CellType):
153
- self.SampleName = SampleName
154
- self.CellTypeList = CellType
155
- self.ResultObjectOne = CLASS_FOR_RUNRESULT(
156
- SampleNameList = [ self.SampleName ] ,
157
- McmcSamplingResultList = np.array([ SamplingResult[0] ]) ,
158
- FlatSamplingResultList = np.array([ SamplingResult[1] ]) ,
159
- CellTypeList = CellType
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
- SampleNameList=SampleNameWhole,
184
- CellTypeList=CellTypeWhole,
185
- FileCellTypeCategory=FileCellTypeCategory,
186
- McmcSamplingResultList=McmcSamplingWhole,
187
- FlatSamplingResultList=FlatSamplingWhole,
188
- CellTypeRatioResult=CellTypeRatioResultWhole,
189
- CellTypeRatioResultFinal=CellTypeRatioResultFinalWhole)
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
- def MainRun(RunObject, seed = 42, MultithreadModule = 'joblib'):
192
- EnvironmentRun = RunObject.EnvironmentRun
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
- EmceeParameterCopy = RunObject.EmceeParameter.mycopy()
196
- CelltypesReferenceMatrix = RunObject.CelltypesReferenceMatrix
197
- SampleNameToIndex = {name: idx for idx, name in enumerate(RunObject.SampleList)}
198
- parameterlist = []
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
- EmceeParameterCopy,
204
- CelltypesReferenceMatrix,
205
- RunObject.SamplesBulkRNAseqExpression[SampleIndex], # ʹ��������������
206
- SampleName,
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
- try:
212
- MultiprocessingReturnValue = joblib.Parallel(n_jobs=int(EnvironmentRun.ThreadNum), backend='loky',verbose=0)(joblib.delayed(ThreadRunEachSamples)(*arg) for arg in parameterlist)
213
- except:
214
- print('error occurs while paralleling')
215
- finally:
216
- del parameterlist
217
- print('finished all!')
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
- try:
221
- MultiprocessingReturnValue = pool.starmap(ThreadRunEachSamples, parameterlist)
222
- except Exception as e:
223
- print(f'Error occurs while paralleling: {e}')
224
- finally:
225
- pool.close()
226
- pool.join()
227
- print('Finished all!')
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 = [MultiprocessesResult(
230
- SampleName = RunObject.SampleList[Sampleii],
231
- SamplingResult = MultiprocessingReturnValue[Sampleii],
232
- CellType=deepcopy(RunObject.CellType),
233
- ) for Sampleii in range(len(MultiprocessingReturnValue))],
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"): os.system("rm -rf 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 ObtainCellTypeCategory(CellTypeCateogry):
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 ObtainCellTypeCategory
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(cpus, threads): ", EnvironmentConfig)
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]
immucellai2/__init__.py CHANGED
@@ -1,7 +1,7 @@
1
- from .Deconvolution import MainRun # MainRun
2
- from .PrepareData import PrepareData # PrepareDate
3
- from .ObtainCategory import ExtractResult, SummaryCellRatio # ExtractResult()
4
- from .Drawplot import DrawPlotFunction1, DrawPlotFunction2 # visualization()
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 importlib.resources import path
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 importlib.resources import path
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)')
immucellai2/myclasses.py CHANGED
@@ -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
- if FlatSamplingResultOne.shape[1] == nCellType:
103
- return FlatSamplingResultOne / FlatSamplingResultOne.sum(axis=1)[:, None]
104
- elif FlatSamplingResultOne.shape[1] + 1 == nCellType:
105
- return numpy.column_stack((FlatSamplingResultOne, 1 - FlatSamplingResultOne.sum(axis=1)))
106
- def EmceeFunction2(self, FlatSamplingResultList):
107
- fshape = FlatSamplingResultList.shape
108
- nCellType = len(self.CellType)
109
- NewFlatSamplingResultList = numpy.zeros((fshape[0], fshape[1], nCellType))
110
- for sampleii in range(fshape[0]):
111
- FlatSamplingResultOne = FlatSamplingResultList[sampleii, :, :]
112
- NewFlatSamplingResultOne = self.optimized_calculation(FlatSamplingResultOne, nCellType)
113
- NewFlatSamplingResultList[sampleii, :, :] = NewFlatSamplingResultOne
114
- return NewFlatSamplingResultList
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
- CellTypeRatioOne.append((FlatSamplingOne[:, :, ii].sum(axis =1))[1])
139
- CellTypeRatioResult.loc[SampleNameOne,] = CellTypeRatioOne
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
- if ResultIndex == 0:
146
- return self.CellTypeRatioResult
147
- elif ResultIndex == 1:
148
- return self.CellTypeRatioResultFinal
149
- else:
150
- pass
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', 'GCB', 'PB']
62
- HisChidNode: ['MBC', 'PC', 'Bex', 'Bn']
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: ['γδT', 'CD4T', 'CD8T','NKT']
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: ['Basophil', 'Eosinophil', 'mastcell', 'Neutrophil']
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: ['cMo', 'intMo', 'ncMo']
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: γδT
146
- AlsoKnownAs: ['gdT', 'gamma delta T']
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: ['Th1_17','CD4Tcell', 'CD4Tn', 'Th1', 'Th2','Th0','Th9']
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: ['CD8Tcell', 'Tc', 'Tex', 'MAIT']
171
- HisChidNode: ['CD8Tn', 'CD8Tcm', 'CD8Tem', 'CD8Temra', 'CD8Trm']
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: ['cNK', 'NKreg']
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: ['cMo']
189
+ AlsoKnownAs: ['CMonocyte']
190
190
 
191
191
  #[NewNode]
192
192
  CellType: intermediate monocyes
193
- AlsoKnownAs: ['intMo']
193
+ AlsoKnownAs: ['IMonocyte']
194
194
 
195
195
  #[NewNode]
196
196
  CellType: nonclassical monocyes
197
- AlsoKnownAs: ['ncMo']
197
+ AlsoKnownAs: ['NMonocyte']
198
198
 
199
199
 
200
200
  #[NewNode]
File without changes
@@ -1,4 +1,4 @@
1
- Bn Breg CD4Tcm CD4Tem CD4Temra CD4Tn CD4Trm CD8Tcm CD8Tem CD8Temra CD8Tn CD8Trm cMo FOB GCB ILC1 ILC2 ILC3 intMo Langerhans M0 M2 M1 MAIT MZB NKT ncMo Tc Tfh Th1 Th1_17 Th17 Th2 Tr1 Treg Basophil cDC1 cDC2 cNK Eosinophil Bex Tex γδT mastcell MBC monoDC Neutrophil pDC PC PB NKreg
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
- Bn Breg CD4Tcm CD4Tem CD4Temra CD4Tn CD4Trm CD8Tcm CD8Tem CD8Temra CD8Tn CD8Trm cMo FOB GCB ILC1 ILC2 ILC3 intMo Langerhans M0 M2 M1 MAIT MDSC MZB NKT ncMo TAM Tc Tfh Th1 Th1_17 Th17 Th2 Tr1 Treg Basophil cDC1 cDC2 cNK Eosinophil Bex Tex γδT mastcell MBC monoDC Neutrophil pDC PC PB NKreg
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: immucellai2
3
- Version: 2.1.24
3
+ Version: 2.1.25
4
4
  Summary: A tool for immune cell type deconvolution
5
5
  Home-page: https://github.com/VyvyanYjm/ImmuCellAI2.0
6
6
  Author: YangJingmin
@@ -0,0 +1,16 @@
1
+ immucellai2/Deconvolution.py,sha256=8fYLWKHFf1qahY7qEt5nnsrju7S7kF9f2ch3YXaKQMU,12577
2
+ immucellai2/Drawplot.py,sha256=YnUleceEyim9SsTiU18mbAMcjOH9ovBXJW3pwXxA7as,5136
3
+ immucellai2/ObtainCategory.py,sha256=N1F_yUHoaIisnlms4aNNJ2UIzZDI2TIc0t7IRLtM7So,7008
4
+ immucellai2/PrepareData.py,sha256=WNE4BTzZ3nUhI-R87b0s5LX85PfeVU0WY0QSjzEsH5E,6398
5
+ immucellai2/Time.py,sha256=et3aAqyVDKwP5_tdGIwA6yxdXRbbYemc9wEaPHpQCck,572
6
+ immucellai2/__init__.py,sha256=jIuVtHxbMy7Pe_zj7-tlQe6bVyl5oJMRkYm4WR15THo,3053
7
+ immucellai2/myclasses.py,sha256=9Rgil00HX_RfOhvpdvUZDsvFi7RdIfXay4V3lRcQsQ8,12409
8
+ immucellai2/myconfig/Celltype.category,sha256=l_5vspGpyDbuaQ7QOLIQjSs4xb6x6_pvvtnP709CVzQ,5530
9
+ immucellai2/myconfig/MarkerUsedDeconvolution.txt,sha256=33gCFD1_Clis7NFaQTUHc5s7BXoN61jWgWPgjT-m0n0,60756
10
+ immucellai2/myconfig/reference_normalCelltypes.txt,sha256=zhKP5Z1TgVyB6ijIamjM1ETmuwQgRATofO-0ds89gP4,39107049
11
+ immucellai2/myconfig/reference_tumorCelltypes.txt,sha256=xYgjehHIXb5re20bmXeoqxfyvQmgpr4y-0ysCVnEeI8,40893156
12
+ immucellai2-2.1.25.dist-info/METADATA,sha256=qdbASaOR7nyCmgh7SwHiFokSZirMOx5uv6foXMchJFs,1662
13
+ immucellai2-2.1.25.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
14
+ immucellai2-2.1.25.dist-info/entry_points.txt,sha256=asskhaErD37JB_X_4TPB1itaIytWCU-RHFIyVGQ8Jbw,62
15
+ immucellai2-2.1.25.dist-info/top_level.txt,sha256=9r84YbXmTdnKZnK2OGrTsgYPFoSBdk4EkeieDg-7_DY,12
16
+ immucellai2-2.1.25.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.10.1)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,16 +0,0 @@
1
- immucellai2/Deconvolution.py,sha256=vmKUM9ddOBoAjz4vQ89H_iMklqRtQgjF2F54d8byFmw,10372
2
- immucellai2/Drawplot.py,sha256=YnUleceEyim9SsTiU18mbAMcjOH9ovBXJW3pwXxA7as,5136
3
- immucellai2/ObtainCategory.py,sha256=ZIZqVV0qoiftJKtflsFWCmTD4P5DjvkqbHry1X5Yuds,7008
4
- immucellai2/PrepareData.py,sha256=14Hwu9y2PnSEqoDrgGp9oxHvGt4hIj2lnJ1kwHkZptI,5932
5
- immucellai2/Time.py,sha256=et3aAqyVDKwP5_tdGIwA6yxdXRbbYemc9wEaPHpQCck,572
6
- immucellai2/__init__.py,sha256=QVe8ztJ3g2l7ml-hGbIZXg1A3DVS_YGLryCFjek_D2k,3043
7
- immucellai2/myclasses.py,sha256=ygruBkVKdEnhheQqE7JA8i7TyCLwpE7XLv9eLXOrd3A,12092
8
- immucellai2/myconfig/Celltype.category,sha256=Fu6k6dAPI5yf-fVMDB7MY2aKLnCiP6KiOpol2fEXO1Y,5372
9
- immucellai2/myconfig/MarkerUsedDeconvolution.txt,sha256=33gCFD1_Clis7NFaQTUHc5s7BXoN61jWgWPgjT-m0n0,60756
10
- immucellai2/myconfig/reference_normalCelltypes.txt,sha256=RxzrB9yl6OjDH59s5cdO3OkJehdB0zzZJDpBJle8peY,39106970
11
- immucellai2/myconfig/reference_tumorCelltypes.txt,sha256=vEMqLIQK57fF6YwL0J4vmkbTEtG6wQJGelUV9SfdF8I,40893076
12
- immucellai2-2.1.24.dist-info/METADATA,sha256=42Olgxj1uCjy-Hau5pkK65cqyqiiVHmRXGUHhcM0wcE,1662
13
- immucellai2-2.1.24.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
14
- immucellai2-2.1.24.dist-info/entry_points.txt,sha256=asskhaErD37JB_X_4TPB1itaIytWCU-RHFIyVGQ8Jbw,62
15
- immucellai2-2.1.24.dist-info/top_level.txt,sha256=9r84YbXmTdnKZnK2OGrTsgYPFoSBdk4EkeieDg-7_DY,12
16
- immucellai2-2.1.24.dist-info/RECORD,,