#/usr/bin/perl -w use strict; my $file; my $file1; my $file2; my $fileOutput; my $fileOutput2; my $fileOutput3; my @arrRef; my @arrTitle; my @array; my @array2; my @arrchimNode; my @arrClass; my @arrchimeraTitle; my @arrchimeraSeq; my @arrmaxInTitle ; my @arrmaxInSeq; my @arrminInTitle; my @arrminInSeq; my @arrmaxOutTitle; my @arrmaxOutSeq; my @arrminOutTitle; my @arrminOutSeq; my @arrmaxMaxPair; my @arrminMinPair; my @arrmaxMinPair; my @arrminMaxPair; my @arrchimeraCov; my @arrmaxInCov; my @arrminInCov; my @arrmaxOutCov; my @arrminOutCov; my @arrchimeraLength; my @arrmaxInLength; my @arrminInLength; my @arrmaxOutLength; my @arrminOutLength; $file = $ARGV[0]; $file1 = $ARGV[1]; $fileOutput=$ARGV[3]; $fileOutput2 = $ARGV[2]; $fileOutput3 = $ARGV[4]; open (IN, $file) or die "file ARGV[0] can not open -$!"; open (IN1, $file1) or die "file ARGV[1] can not open -$!"; while (my $line = ) { push(@arrTitle,substr($line,1)); } while (my $line2 = ) { push(@arrRef,$line2); } my $index; my $iterFeature; my $indexk=0; my $maxin =0; my $minout=0; my $indexSeq; my $chimSeq; my $maxinSeq; my $mininSeq; my $maxoutSeq; my $minoutSeq; my $class=0; my $indexClass=0; my $indexClassin=0; $index=0; my $iter; my $nodetest; my $indexin; my $class1=0; my $class2=0; my $class3=0; my $class4=0; my $numbnode=0; while ($index<@arrTitle) { $iter =0; # check if there is any same node in the chimera candidate $indexin=$index; if (($arrTitle[$indexin+1]!=$arrTitle[$indexin+3])&& ($arrTitle[$indexin+2]!=$arrTitle[$indexin+4]) && ($arrTitle[$indexin+1]!=$arrTitle[$indexin+2])&&($arrTitle[$indexin+3]!=$arrTitle[$indexin+4]) && ($arrTitle[$indexin+1]!=$arrTitle[$indexin+4])&&($arrTitle[$indexin+2]!=$arrTitle[$indexin+3]) ) { $iter=1; $numbnode++; } $chimSeq=''; $maxinSeq=''; $mininSeq=''; $maxoutSeq=''; $minoutSeq=''; $arrchimeraSeq[$indexClass] = ''; $arrmaxInSeq[$indexClass] = ''; $arrminInSeq[$indexClass] = ''; $arrmaxOutSeq[$indexClass] = ''; $arrminOutSeq[$indexClass] = ''; if ($iter) { chomp $arrTitle[$index]; for($indexSeq=0;$indexSeq<@arrRef;$indexSeq++) { if ($arrRef[$indexSeq] =~ m/^$arrTitle[$index]/){ @array=split(/\t/,$arrRef[$indexSeq]); $arrchimeraSeq[$indexClass] = $array[1]; last; } } chomp $arrTitle[$index+1]; for($indexSeq=0;$indexSeq<@arrRef;$indexSeq++) { if($arrRef[$indexSeq] =~ m/^$arrTitle[$index+1]/) { @array=split(/\t/,$arrRef[$indexSeq] ); $arrmaxInSeq[$indexClass] = $array[1]; last; } } chomp $arrTitle[$index+2]; for($indexSeq=0;$indexSeq<@arrRef;$indexSeq++) { if ($arrRef[$indexSeq] =~ m/^$arrTitle[$index+2]/) { @array=split(/\t/,$arrRef[$indexSeq] ); $arrminInSeq[$indexClass] = $array[1]; last; } } chomp $arrTitle[$index+3]; for($indexSeq=0;$indexSeq<@arrRef;$indexSeq++) { if ($arrRef[$indexSeq] =~ m/^$arrTitle[$index+3]/) { @array=split(/\t/,$arrRef[$indexSeq] ); $arrmaxOutSeq[$indexClass] = $array[1]; last; } } chomp $arrTitle[$index+4]; for($indexSeq=0;$indexSeq<@arrRef;$indexSeq++) { if ($arrRef[$indexSeq] =~ m/^$arrTitle[$index+4]/) { @array=split(/\t/,$arrRef[$indexSeq] ); $arrminOutSeq[$indexClass] = $array[1]; last; } } if ((!($arrmaxInSeq[$indexClass] eq ''))&& (!($arrminInSeq[$indexClass] eq ''))&&(!($arrmaxOutSeq[$indexClass] eq ''))&&(!($arrminOutSeq[$indexClass] eq ''))) { if (($arrmaxInSeq[$indexClass] eq $arrmaxOutSeq[$indexClass]) && ($arrminInSeq[$indexClass] eq $arrminOutSeq[$indexClass]) &&(!($arrmaxInSeq[$indexClass] eq $arrminInSeq[$indexClass]))&&(!($arrmaxOutSeq[$indexClass] eq $arrminOutSeq[$indexClass]))) { $arrClass[$indexClass]="1"; $class1 ++; } elsif (($arrminInSeq[$indexClass] eq $arrmaxOutSeq[$indexClass]) && ($arrmaxInSeq[$indexClass] eq $arrminOutSeq[$indexClass]) &&(!($arrmaxInSeq[$indexClass] eq $arrminInSeq[$indexClass]))&&(!($arrmaxOutSeq[$indexClass] eq $arrminOutSeq[$indexClass]))) { $arrClass[$indexClass]="2"; $class2 ++; } else { $arrClass[$indexClass]="3"; $class3 ++; } }else { $arrClass[$indexClass]="3"; $class3 ++; } @array2=split('___',$arrTitle[$index]); $arrchimeraCov[$indexClass]= $array2[1]; $arrchimeraLength[$indexClass]= $array2[2]; $arrmaxMaxPair[$indexClass]= $array2[3]; $arrminMinPair[$indexClass]= $array2[4]; $arrmaxMinPair[$indexClass]= $array2[5]; $arrminMaxPair[$indexClass]= $array2[6]; @array2=split('___',$arrTitle[$index+1]); $arrmaxInCov[$indexClass]= $array2[1]/$arrchimeraCov[$indexClass]; $arrmaxInLength[$indexClass]= $array2[2]; @array2=split('___',$arrTitle[$index+2]); $arrminInCov[$indexClass]= $array2[1]/$arrchimeraCov[$indexClass]; $arrminInLength[$indexClass]= $array2[2]; @array2=split('___',$arrTitle[$index+3]); $arrmaxOutCov[$indexClass]= $array2[1]/$arrchimeraCov[$indexClass]; $arrmaxOutLength[$indexClass]= $array2[2]; @array2=split('___',$arrTitle[$index+4]); $arrminOutCov[$indexClass]= $array2[1]/$arrchimeraCov[$indexClass]; $arrminOutLength[$indexClass]= $array2[2]; $arrchimNode[$indexClass]=$arrTitle[$indexin]; $indexClass++; } $index = $index+5; } open OUTPUT2, ">$fileOutput2"; for($indexClass=0;$indexClass<@arrClass;$indexClass++) { print OUTPUT2 "" . $arrClass[$indexClass]. "\t" ."1:".$arrmaxInCov[$indexClass]."\t"."2:".$arrminInCov[$indexClass]."\t"."3:".$arrmaxOutCov[$indexClass]."\t"."4:".$arrminOutCov[$indexClass]."\t" ."5:".$arrmaxMaxPair[$indexClass]."\t"."6:".$arrminMinPair[$indexClass]."\t"."7:".$arrmaxMinPair[$indexClass]."\t"."8:".$arrminMaxPair[$indexClass]."\t" ."9:".$arrchimeraCov[$indexClass]."\t"."10:".$arrchimeraLength[$indexClass]."\n"; } close OUTPUT2; open OUTPUT, ">$fileOutput"; for($indexClass=0;$indexClass<@arrClass;$indexClass++) { print OUTPUT "" . $arrClass[$indexClass]. "\n"; } close OUTPUT; open OUTPUT3, ">$fileOutput3"; for($indexClass=0;$indexClass<@arrClass;$indexClass++) { print OUTPUT3 "" .$arrchimNode[$indexClass]. "\n"; } close OUTPUT3;