Phylogenetic algorithm selection

See http://pga.lbl.gov/Workshop/April2002/lectures/Olken.pdf for details, in brief:

• Continuous characters, lots of data, few computing resources ==> Neighbor joining
• Discrete characters, few mutations / homoplasy ==> Maximum Parsimony
• Discrete characters, limited sequence lengths, some homoplasy ==> Maximum Likelihood Estimation
• Discrete characters, many taxa ==> Supertree
• Complete genomes ==> Whole genome phylogeny

Compare array definition in C++, Java, C#, Perl, PHP and JavaScript

C++
int arr[] = {1, 2, 3};

Java
int[] arr= {1, 2, 3};
or  int arr[] = {1, 2, 3}; //discouraged

C#
int[] arr = {1, 2, 3};

Perl
@arr = (1, 2, 3);

PHP
$arr = array(1, 2, 3);
or $arr = [1, 2, 3];

$price = array(‘a’=>1, ‘b’=>2, ‘c’=>3); # hash

JavaScript
var arr = new Array(1, 2, 3);
or
var arr = [1,2,3];

Python
tuple_var = (1, 2, 3)
list_var = [1,2,3]

Visual Basic
Dim arr = {1,2,3}

Perl sed style command

From http://www.itworld.com/nl/unix_sys_adm/09252002/

perl -i -p -e s/floor/hamper/ig $file
perl -i -p -e ‘s/hamper = no/hamper = yes/’ $file
perl -i -p -e ‘s/floor\s+yes/floor\tno/’ $file
perl -i.bak -p -e s/floor/hamper/ig $file

Each of these commands edits the file referenced by $file “in place”. That is, it doesn’t create another file. It opens the file read/write and makes the change requested with no changes to the file except the one intended.

The -i argument tells Perl to make the change in-line using the file for both reading and writing. This is routine for Perl. If a -i is followed by a file extension (as shown in the 4th example above), a backup of the file is created before the program is run.

The -p tells perl to assume a loop around the one-line program and to echo the output.

The -e specifies that the one-line program is coming next. In all of our examples, we’ve provided a sed-like change command.

Now let’s look at how Perl substitutions work.

The leftmost expression in a s/this/that/ command can be anything from an exact match to a fuzzy match. We can match literally on the word “this” or we can match on any word that starts with t or any four-letter word if we want to. It all depends on the expression that we use. The rightmost expression is always exact, of course. In an odd sort of way, a Perl substitute command is like me asking my stepkid to pick up the clothing from her floor and put it in her hamper. If I were too exact when I told her what to pick up, she would pick up only that. If I were not precise on what I wanted her to do with the clothes she picked up, they’d probably end up under the bed or on the floor of her closet. Clearly we need to match on clothing anywhere on the floor and specify the exact destination as the hamper.

perl -i -p -e s/floor/hamper/ig $file

In this particular example, we’ve simply changed “floor” to “hamper”.

perl -i -p -e ‘s/hamper = no/hamper = yes/’ $file

In this example, we’ve included more complex strings. No problem.

perl -i -p -e ‘s/floor\s+yes/floor\tno/’ $file

This example is a bit more interesting. We’ve matched on “floor” followed by white space, followed by “yes” and changed it to “floor” followed by a tab followed by “no”.

perl -i.bak -p -e s/floor/hamper/ig $file

If we include an file extension as shown in the line above, we’d be left with a file called $file.bak containing the original text. This is a good idea if you might have unwanted side effects. The “ig” at the end specifies that we’re ignoring case and changing every instance of the word that appears in each line (not just the first). Ignoring case it itself a big time saver in many situations.

For “zapping” files, Perl is hard to beat.

Web fonts from Sun