Source code for immuneML.simulation.signal_implanting_strategy.ReceptorImplanting

import random

from immuneML.data_model.repertoire.Repertoire import Repertoire
from immuneML.simulation.signal_implanting_strategy.SignalImplantingStrategy import SignalImplantingStrategy


[docs]class ReceptorImplanting(SignalImplantingStrategy): """ This class represents a :py:obj:`~immuneML.simulation.signal_implanting_strategy.SignalImplantingStrategy.SignalImplantingStrategy` where signals will be implanted in both chains of immune receptors. This class should be used only when simulating paired chain data. Arguments: implanting: name of the implanting strategy, here Receptor sequence_position_weights (dict): A dictionary describing the relative weights for implanting a signal at each given IMGT position in the receptor sequence. If sequence_position_weights are not set, then SequenceImplantingStrategy will make all of the positions equally likely for each receptor sequence. YAML specification: .. indent with spaces .. code-block:: yaml motifs: my_motif: ... signals: my_signal: motifs: - my_motif - ... implanting: Receptor sequence_position_weights: 109: 1 110: 2 111: 5 112: 1 """
[docs] def implant_in_receptor(self, receptor, signal, is_noise: bool): new_receptor = receptor.clone() motif = random.choice(signal.motifs) sequence1 = self.implant_in_sequence(getattr(new_receptor, motif.name_chain1.name.lower()), signal, motif, motif.name_chain1) sequence2 = self.implant_in_sequence(getattr(new_receptor, motif.name_chain2.name.lower()), signal, motif, motif.name_chain2) setattr(new_receptor, motif.name_chain1.name.lower(), sequence1) setattr(new_receptor, motif.name_chain2.name.lower(), sequence2) new_receptor.metadata[signal.id] = True if not is_noise else False return new_receptor
[docs] def implant_in_repertoire(self, repertoire: Repertoire, repertoire_implanting_rate: float, signal, path): raise RuntimeError("ReceptorImplanting was called on a repertoire object. Check the simulation parameters.")