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