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

Diff of /FigKernelPackages/SampleDir.pm

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

revision 1.3, Fri Oct 29 02:27:55 2010 UTC revision 1.4, Mon Nov 1 16:16:05 2010 UTC
# Line 359  Line 359 
359  package SampleAnalysis;  package SampleAnalysis;
360  use strict;  use strict;
361  use YAML::Any qw(Dump Load DumpFile LoadFile);  use YAML::Any qw(Dump Load DumpFile LoadFile);
362    use POSIX;
363    
364  use base 'Class::Accessor';  use base 'Class::Accessor';
365    
# Line 368  Line 369 
369  {  {
370      my($class, $sample, $dataset, $index, $dir) = @_;      my($class, $sample, $dataset, $index, $dir) = @_;
371    
372      my $params = eval { LoadFile("$dir/params.yml"); };      my $params_file = "$dir/params.yml";
373      my $summary = eval { LoadFile("$dir/summary.yml"); };      my $summary_file = "$dir/summary.yml";
374    
375        my $params = eval { LoadFile($params_file); };
376        my $summary = eval { LoadFile($summary_file); };
377    
378      my $self = {      my $self = {
379          sample => $sample,          sample => $sample,
# Line 378  Line 382 
382          dir => $dir,          dir => $dir,
383          params => ($params || {}),          params => ($params || {}),
384          summary => ($summary || {}),          summary => ($summary || {}),
385            params_file => $params_file,
386            summary_file => $summary_file,
387      };      };
388      return bless $self, $class;      return bless $self, $class;
389  }  }
# Line 388  Line 394 
394      return $self->{params};      return $self->{params};
395  }  }
396    
397    sub save_parameters
398    {
399        my($self) = @_;
400        my $now = strftime("%Y-%m-%d-%H-%M-%S", localtime);
401        my $bak = "$self->{params_file}.bak.$now";
402        if (!rename($self->{params_file}, $bak))
403        {
404            warn "Could not rename $self->{params_file} to $bak: $!";
405        }
406        DumpFile($self->{params_file}, $self->{params});
407    }
408    
409  sub get_summary  sub get_summary
410  {  {
411      my($self) = @_;      my($self) = @_;
# Line 428  Line 446 
446      return $basis->create_vector($self->get_otu_file);      return $basis->create_vector($self->get_otu_file);
447  }  }
448    
449    #
450    # Recreate the summarization of data based on the
451    # current function exclusion list.
452    #
453    sub rerun_analysis
454    {
455        my($self) = @_;
456    
457        my $analysis_dir = $self->dir;
458    
459        my $raw_fh;
460        if (!open($raw_fh, "<", "$analysis_dir/sample.out"))
461        {
462            warn "Cannot open $analysis_dir/sample.out: $!";
463            return;
464        }
465    
466        my $otu_sum_fh;
467        open($otu_sum_fh, ">", "$analysis_dir/sample.otu.sum") or die "Cannot write $analysis_dir/sample.otu.sum: $!";
468    
469        my $fn_sum_fh;
470        open($fn_sum_fh, ">", "$analysis_dir/sample.fn.sum") or die "Cannot write $analysis_dir/sample.fn.sum: $!";
471    
472        my $totF = 0;
473        my $totO = 0;
474        my $excluded = 0;
475    
476        my %otu_summary;
477        my %fn_summary;
478    
479        my $exclusions = $self->{params}->{excluded_functions};
480        while (<$raw_fh>)
481        {
482            chomp;
483            my($id, $count, $loc, $func, $otu) = split(/\t/);
484    
485            if ($exclusions->{$func})
486            {
487                $excluded++;
488                next;
489            }
490    
491            if ($otu ne '')
492            {
493                $otu_summary{$otu}++;
494                $totO++;
495            }
496            if ($func ne '')
497            {
498                $fn_summary{$func}++;
499                $totF++;
500            }
501        }
502        close($raw_fh);
503    
504        for my $fn (sort { $fn_summary{$b} <=> $fn_summary{$a} } keys %fn_summary)
505        {
506            print $fn_sum_fh join("\t",
507                                  $fn_summary{$fn},
508                                  sprintf("%0.6f", $fn_summary{$fn} / $totF),
509                                  $fn), "\n";
510        }
511        close($fn_sum_fh);
512    
513        for my $otu (sort { $otu_summary{$b} <=> $otu_summary{$a} } keys %otu_summary)
514        {
515            print $otu_sum_fh join("\t",
516                                  $otu_summary{$otu},
517                                  sprintf("%0.6f", $otu_summary{$otu} / $totO),
518                                  $otu), "\n";
519        }
520        close($otu_sum_fh);
521    
522        #
523        # Summary data.
524        #
525        my $sum = {};
526        %$sum = %{$self->{summary}};
527    
528        my $sum2 = {
529            hits_with_function => $totF,
530            hits_with_otu => $totO,
531            distinct_functions => scalar(keys %fn_summary),
532            distinct_otus => scalar(keys %otu_summary),
533            excluded_hits => $excluded,
534        };
535        $sum->{$_} = $sum2->{$_} for keys %$sum2;
536    
537        $self->{summary} = $sum;
538    
539        DumpFile("$analysis_dir/summary.yml", $sum);
540    }
541    
542  package VectorBasis;  package VectorBasis;
543  use strict;  use strict;
544  use PDL;  use PDL;
# Line 463  Line 574 
574          $idx--;          $idx--;
575          $by_idx->[$idx] = $str;          $by_idx->[$idx] = $str;
576          $by_name->{$str} = $idx;          $by_name->{$str} = $idx;
577          $n++;          $n = $idx if $idx > $n;
578      }      }
579        $n++;
580    
581      my $self = {      my $self = {
582          file => $file,          file => $file,

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3