def write_head(self): with open(self.__outvcf, 'w') as fi: ##header fi.write("{}".format(Read.Readvcf(self.__invcf).header)) #samples行 samples = Read.Readvcf(self.__invcf).samples.split('|') newsamples = [] for group_name in self.__grp_dict: for i in self.__grp_dict[group_name]['index']: newsamples.append(samples[i]) fi.write( "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\tFORMAT\t{}\n". format("\t".join(newsamples)))
def main(self): if not self.__invcf: print('Use --help for command line help') return try: os.makedirs(args.work_dir) except: pass #print ('%s exists' %(args.work_dir)) self.get_group() self.write_head() low_dp, high_dp = self.__depth.split(',') vcfinfo = Read.Readvcf(self.__invcf).extract #pool = mp.Pool(1) #启动多线程池 for each in vcfinfo: self.run_filter(each, self.__grp_dict, low_dp, high_dp) #pool.apply_async(self.run_filter, args=(each, self.__grp_dict, low_dp, high_dp))#函数写入到多线程池 """ print('Waiting for all subprocesses done...') pool.close() pool.join() print('All subprocesses done.') pool.terminate() """ print("低/高深度标记次数: {}".format(self.__total_dp_num)) print("Homogeneous标记次数: {}".format(self.__total_homogeneous_num))
def __init__(self, invcf, grp_dict, grp_name="", samples_lst=[]): self.invcf = invcf self.all_samples_lst = Read.Readvcf(self.invcf).samples.split('|') self.grp_dict = grp_dict if grp_name: self.grp_name = grp_name else: self.grp_name = 'All' if len(samples_lst) > 1: self.samples_lst = samples_lst else: self.samples_lst = self.all_samples_lst self.handle_grp()