Skip to content
Snippets Groups Projects
make_cratemap.pl 1.55 KiB
Newer Older
#!/usr/bin/perl

# Read a Hall C style MAP file and output a
# Hall A style crate map DB file.
#
# 22.03.2012 (saw)
Stephen A. Wood's avatar
Stephen A. Wood committed
# 11.04.2014 (saw) Perl cleanup

%crates=();

$crate = 0;
$nsubadd = 0;
$bsub = 0;
$modtype = 0;
$slot = 0;
while(<>) {
Stephen A. Wood's avatar
Stephen A. Wood committed
    chomp($line=$_);
    if($line=~/^\s*ROC=\s*(\d*)/i) {
	$i++;
	$crate = $1;
	if(not $crates{$crate}) {
	    $slotlist={};
	    $crates{$crate} = $slotlist;
	}
	$modtype = 0;
	$slot = 0;
Stephen A. Wood's avatar
Stephen A. Wood committed
    } elsif ($line=~/^\s*nsubadd=\s*(\d*)/i) {
	$nsubadd = $1;
	$modtype = 0;
Stephen A. Wood's avatar
Stephen A. Wood committed
    } elsif ($line=~/^\s*bsub=\s*(\d*)/i) {
	$bsub = $1;
	$modtype = 0;
Stephen A. Wood's avatar
Stephen A. Wood committed
    } elsif ($line=~/^\s*slot=\s*(\d*)/i) {
	$slot = $1;
	$modtype = 0;
Stephen A. Wood's avatar
Stephen A. Wood committed
    } elsif ($line=~/^\s*(\d*)\s*,\s*(\d*)\s*,\s*(\d*)/) {
	if($modtype == 0) {	# Slot not yet registered
	    if($nsubadd == 96) {
		$modtype = 1877;
	    } elsif($nsubadd == 64) {
		if($bsub == 16) {
		    $modtype = 1875;
		} elsif($bsub == 17) {
		    $modtype = 1881;
		}
	    }
	    if($modtype == 0) {
		print "Unknown module Crate $crate, Slot $slot\n";
	    }
	    $crates{$crate}{$slot} = $modtype;
	    # print "$crate $slot $modtype\n";
	}
    }
}
print "# Hall C Crate map\n";
foreach $crate (sort {$a <=> $b} keys %crates) {
    print "==== Crate $crate type fastbus\n";
    print "# slot  model   clear   header  mask    nchan   ndata\n";
    foreach $slot (sort {$a <=> $b} keys %{ $crates{$crate}}) {
	$modtype = $crates{$crate}{$slot};
	if($modtype == 1877) {
	    $ndata = 256;
	} else {
	    $ndata = 64;
	}
	printf " %2d     %d    1       0x0     0x0    %3d      %d\n"
	    ,$slot,$modtype,$nsubadd, $ndata;
    }
}