$input_file = shift(@ARGV);
$gtf_file  = shift(@ARGV);
$aligned_prefix = shift(@ARGV);
$aligned_file = shift(@ARGV);
$output_file = shift(@ARGV);

%sizes = ();
open( IN, "<".$gtf_file );
while( $L = <IN> ) {
    chomp( $L );
    @D = split( /\t/, $L );
    if( $D[2] eq "exon" ) {
	@D2 = split( /;/, $D[8] );
	for( $i = 0; $i < scalar @D2; $i++ ) {
	    $D2[$i] =~ s/^\s+|\s+$//g; # trim white space
	    @D3 = split( / /, $D2[$i] );
	    if( $D3[0] eq "gene_symbol" || $D3[0] eq "gene_name" ) {
		$refseq_id = substr( $D3[1], 1, -1 );
		$length = $D[4] - $D[3] + 1;
		if( ! exists $sizes{$refseq_id} ) {
		    $sizes{$refseq_id} = 0;
		}
		$sizes{$refseq_id} += $length;
	    }
	}
    }
}
close( IN );

open( IN, "<".$input_file );
open( OUT, ">".$output_file );

$L = <IN>;
chomp( $L );
@D = split( /\t/, $L );
print OUT $L."\n";

@aligned = ();
for( $i = 1; $i < scalar @D; $i++ ) {
    open( INA, "<".$aligned_prefix."/".$D[$i]."/".$aligned_file );
    $A = <INA>;
    chomp( $A );
    push( @aligned, $A );
    close( INA );
}

while( $L = <IN> ) {
    chomp( $L );
    @D = split( /\t/, $L );

    if( exists $sizes{$D[0]} ) {
	print OUT $D[0];
	for( $i = 1; $i < scalar @D; $i++ ) {
	    $rpkm = ( $D[$i] * 1000000000 ) / ( $sizes{$D[0]} * $aligned[$i-1] );
	    print OUT "\t".$rpkm;
	}
	print OUT "\n";
    }
}

close( IN );
close( OUT );
