#!/usr/bin/perl use strict; use warnings; # ------------------------------ configure SAIs to keep # simply enter names of SAIs to remain in the list below. my @keep = ( '3_prime', '5_prime', 'gap_align', 'termini', 'termini_5_3', 'ECOLI', 'HELIX', 'HELIX_NR', 'E_coli_I_Accessibility', 'E_coli_II_Accessibility', 'E_coli_III_Accessibility', 'E_coli_IV_Accessibility', 'E_coli_V_Accessibility', 'Met_Sedu_I_Accessibility', 'Met_Sedu_II_Accessibility', 'Met_Sedu_III_Accessibility', 'MetSedu_IV_Accessibility', # 'MetSedu' here and 'Met_Sedu' above (bug in silva DB?) 'MetSedu_V_Accessibility', 'PirStr1_I_Accessibility', 'PirStr1_II_Accessibility', 'SaccCer_I_Accessibility', 'SaccCer_II_Accessibility', ); # ------------------------------ configure SAIs to keep [end] BEGIN { if (not exists $ENV{'ARBHOME'}) { die "Environment variable \$ARBHOME has to be defined"; } my $arbhome = $ENV{'ARBHOME'}; push @INC, "$arbhome/lib"; push @INC, "$arbhome/PERL_SCRIPTS/lib"; 1; } use ARB; use tools; my $gb_main = ARB::open(":","r"); if (not $gb_main) { my $error = ARB::await_error(); die "$error"; } die "This script will delete most SAIs from your database.\nTo use, edit it, uncomment this line and save it locally.\nAlso edit list of kept SAIs to fit your needs."; # ------------------------------ read existing SAIs dieOnError(ARB::begin_transaction($gb_main), 'begin_transaction'); my $gb_SAIs = ARB::search($gb_main, '/extended_data', 'NONE'); die 'failed to find SAI-data' if not $gb_SAIs; my @SAIs = (); for (my $gb_SAI = ARB::entry($gb_SAIs, 'extended'); $gb_SAI; $gb_SAI = ARB::nextEntry($gb_SAI)) { my $gb_name = ARB::entry($gb_SAI, 'name'); die 'SAI lacks name' if not $gb_name; my $name = ARB::read_string($gb_name); expectError('read name of SAI') if not $name; push @SAIs, $name; } dieOnError(ARB::commit_transaction($gb_main), 'commit_transaction'); my $SAIs = scalar(@SAIs); BIO::message($gb_main, "Found $SAIs SAIs"); # ------------------------------ read existing SAIs [end] # ------------------------------ decide which SAIs to delete my %keep = map { $_ => 1; } @keep; my @delete = grep { not defined $keep{$_}; } @SAIs; my $keep = scalar(@keep); my $delete = scalar(@delete); BIO::message($gb_main, "Deleting $delete SAIs ($keep listed as protected)"); # ------------------------------ decide which SAIs to delete [end] BIO::remote_action($gb_main,'ARB_NT','sai_admin'); my $count = 0; foreach my $saidel (@delete) { ++$count; my $percent = int($count/$delete*100.0); print "Deleting field $count/$delete ($percent%, '$saidel')\n"; BIO::remote_awar($gb_main,'ARB_NT','tmp/focus/sai_name', $saidel); BIO::remote_action($gb_main,'ARB_NT','INFO_OF_SAI/DELETE'); } BIO::message($gb_main, "$delete unlisted SAIs have been deleted."); BIO::message($gb_main, "Check remaining SAIs before you overwrite your database."); # recording stopped @ Sun Dec 26 11:19:28 2021 ARB::close($gb_main);