39
|
1 |
#======================================================================
|
|
2 |
# . M A T C H _ M I N I M I Z E . M A D
|
|
3 |
# doc: Tue Aug 22 18:31:22 2006
|
|
4 |
# dlm: Wed Aug 23 23:15:13 2006
|
|
5 |
# (c) 2006 A.M. Thurnherr
|
|
6 |
# uE-Info: 39 26 NIL 0 0 72 2 2 4 NIL ofnI
|
|
7 |
#======================================================================
|
|
8 |
|
|
9 |
# sum of absolute deviations
|
|
10 |
|
|
11 |
#======================================================================
|
|
12 |
|
|
13 |
sub MM_usage(@)
|
|
14 |
{
|
|
15 |
@MM_fname = @_;
|
|
16 |
|
|
17 |
croak("match-minimize usage: -m SAD(<field>[,...])\n")
|
|
18 |
unless (@MM_fname > 0);
|
|
19 |
for (my($fi)=0; $fi<@MM_fname; $fi++) {
|
|
20 |
$MM_fnr[$fi] = &fnr($MM_fname[$fi]);
|
|
21 |
$MM_wfnr[$fi] = &wfnr($MM_fname[$fi]);
|
|
22 |
&IS_init($MM_wfnr[$fi],$MM_cwfnr); # prepare interpolation
|
|
23 |
}
|
|
24 |
for (my($r)=0; $r<@ants_; $r++) {
|
|
25 |
for (my($fi)=0; $fi<@MM_fname; $fi++) {
|
|
26 |
croak("$0: $MM_fname[$fi] must be numeric\n")
|
|
27 |
unless numberp($ants_[$r][$MM_fnr[$fi]]) &&
|
|
28 |
numberp($ants_[$r][$MM_wfnr[$fi]]);
|
|
29 |
}
|
|
30 |
}
|
|
31 |
}
|
|
32 |
|
|
33 |
#======================================================================
|
|
34 |
|
|
35 |
sub MM_eval(@)
|
|
36 |
{
|
|
37 |
&MW_warp(@_);
|
|
38 |
|
|
39 |
my($sad) = my($nad) = 0;
|
|
40 |
for (my($r)=0; $r<@ants_; $r++) {
|
|
41 |
my($xi) = &bSearch($MW_cwfnr,$ants_[$r][$MW_cfnr]);
|
|
42 |
next unless defined($xi);
|
|
43 |
$nad++;
|
|
44 |
for (my($fi)=0; $fi<@MM_fnr; $fi++) {
|
|
45 |
my($wv) = &IS_interpolate(\@wf_,$MW_cwfnr,$ants_[$r][$MW_cfnr],$xi,$MM_wfnr[$fi]);
|
|
46 |
$sad += abs($ants_[$r][$MM_fnr[$fi]] - $wv);
|
|
47 |
}
|
|
48 |
}
|
|
49 |
return $sad/$nad;
|
|
50 |
}
|
|
51 |
|
|
52 |
#======================================================================
|
|
53 |
|
|
54 |
1;
|