diff --git a/tools/t7.py b/tools/t7.py index e08904e..36cc3f8 100644 --- a/tools/t7.py +++ b/tools/t7.py @@ -35,6 +35,8 @@ class AutoLayout: # 记录每个芯片数量大小 self.chip_size = dict() + # 含N端芯片数量大小 + self.chip_size_N = dict() # 记录芯片barcode, i7, i5 barcode信息 self.chip_barcode_recode = defaultdict(set) @@ -285,6 +287,10 @@ class AutoLayout: if newer: self.chip_size[chipname] = library_data['size'] + self.chip_size_N[chipname] = 0 + if 'N' in library_data['data'][0]['barcode']: + # print(library_data['data'][0]['barcode']) + self.chip_size_N[chipname] = library_data['size'] # if library_data['classification'] in ['扩增子', '不平衡文库', '单细胞文库以及甲基化']: if library_data['is_balance_lib'] == '否': self.chip_speciallib_size[chipname] = library_data['size'] @@ -313,6 +319,10 @@ class AutoLayout: if '华大' in library_data['classification']: self.chip_speciallib_huada_size[chipname] += library_data['size'] + if 'N' in library_data['data'][0]['barcode']: + # print(library_data['data'][0]['barcode']) + self.chip_size_N[chipname] += library_data['size'] + def use_rule(self, chipname, classfication): may_classfic = set(self.rule[self.rule['c1'] == classfication]['c2']) if self.chip_customer[chipname].intersection(may_classfic): @@ -331,14 +341,19 @@ class AutoLayout: 约束条件 """ size = library_data['size'] + size_N = 0 + if 'N' in library_data['data'][0]['barcode']: + size_N = library_data['size'] classification = library_data['classification'] customer = library_data['customer'] is_balance_lib = library_data['is_balance_lib'] + library = library_data['library'] # 芯片大小不能超过设定限制 sizelimit = True if self.chip_size[chipname] + size > self.data_limit: sizelimit = False + # print(chipname, library, '芯片大小不能超过设定限制') # barcode有重复 notrepeatbarcode = True @@ -348,27 +363,32 @@ class AutoLayout: self.chip_barcode_recode[chipname].intersection( {item['i5'] + 'N' * 8 for item in library_data['data']}): notrepeatbarcode = False + # print(chipname, library, 'barcode有重复') # 互斥的文库 exclusive_classific = True if self.use_rule(chipname, classification): exclusive_classific = False + # print(chipname, library, '互斥的文库') # 互斥的用户 exclusive_customer = True if self.use_rule_exclusive_customer(chipname, customer): exclusive_customer = False + # print(chipname, library, '互斥的用户') # 不平衡文库大于250G 不能添加 splibrary = True if is_balance_lib == '否' and self.chip_speciallib_size[chipname] + size > 250: splibrary = False + # print(chipname, library, '不平衡文库大于250G') # 甲基化文库不能大于250G # 甲基化更改成100G spmethylibrary = True if is_balance_lib == '甲基化' and self.chip_methylib_size[chipname] + size > 100: spmethylibrary = False + # print(chipname, library, '甲基化文库不能大于100G') # 不使用不平衡文库的判断 if not self.is_use_balance: @@ -384,11 +404,18 @@ class AutoLayout: ratio_sites, is_not_balance_list = self.count_barcode_radio(current_data) if is_not_balance_list: base_balance = False + # print(chipname, library, '碱基不平衡') + + # 含N端的数据量不超过 上面设定碱基不平衡的900G的一半 + sizelimit_N = True + if self.chip_size_N[chipname] + size_N > 450: + sizelimit_N = False # 华大的文库不能超过限制的一半, 华大的数据就不能再加 use_huada = True if (self.chip_speciallib_huada_size[chipname] > self.data_limit / 2) and ('华大' in classification): use_huada = False + # print(chipname, library, '华大的文库不能超过限制的一半') # 开启i5或者i7 if max_barcode != 'all': @@ -425,7 +452,8 @@ class AutoLayout: base_balance and \ spmethylibrary and \ use_huada and \ - notrepeatsublib: + notrepeatsublib and \ + sizelimit_N: return True return False