The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
package Bio::ConnectDots::ConnectorSet::gse_probe;
use strict;
use vars qw(@ISA);
use Bio::ConnectDots::ConnectorSet;
@ISA = qw(Bio::ConnectDots::ConnectorSet);
my (%platforms, %ids, @ids, $geo);
my $flag = 0;
	
sub parse_entry {
  	my ($self) = @_;
  	my $input_fh=$self->input_fh;
  	while (<$input_fh>) {
		chomp;
		if (/^\!Platform_geo_accession\s*=\s*(GPL\d+)/) {
			$geo = $1;
			$flag = 1;
			$flag = 0 if ($platforms{$geo});
			$platforms{$geo} = 1;
			next;	
		}
		if (/^\^/ && $flag == 1) {
			$flag = 0;
			@ids = ();
			next;
		}
		next unless ($flag == 1);
		if (/^\W(.*?)\s/) {
			my $i = $1;
			push (@ids, uc $i);
			$ids{(uc $i)}=1;
			next;
		}
		my @vals = split('\t');
		next if ($ids[0] eq $vals[0]);
		$self->put_dot("PlatformID","$geo") if $geo;
		my @pass = @ids;
		my ($id, $acc);
		foreach (@vals) {
			my $key = shift @pass;
			if ($key eq 'ID') { $id = $_;}
			if ($key eq 'GI') { $acc = $_;}
			if ($key eq 'GB_ACC') { $acc = $_;}
			if ($key eq 'GB_LIST') { 
				if ($_ =~ /\w+/) {
					$acc .= ",$_" if $acc;
				}
			}
			$self->put_dot($key,$_) if $_;
		}
		if ($acc =~ /,/) {
			my @acc = split(',', $acc);
			foreach (@acc) {
				$self->put_dot("AccessionID",$_) if $_;
			}	
		} else {	
			$self->put_dot("AccessionID",$acc) if $acc;
		}
		return $self->have_dots;
	}
}


1;