// bsp functions
#=================================================================
# Extract from the given '\n' containing string section with
# given name. Section list: align, sequence, error, warning.
#=================================================================
//function f_getSect( $myInp, $mySect ) {
function f_getSect( $arr, $mySect ) {
//my( $myInp, $mySect ) = @_;
$flag = 0;
$myRes = "";
//+$arr = preg_split( "/\n/", $myInp );
//foreach $str ( @arr ) {
for( $i = 0; $i < count($arr); ++$i ) {
$str = $arr[$i];
//last if( $flag == 1 && $str =~ /^\[/ );
if( $flag == 1 && preg_match( "/^\[/", $str ) )
break; // -----------------------> next sect
//$myRes .= $str."\n" if( $flag == 1 );
if( $flag == 1 )
$myRes .= $str ; //."\n";
//$flag = 1 if( $flag == 0 && $str =~ /\[($mySect)\]/ );
if( $flag == 0 && preg_match( "/\[(". $mySect. ")\]/", $str ) )
$flag = 1;
}
return $myRes;
}
#=================================================================
# Create mapHash, such as $mapHash{ $tmpName } = $oldName,
# where $tmpName = seq0001, $oldName - initial use given name.
# Here sequences names are justified to the maximal length.
#=================================================================
function f_makeHash( $myInp ) { //= $map
//my( $myInp ) = @_;
//@arr = split( /\n/, $myInp );
$arr = preg_split( "/\n/", $myInp );
$myHash = Array(); //%myHash = ();
$maxLen = 0;
//foreach $str ( @arr ) {
for( $i = 0; $i < count($arr); ++$i ) {
$str = $arr[$i];
if( empty( $str ) )
continue;
//+if( $i == 0 )
//+ echo "str=" . $str . "
\n";
$str2 = split( "[\r\n]", $str, 2 ); // ***
//continue;
//@_arr = split( /\s+/, $str );
$_arr = preg_split( "/\s+/", $str2[0], 2 );
//$_arr = split( "[ +]", $str, 2 );
if( empty( $_arr[ 0 ] ) )
continue; // <--------------------
//$myHash{ $_arr[ 0 ] } = substr( $_arr[ 1 ], 0, 20 );
$myHash[ $_arr[ 0 ] ] = substr( $_arr[ 1 ], 0, 20 );
//+echo "***". $_arr[0]. "=". $_arr[1] . "
\n";
//$maxLen = length( $_arr[ 1 ] ) if( $maxLen < length( $_arr[ 1 ] ) );
if( $maxLen < strlen( $_arr[ 1 ] ) )
$maxLen = strlen( $_arr[ 1 ] ) ;
}
//foreach $key ( keys %myHash ) {
reset( $myHash );
while( list( $key, $value ) = each( $myHash ) ) {
//for( $i = length( $myHash{ $key } ); $i < $maxLen; $i++ ) {
// $myHash{ $key } .= " ";
//}
for( $i = strlen( $value ); $i < $maxLen; $i++ ) {
$value .= " ";
}
$myHash[ $key ] = $value;
}
return $myHash; //%myHash;
}
#=================================================================
# Print warnins is exist
#=================================================================
function f_prnWarn() { // ???????
/**
my( $myWar ) = @_;
if( $myWar !~ /^[\s]+$/) {
print "";
@aWar = split( /\n/, $myWar );
foreach $wStr ( @aWar ) {
@_ar = split( /[\s]+/, $wStr, 2 );
print $_ar[ 1 ]."
";
}
print "";
return 1;
}
**/
return 0;
}
#=================================================================
# Substitute all tmpName with old ( initial, user ) names.
#=================================================================
function f_substName( $myAli, $myHash ) {
//my( $myAli ) = @_;
//#$myAli = emphGap( $myAli );
//foreach $name ( keys %mapHash ) {
while( list( $name, $oldName ) = each( $myHash ) ) {
//$oldName = $mapHash{ $name };
//$myAli =~ s/$name/$oldName/g;
//+echo $name . "=". $oldName . "
\n";
if( empty( $name ) )
continue; // <------------------
//-$myAli = preg_replace( "/".$name."/", "/".$oldName."/", $myAli );
$myAli = str_replace( $name, $oldName, $myAli );
}
return $myAli;
}
#=================================================================
# Emphasize inserted gaps with red color.
#=================================================================
function f_emphGap() {
/**
my( $myAli ) = @_;
$shift = 8;
$pLen = 50;
$begEmp = "";
$endEmp = "";
@aAli = split( /\n/, $myAli );
if( @aAli[ 0 ] =~ /^([\w]+[\s]+)/ ) {
$shift = length( $1 );
}
if( @aAli[ 0 ] =~ /\s([\S]+)$/ ) {
$pLen = length( $1 );
}
@aNum = ();
$num = 0;
$numSeq = 0;
foreach $tStr ( @aAli ) {
$numSeq = $num if( $numSeq == 0 && length( $tStr ) < $shift );
$aNum[ $num++ ] = $shift;
}
@aGap = split( /\n+/, $gap );
#print "numSeq $numSeq\n";
foreach $tStr ( @aGap ) {
@insPar = split( /[\s]+/, $tStr );
$_numStr = substr( $insPar[ 0 ], 3 );
$_begIns = $insPar[ 1 ];
$numStr = ( $numSeq + 1 )*int( $_begIns/$pLen ) + $_numStr - 1;
$begIns = $_begIns - $pLen*int( $_begIns/$pLen ) + $aNum[ $numStr ];
$lenIns = $insPar[ 2 ];
while( $lenIns > 0 ) {
$insStr = $aAli[ $numStr ];
$delta = length( substr( $insStr, $begIns, $lenIns ) );
$aAli[ $numStr ] = substr( $insStr, 0, $begIns ).$begEmp.
substr( $insStr, $begIns, $lenIns ).$endEmp.
substr( $insStr, $begIns + $lenIns );
$aNum[ $numStr ] += length( $begEmp ) + length( $endEmp );
$lenIns -= $delta;
$numStr += $numSeq + 1;
$begIns = $shift;
}
}
$myAli = "";
foreach $tStr ( @aAli ) {
$myAli .= $tStr."\n";
}
return $myAli;
**/
}
function f_subsCont() {
/**
my( $myOldStr, $myNewStr ) = @_;
$response =~ s/$myOldStr/$myNewStr/g;
**/
}
#_________________________________________ bsp errors
function f_outBspErrors( $error ) {
print "
$error\n"; print "