[Bio] / FigKernelPackages / FIGMODELmodel.pm Repository:
ViewVC logotype

Diff of /FigKernelPackages/FIGMODELmodel.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.9, Wed Apr 7 13:17:07 2010 UTC revision 1.10, Mon Apr 12 17:13:26 2010 UTC
# Line 130  Line 130 
130          return $self->{"_fig"};          return $self->{"_fig"};
131  }  }
132    
133    =head3 aquireModelLock
134    
135    Definition:
136    
137            FIGMODELmodel->aquireModelLock();
138    
139    Description:
140    
141            Locks the database for alterations relating to the current model object
142    
143    =cut
144    sub aquireModelLock {
145            my ($self) = @_;
146            $self->figmodel()->database()->genericLock($self->id());
147    }
148    
149    =head3 releaseModelLock
150    
151    Definition:
152    
153            FIGMODELmodel->releaseModelLock();
154    
155    Description:
156    
157            Unlocks the database for alterations relating to the current model object
158    
159    =cut
160    sub releaseModelLock {
161            my ($self) = @_;
162            $self->figmodel()->database()->genericUnlock($self->id());
163    }
164    
165  =head3 mgdata  =head3 mgdata
166  Definition:  Definition:
167          FIGMODEL = FIGMODELmodel->mgdata();          FIGMODEL = FIGMODELmodel->mgdata();
# Line 376  Line 408 
408          return $Data->{LOAD}->[0];          return $Data->{LOAD}->[0];
409  }  }
410    
411    =head3 load_model_table
412    
413    Definition: FIGMODELTable = FIGMODELmodel->load_model_table(string:table name,0/1:refresh the table));
414    
415    Description: Returns the table specified by the input filename. Table will be stored in a file in the model directory.
416    
417    =cut
418    sub load_model_table {
419            my ($self,$name,$refresh) = @_;
420            if (!defined($refresh)) {
421                    $refresh = 1;
422            }
423            if ($refresh == 1) {
424                    delete $self->{"_".$name};
425            }
426            if (!defined($self->{"_".$name})) {
427                    my $tbldef = $self->figmodel()->config("$name");
428                    if (!defined($tbldef)) {
429                            return undef;
430                    }
431                    my $filename = $self->directory().$name."-".$self->id().$self->selected_version().".tbl";
432                    $self->{"_".$name} = $self->figmodel()->database()->load_table($filename,"\t","|",$tbldef->{headingline}->[0],$tbldef->{hashcolumns});
433                    if (!defined($self->{"_".$name})) {
434                            if (defined($tbldef->{prefix})) {
435                                    $self->{"_".$name} = FIGMODELTable->new($tbldef->{columns},$filename,$tbldef->{hashcolumns},"\t","|",join(@{$tbldef->{prefix}},"\n"));
436                            } else {
437                                    $self->{"_".$name} = FIGMODELTable->new($tbldef->{columns},$filename,$tbldef->{hashcolumns},"\t","|");
438                            }
439                    }
440            }
441            return $self->{"_".$name};
442    }
443    
444  =head3 get_reaction_number  =head3 get_reaction_number
445  Definition:  Definition:
446          int = FIGMODELmodel->get_reaction_number();          int = FIGMODELmodel->get_reaction_number();
# Line 403  Line 468 
468    
469          if (!defined($self->{_reaction_data})) {          if (!defined($self->{_reaction_data})) {
470                  $self->{_reaction_data} = $self->figmodel()->database()->GetDBModel($self->id());                  $self->{_reaction_data} = $self->figmodel()->database()->GetDBModel($self->id());
471                    my $classTbl = $self->reaction_class_table();
472                    for (my $i=0; $i < $classTbl->size(); $i++) {
473                            my $row = $classTbl->get_row($i);
474                            my $rxnRow = $self->{_reaction_data}->get_row_by_key($row->{"REACTION"}->[0],"LOAD");
475                            for (my $j=0; $j < @{$row->{MEDIA}};$j++) {
476                                    my $class = "Active <=>";
477                                    if ($row->{CLASS}->[$j] eq "Positive") {
478                                            $class = "Essential =>";
479                                    } elsif ($row->{CLASS}->[$j] eq "Negative") {
480                                            $class = "Essential <=";
481                                    } elsif ($row->{CLASS}->[$j] eq "Blocked") {
482                                            $class = "Inactive";
483                                    } elsif ($row->{CLASS}->[$j] eq "Positive variable") {
484                                            $class = "Active =>";
485                                    } elsif ($row->{CLASS}->[$j] eq "Negative variable") {
486                                            $class = "Active <=";
487                                    } elsif ($row->{CLASS}->[$j] eq "Variable") {
488                                            $class = "Active <=>";
489                                    } elsif ($row->{CLASS}->[$j] eq "Dead") {
490                                            $class = "Dead";
491                                    }
492                                    push(@{$rxnRow->{PREDICTIONS}},$row->{MEDIA}->[$j].":".$class);
493                            }
494                    }
495          }          }
496    
497          return $self->{_reaction_data};          return $self->{_reaction_data};
498  }  }
499    
500    =head3 feature_table
501    Definition:
502            FIGMODELTable = FIGMODELmodel->feature_table();
503    Description:
504            Returns FIGMODELTable with the feature list for the model
505    =cut
506    sub feature_table {
507            my ($self) = @_;
508    
509            if (!defined($self->{_feature_data})) {
510                    #Getting the genome feature list
511                    my $FeatureTable = $self->figmodel()->GetGenomeFeatureTable($self->genome());
512                    if (!defined($FeatureTable)) {
513                            print STDERR "FIGMODELmodel:feature_table:Could not get features for genome ".$self->genome()." in database!";
514                            return undef;
515                    }
516                    #Getting the reaction table for the model
517                    my $rxnTable = $self->reaction_table();
518                    if (!defined($rxnTable)) {
519                    print STDERR "FIGMODELmodel:feature_table:Could not get reaction table for model ".$self->id()." in database!";
520                            return undef;
521                }
522                    #Cloning the feature table
523                    $self->{_feature_data} = $FeatureTable->clone_table_def();
524                    $self->{_feature_data}->add_headings(($self->id()."REACTIONS",$self->id()."PREDICTIONS"));
525                for (my $i=0; $i < $rxnTable->size(); $i++) {
526                    my $Row = $rxnTable->get_row($i);
527                    if (defined($Row) && defined($Row->{"ASSOCIATED PEG"})) {
528                            foreach my $GeneSet (@{$Row->{"ASSOCIATED PEG"}}) {
529                                    $GeneSet =~ s/\+/|/g;
530                                    $GeneSet =~ s/\sAND\s/|/gi;
531                                    $GeneSet =~ s/\sOR\s/|/gi;
532                                    $GeneSet =~ s/[\(\)\s]//g;
533                                    my @GeneList = split(/\|/,$GeneSet);
534                                    foreach my $Gene (@GeneList) {
535                                    my $FeatureRow = $self->{_feature_data}->get_row_by_key("fig|".$self->genome().".".$Gene,"ID");
536                                                    if (!defined($FeatureRow)) {
537                                                            $FeatureRow = $FeatureTable->get_row_by_key("fig|".$self->genome().".".$Gene,"ID");
538                                                            if (defined($FeatureRow)) {
539                                                                    $self->{_feature_data}->add_row($FeatureRow);
540                                                            }
541                                                    }
542                                                    if (defined($FeatureRow)) {
543                                                            $self->{_feature_data}->add_data($FeatureRow,$self->id()."REACTIONS",$Row->{"LOAD"}->[0],1);
544                                                    }
545                                    }
546                            }
547                    }
548                }
549                #Loading predictions
550                my @files = glob($self->directory()."EssentialGenes-".$self->id()."-*");
551                foreach my $file (@files) {
552                    if ($file =~ m/\-([^\-]+)\.tbl/) {
553                            my $media = $1;
554                            my $list = $self->figmodel()->database()->load_single_column_file($file,"");
555                            my $hash;
556                            foreach my $gene (@{$list}) {
557                                    $hash->{$gene} = 1;
558                            }
559                            for (my $i=0; $i < $self->{_feature_data}->size(); $i++) {
560                                    my $Row = $self->{_feature_data}->get_row($i);
561                                    if ($Row->{ID}->[0] =~ m/(peg\.\d+)/) {
562                                            my $gene = $1;
563                                            if (defined($hash->{$gene})) {
564                                                    push(@{$Row->{$self->id()."PREDICTIONS"}},$media.":essential");
565                                            } else {
566                                                    push(@{$Row->{$self->id()."PREDICTIONS"}},$media.":nonessential");
567                                            }
568                                    }
569                            }
570                    }
571                }
572            }
573            return $self->{_feature_data};
574    }
575    
576  =head3 reaction_class_table  =head3 reaction_class_table
577  Definition:  Definition:
578          FIGMODELTable = FIGMODELmodel->reaction_class_table();          FIGMODELTable = FIGMODELmodel->reaction_class_table();
# Line 488  Line 653 
653    
654  =head3 get_compound_data  =head3 get_compound_data
655  Definition:  Definition:
656          string = FIGMODELmodel->get_compound_data(string::compound ID);          {string:key=>[string]:values} = FIGMODELmodel->get_compound_data(string::compound ID);
657  Description:  Description:
658          Returns model compound data          Returns model compound data
659  =cut  =cut
# Line 499  Line 664 
664                  return undef;                  return undef;
665          }          }
666          if ($compound =~ m/^\d+$/) {          if ($compound =~ m/^\d+$/) {
667                  $self->compound_table()->get_row($compound);                  return $self->compound_table()->get_row($compound);
668          }          }
669          return $self->compound_table()->get_row_by_key($compound,"DATABASE");          return $self->compound_table()->get_row_by_key($compound,"DATABASE");
670  }  }
671    
672    =head3 get_feature_data
673    Definition:
674            {string:key=>[string]:values} = FIGMODELmodel->get_feature_data(string::feature ID);
675    Description:
676            Returns model feature data
677    =cut
678    sub get_feature_data {
679            my ($self,$feature) = @_;
680            if (!defined($self->feature_table())) {
681                    return undef;
682            }
683            if ($feature =~ m/^\d+$/) {
684                    return $self->feature_table()->get_row($feature);
685            }
686            if ($feature =~ m/(peg\.\d+)/) {
687                    $feature = $1;
688            }
689            return $self->feature_table()->get_row_by_key("fig|".$self->genome().".".$feature,"ID");
690    }
691    
692  =head3 genome  =head3 genome
693  Definition:  Definition:
694          string = FIGMODELmodel->genome();          string = FIGMODELmodel->genome();
# Line 1229  Line 1414 
1414          return $self->success();          return $self->success();
1415  }  }
1416    
1417  =head3 datagapfill  =head3 GapGenModel
1418  Definition:  Definition:
1419          success()/fail() = FIGMODELmodel->datagapfill();          FIGMODELmodel->GapGenModel();
1420  Description:  Description:
1421          Run gapfilling on the input run specifications          Runs the gap generation algorithm to correct a single false positive prediction. Results are loaded into a table.
1422  =cut  =cut
1423  sub datagapfill {  
1424          my ($self,$GapFillingRunSpecs,$TansferFileSuffix) = @_;  sub GapGenModel {
1425          my $UniqueFilename = $self->figmodel()->filename();          my ($self,$Media,$KOList,$NoKOList,$Experiment,$SolutionLimit) = @_;
1426          if (defined($GapFillingRunSpecs) && @{$GapFillingRunSpecs} > 0) {  
1427                  system($self->figmodel()->GenerateMFAToolkitCommandLineCall($UniqueFilename,$self->id().$self->selected_version(),"NoBounds",["DataGapFilling"],{"Reactions to knockout" => $self->config("permanently knocked out reactions")->[0],"Gap filling runs" => join(";",@{$GapFillingRunSpecs})},"GapFilling-".$self->id().$self->selected_version()."-".$UniqueFilename.".log",undef,undef));          #Enforcing nonoptional arguments
1428                  #Checking that the solution exists          if (!defined($Media)) {
                 if (!-e $self->config("MFAToolkit output directory")->[0].$UniqueFilename."/GapFillingSolutionTable.txt") {  
                         $self->figmodel()->error_message("FIGMODEL:GapFillingAlgorithm: Could not find MFA output file!");  
                         $self->figmodel()->database()->print_array_to_file($self->directory().$self->id().$self->selected_version()."-GFS.txt",["Experiment;Solution index;Solution cost;Solution reactions"]);  
1429                          return undef;                          return undef;
1430                  }                  }
1431                  my $GapFillResultTable = $self->figmodel()->database()->load_table($self->config("MFAToolkit output directory")->[0].$UniqueFilename."/GapFillingSolutionTable.txt",";","",0,undef);          if (!defined($KOList)) {
1432                  if (defined($TansferFileSuffix)) {                  $KOList->[0] = "none";
                         system("cp ".$self->config("MFAToolkit output directory")->[0].$UniqueFilename."/GapFillingSolutionTable.txt ".$self->directory().$self->id().$self->selected_version()."-".$TansferFileSuffix.".txt");  
1433                  }                  }
1434                  #If the system is not configured to preserve all logfiles, then the mfatoolkit output folder is deleted          if (!defined($NoKOList)) {
1435                  $self->figmodel()->clearing_output($UniqueFilename,"GapFilling-".$self->id().$self->selected_version()."-".$UniqueFilename.".log");                  $NoKOList->[0] = "none";
                 return $GapFillResultTable;  
1436          }          }
1437          if (defined($TansferFileSuffix)) {          if (!defined($Experiment)) {
1438                  $self->figmodel()->database()->print_array_to_file($self->directory().$self->id().$self->selected_version()."-".$TansferFileSuffix.".txt",["Experiment;Solution index;Solution cost;Solution reactions"]);                  $Experiment= "ReactionKO";
1439          }          }
1440          return undef;          if (!defined($SolutionLimit)) {
1441                    $SolutionLimit = "10";
1442  }  }
1443    
1444  =head3 datagapgen          #Translating the KO lists into arrays
1445  Definition:          if (ref($KOList) ne "ARRAY") {
1446          $model->datagapgen($NumberOfProcessors,$ProcessorIndex,$Filename);                  my $temp = $KOList;
1447  =cut                  $KOList = ();
1448                    push(@{$KOList},split(/[,;]/,$temp));
1449            }
1450            my $noKOHash;
1451            if (defined($NoKOList) && ref($NoKOList) ne "ARRAY") {
1452                    my $temp = $NoKOList;
1453                    $NoKOList = ();
1454                    push(@{$NoKOList},split(/[,;]/,$temp));
1455                    foreach my $rxn (@{$NoKOList}) {
1456                            $noKOHash->{$rxn} = 1;
1457                    }
1458            }
1459    
1460  sub datagapgen {          #Checking if solutions exist for the input parameters
1461          my ($self,$Media,$KOList,$NoKOList,$suffix) = @_;          $self->aquireModelLock();
1462          #Setting default values for inputs          my $tbl = $self->load_model_table("GapGenSolutions");
1463          if (!defined($NoKOList)) {          my $solutionRow = $tbl->get_table_by_key($Experiment,"Experiment")->get_table_by_key($Media,"Media")->get_row_by_key(join(",",@{$KOList}),"KOlist");
1464                  $NoKOList = "none";          my $solutions;
1465            if (defined($solutionRow)) {
1466                    #Checking if any solutions conform to the no KO list
1467                    foreach my $solution (@{$solutionRow->{Solutions}}) {
1468                            my @reactions = split(/,/,$solution);
1469                            my $include = 1;
1470                            foreach my $rxn (@reactions) {
1471                                    if ($rxn =~ m/(rxn\d\d\d\d\d)/) {
1472                                            if (defined($noKOHash->{$1})) {
1473                                                    $include = 0;
1474          }          }
         if (!defined($KOList)) {  
                 $KOList = "none";  
1475          }          }
1476                            }
1477                            if ($include == 1) {
1478                                    push(@{$solutions},$solution);
1479                            }
1480                    }
1481            } else {
1482                    $solutionRow = {Media => [$Media],Experiment => [$Experiment],KOlist => [join(",",@{$KOList})]};
1483                    $tbl->add_row($solutionRow);
1484                    $self->figmodel()->database()->save_table($tbl);
1485            }
1486            $self->releaseModelLock();
1487    
1488            #Returning solution list of solutions were found
1489            if (defined($solutions) && @{$solutions} > 0) {
1490                    return $solutions;
1491            }
1492    
1493          #Getting unique filename          #Getting unique filename
1494          my $Filename = $self->figmodel()->filename();          my $Filename = $self->figmodel()->filename();
1495          if (!defined($suffix)) {  
                 $suffix = "-".$Media."-".$KOList."-S";  
         }  
         $KOList =~ s/,/;/g;  
         $NoKOList =~ s/,/;/g;  
1496          #Running the gap generation          #Running the gap generation
1497          system($self->figmodel()->GenerateMFAToolkitCommandLineCall($Filename,$self->id().$self->selected_version(),$Media,["GapGeneration"],{"Reactions that should always be active" => $NoKOList,"Reactions to knockout" => $KOList,"Reactions that are always blocked" => "none"},"Gapgeneration-".$self->id().$self->selected_version()."-".$Filename.".log",undef,undef));          system($self->figmodel()->GenerateMFAToolkitCommandLineCall($Filename,$self->id().$self->selected_version(),$Media,["GapGeneration"],{"Recursive MILP solution limit" => $SolutionLimit ,"Reactions that should always be active" => join(";",@{$NoKOList}),"Reactions to knockout" => join(";",@{$KOList}),"Reactions that are always blocked" => "none"},"Gapgeneration-".$self->id().$self->selected_version()."-".$Filename.".log",undef,undef));
1498          my $ProblemReport = $self->figmodel()->LoadProblemReport($Filename);          my $ProblemReport = $self->figmodel()->LoadProblemReport($Filename);
1499          if (!defined($ProblemReport)) {          if (!defined($ProblemReport)) {
1500                  $self->figmodel()->error_message("FIGMODEL:GapGenerationAlgorithm;No problem report;".$Filename.";".$self->id().$self->selected_version().";".$Media.";".$KOList.";".$NoKOList);                  $self->figmodel()->error_message("FIGMODEL:GapGenerationAlgorithm;No problem report;".$Filename.";".$self->id().$self->selected_version().";".$Media.";".$KOList.";".$NoKOList);
1501                  return undef;                  return undef;
1502          }          }
1503    
1504          #Clearing the output folder and log file          #Clearing the output folder and log file
1505          $self->figmodel()->clearing_output($Filename,$self->directory()."Gapgeneration-".$self->id().$self->selected_version()."-".$Filename.".log");          $self->figmodel()->clearing_output($Filename,"Gapgeneration-".$self->id().$self->selected_version()."-".$Filename.".log");
1506          #Scheduling the testing of this gap filling solution  
1507          my $Tbl = FIGMODELTable->new(["Experiment","Solution index","Solution cost","Solution reactions"],$self->directory().$self->id().$self->selected_version()."-GG".$suffix.".txt",undef,";","|",undef);          #Saving the solution
1508            $self->aquireModelLock();
1509            $tbl = $self->load_model_table("GapGenSolutions");
1510            $solutionRow = $tbl->get_table_by_key($Experiment,"Experiment")->get_table_by_key($Media,"Media")->get_row_by_key(join(",",@{$KOList}),"KOlist");
1511          for (my $j=0; $j < $ProblemReport->size(); $j++) {          for (my $j=0; $j < $ProblemReport->size(); $j++) {
1512                  if ($ProblemReport->get_row($j)->{"Notes"}->[0] =~ m/^Recursive\sMILP\s([^)]+)/) {                  if ($ProblemReport->get_row($j)->{"Notes"}->[0] =~ m/^Recursive\sMILP\s([^)]+)/) {
1513                          my @SolutionList = split(/\|/,$1);                          my @SolutionList = split(/\|/,$1);
1514                          for (my $k=0; $k < @SolutionList; $k++) {                          for (my $k=0; $k < @SolutionList; $k++) {
1515                                  if ($SolutionList[$k] =~ m/(\d+):(.+)/) {                                  if ($SolutionList[$k] =~ m/(\d+):(.+)/) {
1516                                          $Tbl->add_row({"Experiment"=>[$Media],"Solution index"=>[$k],"Solution cost"=>[$1],"Solution reactions"=>[$2]});                                          push(@{$solutionRow->{Solutions}},$2);
1517                                            push(@{$solutions},$2);
1518                                  }                                  }
1519                          }                          }
1520                  }                  }
1521          }          }
1522          return $Tbl;          $self->figmodel()->database()->save_table($tbl);
1523            $self->releaseModelLock();
1524    
1525            return $solutions;
1526    }
1527    
1528    =head3 datagapfill
1529    Definition:
1530            success()/fail() = FIGMODELmodel->datagapfill();
1531    Description:
1532            Run gapfilling on the input run specifications
1533    =cut
1534    sub datagapfill {
1535            my ($self,$GapFillingRunSpecs,$TansferFileSuffix) = @_;
1536            my $UniqueFilename = $self->figmodel()->filename();
1537            if (defined($GapFillingRunSpecs) && @{$GapFillingRunSpecs} > 0) {
1538                    system($self->figmodel()->GenerateMFAToolkitCommandLineCall($UniqueFilename,$self->id().$self->selected_version(),"NoBounds",["DataGapFilling"],{"Reactions to knockout" => $self->config("permanently knocked out reactions")->[0],"Gap filling runs" => join(";",@{$GapFillingRunSpecs})},"GapFilling-".$self->id().$self->selected_version()."-".$UniqueFilename.".log",undef,undef));
1539                    #Checking that the solution exists
1540                    if (!-e $self->config("MFAToolkit output directory")->[0].$UniqueFilename."/GapFillingSolutionTable.txt") {
1541                            $self->figmodel()->error_message("FIGMODEL:GapFillingAlgorithm: Could not find MFA output file!");
1542                            $self->figmodel()->database()->print_array_to_file($self->directory().$self->id().$self->selected_version()."-GFS.txt",["Experiment;Solution index;Solution cost;Solution reactions"]);
1543                            return undef;
1544                    }
1545                    my $GapFillResultTable = $self->figmodel()->database()->load_table($self->config("MFAToolkit output directory")->[0].$UniqueFilename."/GapFillingSolutionTable.txt",";","",0,undef);
1546                    if (defined($TansferFileSuffix)) {
1547                            system("cp ".$self->config("MFAToolkit output directory")->[0].$UniqueFilename."/GapFillingSolutionTable.txt ".$self->directory().$self->id().$self->selected_version()."-".$TansferFileSuffix.".txt");
1548                    }
1549                    #If the system is not configured to preserve all logfiles, then the mfatoolkit output folder is deleted
1550                    $self->figmodel()->clearing_output($UniqueFilename,"GapFilling-".$self->id().$self->selected_version()."-".$UniqueFilename.".log");
1551                    return $GapFillResultTable;
1552            }
1553            if (defined($TansferFileSuffix)) {
1554                    $self->figmodel()->database()->print_array_to_file($self->directory().$self->id().$self->selected_version()."-".$TansferFileSuffix.".txt",["Experiment;Solution index;Solution cost;Solution reactions"]);
1555            }
1556            return undef;
1557  }  }
1558    
1559  =head3 TestSolutions  =head3 TestSolutions
# Line 4108  Line 4359 
4359          $self->reaction_table()->save();          $self->reaction_table()->save();
4360  }  }
4361    
4362    =head3 feature_web_data
4363    Definition:
4364            string:web output for feature/model connection = FIGMODELmodel->feature_web_data(FIGMODELfeature:feature);
4365    Description:
4366    =cut
4367    sub feature_web_data {
4368            my ($self,$feature) = @_;
4369    
4370            #First checking if the feature is in the model
4371            my $data = $self->get_feature_data($feature->{ID}->[0]);
4372            if (!defined($data)) {
4373                    return "Not in model";
4374            }
4375    
4376            my $output;
4377            #Printing predictions
4378            if (defined($data->{$self->id()."PREDICTIONS"})) {
4379                    #Parsing essentiality data
4380                    my $essentialityData;
4381                    if (defined($feature->{ESSENTIALITY})) {
4382                            for (my $i=0; $i < @{$feature->{ESSENTIALITY}};$i++) {
4383                                    my @temp = split(/:/,$feature->{ESSENTIALITY}->[$i]);
4384                                    $essentialityData->{$temp[0]} = $temp[1];
4385                            }
4386                    }
4387                    my $predictionHash;
4388                    for (my $i=0; $i < @{$data->{$self->id()."PREDICTIONS"}};$i++) {
4389                            my @temp = split(/:/,$data->{$self->id()."PREDICTIONS"}->[$i]);
4390                            if (defined($essentialityData->{$temp[0]})) {
4391                                    if ($temp[1] eq "essential" && $essentialityData->{$temp[0]} eq "essential") {
4392                                            push(@{$predictionHash->{"Correct negative"}},$temp[0]);
4393                                    } elsif ($temp[1] eq "nonessential" && $essentialityData->{$temp[0]} eq "essential") {
4394                                            push(@{$predictionHash->{"False positive"}},$temp[0]);
4395                                    } elsif ($temp[1] eq "essential" && $essentialityData->{$temp[0]} eq "nonessential") {
4396                                            push(@{$predictionHash->{"False negative"}},$temp[0]);
4397                                    } elsif ($temp[1] eq "nonessential" && $essentialityData->{$temp[0]} eq "nonessential") {
4398                                            push(@{$predictionHash->{"Correct positive"}},$temp[0]);
4399                                    }
4400                            } else {
4401                                    push(@{$predictionHash->{$temp[1]}},$temp[0]);
4402                            }
4403                    }
4404                    foreach my $key (keys(%{$predictionHash})) {
4405                            my $string = $key;
4406                            $string = ucfirst($string);
4407                            push(@{$output},'<span title="'.join(", ",@{$predictionHash->{$key}}).'">'.$string.'</span>');
4408                    }
4409            }
4410    
4411            #Printing reactions
4412            if (defined($data->{$self->id()."REACTIONS"})) {
4413                    for (my $i=0; $i < @{$data->{$self->id()."REACTIONS"}};$i++) {
4414                            my $rxnData = $self->get_reaction_data($data->{$self->id()."REACTIONS"}->[$i]);
4415                            my $reactionString = $self->figmodel()->web()->create_reaction_link($data->{$self->id()."REACTIONS"}->[$i],join(" or ",@{$rxnData->{"ASSOCIATED PEG"}}),$self->id());
4416                            if (defined($rxnData->{PREDICTIONS})) {
4417                                    my $predictionHash;
4418                                    for (my $i=0; $i < @{$rxnData->{PREDICTIONS}};$i++) {
4419                                            my @temp = split(/:/,$rxnData->{PREDICTIONS}->[$i]);
4420                                            push(@{$predictionHash->{$temp[1]}},$temp[0]);
4421                                    }
4422                                    $reactionString .= "(";
4423                                    foreach my $key (keys(%{$predictionHash})) {
4424                                            if ($key eq "Essential =>") {
4425                                                    $reactionString .= '<span title="Essential in '.join(",",@{$predictionHash->{$key}}).'">E=></span>,';
4426                                            } elsif ($key eq "Essential <=") {
4427                                                    $reactionString .= '<span title="Essential in '.join(",",@{$predictionHash->{$key}}).'">E<=</span>,';
4428                                            } elsif ($key eq "Active =>") {
4429                                                    $reactionString .= '<span title="Active in '.join(",",@{$predictionHash->{$key}}).'">A=></span>,';
4430                                            } elsif ($key eq "Active <=") {
4431                                                    $reactionString .= '<span title="Active in '.join(",",@{$predictionHash->{$key}}).'">A<=</span>,';
4432                                            } elsif ($key eq "Active <=>") {
4433                                                    $reactionString .= '<span title="Active in '.join(",",@{$predictionHash->{$key}}).'">A</span>,';
4434                                            } elsif ($key eq "Inactive") {
4435                                                    $reactionString .= '<span title="Inactive in '.join(",",@{$predictionHash->{$key}}).'">I</span>,';
4436                                            } elsif ($key eq "Dead") {
4437                                                    $reactionString .= '<span title="Dead">D</span>,';
4438                                            }
4439                                    }
4440                                    $reactionString =~ s/,$/)/;
4441                            }
4442                            push(@{$output},$reactionString);
4443                    }
4444            }
4445    
4446            #Returning output
4447            return join("<br>",@{$output});
4448    }
4449    
4450  1;  1;

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3