#!/usr/bin/perl
use strict;
require XML::Simple;
use Data::Dumper;
use subs;
my %args = getParams();
my $xml_file = new XML::Simple();
my $probes = $xml_file->XMLin($args{inputfile}, keyattr => {});
my @index;
for (my $i=0; $i<@{$probes->{probe}}; $i++)
{
push @index, [$i, $probes->{probe}->[$i]->{species}->[0]->{probe_start}];
}
@index = sort { $a->[1] <=> $b->[1] } @index;
open (OUTFILE,">".$args{outputfile});
for (my $i=0; $i<@index; $i++)
{
#print $probes->{probe}->[$index[$i][0]]->{species}->[0]]->{probe_start} . "\n";
printf OUTFILE " \n";
printf OUTFILE " \n", $probes->{probe}->[$index[$i][0]]->{time};
printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{date};
printf OUTFILE " \n";
printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{length};
printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{alignment_identity};
printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{probe_identity};
printf OUTFILE " %d\n", $probes->{probe}->[$index[$i][0]]->{transversions};
printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{transitions};
printf OUTFILE " %d\n", $probes->{probe}->[$index[$i][0]]->{species}->[0]->{gaps};
printf OUTFILE " %s\n", $probes->{probe}->[$index[$i][0]]->{probe_alignment};
printf OUTFILE " \n";
printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{species}->[0]->{name};
printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{species}->[0]->{file};
printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{species}->[0]->{version};
printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{species}->[0]->{alignment_start};
printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{species}->[0]->{alignment_end};
printf OUTFILE " %s\n", $probes->{probe}->[$index[$i][0]]->{species}->[0]->{chromosome};
printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{species}->[0]->{alignment_strand};
printf OUTFILE " %d\n", $probes->{probe}->[$index[$i][0]]->{species}->[0]->{probe_start};
printf OUTFILE " %d\n", $probes->{probe}->[$index[$i][0]]->{species}->[0]->{probe_end};
printf OUTFILE " %s\n", $probes->{probe}->[$index[$i][0]]->{species}->[0]->{sequence};
printf OUTFILE " \n";
printf OUTFILE " \n";
printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{species}->[1]->{name};
printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{species}->[1]->{file};
printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{species}->[1]->{version};
printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{species}->[1]->{alignment_start};
printf OUTFILE " %d\n", $probes->{probe}->[$index[$i][0]]->{species}->[1]->{alignment_end};
printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{species}->[1]->{alignment_strand};
printf OUTFILE " %s\n", $probes->{probe}->[$index[$i][0]]->{species}->[1]->{chromosome};
printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{species}->[1]->{probe_start};
printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{species}->[1]->{probe_end};
printf OUTFILE " %s\n", $probes->{probe}->[$index[$i][0]]->{species}->[1]->{sequence};
printf OUTFILE " \n";
printf OUTFILE " \n\n\n";
}
close OUTFILE;
#########################################################################
# getParams - gets all options from the command line or keeps defaults
# dies if required options are not included
#
#########################################################################
sub getParams {
my %opts;
my $errstr = "";
use Getopt::Long;
use Data::Dumper;
GetOptions(\%opts, 'inputfile:s','outputfile:s', 'help');
if ($opts{help})
{
$errstr = " ";
}
if ($errstr) {
print <<"END_USAGE";
Description:
This script will take a XML probe document, and will sort the
probes based upon start bp location.
Usage: combine.pl -inputfile -outputfile [-help]
END_USAGE
print "\n$errstr" if ($errstr);
die("\n");
}
return (
inputfile => $opts{inputfile},
outputfile => $opts{outputfile}
);
}