#!@@_perl_root_@@/bin/perl.exe
package GeneInfo;

##########################################################
#                                                        #
# dictyBase Extension of GeneInfo                        #
#                                                        #
##########################################################

use GeneInfo_base;

BEGIN { %GeneInfo:: = %GeneInfo_base:: }


sub hasMammalianRelatedGenes {$_[0]->{"Mammalian Gene Related"} }
sub hasNonMammalianRelatedGenes {$_[0]->{"Non-mammalian Gene Related"} }
sub hasDiseaseRelated {$_[0]->{"Disease Related"} }
sub hasPhylogeneticAnalysis {$_[0]->{"Phylogenetic Analysis"} }



sub hasCytoskeleton {$_[0]->{"Cytoskeleton"} }
sub hasChemotaxis {$_[0]->{"Chemotaxis/Motility"} }
sub hasMitosis {$_[0]->{"Mitosis"} }
sub hasEndocytosis {$_[0]->{"Endocytosis"} }
sub hasAdhesion {$_[0]->{"Adhesion"} }
sub hasRegulatedBy {$_[0]->{"Regulated By"} }
sub hasCellCycle {$_[0]->{"Cell Cycle"} }
sub hasSignalTransduction {$_[0]->{"Signal Transduction"} }

sub hasTranscription {$_[0]->{"Transcriptional Regulation"} }

sub hasPosttranslational {$_[0]->{"Post-Translational Modifications"} }

sub hasGrowth {$_[0]->{"Growth"} }
sub hasMorphogenesis {$_[0]->{"Development/Morphogenesis"} }
sub hasGermination {$_[0]->{"Sporulation/Germination"} }
sub hasSexualCycle {$_[0]->{"Sexual Cycle"} }
sub hasCellTypeLocalization {$_[0]->{"Cell Type Localization"} }

sub hasProteinFunctionalDomain {$_[0]->{"Protein Functional Domain"} }
sub hasProteinProteinInteractions {$_[0]->{"Protein-Protein Interactions"} }
sub hasSynonym {$_[0]->{"Synonym"} }
sub hasAntibodies {$_[0]->{"Antibodies"} }

sub hasPhototaxis {$_[0]->{"Phototaxis/Thermotaxis"} }

#
# added $self->findTopics;
#
#

#######################################################################
sub initInfo {
#######################################################################
    my ($self) = @_;

    my $locusObj = Locus->new(dbh=>$dbh,
                              locus_name=>$self->{'_locus'});
    if ($locusObj) {
        $self->{'_locusNo'} = $locusObj->locus_no;
        $self->{'_locusNm'} = $self->{'_locus'};
        $self->{'_tabNm'} = "CGM_DDB.locus_gene_info GI";
        $self->{'_NoNm'} = "GI.locus_no";
        $self->{'_No'} = $locusObj->locus_no;
        $self->{'_paragraphNo'} = $locusObj->paragraph_no;
    }
    else {
        my $featObj = Feature->new(dbh=>$dbh,
                                   feature_name=>$self->{'_locus'});
        if ($featObj) {
            $self->{'_featureNo'} = $featObj->feature_no;
            $self->{'_featureNm'} = $self->{'_locus'};
            $self->{'_tabNm'} = "CGM_DDB.feat_gene_info GI";
            $self->{'_NoNm'} = "GI.feature_no";
            $self->{'_No'} = $featObj->feature_no;
        }
        else {
            print "The locus/feature name (",$self->{'_locus'},") is not found in database.";
            return;
        }
    }
$self->findTopics;

}


#
########################################################################
#sub getLocusNm4RefNoHashRef {
########################################################################
#    my ($self)= @_;
#    my $sth;
#    $sth = $dbh->prepare("
#        SELECT unique GI.reference_no, L.locus_name
#        FROM   CGM_DDB.V_LOCUS_REFERENCE_THRU_FEATURE GI, CGM_DDB.locus L
#        WHERE  GI.locus_no = L.locus_no
#        ORDER BY upper(L.locus_name)
#    ");
#    $sth->execute;
#    my %locusNm4RefNo;
#    while(my($refNo, $locusNm) = $sth->fetchrow()) {
#        if ($locusNm4RefNo{$refNo}) {
#            $locusNm4RefNo{$refNo} .= "\t";
#        }
#        $locusNm4RefNo{$refNo} .= $locusNm;
#    }
#    return \%locusNm4RefNo;
#}


#######################################################################
sub geneNum {
#######################################################################
    my ($self) = @_;
    my $tabNm = $self->tabNm;
    my $NoNm = $self->NoNm;
    my $sth = $dbh->prepare("
        SELECT count(unique locus_no)
        FROM   CGM_DDB.locus_gene_info
        WHERE  reference_no in
               (select unique reference_no
                from   $tabNm
                where  $NoNm = ?
                and    reference_no not in
                (select reference_no
                 from   $tabNm
                 where  $NoNm = ?
                 and    literature_topic = 'Genome-wide Analysis'))
    ");
    $sth->execute($self->No, $self->No);
    my $num1 = $sth->fetchrow;

#
#
# we don't want to show features right now
#
#    $sth = $dbh->prepare("
#        SELECT count(unique feature_no)
#        FROM   CGM_DDB.feat_gene_info
#        WHERE  reference_no in
#               (select unique reference_no
#                from   $tabNm
#                where  $NoNm = ?
#                and reference_no not in
#                 (select  reference_no
#                  from   $tabNm
#                  where  $NoNm = ?
#                  and    literature_topic = 'Genome-wide Analysis'))
#    ");
#    $sth->execute($self->No, $self->No);
#    my $num2 = $sth->fetchrow;
#    if ($num1+$num2-1 < 0) {
#        return 0;
#    }
#    else {
#        return ($num1+$num2-1);
#    }


    if ($num1 == 0) {
        return 0;
    }
    else {
        return ($num1-1);
    }
        $sth->finish();
}
#
########################################################################
#sub locusList {
########################################################################
#    my ($self) = @_;
#    my $tabNm = $self->tabNm;
#    my $NoNm = $self->NoNm;
#    my $sth = $dbh->prepare("
#        SELECT unique L.locus_name
#        FROM   CGM_DDB.V_LOCUS_REFERENCE_THRU_FEATURE G, CGM_DDB.locus L
#        WHERE  G.locus_no = L.locus_no
#        AND    G.reference_no in
#               (select unique reference_no
#                from   $tabNm
#                where  $NoNm = ?)
#        ORDER BY L.locus_name
#    ");
#    $sth->execute($self->No);
#    my $arrayRef = $sth->fetchall_arrayref();
#    return $arrayRef;
#}
#



########################################################################
1;
########################################################################
