Source code for immuneML.simulation.signal_implanting_strategy.SignalImplantingStrategy

# quality: gold

import abc
import random
from pathlib import Path

from immuneML.data_model.receptor.receptor_sequence.ReceptorSequence import ReceptorSequence
from immuneML.data_model.repertoire.Repertoire import Repertoire
from immuneML.simulation.sequence_implanting.SequenceImplantingStrategy import SequenceImplantingStrategy
from immuneML.simulation.signal_implanting_strategy.ImplantingComputation import ImplantingComputation


[docs] class SignalImplantingStrategy(metaclass=abc.ABCMeta): def __init__(self, implanting: SequenceImplantingStrategy = None, sequence_position_weights: dict = None, implanting_computation: ImplantingComputation = None): self.sequence_implanting_strategy = implanting self.sequence_position_weights = sequence_position_weights self.compute_implanting = implanting_computation
[docs] @abc.abstractmethod def implant_in_repertoire(self, repertoire: Repertoire, repertoire_implanting_rate: float, signal, path: Path): pass
[docs] def implant_in_sequence(self, sequence: ReceptorSequence, signal, motif=None, chain=None) -> ReceptorSequence: assert self.sequence_implanting_strategy is not None, \ "SignalImplanting: set SequenceImplantingStrategy in SignalImplanting object before calling implant_in_sequence method." if motif is None: motif = random.choice(signal.motifs) motif_instance = motif.instantiate_motif(chain) new_sequence = self.sequence_implanting_strategy.implant(sequence=sequence, signal={"signal_id": signal.id, "motif_id": motif.identifier, "motif_instance": motif_instance}, sequence_position_weights=self.sequence_position_weights) return new_sequence
[docs] @abc.abstractmethod def implant_in_receptor(self, receptor, signal, is_noise: bool): pass