package Project; =head1 NAME Project -- An object that keeps track of project information. =head1 SYNOPSIS my $project = Project->new; my $boolean = Project->read; my $boolean = Project->save; Object hash entries: current_project string mlg_file string locus_file string fpc_file string qtl_file string end_matches_file string mtp_file string est_file string seq_file string rel_file string con_file string locus_names_crosschecked boolean locus_names_updated boolean clone_anchors_counted boolean clone_anchors_updated boolean contig_anchors_counted boolean contig_anchors_update boolean gff_file_created boolean ave_clone_length bands band_factor bases per band =head1 DESCRIPTION This object keeps track of the project information. =head1 VERSION 0.001 (last update: 6/30/04) =head1 AUTHOR Chet Langin, clangin@siu.edu SIU Plant Biotechnology and Genomics Core-facility =head1 BUGS None known. =head1 SEE ALSO extropy ExtropyConstants ExtropyUtils Extropy::MenuMain =head1 COPYRIGHT Copyright 2004, Chet Langin, All Rights Reserved. This program is free software. You may copy or redistribute it under the same terms as Perl itself. =head1 METHODS The remainder of this document describes the methods available to the programmer. =cut # load the pragmas use warnings; use strict; # load other modules use ExtropyConstants; use ExtropyUtils; # package variables # ******************************** new ****************************** =head2 new my $project = Project->new; Creates an instance of the Project object. =cut # --------------------------------------------------------------------- sub new { # instantiate the oject my $self = {}; bless $self; my $defined = TRUE; $self->{current_project} = ""; $self->reset; # return values if($defined) { $self; } # if else { undef; } # else } # new() # ******************************** read ***************************** =head2 read $project->read; Reads the project configuration project_name.cfg file. =cut # --------------------------------------------------------------------- sub read { my $self = shift; my $error = FALSE; my $current_project = $self->{current_project}; message("Reading the project configuration from $current_project.cfg"); open(CFG_FILE, "<", "$current_project.cfg") or $error = TRUE; if($error) { message("Could not read $current_project.cfg"); message("$!"); } # if else { # The config file is open $self->reset; # read the configuration file my @file_array = ; for(my $lcv = 0; $lcv < scalar(@file_array); $lcv++) { my $current_line = $file_array[$lcv]; next if($current_line =~ /^#/); chomp $current_line; next if($current_line =~ /^\s*$/); my @line_array = split /=/, $current_line; if($line_array[0] =~ /mlg_file/) { if($line_array[1]) { $self->{mlg_file} = $line_array[1]; } # if else { $self->{mlg_file} = ""; } # else } # if elsif($line_array[0] =~ /locus_file/) { if($line_array[1]) { $self->{locus_file} = $line_array[1]; } # if else { $self->{locus_file} = ""; } # else } # elsif elsif($line_array[0] =~ /fpc_file/) { if($line_array[1]) { $self->{fpc_file} = $line_array[1]; } # if else { $self->{fpc_file} = ""; } # else } # elsif elsif($line_array[0] =~ /qtl_file/) { if($line_array[1]) { $self->{qtl_file} = $line_array[1]; } # if else { $self->{qtl_file} = ""; } # else } # elsif elsif($line_array[0] =~ /end_matches_file/) { if($line_array[1]) { $self->{end_matches_file} = $line_array[1]; } # if else { $self->{end_matches_file} = ""; } # else } # elsif elsif($line_array[0] =~ /mtp_file/) { if($line_array[1]) { $self->{mtp_file} = $line_array[1]; } # if else { $self->{mtp_file} = ""; } # else } # elsif elsif($line_array[0] =~ /est_file/) { if($line_array[1]) { $self->{est_file} = $line_array[1]; } # if else { $self->{est_file} = ""; } # else } # elsif elsif($line_array[0] =~ /seq_file/) { if($line_array[1]) { $self->{seq_file} = $line_array[1]; } # if else { $self->{seq_file} = ""; } # else } # elsif elsif($line_array[0] =~ /rel_file/) { if($line_array[1]) { $self->{rel_file} = $line_array[1]; } # if else { $self->{rel_file} = ""; } # else } # elsif elsif($line_array[0] =~ /con_file/) { if($line_array[1]) { $self->{con_file} = $line_array[1]; } # if else { $self->{con_file} = ""; } # else } # elsif elsif($line_array[0] =~ /locus_names_crosschecked/) { if($line_array[1]) { $self->{locus_names_crosschecked} = $line_array[1]; } # if else { $self->{locus_names_crosschecked} = FALSE; } # else } # elsif elsif($line_array[0] =~ /locus_names_updated/) { if($line_array[1]) { $self->{locus_names_updated} = $line_array[1]; } # if else { $self->{locus_names_updated} = FALSE; } # else } # elsif elsif($line_array[0] =~ /clone_anchors_counted/) { if($line_array[1]) { $self->{clone_anchors_counted} = $line_array[1]; } # if else { $self->{clone_anchors_counted} = FALSE; } # else } # elsif elsif($line_array[0] =~ /clone_anchors_updated/) { if($line_array[1]) { $self->{clone_anchors_updated} = $line_array[1]; } # if else { $self->{clone_anchors_updated} = FALSE; } # else } # elsif elsif($line_array[0] =~ /contig_anchors_counted/) { if($line_array[1]) { $self->{contig_anchors_counted} = $line_array[1]; } # if else { $self->{contig_anchors_counted} = FALSE; } # else } # elsif elsif($line_array[0] =~ /contig_anchors_updated/) { if($line_array[1]) { $self->{contig_anchors_updated} = $line_array[1]; } # if else { $self->{contig_anchors_updated} = FALSE; } # else } # elsif elsif($line_array[0] =~ /gff_file_created/) { if($line_array[1]) { $self->{gff_file_created} = $line_array[1]; } # if else { $self->{gff_file_created} = FALSE; } # else } # elsif elsif($line_array[0] =~ /ave_clone_length/) { if($line_array[1]) { $self->{ave_clone_length} = $line_array[1]; } # if else { $self->{ave_clone_length} = -1; } # else } # elsif elsif($line_array[0] =~ /band_factor/) { if($line_array[1]) { $self->{band_factor} = $line_array[1]; } # if else { $self->{band_factor} = -1; } # else } # elsif } # for message("The configuration was read"); } # else close CFG_FILE; } # read_project # ******************************** reset ***************************** =head2 reset reset; Resets the variables for the project. For internal use, only. =cut # --------------------------------------------------------------------- sub reset { my $self = shift; $self->{mlg_file} = ""; $self->{locus_file} = ""; $self->{fpc_file} = ""; $self->{qtl_file} = ""; $self->{end_matches_file} = ""; $self->{mtp_file} = ""; $self->{est_file} = ""; $self->{seq_file} = ""; $self->{rel_file} = ""; $self->{con_file} = ""; $self->{locus_names_crosschecked} = FALSE; $self->{locus_names_updated} = FALSE; $self->{clone_anchors_counted} = FALSE; $self->{clone_anchors_updated} = FALSE; $self->{contig_anchors_counted} = FALSE; $self->{contig_anchors_updated} = FALSE; $self->{gff_file_created} = FALSE; $self->{ave_clone_length} = -1; $self->{band_factor} = -1; } # reset # ******************************** save ***************************** =head2 save $project->save; Saves the project configuration to the project_name.cfg file. =cut # --------------------------------------------------------------------- sub save { my $self = shift; my $error = FALSE; my $current_project = $self->{current_project}; open(CFG_FILE, ">", "$current_project.cfg") or $error = TRUE; if($error) { message("Could not save to $current_project.cfg"); message("$!"); } # if else { print CFG_FILE "# $current_project.cfg\n"; print CFG_FILE "# This is the project configuration file\n"; print CFG_FILE "# for the $current_project project for extropy.\n"; print CFG_FILE "# This file is created automatically by extropy.\n"; print CFG_FILE "# Any changes made directly to this file may be lost.\n"; my $date = localtime; print CFG_FILE "# Last update: $date\n\n"; print CFG_FILE "mlg_file=$self->{mlg_file}\n"; print CFG_FILE "locus_file=$self->{locus_file}\n"; print CFG_FILE "fpc_file=$self->{fpc_file}\n"; print CFG_FILE "qtl_file=$self->{qtl_file}\n"; print CFG_FILE "end_matches_file=$self->{end_matches_file}\n"; print CFG_FILE "mtp_file=$self->{mtp_file}\n"; print CFG_FILE "est_file=$self->{est_file}\n"; print CFG_FILE "seq_file=$self->{seq_file}\n"; print CFG_FILE "rel_file=$self->{rel_file}\n"; print CFG_FILE "con_file=$self->{con_file}\n"; print CFG_FILE "locus_names_crosschecked=$self->{locus_names_crosschecked}\n"; print CFG_FILE "locus_names_updated=$self->{locus_names_updated}\n"; print CFG_FILE "clone_anchors_counted=$self->{clone_anchors_counted}\n"; print CFG_FILE "clone_anchors_updated=$self->{clone_anchors_updated}\n"; print CFG_FILE "contig_anchors_counted=$self->{contig_anchors_counted}\n"; print CFG_FILE "contig_anchors_updated=$self->{contig_anchors_updated}\n"; print CFG_FILE "gff_file_created=$self->{gff_file_created}\n"; print CFG_FILE "ave_clone_length=$self->{ave_clone_length}\n"; print CFG_FILE "band_factor=$self->{band_factor}\n"; message("The project configuration was saved to $current_project.cfg"); } # else close CFG_FILE; } # save_project 1