The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package File::Convert::Taqman;

=head1

Document Name: dok
Plate Type: Absolute Quantification
User: 7300Anwender

Document Information

Operator: 7300Anwender
Run Date: Monday, January 08, 2007 20:21:13
Last Modified: Monday, January 08, 2007 23:43:38
Instrument Type: Applied Biosystems 7300 Real-Time PCR System

Comments:
SDS v1.2

Well,Sample Name,Detector,Task,Ct,StdDev Ct,Qty,Mean Qty,StdDev Qty,Filtered,Tm
....
=cut

use strict;
use warnings;

use File::Convert::CSV;

use Data::Iter qw(:all);

use Data::Dump qw(dump);

Class::Maker::class
{
    isa => [qw( File::Convert::CSV )],

    public => 
    {
	hash => [qw( file_info )],
    },
    
    default =>
    {
	has_header => 1,
	
	separator => ",",
	
	skip_pattern => qr/^#/,
	
	skip_callback => sub {}
	
    },
};

sub is_file_valid : method
{
    my $this = shift;

    my $file = shift;


    open( FILE, $file ) or return 0;

    #$this->d_croak( "Only file format 'SDS v1.2' from the 'Applied Biosystems 7300 Real-Time PCR System' supported" ) unless join( '', @{ $this->data_file } ) =~ /SDS v1\.2/mi;

    my $data_file = join( '', <FILE> );

    if( $data_file =~ /SDS v1\.2/mi )
    {
	return 1;
    }

return 0;
}

sub preformat_data_file : method
{
    my $this = shift;
    
    
    my $result;

    $this->d_croak( "Only file format 'SDS v1.2' from the 'Applied Biosystems 7300 Real-Time PCR System' supported" ) unless join( '', @{ $this->data_file } ) =~ /SDS v1\.2/mi;
    
    for( iter scalar $this->data_file )
    {
	if( VALUE() =~ /^Well/ )
	{
	    splice @{$this->data_file}, 0, COUNTER-1;

	    $this->d_warn( "FILE_INFO %s", Data::Dump::dump( { $this->file_info } ) );

	    return;
	}

	$this->d_warn( "omitting header line %s", VALUE() ); 

	my $line = VALUE();

	chomp $line;

	$line =~ s/\r$//gi;

	if( $line =~ /:/ )
	{
	    my ($key, $value ) = split /\s?:\s?/, $line;
	    
	    $this->file_info->{$key} = $value;
	}
    }
}

1;