Seqfil stat.pl - calculate frequency of pulse sequence use

From NMR Wiki

Revision as of 17:27, 30 June 2009 by Evgeny Fadeev (Talk | contribs)
(diff) ←Older revision | Current revision (diff) | Newer revision→ (diff)
Jump to: navigation, search

This simple script will calculate number of times each pulse sequence is used. After scanning directories (which may take some time), it will print a two column table: number - pulse sequence name.

#!/usr/bin/perl
 
use strict;
 
#data directory that contains user dirs, no slash at the end
my $dataroot = '/export/home'; #location to look into for the user directories
 
my @dirs = qw();#add user names here inside the parentheses, no quotes, separated by empty space
 
my %stats;
foreach my $user (@dirs){
        my $udir = $dataroot . '/' . $user;
 
        open FIND, "find $udir -name procpar |" or die $!;
        my @procpars = <FIND>;
        close FIND;
 
        foreach my $p (@procpars){
                chomp $p;
                my $seqfil = getpar('seqfil',$p);
                if (!exists $stats{$seqfil}){
                        $stats{$seqfil} = 0;
                }
                $stats{$seqfil}++;
        }
}
 
my @explist = sort { $stats{$b} <=> $stats{$a} } keys %stats;
 
foreach my $e (@explist) {
        printf "%-6d%s\n", $stats{$e}, $e;
}
 
sub getpar{
        my ($par,$file) = @_;
        open PROCPAR, "<$file" or die $!;
        my $val = undef;
        while (my $line = <PROCPAR>) {
                if ($line =~ /^$par\s/){
                        $val = <PROCPAR>;
                        close PROCPAR;
                        last;
                }
        }
        my @bits = split /\s+/, $val;
        $val = $bits[1];
        if ($val =~ /^"/){
                $val =~ s/"//g;
        }
        return $val;
}
Personal tools