def try_to_combine(self, irandom): """ Create a recombination event and write it to disk <irandom> is used as the seed for the myriad random number calls. If combine() is called with the same <irandom>, it will find the same event, i.e. it should be a random number, not just a seed """ if self.args.debug: print 'combine (seed %d)' % irandom numpy.random.seed(irandom) random.seed(irandom) reco_event = RecombinationEvent(self.glfo) self.choose_vdj_combo(reco_event) self.erode_and_insert(reco_event) if self.args.debug: print ' joining eroded seqs' print ' v: %s' % reco_event.eroded_seqs['v'] print ' insert: %s' % reco_event.insertions['vd'] print ' d: %s' % reco_event.eroded_seqs['d'] print ' insert: %s' % reco_event.insertions['dj'] print ' j: %s' % reco_event.eroded_seqs['j'] reco_event.recombined_seq = reco_event.eroded_seqs['v'] + reco_event.insertions['vd'] + reco_event.eroded_seqs['d'] + reco_event.insertions['dj'] + reco_event.eroded_seqs['j'] codons_ok = reco_event.set_final_cyst_tryp_positions(debug=self.args.debug) if not codons_ok: return False self.add_mutants(reco_event, irandom) # toss a bunch of clones: add point mutations if self.args.debug: reco_event.print_event() # write output to csv reco_event.write_event(self.outfname, irandom=irandom) return True
def try_to_combine(self, irandom): """ Create a recombination event and write it to disk <irandom> is used as the seed for the myriad random number calls. If combine() is called with the same <irandom>, it will find the same event, i.e. it should be a random number, not just a seed """ if self.args.debug: print 'combine (seed %d)' % irandom numpy.random.seed(irandom) random.seed(irandom) reco_event = RecombinationEvent(self.glfo) self.choose_vdj_combo(reco_event) self.erode_and_insert(reco_event) if self.args.debug: print ' joining eroded seqs' print ' v: %s' % reco_event.eroded_seqs['v'] print ' insert: %s' % reco_event.insertions['vd'] print ' d: %s' % reco_event.eroded_seqs['d'] print ' insert: %s' % reco_event.insertions['dj'] print ' j: %s' % reco_event.eroded_seqs['j'] reco_event.recombined_seq = reco_event.eroded_seqs['v'] + reco_event.insertions['vd'] + reco_event.eroded_seqs['d'] + reco_event.insertions['dj'] + reco_event.eroded_seqs['j'] reco_event.set_final_codon_positions() # set the original conserved codon words, so we can revert them if they get mutated NOTE we do it here, *after* setting the full recombined sequence, so the germline Vs that don't extend through the cysteine don't screw us over reco_event.unmutated_codons = {} for region, codon in utils.conserved_codons[self.args.chain].items(): fpos = reco_event.final_codon_positions[region] original_codon = reco_event.recombined_seq[fpos : fpos + 3] reco_event.unmutated_codons[region] = reco_event.recombined_seq[fpos : fpos + 3] # print fpos, original_codon, utils.codon_ok(codon, reco_event.recombined_seq, fpos) codons_ok = utils.both_codons_ok(self.glfo['chain'], reco_event.recombined_seq, reco_event.final_codon_positions, extra_str=' ', debug=self.args.debug) if not codons_ok: if self.args.rearrange_from_scratch and self.args.generate_germline_set: # if you let it try more than once, it screws up the desired allele prevalence ratios raise Exception('arg') return False in_frame = reco_event.cdr3_length % 3 == 0 if self.args.rearrange_from_scratch and not in_frame: raise Exception('arg 2') # if you let it try more than once, it screws up the desired allele prevalence ratios return False self.add_mutants(reco_event, irandom) # toss a bunch of clones: add point mutations if self.args.debug: reco_event.print_event() # write output to csv reco_event.write_event(self.outfname, irandom=irandom) return True
def combine(self, irandom): """ Create a recombination event and write it to disk <irandom> is used as the seed for the myriad random number calls. If combine() is called with the same <irandom>, it will find the same event, i.e. it should be a random number, not just a seed """ if self.args.debug: print 'combine (seed %d)' % irandom numpy.random.seed(irandom) random.seed(irandom) reco_event = RecombinationEvent(self.all_seqs) self.choose_vdj_combo(reco_event) self.erode_and_insert(reco_event) if self.args.debug: print ' joining eroded seqs' print ' v: %s' % reco_event.eroded_seqs['v'] print ' insert: %s' % reco_event.insertions['vd'] print ' d: %s' % reco_event.eroded_seqs['d'] print ' insert: %s' % reco_event.insertions['dj'] print ' j: %s' % reco_event.eroded_seqs['j'] reco_event.recombined_seq = reco_event.eroded_seqs[ 'v'] + reco_event.insertions['vd'] + reco_event.eroded_seqs[ 'd'] + reco_event.insertions['dj'] + reco_event.eroded_seqs['j'] try: reco_event.set_final_cyst_tryp_positions( total_length_from_right=self.total_length_from_right, debug=self.args.debug) except AssertionError: print 'ERROR bad conserved codos, what the hell?' return False if self.args.naivety == 'M': self.add_mutants( reco_event, irandom) # toss a bunch of clones: add point mutations else: reco_event.final_seqs.append(reco_event.recombined_seq) if self.args.debug: reco_event.print_event(self.total_length_from_right) # write output to csv reco_event.write_event(self.outfname, self.total_length_from_right, irandom=irandom) return True
def combine(self, irandom): """ Create a recombination event and write it to disk <irandom> is used as the seed for the myriad random number calls. If combine() is called with the same <irandom>, it will find the same event, i.e. it should be a random number, not just a seed """ if self.args.debug: print 'combine (seed %d)' % irandom numpy.random.seed(irandom) random.seed(irandom) reco_event = RecombinationEvent(self.all_seqs) self.choose_vdj_combo(reco_event) self.erode_and_insert(reco_event) if self.args.debug: print ' joining eroded seqs' print ' v: %s' % reco_event.eroded_seqs['v'] print ' insert: %s' % reco_event.insertions['vd'] print ' d: %s' % reco_event.eroded_seqs['d'] print ' insert: %s' % reco_event.insertions['dj'] print ' j: %s' % reco_event.eroded_seqs['j'] reco_event.recombined_seq = reco_event.eroded_seqs['v'] + reco_event.insertions['vd'] + reco_event.eroded_seqs['d'] + reco_event.insertions['dj'] + reco_event.eroded_seqs['j'] try: reco_event.set_final_cyst_tryp_positions(total_length_from_right=self.total_length_from_right, debug=self.args.debug) except AssertionError: print 'ERROR bad conserved codos, what the hell?' return False if self.args.naivety == 'M': self.add_mutants(reco_event, irandom) # toss a bunch of clones: add point mutations else: reco_event.final_seqs.append(reco_event.recombined_seq) if self.args.debug: reco_event.print_event(self.total_length_from_right) # write output to csv reco_event.write_event(self.outfname, self.total_length_from_right, irandom=irandom) return True
def try_to_combine(self, irandom): """ Create a recombination event and write it to disk <irandom> is used as the seed for the myriad random number calls. If combine() is called with the same <irandom>, it will find the same event, i.e. it should be a random number, not just a seed """ if self.args.debug: print 'combine (seed %d)' % irandom numpy.random.seed(irandom) random.seed(irandom) reco_event = RecombinationEvent(self.glfo) self.choose_vdj_combo(reco_event) self.erode_and_insert(reco_event) if self.args.debug: print ' joining eroded seqs' print ' v: %s' % reco_event.eroded_seqs['v'] print ' insert: %s' % reco_event.insertions['vd'] print ' d: %s' % reco_event.eroded_seqs['d'] print ' insert: %s' % reco_event.insertions['dj'] print ' j: %s' % reco_event.eroded_seqs['j'] reco_event.recombined_seq = reco_event.eroded_seqs[ 'v'] + reco_event.insertions['vd'] + reco_event.eroded_seqs[ 'd'] + reco_event.insertions['dj'] + reco_event.eroded_seqs['j'] reco_event.set_final_codon_positions() # set the original conserved codon words, so we can revert them if they get mutated NOTE we do it here, *after* setting the full recombined sequence, so the germline Vs that don't extend through the cysteine don't screw us over reco_event.unmutated_codons = {} for region, codon in utils.conserved_codons[self.args.locus].items(): fpos = reco_event.final_codon_positions[region] original_codon = reco_event.recombined_seq[fpos:fpos + 3] reco_event.unmutated_codons[region] = reco_event.recombined_seq[ fpos:fpos + 3] # print fpos, original_codon, utils.codon_unmutated(codon, reco_event.recombined_seq, fpos) codons_ok = utils.both_codons_unmutated( self.glfo['locus'], reco_event.recombined_seq, reco_event.final_codon_positions, extra_str=' ', debug=self.args.debug) if not codons_ok: if self.args.rearrange_from_scratch and self.args.generate_germline_set: # if you let it try more than once, it screws up the desired allele prevalence ratios raise Exception('arg') return False in_frame = utils.in_frame( reco_event.recombined_seq, reco_event.final_codon_positions, '', reco_event.effective_erosions['v_5p'] ) # NOTE empty string is the fv insertion, which is hard coded to zero in event.py. I no longer recall the details of that decision, but I have a large amount of confidence that it's more sensible than it looks if self.args.rearrange_from_scratch and not in_frame: raise Exception( 'arg 2' ) # if you let it try more than once, it screws up the desired allele prevalence ratios return False self.add_mutants( reco_event, irandom) # toss a bunch of clones: add point mutations if self.args.debug: reco_event.print_event() # write output to csv reco_event.write_event(self.outfname, irandom=irandom) return True