sub
id {
my
(
$self
) =
@_
;
my
@ids
=
$self
->each_DBLink;
my
$id
=
$ids
[0]
if
scalar
@ids
> 0;
return
$id
->database.
"::"
.
$id
->primary_id
if
$id
;
}
sub
add_Allele {
my
(
$self
,
$value
) =
@_
;
if
(
defined
$value
) {
if
( !
$value
->isa(
'Bio::Variation::Allele'
) ) {
my
$com
=
ref
$value
;
$self
->throw(
"Is not a Allele object but a [$com]"
);
return
0;
}
else
{
if
(
$self
->isa(
'Bio::Variation::AAChange'
) ) {
$value
->seq(
uc
$value
->seq)
if
$value
->seq;
}
else
{
$value
->seq(
lc
$value
->seq)
if
$value
->seq;
}
push
(@{
$self
->{
'alleles'
}},
$value
);
$self
->allele_mut(
$value
);
return
1;
}
}
else
{
return
0;
}
}
sub
each_Allele{
my
(
$self
,
@args
) =
@_
;
return
@{
$self
->{
'alleles'
}};
}
sub
isMutation {
my
(
$self
,
$value
) =
@_
;
if
(
defined
$value
) {
if
(
$value
) {
$self
->{
'isMutation'
} = 1;
}
else
{
$self
->{
'isMutation'
} = 0;
}
}
return
$self
->{
'isMutation'
};
}
sub
allele_ori {
my
(
$self
,
$value
) =
@_
;
if
(
defined
$value
) {
if
( !
ref
$value
|| !
$value
->isa(
'Bio::Variation::Allele'
)) {
$self
->throw(
"Value is not Bio::Variation::Allele but [$value]"
);
}
else
{
if
(
$self
->isa(
'Bio::Variation::AAChange'
) ) {
$value
->seq(
uc
$value
->seq)
if
$value
->seq;
}
else
{
$value
->seq(
lc
$value
->seq)
if
$value
->seq;
}
$self
->{
'allele_ori'
} =
$value
;
}
}
return
$self
->{
'allele_ori'
};
}
sub
allele_mut {
my
(
$self
,
$value
) =
@_
;
if
(
defined
$value
) {
if
( !
ref
$value
|| !
$value
->isa(
'Bio::Variation::Allele'
)) {
$self
->throw(
"Value is not Bio::Variation::Allele but [$value]"
);
}
else
{
if
(
$self
->isa(
'Bio::Variation::AAChange'
) ) {
$value
->seq(
uc
$value
->seq)
if
$value
->seq;
}
else
{
$value
->seq(
lc
$value
->seq)
if
$value
->seq;
}
$self
->{
'allele_mut'
} =
$value
;
}
}
return
$self
->{
'allele_mut'
};
}
sub
length
{
my
(
$self
,
$value
) =
@_
;
if
(
defined
$value
) {
$self
->{
'length'
} =
$value
;
}
if
( !
exists
$self
->{
'length'
} ) {
return
0;
}
return
$self
->{
'length'
};
}
sub
upStreamSeq {
my
(
$self
,
$value
) =
@_
;
if
(
defined
$value
) {
$self
->{
'upstreamseq'
} =
$value
;
}
return
$self
->{
'upstreamseq'
};
}
sub
dnStreamSeq {
my
(
$self
,
$value
) =
@_
;
if
(
defined
$value
) {
$self
->{
'dnstreamseq'
} =
$value
;
}
return
$self
->{
'dnstreamseq'
};
}
sub
label {
my
(
$self
,
$value
) =
@_
;
$self
->throw_not_implemented();
}
sub
status {
my
(
$self
,
$value
) =
@_
;
my
%status
= (
suspected
=> 1,
proven
=> 1
);
if
(
defined
$value
) {
$value
=
lc
$value
;
if
(
$status
{
$value
}) {
$self
->{
'status'
} =
$value
;
}
else
{
$self
->throw(
"$value is not valid status value!"
);
}
}
if
( !
exists
$self
->{
'status'
} ) {
return
"$self"
;
}
return
$self
->{
'status'
};
}
sub
proof {
my
(
$self
,
$value
) =
@_
;
my
%proof
= (
computed
=> 1,
experimental
=> 1
);
if
(
defined
$value
) {
$value
=
lc
$value
;
if
(
$proof
{
$value
}) {
$self
->{
'proof'
} =
$value
;
}
else
{
$self
->throw(
"$value is not valid proof value!"
);
}
}
return
$self
->{
'proof'
};
}
sub
region {
my
(
$self
,
$value
) =
@_
;
if
(
defined
$value
) {
$self
->{
'region'
} =
$value
;
}
return
$self
->{
'region'
};
}
sub
region_value {
my
(
$self
,
$value
) =
@_
;
if
(
defined
$value
) {
$self
->{
'region_value'
} =
$value
;
}
return
$self
->{
'region_value'
};
}
sub
region_dist {
my
(
$self
,
$value
) =
@_
;
if
(
defined
$value
) {
if
( not
$value
=~ /^[+-]?\d+$/ ) {
$self
->throw(
"[$value] for region_dist has to be an integer\n"
);
}
else
{
$self
->{
'region_dist'
} =
$value
;
}
}
return
$self
->{
'region_dist'
};
}
sub
numbering {
my
(
$self
,
$value
) =
@_
;
my
%numbering
= (
entry
=> 1,
coding
=> 1
);
if
(
defined
$value
) {
$value
=
lc
$value
;
if
(
$numbering
{
$value
}) {
$self
->{
'numbering'
} =
$value
;
}
else
{
$self
->throw(
"'$value' is not a valid for numbering!"
);
}
}
if
( !
exists
$self
->{
'numbering'
} ) {
return
"$self"
;
}
return
$self
->{
'numbering'
};
}
sub
mut_number {
my
(
$self
,
$value
) =
@_
;
if
(
defined
$value
) {
$self
->{
'mut_number'
} =
$value
;
}
unless
(
exists
$self
->{
'mut_number'
}) {
return
(
''
);
}
else
{
return
$self
->{
'mut_number'
};
}
}
sub
SeqDiff {
my
(
$self
,
$value
) =
@_
;
if
(
defined
$value
) {
if
( !
$value
->isa(
'Bio::Variation::SeqDiff'
) ) {
$self
->throw(
"Is not a Bio::Variation::SeqDiff object but a [$value]"
);
return
;
}
else
{
$self
->{
'seqDiff'
} =
$value
;
}
}
unless
(
exists
$self
->{
'seqDiff'
}) {
return
;
}
else
{
return
$self
->{
'seqDiff'
};
}
}
sub
add_DBLink{
my
(
$self
,
$com
) =
@_
;
if
(
$com
&& !
$com
->isa(
'Bio::Annotation::DBLink'
) ) {
$self
->throw(
"Is not a link object but a [$com]"
);
}
$com
&&
push
(@{
$self
->{
'link'
}},
$com
);
}
sub
each_DBLink{
my
(
$self
) =
@_
;
return
@{
$self
->{
'link'
}};
}
sub
restriction_changes {
my
(
$self
) =
@_
;
if
(not
$self
->{
're_changes'
}) {
my
%re
=
&_enzymes
;
if
(
$self
->isa(
'Bio::Variation::AAChange'
)) {
$self
->throw(
'Restriction enzymes do not bite polypeptides!'
);
}
$self
->
warn
(
'Upstream sequence is empty!'
)
if
$self
->upStreamSeq eq
''
;
$self
->
warn
(
'Downstream sequence is empty!'
)
if
$self
->dnStreamSeq eq
''
;
if
(
$self
->isa(
'Bio::Variation::RNAChange'
) and
$self
->DNAMutation and
$self
->upStreamSeq eq
$self
->DNAMutation->upStreamSeq and
$self
->dnStreamSeq eq
$self
->DNAMutation->dnStreamSeq and
$self
->DNAMutation->restriction_changes ne
''
) {
$self
->{
're_changes'
} =
$self
->DNAMutation->restriction_changes;
}
else
{
my
(
$le_dn
) = 15;
my
(
$le_up
) =
$le_dn
;
$le_dn
= CORE::
length
(
$self
->dnStreamSeq)
if
$le_dn
> CORE::
length
(
$self
->dnStreamSeq);
$le_up
= CORE::
length
(
$self
->upStreamSeq)
if
$le_up
> CORE::
length
(
$self
->upStreamSeq);
my
(
$oriseq
,
$mutseq
);
$oriseq
=
$mutseq
=
substr
(
$self
->upStreamSeq, -
$le_up
,
$le_up
);
$oriseq
.=
$self
->allele_ori->seq
if
$self
->allele_ori->seq;
$mutseq
.=
$self
->allele_mut->seq
if
$self
->allele_mut->seq;
$oriseq
.=
substr
(
$self
->dnStreamSeq, 0,
$le_dn
);
$mutseq
.=
substr
(
$self
->dnStreamSeq, 0,
$le_dn
);
my
$oriseq_rev
= _revcompl (
$oriseq
);
my
$mutseq_rev
= _revcompl (
$mutseq
);
my
$rec
=
''
;
foreach
my
$enz
(
sort
keys
(
%re
)) {
my
$site
=
$re
{
$enz
};
my
@ori
= (
$oriseq
=~ /
$site
/g);
my
@mut
= (
$mutseq
=~ /
$site
/g);
my
@ori_r
= (
$oriseq_rev
=~ /
$site
/g);
my
@mut_r
= (
$mutseq_rev
=~ /
$site
/g);
$rec
.=
'+'
.
$enz
.
", "
if
(
scalar
@ori
<
scalar
@mut
) or (
scalar
@ori_r
<
scalar
@mut_r
);
$rec
.=
'-'
.
$enz
.
", "
if
(
scalar
@ori
>
scalar
@mut
) or (
scalar
@ori_r
>
scalar
@mut_r
);
}
$rec
=
substr
(
$rec
, 0, CORE::
length
(
$rec
) - 2)
if
$rec
ne
''
;
$self
->{
're_changes'
} =
$rec
;
}
}
return
$self
->{
're_changes'
}
}
sub
_revcompl {
my
(
$seq
) =
shift
;
$seq
=
lc
$seq
;
$seq
=~
tr
/acgtrymkswhbvdnx/tgcayrkmswdvbhnx/;
return
CORE::
reverse
$seq
;
}
sub
_enzymes {
my
%enzymes
= (
'AarI'
=>
'cacctgc'
,
'AatII'
=>
'gacgtc'
,
'AccI'
=>
'gt[ac][gt]ac'
,
'AceIII'
=>
'cagctc'
,
'AciI'
=>
'ccgc'
,
'AclI'
=>
'aacgtt'
,
'AcyI'
=>
'g[ag]cg[ct]c'
,
'AflII'
=>
'cttaag'
,
'AflIII'
=>
'ac[ag][ct]gt'
,
'AgeI'
=>
'accggt'
,
'AhaIII'
=>
'tttaaa'
,
'AloI'
=>
'gaac[acgt][acgt][acgt][acgt][acgt][acgt]tcc'
,
'AluI'
=>
'agct'
,
'AlwNI'
=>
'cag[acgt][acgt][acgt]ctg'
,
'ApaBI'
=>
'gca[acgt][acgt][acgt][acgt][acgt]tgc'
,
'ApaI'
=>
'gggccc'
,
'ApaLI'
=>
'gtgcac'
,
'ApoI'
=>
'[ag]aatt[ct]'
,
'AscI'
=>
'ggcgcgcc'
,
'AsuI'
=>
'gg[acgt]cc'
,
'AsuII'
=>
'ttcgaa'
,
'AvaI'
=>
'c[ct]cg[ag]g'
,
'AvaII'
=>
'gg[at]cc'
,
'AvaIII'
=>
'atgcat'
,
'AvrII'
=>
'cctagg'
,
'BaeI'
=>
'ac[acgt][acgt][acgt][acgt]gta[ct]c'
,
'BalI'
=>
'tggcca'
,
'BamHI'
=>
'ggatcc'
,
'BbvCI'
=>
'cctcagc'
,
'BbvI'
=>
'gcagc'
,
'BbvII'
=>
'gaagac'
,
'BccI'
=>
'ccatc'
,
'Bce83I'
=>
'cttgag'
,
'BcefI'
=>
'acggc'
,
'BcgI'
=>
'cga[acgt][acgt][acgt][acgt][acgt][acgt]tgc'
,
'BciVI'
=>
'gtatcc'
,
'BclI'
=>
'tgatca'
,
'BetI'
=>
'[at]ccgg[at]'
,
'BfiI'
=>
'actggg'
,
'BglI'
=>
'gcc[acgt][acgt][acgt][acgt][acgt]ggc'
,
'BglII'
=>
'agatct'
,
'BinI'
=>
'ggatc'
,
'BmgI'
=>
'g[gt]gccc'
,
'BplI'
=>
'gag[acgt][acgt][acgt][acgt][acgt]ctc'
,
'Bpu10I'
=>
'cct[acgt]agc'
,
'BsaAI'
=>
'[ct]acgt[ag]'
,
'BsaBI'
=>
'gat[acgt][acgt][acgt][acgt]atc'
,
'BsaXI'
=>
'ac[acgt][acgt][acgt][acgt][acgt]ctcc'
,
'BsbI'
=>
'caacac'
,
'BscGI'
=>
'cccgt'
,
'BseMII'
=>
'ctcag'
,
'BsePI'
=>
'gcgcgc'
,
'BseRI'
=>
'gaggag'
,
'BseSI'
=>
'g[gt]gc[ac]c'
,
'BsgI'
=>
'gtgcag'
,
'BsiI'
=>
'cacgag'
,
'BsiYI'
=>
'cc[acgt][acgt][acgt][acgt][acgt][acgt][acgt]gg'
,
'BsmAI'
=>
'gtctc'
,
'BsmI'
=>
'gaatgc'
,
'Bsp1407I'
=>
'tgtaca'
,
'Bsp24I'
=>
'gac[acgt][acgt][acgt][acgt][acgt][acgt]tgg'
,
'BspGI'
=>
'ctggac'
,
'BspHI'
=>
'tcatga'
,
'BspLU11I'
=>
'acatgt'
,
'BspMI'
=>
'acctgc'
,
'BspMII'
=>
'tccgga'
,
'BsrBI'
=>
'ccgctc'
,
'BsrDI'
=>
'gcaatg'
,
'BsrI'
=>
'actgg'
,
'BstEII'
=>
'ggt[acgt]acc'
,
'BstXI'
=>
'cca[acgt][acgt][acgt][acgt][acgt][acgt]tgg'
,
'BtrI'
=>
'cacgtc'
,
'BtsI'
=>
'gcagtg'
,
'Cac8I'
=>
'gc[acgt][acgt]gc'
,
'CauII'
=>
'cc[cg]gg'
,
'Cfr10I'
=>
'[ag]ccgg[ct]'
,
'CfrI'
=>
'[ct]ggcc[ag]'
,
'CjeI'
=>
'cca[acgt][acgt][acgt][acgt][acgt][acgt]gt'
,
'CjePI'
=>
'cca[acgt][acgt][acgt][acgt][acgt][acgt][acgt]tc'
,
'ClaI'
=>
'atcgat'
,
'CviJI'
=>
'[ag]gc[ct]'
,
'CviRI'
=>
'tgca'
,
'DdeI'
=>
'ct[acgt]ag'
,
'DpnI'
=>
'gatc'
,
'DraII'
=>
'[ag]gg[acgt]cc[ct]'
,
'DraIII'
=>
'cac[acgt][acgt][acgt]gtg'
,
'DrdI'
=>
'gac[acgt][acgt][acgt][acgt][acgt][acgt]gtc'
,
'DrdII'
=>
'gaacca'
,
'DsaI'
=>
'cc[ag][ct]gg'
,
'Eam1105I'
=>
'gac[acgt][acgt][acgt][acgt][acgt]gtc'
,
'EciI'
=>
'ggcgga'
,
'Eco31I'
=>
'ggtctc'
,
'Eco47III'
=>
'agcgct'
,
'Eco57I'
=>
'ctgaag'
,
'EcoNI'
=>
'cct[acgt][acgt][acgt][acgt][acgt]agg'
,
'EcoRI'
=>
'gaattc'
,
'EcoRII'
=>
'cc[at]gg'
,
'EcoRV'
=>
'gatatc'
,
'Esp3I'
=>
'cgtctc'
,
'EspI'
=>
'gct[acgt]agc'
,
'FauI'
=>
'cccgc'
,
'FinI'
=>
'gggac'
,
'Fnu4HI'
=>
'gc[acgt]gc'
,
'FnuDII'
=>
'cgcg'
,
'FokI'
=>
'ggatg'
,
'FseI'
=>
'ggccggcc'
,
'GdiII'
=>
'cggcc[ag]'
,
'GsuI'
=>
'ctggag'
,
'HaeI'
=>
'[at]ggcc[at]'
,
'HaeII'
=>
'[ag]gcgc[ct]'
,
'HaeIII'
=>
'ggcc'
,
'HaeIV'
=>
'ga[ct][acgt][acgt][acgt][acgt][acgt][ag]tc'
,
'HgaI'
=>
'gacgc'
,
'HgiAI'
=>
'g[at]gc[at]c'
,
'HgiCI'
=>
'gg[ct][ag]cc'
,
'HgiEII'
=>
'acc[acgt][acgt][acgt][acgt][acgt][acgt]ggt'
,
'HgiJII'
=>
'g[ag]gc[ct]c'
,
'HhaI'
=>
'gcgc'
,
'Hin4I'
=>
'ga[cgt][acgt][acgt][acgt][acgt][acgt][acg]tc'
,
'HindII'
=>
'gt[ct][ag]ac'
,
'HindIII'
=>
'aagctt'
,
'HinfI'
=>
'ga[acgt]tc'
,
'HpaI'
=>
'gttaac'
,
'HpaII'
=>
'ccgg'
,
'HphI'
=>
'ggtga'
,
'Hpy178III'
=>
'tc[acgt][acgt]ga'
,
'Hpy188I'
=>
'tc[acgt]ga'
,
'Hpy99I'
=>
'cg[at]cg'
,
'KpnI'
=>
'ggtacc'
,
'Ksp632I'
=>
'ctcttc'
,
'MaeI'
=>
'ctag'
,
'MaeII'
=>
'acgt'
,
'MaeIII'
=>
'gt[acgt]ac'
,
'MboI'
=>
'gatc'
,
'MboII'
=>
'gaaga'
,
'McrI'
=>
'cg[ag][ct]cg'
,
'MfeI'
=>
'caattg'
,
'MjaIV'
=>
'gt[acgt][acgt]ac'
,
'MluI'
=>
'acgcgt'
,
'MmeI'
=>
'tcc[ag]ac'
,
'MnlI'
=>
'cctc'
,
'MseI'
=>
'ttaa'
,
'MslI'
=>
'ca[ct][acgt][acgt][acgt][acgt][ag]tg'
,
'MstI'
=>
'tgcgca'
,
'MwoI'
=>
'gc[acgt][acgt][acgt][acgt][acgt][acgt][acgt]gc'
,
'NaeI'
=>
'gccggc'
,
'NarI'
=>
'ggcgcc'
,
'NcoI'
=>
'ccatgg'
,
'NdeI'
=>
'catatg'
,
'NheI'
=>
'gctagc'
,
'NlaIII'
=>
'catg'
,
'NlaIV'
=>
'gg[acgt][acgt]cc'
,
'NotI'
=>
'gcggccgc'
,
'NruI'
=>
'tcgcga'
,
'NspBII'
=>
'c[ac]gc[gt]g'
,
'NspI'
=>
'[ag]catg[ct]'
,
'PacI'
=>
'ttaattaa'
,
'Pfl1108I'
=>
'tcgtag'
,
'PflMI'
=>
'cca[acgt][acgt][acgt][acgt][acgt]tgg'
,
'PleI'
=>
'gagtc'
,
'PmaCI'
=>
'cacgtg'
,
'PmeI'
=>
'gtttaaac'
,
'PpiI'
=>
'gaac[acgt][acgt][acgt][acgt][acgt]ctc'
,
'PpuMI'
=>
'[ag]gg[at]cc[ct]'
,
'PshAI'
=>
'gac[acgt][acgt][acgt][acgt]gtc'
,
'PsiI'
=>
'ttataa'
,
'PstI'
=>
'ctgcag'
,
'PvuI'
=>
'cgatcg'
,
'PvuII'
=>
'cagctg'
,
'RleAI'
=>
'cccaca'
,
'RsaI'
=>
'gtac'
,
'RsrII'
=>
'cgg[at]ccg'
,
'SacI'
=>
'gagctc'
,
'SacII'
=>
'ccgcgg'
,
'SalI'
=>
'gtcgac'
,
'SanDI'
=>
'ggg[at]ccc'
,
'SapI'
=>
'gctcttc'
,
'SauI'
=>
'cct[acgt]agg'
,
'ScaI'
=>
'agtact'
,
'ScrFI'
=>
'cc[acgt]gg'
,
'SduI'
=>
'g[agt]gc[act]c'
,
'SecI'
=>
'cc[acgt][acgt]gg'
,
'SexAI'
=>
'acc[at]ggt'
,
'SfaNI'
=>
'gcatc'
,
'SfeI'
=>
'ct[ag][ct]ag'
,
'SfiI'
=>
'ggcc[acgt][acgt][acgt][acgt][acgt]ggcc'
,
'SgfI'
=>
'gcgatcgc'
,
'SgrAI'
=>
'c[ag]ccgg[ct]g'
,
'SimI'
=>
'gggtc'
,
'SmaI'
=>
'cccggg'
,
'SmlI'
=>
'ct[ct][ag]ag'
,
'SnaBI'
=>
'tacgta'
,
'SnaI'
=>
'gtatac'
,
'SpeI'
=>
'actagt'
,
'SphI'
=>
'gcatgc'
,
'SplI'
=>
'cgtacg'
,
'SrfI'
=>
'gcccgggc'
,
'Sse232I'
=>
'cgccggcg'
,
'Sse8387I'
=>
'cctgcagg'
,
'Sse8647I'
=>
'agg[at]cct'
,
'SspI'
=>
'aatatt'
,
'Sth132I'
=>
'cccg'
,
'StuI'
=>
'aggcct'
,
'StyI'
=>
'cc[at][at]gg'
,
'SwaI'
=>
'atttaaat'
,
'TaqI'
=>
'tcga'
,
'TaqII'
=>
'gaccga'
,
'TatI'
=>
'[at]gtac[at]'
,
'TauI'
=>
'gc[cg]gc'
,
'TfiI'
=>
'ga[at]tc'
,
'TseI'
=>
'gc[at]gc'
,
'Tsp45I'
=>
'gt[cg]ac'
,
'Tsp4CI'
=>
'ac[acgt]gt'
,
'TspEI'
=>
'aatt'
,
'TspRI'
=>
'ca[cg]tg[acgt][acgt]'
,
'Tth111I'
=>
'gac[acgt][acgt][acgt]gtc'
,
'Tth111II'
=>
'caa[ag]ca'
,
'UbaGI'
=>
'cac[acgt][acgt][acgt][acgt]gtg'
,
'UbaPI'
=>
'cgaacg'
,
'VspI'
=>
'attaat'
,
'XbaI'
=>
'tctaga'
,
'XcmI'
=>
'cca[acgt][acgt][acgt][acgt][acgt][acgt][acgt][acgt][acgt]tgg'
,
'XhoI'
=>
'ctcgag'
,
'XhoII'
=>
'[ag]gatc[ct]'
,
'XmaIII'
=>
'cggccg'
,
'XmnI'
=>
'gaa[acgt][acgt][acgt][acgt]ttc'
);
return
%enzymes
;
}
1;