#!/usr/local/bin/perl -w $lines_of_junk = 4; # Number of lines of junk at top of .cm file $nt = 21; # Number of nucleotides in each molecule $fields_of_junk = 4; # Number of fields of junk at beginning of line $angles = 11; # Number of angles in each line # List of numbers of files to be averaged. Files must be named "refine.#.cm". #@files = (3, 5, 8, 11, 14, 17, 18, 20, 22, 23, 24, 27); #@files = (3, 5, 11, 14, 17, 20, 22, 23, 24); @files = (8, 18, 27); $junk = undef; # -w bait # Read files into $angles for ($file = 0; $file <= $#files; $file++) { open(CM, "refine." . sprintf("%2.2d", $files[$file]) . ".cm"); for ($i = 1; $i <= $lines_of_junk; $i++) { $junk = ; } for ($i = 1; $i <= $nt; $i++) { $angles[$file][$i] = [ (split(' ', ))[ $fields_of_junk - 1 .. $fields_of_junk + $angles - 1 ] ]; for ($angle = 0; $angle <= $angles - 1; $angle++) { # $angles[$file][$i][$angle] += # ($angles[$file][$i][$angle] < 0 ? 360 : 0); } } close CM; } # Calculate and print averages and standard deviations for ($i = 1; $i <= $nt; $i++) { for ($angle = 0; $angle <= $angles - 1; $angle++) { # Calculate average $sum = 0; for ($file = 0; $file <= $#files; $file++) { $sum += $angles[$file][$i][$angle]; } $average = $sum / ($#files + 1); # Calculate standard deviation $ssd = 0; for ($file = 0; $file <= $#files; $file++) { $ssd += ($angles[$file][$i][$angle] - $average) ** 2; } $sd = sqrt($ssd/$#files); printf("%4.1d+%3.1d", $average, $sd); # printf("%4.1d+%3.1d", $average - ($average > 180 ? 360 : 0), $sd); print "\t" unless $angle == $angles; } print "\n"; }