Source code for dae.effect_annotation.effect_checkers.promoter
from typing import Optional
from dae.genomic_resources.gene_models import TranscriptModel
from ..effect import EffectFactory
from ..variant import Variant
from .effect_checker import AnnotationEffect, AnnotationRequest, EffectChecker
[docs]class PromoterEffectChecker(EffectChecker):
"""Promoter effect checker class."""
[docs] def create_effect(
self, transcript_model: TranscriptModel,
) -> AnnotationEffect:
return EffectFactory.create_effect_with_tm(
"promoter", transcript_model)
[docs] def create_positive_strand_effect(
self, transcript_model: TranscriptModel,
variant: Variant,
) -> AnnotationEffect:
"""Create a positive strand promoter effect."""
effect = self.create_effect(transcript_model)
effect.dist_from_5utr = (
transcript_model.exons[0].start - variant.ref_position_last
)
return effect
[docs] def create_negative_strand_effect(
self, transcript_model: TranscriptModel, variant: Variant,
) -> AnnotationEffect:
effect = self.create_effect(transcript_model)
effect.dist_from_5utr = \
variant.position - transcript_model.exons[-1].stop
return effect
[docs] def get_effect(
self, request: AnnotationRequest,
) -> Optional[AnnotationEffect]:
if request.promoter_len == 0:
return None
if (
request.variant.position < request.transcript_model.exons[0].start
and request.transcript_model.strand == "+"
and request.variant.ref_position_last
>= request.transcript_model.exons[0].start
- request.promoter_len
):
return self.create_positive_strand_effect(
request.transcript_model, request.variant,
)
if (
request.variant.position > request.transcript_model.exons[-1].stop
and request.transcript_model.strand == "-"
and request.variant.position
<= request.transcript_model.exons[-1].stop
+ request.promoter_len
):
return self.create_negative_strand_effect(
request.transcript_model, request.variant,
)
return None