blob: bd586331215251be9ba156d2b5c1053c84b7e2e3 [file] [log] [blame]
#!/usr/bin/perl
# NOTE: this script is used by generate-new-scores; it is meant to be copied
# to and called from the masses/ directory of the checkout being used
# for the score generation run for the particular scoreset; you
# shouldn't need to call this script manually
#
# <@LICENSE>
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to you under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# </@LICENSE>
use strict;
use warnings;
my %active_rules;
my %original_rules;
open(ACTIVE, "../rules/active.list") or die "Cannot open active.list: $!";
while(<ACTIVE>) {
$active_rules{$1} = undef if (/^(?!__)(\S+)$/);
}
close ACTIVE;
open(ORIG, "../rules/50_scores.cf") or die "Cannot open original score file: $!";
while(<ORIG>) {
if (/^score\s+(\S+)/) {
$original_rules{$1} = undef;
}
}
close ORIG;
open(FREQS, "freqs") or die "Cannot open freqs: $!";
readline(FREQS);
readline(FREQS);
readline(FREQS);
while (<FREQS>) {
if (/(\S+)$/) {
delete $active_rules{$1};
}
}
close FREQS;
open(SCORES, ">scores-active-zeroed") or die "Cannot open scores-active-zeroed: $!";
if (scalar keys %active_rules) {
open(FREQS, ">>freqs") or die "Cannot open freqs: $!";
foreach my $rule (sort(keys %active_rules)) {
# no need to get the real scores for the base rules since there's no hits
# on them their score doesn't matter
print FREQS " 0.000 0.0000 0.0000 0.500 0.00 0.00 $rule\n";
# generate zero score lines for active.list non-base ruleset rules that are hitless
# skip the AWL rule, it doesn't have a static score TODO: detect this automatically?!
unless (exists $original_rules{$rule} || $rule =~ /^AWL$/) {
my $line = "score $rule ";
for (my $i = 0; $i < 30 - length $rule; $i++) {
$line .= ' ';
}
$line .= "0.000\n";
print SCORES $line;
}
}
close FREQS;
}
close SCORES;