]> jspc29.x-matter.uni-frankfurt.de Git - daqtools.git/commitdiff
changes from DIRC beamtime
authorhadaq <M.Traxler@gsi.de>
Mon, 11 May 2015 09:37:15 +0000 (11:37 +0200)
committerhadaq <M.Traxler@gsi.de>
Mon, 11 May 2015 09:37:15 +0000 (11:37 +0200)
25 files changed:
dmon/code/Dmon.pm
dmon/scripts/ChanDb_discdirc.pm [new file with mode: 0644]
dmon/scripts/dmon_heatmapdirc.pl [new file with mode: 0755]
dmon/scripts/dmon_heatmapdiscdirc.pl [new file with mode: 0755]
dmon/scripts/dmon_heatmapflash.pl [new file with mode: 0755]
dmon/scripts/dmon_numfee.pl
dmon/scripts/dmon_padiwatemp.pl
dmon/scripts/dmon_trgerrors.pl [new file with mode: 0755]
thresholds/thresholds_automatic.pl
thresholds/thresholds_automatic_jan.pl
thresholds/thresholds_compare_dirc.pl [new file with mode: 0755]
tools/padiwa.pl
users/gsi_dirc/ChannelMapping.pm [new file with mode: 0644]
users/gsi_dirc/addresses_trb3.db
users/gsi_dirc/barreloff.pl [new file with mode: 0644]
users/gsi_dirc/check_ping.pl
users/gsi_dirc/dmon_config.pl [new file with mode: 0755]
users/gsi_dirc/dmon_restart.pl [new file with mode: 0755]
users/gsi_dirc/makethresholds.sh [new file with mode: 0755]
users/gsi_dirc/register_config_tdc.db
users/gsi_dirc/register_configgbe.db
users/gsi_dirc/register_configgbe_ip.db
users/gsi_dirc/start_readout.pl
users/gsi_dirc/startup.sh
users/gsi_dirc/write_thresholds.pl [new symlink]

index 1dd1dfea541631c8ab9a0b5025ca067815a6f325..0676fb4876190b060a9233423b046ee29384a5d3 100644 (file)
@@ -6,7 +6,7 @@ use strict;
 use HADES::TrbNet;
 use Time::HiRes qq|usleep|;
 
-print STDERR "Script started at ".strftime("%d.%m.%y %H:%M:%S", localtime()).".\n";
+#print STDERR "Script started at ".strftime("%d.%m.%y %H:%M:%S", localtime()).".\n";
 
 
 
@@ -305,7 +305,7 @@ sub PadiwaSendCmd {
 
     if (trb_strerror() =~ "no endpoint has been reached") {return -1;}
     if (trb_strerror() ne "No Error") {
-      usleep 1E5;
+      usleep 3E4;
       if($errcnt >= 12) {
         return "SPI still blocked\n";
         }
diff --git a/dmon/scripts/ChanDb_discdirc.pm b/dmon/scripts/ChanDb_discdirc.pm
new file mode 100644 (file)
index 0000000..bdb85ab
--- /dev/null
@@ -0,0 +1,692 @@
+package ChanDb_discdirc;
+
+our $chanDb = {
+
+
+          '1' => {
+                   '0.00' => {
+                               'fpga' => 8231,
+                               'chan' => 16
+                             },
+                   '8.40' => {
+                               'fpga' => 8230,
+                               'chan' => 48
+                             },
+                   '9.60' => {
+                               'fpga' => 8230,
+                               'chan' => 46
+                             },
+                   '12.90' => {
+                                'chan' => 39,
+                                'fpga' => 8230
+                              },
+                   '3.60' => {
+                               'chan' => 8,
+                               'fpga' => 8231
+                             },
+                   '16.20' => {
+                                'fpga' => 8230,
+                                'chan' => 15
+                              },
+                   '9.00' => {
+                               'chan' => 3,
+                               'fpga' => 8230
+                             },
+                   '15.90' => {
+                                'chan' => 16,
+                                'fpga' => 8230
+                              },
+                   '15.30' => {
+                                'chan' => 35,
+                                'fpga' => 8230
+                              },
+                   '8.70' => {
+                               'chan' => 4,
+                               'fpga' => 8230
+                             },
+                   '1.80' => {
+                               'fpga' => 8230,
+                               'chan' => 23
+                             },
+                   '6.60' => {
+                               'chan' => 31,
+                               'fpga' => 8230
+                             },
+                   '1.50' => {
+                               'chan' => 24,
+                               'fpga' => 8230
+                             },
+                   '0.90' => {
+                               'fpga' => 8231,
+                               'chan' => 11
+                             },
+                   '12.60' => {
+                                'chan' => 9,
+                                'fpga' => 8230
+                              },
+                   '11.70' => {
+                                'chan' => 41,
+                                'fpga' => 8230
+                              },
+                   '17.70' => {
+                                'chan' => 38,
+                                'fpga' => 8229
+                              },
+                   '1.20' => {
+                               'fpga' => 8231,
+                               'chan' => 12
+                             },
+                   '3.30' => {
+                               'chan' => 7,
+                               'fpga' => 8231
+                             },
+                   '6.90' => {
+                               'chan' => 1,
+                               'fpga' => 8231
+                             },
+                   '15.00' => {
+                                'chan' => 13,
+                                'fpga' => 8230
+                              },
+                   '12.00' => {
+                                'fpga' => 8230,
+                                'chan' => 42
+                              },
+                   '2.10' => {
+                               'fpga' => 8231,
+                               'chan' => 9
+                             },
+                   '17.40' => {
+                                'fpga' => 8229,
+                                'chan' => 33
+                              },
+                   '0.30' => {
+                               'fpga' => 8230,
+                               'chan' => 22
+                             },
+                   '3.00' => {
+                               'fpga' => 8230,
+                               'chan' => 25
+                             },
+                   '14.10' => {
+                                'fpga' => 8230,
+                                'chan' => 37
+                              },
+                   '15.60' => {
+                                'chan' => 36,
+                                'fpga' => 8230
+                              },
+                   '7.50' => {
+                               'chan' => 2,
+                               'fpga' => 8230
+                             },
+                   '10.20' => {
+                                'fpga' => 8230,
+                                'chan' => 5
+                              },
+                   '10.50' => {
+                                'fpga' => 8230,
+                                'chan' => 43
+                              },
+                   '4.20' => {
+                               'chan' => 27,
+                               'fpga' => 8230
+                             },
+                   '2.70' => {
+                               'chan' => 26,
+                               'fpga' => 8230
+                             },
+                   '8.10' => {
+                               'chan' => 47,
+                               'fpga' => 8230
+                             },
+                   '6.30' => {
+                               'chan' => 32,
+                               'fpga' => 8230
+                             },
+                   '9.30' => {
+                               'fpga' => 8230,
+                               'chan' => 45
+                             },
+                   '18.60' => {
+                                'chan' => 35,
+                                'fpga' => 8229
+                              },
+                   '4.80' => {
+                               'fpga' => 8231,
+                               'chan' => 6
+                             },
+                   '5.10' => {
+                               'fpga' => 8230,
+                               'chan' => 30
+                             },
+                   '19.20' => {
+                                'fpga' => 8229,
+                                'chan' => 39
+                              },
+                   '13.80' => {
+                                'chan' => 11,
+                                'fpga' => 8230
+                              },
+                   '7.80' => {
+                               'fpga' => 8230,
+                               'chan' => 1
+                             },
+                   '9.90' => {
+                               'fpga' => 8230,
+                               'chan' => 6
+                             },
+                   '18.90' => {
+                                'fpga' => 8229,
+                                'chan' => 40
+                              },
+                   '13.20' => {
+                                'fpga' => 8230,
+                                'chan' => 40
+                              },
+                   '18.30' => {
+                                'chan' => 36,
+                                'fpga' => 8229
+                              },
+                   '14.70' => {
+                                'fpga' => 8230,
+                                'chan' => 14
+                              },
+                   '16.50' => {
+                                'fpga' => 8230,
+                                'chan' => 33
+                              },
+                   '14.40' => {
+                                'fpga' => 8230,
+                                'chan' => 38
+                              },
+                   '10.80' => {
+                                'chan' => 44,
+                                'fpga' => 8230
+                              },
+                   '13.50' => {
+                                'chan' => 12,
+                                'fpga' => 8230
+                              },
+                   '17.10' => {
+                                'fpga' => 8229,
+                                'chan' => 34
+                              },
+                   '11.10' => {
+                                'chan' => 8,
+                                'fpga' => 8230
+                              },
+                   '16.80' => {
+                                'fpga' => 8230,
+                                'chan' => 34
+                              },
+                   '5.70' => {
+                               'fpga' => 8231,
+                               'chan' => 3
+                             },
+                   '2.40' => {
+                               'chan' => 10,
+                               'fpga' => 8231
+                             },
+                   '12.30' => {
+                                'fpga' => 8230,
+                                'chan' => 10
+                              },
+                   '18.00' => {
+                                'chan' => 37,
+                                'fpga' => 8229
+                              },
+                   '3.90' => {
+                               'chan' => 28,
+                               'fpga' => 8230
+                             },
+                   '0.60' => {
+                               'fpga' => 8230,
+                               'chan' => 21
+                             },
+                   '7.20' => {
+                               'fpga' => 8231,
+                               'chan' => 2
+                             },
+                   '6.00' => {
+                               'chan' => 4,
+                               'fpga' => 8231
+                             },
+                   '5.40' => {
+                               'fpga' => 8230,
+                               'chan' => 29
+                             },
+                   '4.50' => {
+                               'fpga' => 8231,
+                               'chan' => 5
+                             },
+                   '11.40' => {
+                                'chan' => 7,
+                                'fpga' => 8230
+                              }
+                 },
+          '0' => {
+                   '18.5' => {
+                               'chan' => 30,
+                               'fpga' => 8229
+                             },
+                   '37.5' => {
+                               'chan' => 16,
+                               'fpga' => 8229
+                             },
+                   '11' => {
+                             'chan' => 6,
+                             'fpga' => 8228
+                           },
+                   '10' => {
+                             'fpga' => 8228,
+                             'chan' => 8
+                           },
+                   '9' => {
+                            'chan' => 34,
+                            'fpga' => 8228
+                          },
+                   '7.5' => {
+                              'chan' => 37,
+                              'fpga' => 8228
+                            },
+                   '35.5' => {
+                               'fpga' => 8229,
+                               'chan' => 12
+                             },
+                   '26.5' => {
+                               'fpga' => 8228,
+                               'chan' => 19
+                             },
+                   '23.5' => {
+                               'fpga' => 8228,
+                               'chan' => 25
+                             },
+                   '1.5' => {
+                              'chan' => 1,
+                              'fpga' => 8228
+                            },
+                   '36.5' => {
+                               'fpga' => 8229,
+                               'chan' => 14
+                             },
+                   '13' => {
+                             'chan' => 19,
+                             'fpga' => 8229
+                           },
+                   '29.5' => {
+                               'chan' => 13,
+                               'fpga' => 8228
+                             },
+                   '1' => {
+                            'chan' => 2,
+                            'fpga' => 8228
+                          },
+                   '19.5' => {
+                               'chan' => 32,
+                               'fpga' => 8229
+                             },
+                   '29' => {
+                             'chan' => 14,
+                             'fpga' => 8228
+                           },
+                   '3' => {
+                            'fpga' => 8228,
+                            'chan' => 46
+                          },
+                   '0' => {
+                            'fpga' => 8228,
+                            'chan' => 4
+                          },
+                   '30.5' => {
+                               'fpga' => 8229,
+                               'chan' => 2
+                             },
+                   '22.5' => {
+                               'chan' => 27,
+                               'fpga' => 8228
+                             },
+                   '16.5' => {
+                               'chan' => 26,
+                               'fpga' => 8229
+                             },
+                   '17' => {
+                             'chan' => 27,
+                             'fpga' => 8229
+                           },
+                   '2' => {
+                            'chan' => 48,
+                            'fpga' => 8228
+                          },
+                   '21.5' => {
+                               'fpga' => 8228,
+                               'chan' => 29
+                             },
+                   '37' => {
+                             'fpga' => 8229,
+                             'chan' => 15
+                           },
+                   '27.5' => {
+                               'chan' => 17,
+                               'fpga' => 8228
+                             },
+                   '23' => {
+                             'chan' => 26,
+                             'fpga' => 8228
+                           },
+                   '4.5' => {
+                              'chan' => 43,
+                              'fpga' => 8228
+                            },
+                   '28' => {
+                             'chan' => 16,
+                             'fpga' => 8228
+                           },
+                   '27' => {
+                             'fpga' => 8228,
+                             'chan' => 18
+                           },
+                   '15' => {
+                             'fpga' => 8229,
+                             'chan' => 23
+                           },
+                   '7' => {
+                            'chan' => 38,
+                            'fpga' => 8228
+                          },
+                   '5' => {
+                            'chan' => 42,
+                            'fpga' => 8228
+                          },
+                   '13.5' => {
+                               'chan' => 20,
+                               'fpga' => 8229
+                             },
+                   '20' => {
+                             'fpga' => 8228,
+                             'chan' => 32
+                           },
+                   '4' => {
+                            'fpga' => 8228,
+                            'chan' => 44
+                          },
+                   '10.5' => {
+                               'chan' => 7,
+                               'fpga' => 8228
+                             },
+                   '31' => {
+                             'chan' => 3,
+                             'fpga' => 8229
+                           },
+                   '18' => {
+                             'chan' => 29,
+                             'fpga' => 8229
+                           },
+                   '31.5' => {
+                               'fpga' => 8229,
+                               'chan' => 4
+                             },
+                   '39.5' => {
+                               'chan' => 9,
+                               'fpga' => 8228
+                             },
+                   '9.5' => {
+                              'chan' => 33,
+                              'fpga' => 8228
+                            },
+                   '34.5' => {
+                               'chan' => 10,
+                               'fpga' => 8229
+                             },
+                   '24' => {
+                             'fpga' => 8228,
+                             'chan' => 24
+                           },
+                   '8' => {
+                            'chan' => 36,
+                            'fpga' => 8228
+                          },
+                   '33' => {
+                             'chan' => 7,
+                             'fpga' => 8229
+                           },
+                   '12.5' => {
+                               'chan' => 18,
+                               'fpga' => 8229
+                             },
+                   '25.5' => {
+                               'fpga' => 8228,
+                               'chan' => 21
+                             },
+                   '20.5' => {
+                               'chan' => 31,
+                               'fpga' => 8228
+                             },
+                   '36' => {
+                             'fpga' => 8229,
+                             'chan' => 13
+                           },
+                   '2.5' => {
+                              'chan' => 47,
+                              'fpga' => 8228
+                            },
+                   '26' => {
+                             'chan' => 20,
+                             'fpga' => 8228
+                           },
+                   '6.5' => {
+                              'chan' => 39,
+                              'fpga' => 8228
+                            },
+                   '38.5' => {
+                               'chan' => 11,
+                               'fpga' => 8228
+                             },
+                   '32.5' => {
+                               'chan' => 6,
+                               'fpga' => 8229
+                             },
+                   '21' => {
+                             'fpga' => 8228,
+                             'chan' => 30
+                           },
+                   '25' => {
+                             'chan' => 22,
+                             'fpga' => 8228
+                           },
+                   '19' => {
+                             'fpga' => 8229,
+                             'chan' => 31
+                           },
+                   '5.5' => {
+                              'chan' => 41,
+                              'fpga' => 8228
+                            },
+                   '14.5' => {
+                               'fpga' => 8229,
+                               'chan' => 22
+                             },
+                   '3.5' => {
+                              'chan' => 45,
+                              'fpga' => 8228
+                            },
+                   '17.5' => {
+                               'fpga' => 8229,
+                               'chan' => 28
+                             },
+                   '16' => {
+                             'fpga' => 8229,
+                             'chan' => 25
+                           },
+                   '33.5' => {
+                               'fpga' => 8229,
+                               'chan' => 8
+                             },
+                   '35' => {
+                             'fpga' => 8229,
+                             'chan' => 11
+                           },
+                   '0.5' => {
+                              'fpga' => 8228,
+                              'chan' => 3
+                            },
+                   '30' => {
+                             'chan' => 1,
+                             'fpga' => 8229
+                           },
+                   '22' => {
+                             'chan' => 28,
+                             'fpga' => 8228
+                           },
+                   '38' => {
+                             'chan' => 12,
+                             'fpga' => 8228
+                           },
+                   '39' => {
+                             'chan' => 10,
+                             'fpga' => 8228
+                           },
+                   '34' => {
+                             'fpga' => 8229,
+                             'chan' => 9
+                           },
+                   '32' => {
+                             'chan' => 5,
+                             'fpga' => 8229
+                           },
+                   '8.5' => {
+                              'chan' => 35,
+                              'fpga' => 8228
+                            },
+                   '12' => {
+                             'fpga' => 8229,
+                             'chan' => 17
+                           },
+                   '6' => {
+                            'fpga' => 8228,
+                            'chan' => 40
+                          },
+                   '14' => {
+                             'chan' => 21,
+                             'fpga' => 8229
+                           },
+                   '28.5' => {
+                               'fpga' => 8228,
+                               'chan' => 15
+                             },
+                   '11.5' => {
+                               'chan' => 5,
+                               'fpga' => 8228
+                             },
+                   '24.5' => {
+                               'fpga' => 8228,
+                               'chan' => 23
+                             },
+                   '15.5' => {
+                               'fpga' => 8229,
+                               'chan' => 24
+                             }
+                 },
+          '2' => {
+                   '4.50' => {
+                               'chan' => 21,
+                               'fpga' => 8232
+                             },
+                   '5.40' => {
+                               'chan' => 13,
+                               'fpga' => 8232
+                             },
+                   '6.00' => {
+                               'fpga' => 8232,
+                               'chan' => 20
+                             },
+                   '6.90' => {
+                               'fpga' => 8232,
+                               'chan' => 17
+                             },
+                   '7.20' => {
+                               'fpga' => 8232,
+                               'chan' => 18
+                             },
+                   '5.10' => {
+                               'chan' => 14,
+                               'fpga' => 8232
+                             },
+                   '4.80' => {
+                               'fpga' => 8232,
+                               'chan' => 22
+                             },
+                   '3.30' => {
+                               'fpga' => 8232,
+                               'chan' => 23
+                             },
+                   '1.20' => {
+                               'chan' => 28,
+                               'fpga' => 8232
+                             },
+                   '0.60' => {
+                               'fpga' => 8232,
+                               'chan' => 5
+                             },
+                   '3.90' => {
+                               'fpga' => 8232,
+                               'chan' => 12
+                             },
+                   '6.30' => {
+                               'chan' => 16,
+                               'fpga' => 8232
+                             },
+                   '2.70' => {
+                               'fpga' => 8232,
+                               'chan' => 10
+                             },
+                   '2.40' => {
+                               'fpga' => 8232,
+                               'chan' => 26
+                             },
+                   '5.70' => {
+                               'chan' => 19,
+                               'fpga' => 8232
+                             },
+                   '4.20' => {
+                               'chan' => 11,
+                               'fpga' => 8232
+                             },
+                   '3.60' => {
+                               'chan' => 24,
+                               'fpga' => 8232
+                             },
+                   '0.90' => {
+                               'chan' => 27,
+                               'fpga' => 8232
+                             },
+                   '6.60' => {
+                               'chan' => 15,
+                               'fpga' => 8232
+                             },
+                   '1.50' => {
+                               'chan' => 8,
+                               'fpga' => 8232
+                             },
+                   '3.00' => {
+                               'fpga' => 8232,
+                               'chan' => 9
+                             },
+                   '1.80' => {
+                               'fpga' => 8232,
+                               'chan' => 7
+                             },
+                   '0.30' => {
+                               'chan' => 6,
+                               'fpga' => 8232
+                             },
+                   '2.10' => {
+                               'chan' => 25,
+                               'fpga' => 8232
+                             },
+                   '0.00' => {
+                               'fpga' => 8232,
+                               'chan' => 32
+                             }
+                 }
+        };
diff --git a/dmon/scripts/dmon_heatmapdirc.pl b/dmon/scripts/dmon_heatmapdirc.pl
new file mode 100755 (executable)
index 0000000..39d3852
--- /dev/null
@@ -0,0 +1,348 @@
+#!/usr/bin/perl -w
+
+use warnings;
+use strict;
+use POSIX qw(strftime ceil floor);
+use FileHandle;
+use lib "./code";
+use lib "./scripts";
+use lib "../tools";
+use lib "../users/gsi_dirc";
+use lib "../perllibs/";
+use HADES::TrbNet;
+use Time::HiRes qw(usleep);
+use List::Util qw[min max];
+use Dmon;
+# use HPlot;
+use Data::Dumper;
+use ChanDb;
+use GD::Simple;
+
+my %config = Dmon::StartUp();
+
+
+
+##################### draw channel mapping once ###################
+eval {
+
+    
+  my $str = Dmon::MakeTitle(12,12,"ChannelMapDirc",0);
+     $str .= qq@<div style="padding:0"><img src="%ADDPNG ChannelMapDirc.png%" type="image/png"></div></div>@;
+     $str .= Dmon::MakeFooter();
+  Dmon::WriteFile("ChannelMapDirc",$str);
+
+  my $pmt_rows = @{$ChanDb::chanDb};
+  my $pmt_cols = @{$ChanDb::chanDb->[0]};
+  print "found $pmt_rows pmt rows and $pmt_cols pmt columns\n";
+  
+  my $plot_filename = Dmon::DMONDIR."ChannelMapDirc.png";
+  
+  my $padding_left    = 60;
+  my $padding_top     = 40;
+  my $pixel_size      = 15;
+  my $pmt_spacing_x   = 60;
+  my $pmt_spacing_y   = 35;
+  
+  
+  #decide FPGA colors
+  my $fpga_colors;
+  for my $pmt_i (0..($pmt_rows-1)) {
+    for my $pmt_j (0..($pmt_cols-1)) {
+      my $pmt_lookup = $ChanDb::chanDb->[$pmt_i]->[$pmt_j];
+      for my $px_i (0..7) {
+          my $pixel_info  = $pmt_lookup->[$px_i]->[0];
+          my $fpga = $pixel_info->{fpga};
+          my $channel = $pixel_info->{chan};
+          my $padiwa  = $pixel_info->{padiwa};
+          $fpga_colors->{$fpga} = [];
+      }
+    }
+  }
+  my @keys = sort keys %$fpga_colors;
+  my $count=0;
+  
+  for my $fpga (@keys) {
+    my $hue =  ($count/(@keys-1));
+    my @color = GD::Simple->HSVtoRGB((floor($hue*255) % 256),255-160*($count%2),255);
+    $fpga_colors->{$fpga} = \@color;
+    $count++;
+  }
+  #finished with FPGA colors
+
+    my $img = GD::Simple->new(1024,600);
+    my $offset_x;
+    my $offset_y;
+    
+    for my $pmt_i (0..($pmt_rows-1)) {
+      $offset_y = $padding_top + $pmt_i*($pmt_spacing_y + 8*$pixel_size);
+      for my $pmt_j (0..($pmt_cols-1)) {
+        $offset_x = $padding_left + $pmt_j*($pmt_spacing_x + 8*$pixel_size);
+        my $pmt_lookup = $ChanDb::chanDb->[$pmt_i]->[$pmt_j];
+        my $mcp_id = $pmt_lookup->[0]->[0]->{mcp};
+        $img->moveTo($offset_x,$offset_y-10);
+        $img->string($mcp_id);
+        my $last_fpga=-1;
+        for my $px_i (0..7) {
+          for my $px_j (0..7) {
+            my $pixel_info  = $pmt_lookup->[$px_i]->[$px_j];
+            my $fpga = $pixel_info->{fpga};
+            my $channel = $pixel_info->{chan};
+            my $padiwa  = $pixel_info->{padiwa};
+            
+            $img->bgcolor(@{$fpga_colors->{$fpga}});
+            $img->fgcolor('black');
+            my $tlx =$offset_x + $px_j*$pixel_size;
+            my $tly =$offset_y + $px_i*$pixel_size;
+            my $brx = $tlx + $pixel_size;
+            my $bry = $tly + $pixel_size;
+            $img->rectangle($tlx,$tly,$brx,$bry); # (top_left_x, top_left_y, bottom_right_x, bottom_right_y)
+            
+            $img->moveTo($tlx+3,$tly+$pixel_size);
+            $img->string(sprintf("%02d",$channel));
+            
+            if($last_fpga != $fpga){
+              $img->moveTo($tlx-40,$tly+$pixel_size);
+              $img->string(sprintf("0x%x",$fpga));
+              $img->fgcolor(@{$fpga_colors->{$fpga}});
+              $img->moveTo($tlx-40,$tly+$pixel_size);
+              $img->lineTo($tlx-5,$tly+$pixel_size);
+            }
+            
+            $last_fpga   = $fpga;
+          }
+        }
+      }
+    }
+    
+    open my $out, '>', $plot_filename or die;
+    binmode $out;
+    print $out $img->png;
+};
+#####################  finished drawing channel mapping  ###################
+
+
+
+my $str = Dmon::MakeTitle(9,10,"HeatmapDirc",0);
+   $str .= qq@<div style="padding:0"><img src="%ADDPNG HeatmapDirc.png%" type="image/png"></div></div>@;
+   $str .= Dmon::MakeFooter();
+Dmon::WriteFile("HeatmapDirc",$str);
+
+
+my $old;
+my $oldtime = time();
+my $time = time();
+my $diff;
+
+
+my $pmt_rows = @{$ChanDb::chanDb};
+my $pmt_cols = @{$ChanDb::chanDb->[0]};
+print "found $pmt_rows pmt rows and $pmt_cols pmt columns\n";
+
+my $plot_filename = Dmon::DMONDIR."HeatmapDirc".".png";
+
+my $padding_left    = 20;
+my $padding_top     = 40;
+my $pixel_size      = 10;
+my $pmt_spacing_x   = 40;
+my $pmt_spacing_y   = 35;
+
+# upper limit for high end of color scale
+my $max_count_uclamp  = $config{HeatmapDirc}->{max_count_uclamp}||100000;
+# lower limit for high end of color scale
+my $max_count_lclamp  = $config{HeatmapDirc}->{max_count_lclamp}||10;
+my $gliding_average_steps = $config{HeatmapDirc}->{normalization_inertia};
+my $instantaneous_normalization = $config{HeatmapDirc}->{instant_normalization};
+my $overscale_factor      = 1.1;
+
+my $legend_length   = 560;
+my $legend_segments = 128;
+my $leg_seg_width   = ceil($legend_length/$legend_segments);
+
+my $new_max = 0;
+# my $new_min = 0;
+my $max_count=0;
+my $min_count=0;
+
+
+while (1) {
+  my $o = trb_register_read_mem($config{PadiwaBroadcastAddress},0xc000,0,49);
+  
+#   print Dumper $o;
+  
+  my $sum = 0;
+  if (defined $old) {
+    foreach my $b (keys %$o) {
+      for my $v (0..49) {
+        my $tdiff = time() - $oldtime;
+        my $vdiff = (($o->{$b}->[$v]||0)&0xffffff) - (($old->{$b}->[$v]||0)&0xffffff);
+        if ($vdiff < 0) { $vdiff += 2**24;}
+        $diff->{$b}->[$v] = $vdiff/($tdiff|1);
+      }
+    }
+    
+    
+    if ($instantaneous_normalization) {
+      $max_count = 0;
+      
+      for my $pmt_i (0..($pmt_rows-1)) {
+        for my $pmt_j (0..($pmt_cols-1)) {
+          my $pmt_lookup = $ChanDb::chanDb->[$pmt_i]->[$pmt_j];
+          for my $px_i (0..7) {
+            for my $px_j (0..7) {
+              my $pixel_info  = $pmt_lookup->[$px_i]->[$px_j];
+              my $fpga = $pixel_info->{fpga};
+              my $channel = $pixel_info->{chan};
+              my $val = $diff->{$fpga}->[$channel] || 0;
+              $max_count = max($max_count,$val);
+            }  
+          }
+        }
+      }
+      
+      $max_count = min($max_count,$max_count_uclamp);
+      $max_count = max($max_count,$max_count_lclamp);
+    } else {
+      $new_max = min($new_max*$overscale_factor,$max_count_uclamp);
+      # exponential gliding average
+      $max_count = floor(($max_count*($gliding_average_steps-1) + $new_max)/$gliding_average_steps);
+      $max_count = max($max_count,$max_count_lclamp);
+      $new_max = 0;
+    }
+
+    
+    
+    
+#     $new_min = $max_count_clamp;
+#     print "max: $max_count min: $min_count\n";
+    my $count_range   = $max_count-$min_count;
+
+    my $img = GD::Simple->new(640,480);
+    my $offset_x;
+    my $offset_y;
+    
+    for my $pmt_i (0..($pmt_rows-1)) {
+      $offset_y = $padding_top + $pmt_i*($pmt_spacing_y + 8*$pixel_size);
+      for my $pmt_j (0..($pmt_cols-1)) {
+        $offset_x = $padding_left + $pmt_j*($pmt_spacing_x + 8*$pixel_size);
+        
+        my $pmt_lookup = $ChanDb::chanDb->[$pmt_i]->[$pmt_j];
+        
+        my $mcp_id = $pmt_lookup->[0]->[0]->{mcp};
+        $img->moveTo($offset_x,$offset_y-10);
+        $img->string($mcp_id);
+        
+        for my $px_i (0..7) {
+#           print "\n";
+          for my $px_j (0..7) {
+            my $pixel_info  = $pmt_lookup->[$px_i]->[$px_j];
+            my $fpga = $pixel_info->{fpga};
+            my $channel = $pixel_info->{chan};
+            
+            my $val = $diff->{$fpga}->[$channel];
+            unless(defined($diff->{$fpga}->[$channel])){
+              print STDERR "cannot get data from FPGA ".sprintf("%x",$fpga)
+              .", channel $channel\n";
+            } 
+            $new_max = max($val,$new_max);
+#             $new_min = min($val,$new_min);
+            $sum += $diff->{$fpga}->[$channel];
+            my $val_in_range = min(max($val,$min_count),$max_count)-$min_count;
+            if(defined($diff->{$fpga}->[$channel])){
+              $img->bgcolor(false_color($val_in_range/$count_range));
+            } else {
+              $img->bgcolor('black');
+            }
+            $img->fgcolor('black');
+            my $tlx =$offset_x + $px_j*$pixel_size;
+            my $tly =$offset_y + $px_i*$pixel_size;
+            my $brx = $tlx + $pixel_size;
+            my $bry = $tly + $pixel_size;
+            $img->rectangle( $tlx,$tly,$brx,$bry); # (top_left_x, top_left_y, bottom_right_x, bottom_right_y)
+          }
+        }
+      }
+    }
+    
+#     print "new max: $new_max, :new_min: $new_min\n";
+    
+    #now drawing the legend
+    $offset_x = $padding_left;
+    $offset_y = $padding_top + $pmt_rows*($pmt_spacing_y + 8*$pixel_size);
+    
+    #calculate relevant decimal power
+    my $dpwr = floor(log($count_range)/log(10));
+    if (($count_range/10**$dpwr)<=2) {
+      $dpwr--;
+    }
+    
+#     print "dpwr: $dpwr\n";
+    
+    my $last_integer=-1;
+    for my $leg_seg (0..($legend_segments-1)){
+      my $val = $leg_seg/$legend_segments*$count_range+$min_count;
+      my @color = false_color($leg_seg/$legend_segments);
+      $img->bgcolor(@color);
+      $img->fgcolor(@color);
+      my $tlx =$offset_x + $leg_seg*$leg_seg_width;
+      my $tly =$offset_y;
+      my $brx = $tlx + $leg_seg_width;
+      my $bry = $tly + $pixel_size;
+      $img->rectangle( $tlx,$tly,$brx,$bry); # (top_left_x, top_left_y, bottom_right_x, bottom_right_y)
+      
+      #distribute nice numbers along the rainbow
+      my $cur_integer = floor($val/(10**$dpwr));
+      if ($cur_integer != $last_integer) {
+#       unless($leg_seg % $legend_stepping) {
+        $img->moveTo($tlx,$tly-8);
+        $img->fgcolor('black');
+        $img->string(kilomega($cur_integer*10**$dpwr));
+      }
+      $last_integer=$cur_integer;
+    }
+    
+    $offset_x = $padding_left;
+    $offset_y += 25;
+    $img->moveTo($offset_x,$offset_y);
+    $img->fgcolor('black');
+    $img->string(strftime("%H:%M:%S", localtime()));
+    
+    open my $out, '>', $plot_filename or die;
+    binmode $out;
+    print $out $img->png;
+  }
+  my $status = Dmon::OK;
+  my $title  = "Dirc Heatmap";
+  my $value = Dmon::SciNotation($sum);
+  my $longtext = "See plot";
+  Dmon::WriteQALog($config{flog},"heatmapdirc",5,$status,$title,$value,$longtext,'1-HeatmapDirc');
+  $old = $o;
+  $oldtime = time();
+  sleep(1);
+}
+
+sub false_color {
+  my $val = $_[0]; # has to be normalized
+  my $hue = 170*(1-$val);
+  return GD::Simple->HSVtoRGB($hue,255,255);
+}
+
+
+sub kilomega {
+  my $val = $_[0];
+  my $num;
+  if($val/1e9 >= 1){
+    my $a = sprintf("%1.1fG",$val/1e9);
+    $a =~ s/\.0//;
+    return $a;
+  } elsif ($val/1e6 >= 1){
+    my $a = sprintf("%1.1fM",$val/1e6);
+    $a =~ s/\.0//;
+    return $a;
+  } elsif ($val/1e3 >= 1){
+    my $a = sprintf("%1.1fk",$val/1e3);
+    $a =~ s/\.0//;
+    return $a;
+  } else {
+    return sprintf("%d",$val);
+  }
+}
\ No newline at end of file
diff --git a/dmon/scripts/dmon_heatmapdiscdirc.pl b/dmon/scripts/dmon_heatmapdiscdirc.pl
new file mode 100755 (executable)
index 0000000..11df705
--- /dev/null
@@ -0,0 +1,233 @@
+#!/usr/bin/perl -w
+
+use warnings;
+use strict;
+use POSIX qw(strftime ceil floor);
+use FileHandle;
+use lib "./code";
+use lib "./scripts";
+use lib "../tools";
+use lib "../users/gsi_dirc";
+use HADES::TrbNet;
+use Time::HiRes qw(usleep);
+use List::Util qw[min max];
+use Dmon;
+# use HPlot;
+use Data::Dumper;
+use ChanDb_discdirc;
+use GD::Simple;
+
+my %config = Dmon::StartUp();
+
+my $chanDb = $ChanDb_discdirc::chanDb;
+
+my $str = Dmon::MakeTitle(9,14,"HeatmapDiscDirc",0);
+   $str .= qq@<div style="padding:0"><img src="%ADDPNG HeatmapDiscDirc.png%" type="image/png" ></div></div>@;
+   $str .= Dmon::MakeFooter();
+Dmon::WriteFile("HeatmapDiscDirc",$str);
+
+
+my $old;
+my $oldtime = time();
+my $time = time();
+my $diff;
+
+
+
+my $plot_filename = Dmon::DMONDIR."HeatmapDiscDirc".".png";
+
+my $padding_left    = 20;
+my $padding_top     = 40;
+# my $pixel_size      = 10;
+# my $pmt_spacing_x   = 40;
+# my $pmt_spacing_y   = 35;
+my $strip_length    = 180;
+
+my $px_per_mm       = 10;
+
+# upper limit for high end of color scale
+my $max_count_uclamp  = $config{HeatmapDiscDirc}->{max_count_uclamp}||100000;
+# lower limit for high end of color scale
+my $max_count_lclamp  = $config{HeatmapDiscDirc}->{max_count_lclamp}||10;
+my $gliding_average_steps = $config{HeatmapDiscDirc}->{normalization_inertia};
+my $instantaneous_normalization = $config{HeatmapDiscDirc}->{instant_normalization};
+my $overscale_factor      = 1.1;
+
+my $legend_length   = 560;
+my $legend_segments = 128;
+my $leg_seg_width   = ceil($legend_length/$legend_segments);
+
+my $new_max = 0;
+my $max_count=0;
+my $min_count=0;
+
+my $max_y_pos;
+
+while (1) {
+  my $o = trb_register_read_mem($config{PadiwaBroadcastAddress},0xc000,0,49);
+  
+#   print Dumper $o;
+  
+  my $sum = 0;
+  if (defined $old) {
+    foreach my $b (keys %$o) {
+      for my $v (0..49) {
+        my $tdiff = time() - $oldtime;
+        my $vdiff = (($o->{$b}->[$v]||0)&0xffffff) - (($old->{$b}->[$v]||0)&0xffffff);
+        if ($vdiff < 0) { $vdiff += 2**24;}
+        $diff->{$b}->[$v] = $vdiff/($tdiff|1);
+      }
+    }
+    
+    
+    
+    
+    if ($instantaneous_normalization) {
+      $max_count = 0;
+      
+      for my $col (0..2) {
+        for my $ypos (sort keys %{$chanDb->{$col}}) {
+          my $fpga = $chanDb->{$col}->{$ypos}->{fpga};
+          my $channel = $chanDb->{$col}->{$ypos}->{chan};
+          my $val = $diff->{$fpga}->[$channel];
+          $max_count = max($max_count,$val);
+        }
+      }
+      $max_count = min($max_count,$max_count_uclamp);
+      $max_count = max($max_count,$max_count_lclamp);
+    } else {
+      $new_max = min($new_max*$overscale_factor,$max_count_uclamp);
+      # exponential gliding average
+      $max_count = floor(($max_count*($gliding_average_steps-1) + $new_max)/$gliding_average_steps);
+      $max_count = max($max_count,$max_count_lclamp);
+      $new_max = 0;
+    }
+    
+    my $count_range   = $max_count-$min_count;
+    
+
+    my $img = GD::Simple->new(640,640);
+    my $offset_x;
+    my $offset_y;
+    
+    $offset_y = $padding_top;
+    
+    for my $col (0..2) {
+      my $strip_width;
+      if ($col == 0){
+        $strip_width = 0.5;
+      } else {
+        $strip_width = 0.3;
+      }
+      
+      $offset_x = $padding_left + $col*$strip_length;
+      for my $ypos (sort keys %{$chanDb->{$col}}) {
+        my $fpga = $chanDb->{$col}->{$ypos}->{fpga};
+        my $channel = $chanDb->{$col}->{$ypos}->{chan};
+        
+        my $val = $diff->{$fpga}->[$channel];
+        unless(defined($val)){
+          print STDERR "cannot get data from FPGA ".sprintf("%x",$fpga)
+          .", channel $channel\n";
+        } 
+        $new_max = max($val,$new_max);
+        $sum += $diff->{$fpga}->[$channel];
+        my $val_in_range = min(max($val,$min_count),$max_count)-$min_count;
+        if(defined($val)){
+          $img->bgcolor(false_color($val_in_range/$count_range));
+        } else {
+          $img->bgcolor('black');
+        }
+        $img->fgcolor('black');
+        my $tlx =$offset_x + $strip_width*$col;
+        my $tly =$offset_y + $ypos*$px_per_mm;
+        my $brx = $tlx + $strip_length;
+        my $bry = $tly + $strip_width*$px_per_mm;
+        $img->rectangle( $tlx,$tly,$brx,$bry); # (top_left_x, top_left_y, bottom_right_x, bottom_right_y)
+        $max_y_pos = max($max_y_pos,$ypos);
+      }
+    
+    }
+    
+    
+    #now drawing the legend
+    $offset_x = $padding_left;
+    $offset_y = $padding_top + $max_y_pos*$px_per_mm +30 ;
+    
+    #calculate relevant decimal power
+    my $dpwr = floor(log($count_range)/log(10));
+    if (($count_range/10**$dpwr)<=2) {
+      $dpwr--;
+    }
+    
+#     print "dpwr: $dpwr\n";
+    
+    my $last_integer=-1;
+    for my $leg_seg (0..($legend_segments-1)){
+      my $val = $leg_seg/$legend_segments*$count_range+$min_count;
+      my @color = false_color($leg_seg/$legend_segments);
+      $img->bgcolor(@color);
+      $img->fgcolor(@color);
+      my $tlx =$offset_x + $leg_seg*$leg_seg_width;
+      my $tly =$offset_y;
+      my $brx = $tlx + $leg_seg_width;
+      my $bry = $tly + 10;
+      $img->rectangle( $tlx,$tly,$brx,$bry); # (top_left_x, top_left_y, bottom_right_x, bottom_right_y)
+      
+      #distribute nice numbers along the rainbow
+      my $cur_integer = floor($val/(10**$dpwr));
+      if ($cur_integer != $last_integer) {
+#       unless($leg_seg % $legend_stepping) {
+        $img->moveTo($tlx,$tly-8);
+        $img->fgcolor('black');
+        $img->string(kilomega($cur_integer*10**$dpwr));
+      }
+      $last_integer=$cur_integer;
+    }
+    
+    $offset_x = $padding_left;
+    $offset_y += 25;
+    $img->moveTo($offset_x,$offset_y);
+    $img->fgcolor('black');
+    $img->string(strftime("%H:%M:%S", localtime()));
+    
+    open my $out, '>', $plot_filename or die;
+    binmode $out;
+    print $out $img->png;
+  }
+  my $status = Dmon::OK;
+  my $title  = "DiscDirc";
+  my $value = Dmon::SciNotation($sum);
+  my $longtext = "See plot";
+  Dmon::WriteQALog($config{flog},"heatmapdiscdirc",5,$status,$title,$value,$longtext,'1-HeatmapDiscDirc');
+  $old = $o;
+  $oldtime = time();
+  sleep(1);
+}
+
+sub false_color {
+  my $val = $_[0]; # has to be normalized
+  my $hue = 170*(1-$val);
+  return GD::Simple->HSVtoRGB($hue,255,255);
+}
+
+
+sub kilomega {
+  my $val = $_[0];
+  my $num;
+  if($val/1e9 >= 1){
+    my $a = sprintf("%1.1fG",$val/1e9);
+    $a =~ s/\.0//;
+    return $a;
+  } elsif ($val/1e6 >= 1){
+    my $a = sprintf("%1.1fM",$val/1e6);
+    $a =~ s/\.0//;
+    return $a;
+  } elsif ($val/1e3 >= 1){
+    my $a = sprintf("%1.1fk",$val/1e3);
+    $a =~ s/\.0//;
+    return $a;
+  } else {
+    return sprintf("%d",$val);
+  }
+}
\ No newline at end of file
diff --git a/dmon/scripts/dmon_heatmapflash.pl b/dmon/scripts/dmon_heatmapflash.pl
new file mode 100755 (executable)
index 0000000..15ef47f
--- /dev/null
@@ -0,0 +1,272 @@
+#!/usr/bin/perl -w
+
+use warnings;
+use strict;
+use POSIX qw(strftime ceil floor);
+use FileHandle;
+use lib "./code";
+use lib "../tools";
+use lib "../users/gsi_dirc";
+use HADES::TrbNet;
+use Time::HiRes qw(usleep);
+use List::Util qw[min max];
+use Dmon;
+# use HPlot;
+use Data::Dumper;
+# use ChanDb;
+use GD::Simple;
+use List::Util qw[min max];
+
+my %config = Dmon::StartUp();
+
+# define the channel mapping for both detectors
+
+my $chanDb;
+my $detector=0;
+for my $fpga (0x2020,0x2023) {
+  print "fpga:$fpga detector:$detector\n";
+  my $chan = 1;
+  for my $i (0..3) {
+    for my $j (0..7){
+      $chanDb->[$detector]->[0]->[$i]->[$j] = {
+        fpga => $fpga,
+        chan => $chan
+      };
+      $chan+=2;
+    }
+  }
+  $detector++;
+}
+
+# print Dumper $chanDb;
+
+
+
+
+my $str = Dmon::MakeTitle(5,7,"HeatmapFlash",0);
+   $str .= qq@<div style="padding:0"><img src="%ADDPNG HeatmapFlash.png%" type="image/png"></div></div>@;
+   $str .= Dmon::MakeFooter();
+Dmon::WriteFile("HeatmapFlash",$str);
+
+
+my $old;
+my $oldtime = time();
+my $time = time();
+my $diff;
+
+
+my $pmt_rows = 2;
+my $pmt_cols = 1;
+print "found $pmt_rows pmt rows and $pmt_cols pmt columns\n";
+
+my $plot_filename = Dmon::DMONDIR."HeatmapFlash".".png";
+
+my $padding_left  = 20;
+my $padding_top   = 40;
+my $pixel_size    = 20;
+my $pmt_spacing   = 35;
+
+# upper limit for high end of color scale
+my $max_count_uclamp  = $config{HeatmapFlash}->{max_count_uclamp}||100000;
+# lower limit for high end of color scale
+my $max_count_lclamp  = $config{HeatmapFlash}->{max_count_lclamp}||10;
+my $gliding_average_steps = $config{HeatmapFlash}->{normalization_inertia};
+my $instantaneous_normalization = $config{HeatmapFlash}->{instant_normalization};
+my $overscale_factor      = 1.1;
+
+my $legend_length   = 250;
+my $legend_segments = 128;
+my $leg_seg_width   = ceil($legend_length/$legend_segments);
+
+my $new_max = 0;
+# my $new_min = 0;
+my $max_count=0;
+my $min_count=0;
+
+
+while (1) {
+  my $o = trb_register_read_mem(0xfe48,0xc000,0,65);
+  
+#   print Dumper $o;
+  
+  my $sum = 0;
+  if (defined $old) {
+    foreach my $b (keys %$o) {
+      for my $v (0..65) {
+        my $tdiff = time() - $oldtime;
+        my $vdiff = (($o->{$b}->[$v]||0)&0xffffff) - (($old->{$b}->[$v]||0)&0xffffff);
+        if ($vdiff < 0) { $vdiff += 2**24;}
+        $diff->{$b}->[$v] = $vdiff/($tdiff|1);
+      }
+    }
+    
+    if ($instantaneous_normalization) {
+      $max_count = 0;
+      for my $pmt_i (0..($pmt_rows-1)) {
+        for my $pmt_j (0..($pmt_cols-1)) {
+          my $pmt_lookup = $chanDb->[$pmt_i]->[$pmt_j];
+          
+          for my $px_i (0..3) {
+            for my $px_j (0..7) {
+              my $pixel_info  = $pmt_lookup->[$px_i]->[$px_j];
+              my $fpga = $pixel_info->{fpga};
+              my $channel = $pixel_info->{chan};
+              my $val = $diff->{$fpga}->[$channel] || 0;
+              $max_count = max($max_count,$val);
+            }  
+          }
+        }
+      }
+      $max_count = min($max_count,$max_count_uclamp);
+      $max_count = max($max_count,$max_count_lclamp);
+    } else {
+      $new_max = min($new_max*$overscale_factor,$max_count_uclamp);
+      # exponential gliding average
+      $max_count = floor(($max_count*($gliding_average_steps-1) + $new_max)/$gliding_average_steps);
+      $max_count = max($max_count,$max_count_lclamp);
+      $new_max = 0;
+    }
+
+
+    my $count_range   = $max_count-$min_count;
+    
+    
+    
+
+    my $img = GD::Simple->new(380,480);
+    my $offset_x;
+    my $offset_y;
+    
+    for my $pmt_i (0..($pmt_rows-1)) {
+      $offset_y = $padding_top + $pmt_i*($pmt_spacing + 4*$pixel_size);
+      for my $pmt_j (0..($pmt_cols-1)) {
+        $offset_x = $padding_left + $pmt_j*($pmt_spacing + 8*$pixel_size);
+        
+        my $pmt_lookup = $chanDb->[$pmt_i]->[$pmt_j];
+        
+        my $fpga_addr = $pmt_lookup->[0]->[0]->{fpga};
+#         print "FPGA: $fpga_addr\n";
+        $img->moveTo($offset_x,$offset_y-8);
+        $img->string(sprintf("FPGA 0x%x",$fpga_addr));
+        
+        for my $px_i (0..3) {
+#           print "\n";
+          for my $px_j (0..7) {
+            my $pixel_info  = $pmt_lookup->[$px_i]->[$px_j];
+            my $fpga = $pixel_info->{fpga};
+            my $channel = $pixel_info->{chan};
+            
+            my $val = $diff->{$fpga}->[$channel] || 0;
+            unless(defined($diff->{$fpga}->[$channel])){
+              print STDERR "cannot get data from FPGA ".sprintf("%x",$fpga)
+              .", channel $channel\n";
+            } 
+            
+            
+#             print "$val ";
+            
+#             if ($px_i == 0 && $px_j == 0) {
+#               print "\n";
+#                 $val= 220;
+#             }
+            $new_max = max($val,$new_max);
+#             $new_min = min($val,$new_min);
+            $sum += $val;
+            my $val_in_range = min(max($val,$min_count),$max_count)-$min_count;
+            if(defined($diff->{$fpga}->[$channel])){
+              $img->bgcolor(false_color($val_in_range/$count_range));
+            } else {
+              $img->bgcolor('black');
+            }
+            $img->fgcolor('black');
+            my $tlx =$offset_x + $px_j*$pixel_size;
+            my $tly =$offset_y + $px_i*$pixel_size;
+            my $brx = $tlx + $pixel_size;
+            my $bry = $tly + $pixel_size;
+            $img->rectangle( $tlx,$tly,$brx,$bry); # (top_left_x, top_left_y, bottom_right_x, bottom_right_y)
+          }
+        }
+      }
+    }
+    
+#     print "new max: $new_max, :new_min: $new_min\n";
+    
+    #now drawing the legend
+    $offset_x = $padding_left;
+    $offset_y = $padding_top + $pmt_rows*($pmt_spacing + 4*$pixel_size);
+    
+    #calculate relevant decimal power
+    my $dpwr = floor(log($count_range)/log(10));
+    if (($count_range/10**$dpwr)<=1.2) {
+      $dpwr--;
+    }
+    
+#     print "dpwr: $dpwr\n";
+    
+    my $last_integer=-1;
+    for my $leg_seg (0..($legend_segments-1)){
+      my $val = $leg_seg/$legend_segments*$count_range+$min_count;
+      my @color = false_color($leg_seg/$legend_segments);
+      $img->bgcolor(@color);
+      $img->fgcolor(@color);
+      my $tlx =$offset_x + $leg_seg*$leg_seg_width;
+      my $tly =$offset_y;
+      my $brx = $tlx + $leg_seg_width;
+      my $bry = $tly + 10;
+      $img->rectangle( $tlx,$tly,$brx,$bry); # (top_left_x, top_left_y, bottom_right_x, bottom_right_y)
+      
+      #distribute nice numbers along the rainbow
+      my $cur_integer = floor($val/(10**$dpwr));
+      if ($cur_integer != $last_integer) {
+#       unless($leg_seg % $legend_stepping) {
+        $img->moveTo($tlx,$tly-8);
+        $img->fgcolor('black');
+        $img->string(kilomega($cur_integer*10**$dpwr));
+      }
+      $last_integer=$cur_integer;
+    }
+    
+    $offset_x = $padding_left;
+    $offset_y += 30;
+    $img->moveTo($offset_x,$offset_y);
+    $img->fgcolor('black');
+    $img->string(strftime("%H:%M:%S", localtime()));
+    
+    open my $out, '>', $plot_filename or die;
+    binmode $out;
+    print $out $img->png;
+  }
+  my $status = Dmon::OK;
+  my $title  = "Flash Heatmap";
+  my $value = Dmon::SciNotation($sum);
+  my $longtext = "See plot";
+  Dmon::WriteQALog($config{flog},"heatmapflash",5,$status,$title,$value,$longtext,'1-HeatmapFlash');
+  $old = $o;
+  $oldtime = time();
+  sleep(1);
+}
+
+sub false_color {
+  my $val = $_[0]; # has to be normalized
+  my $hue = 170*(1-$val);
+  return GD::Simple->HSVtoRGB($hue,255,255);
+}
+sub kilomega {
+  my $val = $_[0];
+  my $num;
+  if($val/1e9 >= 1){
+    my $a = sprintf("%1.1fG",$val/1e9);
+    $a =~ s/\.0//;
+    return $a;
+  } elsif ($val/1e6 >= 1){
+    my $a = sprintf("%1.1fM",$val/1e6);
+    $a =~ s/\.0//;
+    return $a;
+  } elsif ($val/1e3 >= 1){
+    my $a = sprintf("%1.1fk",$val/1e3);
+    $a =~ s/\.0//;
+    return $a;
+  } else {
+    return sprintf("%d",$val);
+  }
+}
index 50c815159adee553617600e6f3d77c6cb8ae1f30..26f717951ec1717068ed00ea298f9aeb27e65ed9 100755 (executable)
@@ -21,6 +21,18 @@ while(1) {
   my $status   = Dmon::GetQAState('above',$num,($config{NumberOfFpga},$config{NumberOfFpga}-1,$config{NumberOfFpga}-2));
   
   
+  foreach my $b (@{$config{'PadiwaTrbAddresses'}}) {
+    if(! defined $r->{$b}) {$longtext .= sprintf(", 0x%04x",$b);}
+    }
+  foreach my $b (@{$config{'HubTrbAddresses'}}) {
+    if(! defined $r->{$b}) {$longtext .= sprintf(", 0x%04x",$b);}
+    }
+  foreach my $b (@{$config{'OtherTrbAddresses'}}) {
+    if(! defined $r->{$b}) {$longtext .= sprintf(", 0x%04x",$b);}
+    }
+  
+  
+  
   Dmon::WriteQALog($flog,"numfee",20,$status,$title,$value,$longtext);
 
   sleep(10);
index 8166ff72c5cf7628340dea93d9e69d89913503f8..c8a196d96ea438970d61a67c04d3d4c65765353f 100755 (executable)
@@ -10,10 +10,18 @@ use Data::Dumper;
 my %config = Dmon::StartUp();
 
 
+my $PadiwaNumber = 0;
+foreach my $b (@{$config{PadiwaChainMask}}) {
+  $PadiwaNumber++ if($b & 0x1);
+  $PadiwaNumber++ if($b & 0x2);
+  $PadiwaNumber++ if($b & 0x4);
+  $PadiwaNumber++ if($b & 0x8);
+  }
+
 HPlot::PlotInit({
   name    => "PadiwaTemp",
   file    => Dmon::DMONDIR."PadiwaTemp",
-  entries => scalar @{$config{PadiwaTrbAdresses}},
+  entries => $PadiwaNumber,
   type    => HPlot::TYPE_HISTORY,
   output  => HPlot::OUT_PNG,
   xlabel  => "Board",
@@ -38,42 +46,56 @@ while(1) {
   my $i = -1;
   my $notonline = "";
   my $notonlinecnt = 0;
-
-  foreach my $b (@{$config{PadiwaTrbAdresses}}) {
-    $i++;
-    my $r = Dmon::PadiwaSendCmd(0x10040000,$b,0);
-    unless (defined $r) {
-      $notonline .= sprintf(" %04x",$b);
-      $notonlinecnt++;
-      next;
-      }
-    my $temp = (($r->{$b} & 0xFFF))/16;
-    unless ($temp < 10 || $temp > 90) {
-      if ($max < $temp) {
-        $max = $temp;
-        $maxboard = $b;
+#   Dmon::PadiwaSendCmd(0x10800001,$config{PadiwaBroadcastAddress},0);
+#   Dmon::PadiwaSendCmd(0x10800001,$config{PadiwaBroadcastAddress},1);
+#   Dmon::PadiwaSendCmd(0x10800001,$config{PadiwaBroadcastAddress},2);
+#   Dmon::PadiwaSendCmd(0x10800000,$config{PadiwaBroadcastAddress},0);
+#   Dmon::PadiwaSendCmd(0x10800000,$config{PadiwaBroadcastAddress},1);
+#   Dmon::PadiwaSendCmd(0x10800000,$config{PadiwaBroadcastAddress},2);
+#   sleep(2);
+  foreach(my $in = 0; $in < scalar @{$config{PadiwaTrbAddresses}}; $in++) {
+    my $b = $config{PadiwaTrbAddresses}[$in];
+    foreach my $chain (0..3) {
+      next unless ($config{PadiwaChainMask}->[$in]&(1<<$chain));
+      $i++;
+      my $r = Dmon::PadiwaSendCmd(0x10040000,$b,$chain);
+      unless (defined $r) {
+        $notonline .= sprintf(" %04x",$b.'.'.$chain);
+        $notonlinecnt++;
+        next;
         }
-      if ($min > $temp) { 
-        $min = $temp;
-        $minboard = $b;
+      my $temp = (($r->{$b} & 0xFFF))/16;
+      unless ($temp < 10 || $temp > 90) {
+        if ($max < $temp) {
+          $max = $temp;
+          $maxboard = $b.'.'.$chain;
+          }
+        if ($min > $temp) { 
+          $min = $temp;
+          $minboard = $b.'.'.$chain;
+          }
+        HPlot::PlotFill('PadiwaTemp',$temp,$i);      
+        }  
+      else {
+        my $t = Dmon::PadiwaSendCmd(0x10010000,$b,$chain);
+        HPlot::PlotFill('PadiwaTemp',10,$i);      
+        #print Dumper $t;
+        if(($t & 0xFF) != 0x28) {
+          $notonline .= sprintf(" %04x.%1i",$b,$chain);
+          $notonlinecnt++;
+          }
         }
-      HPlot::PlotFill('PadiwaTemp',$temp,$i);      
       }  
-    else {
-      HPlot::PlotFill('PadiwaTemp',10,$i);      
-      $notonline .= sprintf(" %04x",$b);
-      $notonlinecnt++;
-      }
     }
   
   my $title    = "Temperature";
   my $value    = sprintf("%.1f",$max);
   my $longtext = sprintf("Maximum: %.1f on board 0x%04x<br>Minimum: %.1f on board 0x%04x",$max,$maxboard,$min,$minboard);
-  my $status   = Dmon::GetQAState('below',$max,(50,60,70));
+  my $status   = Dmon::GetQAState('below',$max,(65,70,75));
   Dmon::WriteQALog($config{flog},"padiwatemp",30,$status,$title,$value,$longtext,"10-PadiwaTemp");
 
   $title    = "Online";
-  $value    = sprintf("%i / %i",(scalar @{$config{PadiwaTrbAdresses}})-$notonlinecnt,scalar @{$config{PadiwaTrbAdresses}});
+  $value    = sprintf("%i / %i",$PadiwaNumber-$notonlinecnt,$PadiwaNumber);
   $longtext = "Boards not reacting:".$notonline;
   $status   = Dmon::GetQAState('below',$notonlinecnt,(0,1,4));
   Dmon::WriteQALog($config{flog},"padiwaonline",30,$status,$title,$value,$longtext,"10-PadiwaOnline");  
diff --git a/dmon/scripts/dmon_trgerrors.pl b/dmon/scripts/dmon_trgerrors.pl
new file mode 100755 (executable)
index 0000000..50c6d40
--- /dev/null
@@ -0,0 +1,47 @@
+#!/usr/bin/perl -w
+
+use warnings;
+use POSIX qw(strftime);
+use FileHandle;
+use HADES::TrbNet;
+use Time::HiRes qw(usleep);
+use Dmon;
+use Data::Dumper;
+
+
+my %config = Dmon::StartUp();
+
+my $curr, my $old;
+
+
+while(1) {
+  my $errors = 0;
+  my $sig1 = trb_register_read(0xffff,0x6);
+  my $sig2 = trb_register_read(0xffff,0x7);
+  my $diff;
+  
+  if(defined $old) {
+    foreach my $b (keys $sig1) {
+      $curr->[0]->{$b} = ($sig1->{$b} & 0xffff);
+      $curr->[1]->{$b} = (($sig1->{$b}>>16) & 0xffff);
+      $curr->[2]->{$b} = ($sig2->{$b} & 0xffff);
+      $curr->[3]->{$b} = (($sig2->{$b}>>16) & 0xffff);
+      
+      $errors +=  $curr->[0]->{$b} - $old->[0]->{$b};
+      $errors +=  $curr->[1]->{$b} - $old->[1]->{$b};
+      $errors +=  $curr->[2]->{$b} - $old->[2]->{$b};
+      $errors +=  $curr->[3]->{$b} - $old->[3]->{$b};
+      
+      }
+    }
+    
+  
+    
+  my $longtext = "Number of errors with trigger reported: ".$errors;
+  my $status = Dmon::GetQAState('below',$errors,(0,10,20));
+  my $title  = "Trg Errors";
+  Dmon::WriteQALog($config{flog},"trgerrors",10,$status,$title,$errors,$longtext);
+
+  $old = $curr;
+  sleep 1;
+  }
index 0775a31bb7ef8ddcc9502afe7fa3c7a0a8ba0ed1..58bcb47a4acf65bf5620a48b171e10183a9af370 100755 (executable)
@@ -30,7 +30,7 @@ my $USE_LOCK = 0;
 
 my $hitregister = 0xc001;
 
-my @valid_interval = (0x8000, 0x9000);
+my @valid_interval = (0x5000, 0xc000);
 my $interval_step = ($valid_interval[1] - $valid_interval[0])/2;
 my $start_value = int ( ($valid_interval[1] + $valid_interval[0])/2 );
 
index 5bee92fc12c4a64878716e69247cdb6a1e86b2f9..087e7d8296b99f4b9fbd0d12a24137e3aaa1c52b 100755 (executable)
@@ -227,7 +227,7 @@ foreach my $i (reverse (0..3)) {
 
 my $str;
 
-$logger_data->info("\t".time);
+$logger_data->info("\t".time);
 foreach my $i (0..15) {
   $logger_data->info(sprintf "endpoint: 0x%04x, chain: %02d, channel: %2d threshold: 0x%04x, uid: %s", $endpoint, $chain, $i, $best_thresh[$i]||$current_thresh[$i], $uid );
 }
diff --git a/thresholds/thresholds_compare_dirc.pl b/thresholds/thresholds_compare_dirc.pl
new file mode 100755 (executable)
index 0000000..e5d5db4
--- /dev/null
@@ -0,0 +1,376 @@
+#!/usr/bin/perl -w
+
+use lib "../perllibs/";
+
+use warnings;
+use strict;
+use POSIX qw(strftime floor ceil);
+use FileHandle;
+use HPlot;
+use Data::Dumper;
+# use ChannelMapping;
+use lib "../dmon/scripts/";
+use ChanDb;
+use List::Util qw[min max];
+use GD::Simple;
+
+my $fn1 = $ARGV[0];
+
+die("
+usage: thresholds_compare.pl file1 [file2|'-'] [range_L] [range_U]
+omit file2 (by writing a '-') to get abs value, include for file1-file2
+unless range_L and range_U values are set, the color scale
+will be adjusted automatically
+") if (not(defined($fn1)) or ($fn1 eq "--help"));
+
+my $fn2;
+$fn2 = $ARGV[1] unless ($ARGV[1] eq "-");
+my $range_l = $ARGV[2];
+my $range_u = $ARGV[3];
+
+
+
+# my $plot2 = ();
+# $plot2->{name}    = "HeatmapRich";
+# $plot2->{file}    = "thresh_heatmap";
+# $plot2->{entries} = $ChannelMapping::chanmap->{xsize}+1;
+# $plot2->{curves}  = $ChannelMapping::chanmap->{ysize}+1;
+# $plot2->{type}    = HPlot::TYPE_HEATMAP;
+# $plot2->{output}  = HPlot::OUT_PNG;
+# $plot2->{zlabel}  = "Hitrate";
+# $plot2->{sizex}   = 700;
+# $plot2->{sizey}   = 650;
+# $plot2->{nokey}   = 1;
+# $plot2->{buffer}  = 0;
+# $plot2->{xmin}    = 0.5;
+# $plot2->{xmax}    = $ChannelMapping::chanmap->{xsize}+0.5;
+# $plot2->{ymin}    = 0.5;
+# $plot2->{ymax}    = $ChannelMapping::chanmap->{ysize}+0.5;
+# $plot2->{cbmin}   = "-400<*" if $fn2;
+# $plot2->{cbmax}   = "*<" . ($fn2 ? '400' : '45000'); 
+# $plot2->{showvalues} = 0;
+# $plot2->{xlabel} = "column";
+# $plot2->{ylabel} = "row";
+# $plot2->{addCmd} = "set lmargin at screen 0.07\nset rmargin at screen 0.85\nset bmargin at screen 0.07\nset tmargin at screen 0.95";# . ($fn2 ? "": "\n set logscale cb");
+# $plot2->{palette} = "defined (  0 0 0 1,  0.5 1 1 1,  1 1 0 0 )" if $fn2;
+# 
+# HPlot::PlotInit($plot2);
+
+sub readSettings {
+  my $fn = shift;
+  open(my $fh,  $fn) || die "could not open file '$fn'";
+  my @f = <$fh>;
+  close $fh;
+
+  my %thresholds = ();
+  my $count=0;
+  foreach my $cl (@f) {
+    (my $ep, my $chain, my $channel, my $thresh, my $uid) = 
+      $cl =~ /endpoint:\s+(\w+), chain:\s+(\d+), channel:\s+(\d+) threshold:\s+(\w+), uid: (\w+)/;
+    next unless defined $ep;
+    $thresholds{hex($ep) .":". (int($channel)+ 16* int($chain)+1 )} = hex $thresh;
+  }
+
+  return %thresholds;
+}
+
+# load files
+
+#   my $totalsize = ($ChannelMapping::chanmap->{xsize}*$ChannelMapping::chanmap->{ysize});
+  my %threshs1 = readSettings($fn1);
+#   print "WARNING: Expected ".$totalsize." settings in $fn1. Got " . scalar(keys %threshs1) unless scalar(keys %threshs1) == $totalsize; 
+
+  my %threshs2 = ();
+  if ($fn2) {
+    %threshs2 = readSettings($fn2);
+#     print "WARNING: Expected ".$totalsize." settings in $fn2. Got " . scalar(keys %threshs2) unless scalar(keys %threshs2) == $totalsize; 
+  } else {
+    for my $key (keys %threshs1) {
+      $threshs2{$key} = 0;
+    }
+#     $fn2 = 'n/a';
+  }
+
+  
+#   # plot heatmap w/ HPLOT
+# # plot heatmap
+#   for my $x (1..$ChannelMapping::chanmap->{xsize}) {
+#     for my $y (1..$ChannelMapping::chanmap->{ysize}) {
+#       my $fpga    = $ChannelMapping::chanmap->{fpga}->[$x]->[$y];
+#       my $channel = ($ChannelMapping::chanmap->{chan}->[$x]->[$y]-1)/2;
+#       
+#       unless (defined $threshs1{$fpga.":".$channel}) {
+#         printf("endpoint 0x%04x, channel %d (%d:%d) not found in $fn1", $fpga, $channel, $fpga, $channel);
+#         next;
+#       }
+# 
+#       my $value = $threshs1{$fpga.":".$channel};
+#       if ($fn2) {
+#         if (defined $threshs2{$fpga.":".$channel}) {
+#           $value -= $threshs2{$fpga.":".$channel};
+#         } else {
+#           printf("endpoint 0x%04x, channel %d (%d:%d) not found in $fn2", $fpga, $channel, $fpga, $channel);
+#         }
+#       }
+# 
+#       HPlot::PlotFill('HeatmapRich',$value,$x,$y);
+#     }
+#   }
+#   HPlot::PlotDraw('HeatmapRich');     
+#   
+#     # end of plot heatmap w/ HPLOT
+    
+# plot heatmap with GD
+
+my $pmt_rows = @{$ChanDb::chanDb};
+my $pmt_cols = @{$ChanDb::chanDb->[0]};
+print "found $pmt_rows pmt rows and $pmt_cols pmt columns\n";
+
+my $plot_filename = "./thresh_heatmap.png";
+
+my $padding_left    = 20;
+my $padding_top     = 40;
+my $pixel_size      = 10;
+my $pmt_spacing_x   = 40;
+my $pmt_spacing_y   = 35;
+
+my $legend_length   = 500;
+my $legend_segments = 256;
+my $leg_seg_width   = ceil($legend_length/$legend_segments);
+
+my $max_count=0;
+my $min_count=0;
+
+my $symmetric_scale=0;
+
+
+# find max counts
+    for my $pmt_i (0..($pmt_rows-1)) {
+      for my $pmt_j (0..($pmt_cols-1)) {
+        my $pmt_lookup = $ChanDb::chanDb->[$pmt_i]->[$pmt_j];
+        for my $px_i (0..7) {
+          for my $px_j (0..7) {
+            my $pixel_info  = $pmt_lookup->[$px_i]->[$px_j];
+            my $fpga = $pixel_info->{fpga};
+            my $channel = $pixel_info->{chan};
+            my $val = $threshs1{$fpga.":".$channel}||0;
+            if ($fn2) {
+              if (defined $threshs2{$fpga.":".$channel}) {
+                $val -= $threshs2{$fpga.":".$channel};
+              } else {
+                printf("endpoint 0x%04x, channel %d (%d:%d) not found in $fn2\n", $fpga, $channel, $fpga, $channel);
+              }
+            }
+            $max_count = max($max_count,$val);
+            $min_count = min($min_count,$val);
+          }  
+        }
+      }
+    }
+    
+    if ($min_count < 0){
+      $symmetric_scale = 1;
+    }
+    if ($symmetric_scale) {
+      my $max_amplitude = max(abs($max_count),abs($min_count));
+      $min_count = -$max_amplitude;
+      $max_count =  $max_amplitude;
+    }
+    
+    $min_count = $range_l if (defined($range_l));
+    $max_count = $range_u if (defined($range_u));
+  
+    
+    my $count_range   = $max_count-$min_count;
+
+    my $img = GD::Simple->new(640,480);
+    my $offset_x;
+    my $offset_y;
+    
+    for my $pmt_i (0..($pmt_rows-1)) {
+      $offset_y = $padding_top + $pmt_i*($pmt_spacing_y + 8*$pixel_size);
+      for my $pmt_j (0..($pmt_cols-1)) {
+        $offset_x = $padding_left + $pmt_j*($pmt_spacing_x + 8*$pixel_size);
+        
+        my $pmt_lookup = $ChanDb::chanDb->[$pmt_i]->[$pmt_j];
+        
+        my $mcp_id = $pmt_lookup->[0]->[0]->{mcp};
+        $img->moveTo($offset_x,$offset_y-10);
+        $img->string($mcp_id);
+        
+        for my $px_i (0..7) {
+#           print "\n";
+          for my $px_j (0..7) {
+            my $pixel_info  = $pmt_lookup->[$px_i]->[$px_j];
+            my $fpga = $pixel_info->{fpga};
+            my $channel = $pixel_info->{chan};
+            
+            
+            my $val = $threshs1{$fpga.":".$channel};
+            if ($fn2) {
+              if (defined $threshs2{$fpga.":".$channel}) {
+                $val -= $threshs2{$fpga.":".$channel};
+              } else {
+                printf("endpoint 0x%04x, channel %d (%d:%d) not found in $fn2\n", $fpga, $channel, $fpga, $channel);
+              }
+            }
+            my $val_in_range = min(max($val,$min_count),$max_count)-$min_count;
+            if(defined($val)){
+              $img->bgcolor(false_color($val_in_range/$count_range));
+            } else {
+              $img->bgcolor('black');
+            }
+            $img->fgcolor('black');
+            my $tlx =$offset_x + $px_j*$pixel_size;
+            my $tly =$offset_y + $px_i*$pixel_size;
+            my $brx = $tlx + $pixel_size;
+            my $bry = $tly + $pixel_size;
+            $img->rectangle($tlx,$tly,$brx,$bry); # (top_left_x, top_left_y, bottom_right_x, bottom_right_y)
+          }
+        }
+      }
+    }
+    
+#     print "new max: $new_max, :new_min: $new_min\n";
+    
+    #now drawing the legend
+    $offset_x = $padding_left;
+    $offset_y = $padding_top + $pmt_rows*($pmt_spacing_y + 8*$pixel_size);
+    
+    #calculate relevant decimal power
+    my $dpwr = floor(log($count_range)/log(10));
+    if (($count_range/10**$dpwr)<=2) {
+      $dpwr--;
+    }
+    
+#     print "dpwr: $dpwr\n";
+    
+    my $last_integer=undef;
+    for my $leg_seg (0..($legend_segments-1)){
+      my $val = $leg_seg/$legend_segments*$count_range+$min_count;
+      my @color = false_color($leg_seg/$legend_segments);
+      $img->bgcolor(@color);
+      $img->fgcolor(@color);
+      my $tlx =$offset_x + $leg_seg*$leg_seg_width;
+      my $tly =$offset_y;
+      my $brx = $tlx + $leg_seg_width;
+      my $bry = $tly + $pixel_size;
+      $img->rectangle( $tlx,$tly,$brx,$bry); # (top_left_x, top_left_y, bottom_right_x, bottom_right_y)
+      
+      #distribute nice numbers along the rainbow
+      my $cur_integer = floor($val/(10**$dpwr));
+      if (defined($last_integer) and ($cur_integer != $last_integer)) {
+#       unless($leg_seg % $legend_stepping) {
+        $img->moveTo($tlx,$tly-8);
+        $img->fgcolor('black');
+        $img->string(kilomega($cur_integer*10**$dpwr));
+        $img->moveTo($tlx,$tly-4);
+        $img->lineTo($tlx,$tly-8);
+      }
+      $last_integer=$cur_integer;
+    }
+    
+    
+    # print file name    
+    $offset_x = $padding_left;
+    $offset_y += 25;
+    $img->moveTo($offset_x,$offset_y);
+    $img->fgcolor('black');
+    $img->string(strftime("%H:%M:%S", localtime()));
+    $offset_y += 20;
+    $offset_x += 10;
+    $img->moveTo($offset_x,$offset_y);
+    $img->string($fn1);
+    if(defined($fn2)){
+      $offset_y += 12;
+      $offset_x = $padding_left;
+      $img->moveTo($offset_x,$offset_y);
+      $img->string("-");
+      $offset_x += 10;
+      $img->moveTo($offset_x,$offset_y);
+      $img->string($fn2);
+    }
+    
+    
+    open my $out, '>', $plot_filename or die;
+    binmode $out;
+    print $out $img->png;
+# end of plot heatmap with GD
+
+
+# plot histogram
+  my @values = ();
+
+  open DATA, ">", "/tmp/thresh_diff.dat";
+  for my $key (keys %threshs1) {
+    print DATA $threshs1{$key} . " " . $threshs2{$key} . "\n";
+    push @values, $threshs1{$key};
+    push @values, $threshs2{$key};
+  }
+  close DATA;
+
+  @values = sort @values;
+  
+  my $min = $values[int($#values * 0.02)];
+  my $max = $values[int($#values * 0.92)];
+  my $range = $max-$min;
+
+  $min -= $range * 0.1;
+  $max += $range * 0.1;
+
+
+  open GNUPLOT, '|gnuplot';
+  print GNUPLOT <<CMD
+set terminal png size 700,650
+set output "thresh_hist.png"
+
+set xrange [$min:$max]
+
+binwidth=50
+bin(x,width)=width*floor(x/width)
+
+set style line 1 lt 1 lc rgb "green"
+set style line 2 lt 1 lc rgb "red"
+set style fill solid noborder
+
+plot \\
+  '/tmp/thresh_diff.dat' using (bin(\$1,binwidth)):(1.0) smooth freq with boxes lc 1 title '$fn1', \\
+CMD
+;
+if (defined($fn2)){
+print GNUPLOT <<CMD
+  '/tmp/thresh_diff.dat' using (bin(\$2,binwidth)):(1.0) smooth freq with boxes lc 2 title '$fn2'
+CMD
+;
+}
+  close GNUPLOT;
+  
+
+
+
+sub false_color {
+  my $val = $_[0]; # has to be normalized
+  my $hue = 170*(1-$val);
+  return GD::Simple->HSVtoRGB($hue,255,255);
+}
+
+
+sub kilomega {
+  my $val = $_[0];
+  my $num;
+  if($val/1e9 >= 1){
+    my $a = sprintf("%1.1fG",$val/1e9);
+    $a =~ s/\.0//;
+    return $a;
+  } elsif ($val/1e6 >= 1){
+    my $a = sprintf("%1.1fM",$val/1e6);
+    $a =~ s/\.0//;
+    return $a;
+  } elsif ($val/1e3 >= 1){
+    my $a = sprintf("%1.1fk",$val/1e3);
+    $a =~ s/\.0//;
+    return $a;
+  } else {
+    return sprintf("%d",$val);
+  }
+}
\ No newline at end of file
index e9fccf9baed889dc0711b53ce83402c6f1c6d5c8..2e60bc882153d1e58a2307845e2143a22a462612 100755 (executable)
@@ -5,6 +5,8 @@ use Time::HiRes qw( usleep );
 use Data::Dumper;
 use HADES::TrbNet;
 use Date::Format;
+use Dmon;
+
 
 if(!defined $ENV{'DAQOPSERVER'}) {
   die "DAQOPSERVER not set in environment";
@@ -73,12 +75,13 @@ sub sendcmd16 {
   
 sub sendcmd {
   my ($cmd) = @_;
-  my $c = [$cmd,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1<<$chain,1];
-  trb_register_write_mem($board,0xd400,0,$c,scalar @{$c});
+  return Dmon::PadiwaSendCmd($cmd,$board,$chain);
+#  my $c = [$cmd,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1<<$chain,1];
+#  trb_register_write_mem($board,0xd400,0,$c,scalar @{$c});
 #   trb_register_write($board,0xd410,1<<$chain) or die "trb_register_write: ", trb_strerror();   
 #   trb_register_write($board,0xd411,1);
-  usleep(1000);
-  return trb_register_read($board,0xd412);
+#  usleep(1000);
+#  return trb_register_read($board,0xd412);
   }
   
   
diff --git a/users/gsi_dirc/ChannelMapping.pm b/users/gsi_dirc/ChannelMapping.pm
new file mode 100644 (file)
index 0000000..755a4e3
--- /dev/null
@@ -0,0 +1,2064 @@
+
+
+package ChannelMapping;
+use warnings;
+use strict;
+
+our $chanmap;
+$chanmap->{xsize} = 40;
+$chanmap->{ysize} = 24;
+
+$chanmap->{fpga}->[0]->[0]=0x2003;
+$chanmap->{chan}->[0]->[0]=48;
+$chanmap->{fpga}->[0]->[1]=0x2003;
+$chanmap->{chan}->[0]->[1]=46;
+$chanmap->{fpga}->[0]->[2]=0x2003;
+$chanmap->{chan}->[0]->[2]=44;
+$chanmap->{fpga}->[0]->[3]=0x2003;
+$chanmap->{chan}->[0]->[3]=42;
+$chanmap->{fpga}->[0]->[4]=0x2003;
+$chanmap->{chan}->[0]->[4]=40;
+$chanmap->{fpga}->[0]->[5]=0x2003;
+$chanmap->{chan}->[0]->[5]=38;
+$chanmap->{fpga}->[0]->[6]=0x2003;
+$chanmap->{chan}->[0]->[6]=36;
+$chanmap->{fpga}->[0]->[7]=0x2003;
+$chanmap->{chan}->[0]->[7]=34;
+
+$chanmap->{fpga}->[1]->[0]=0x2003;
+$chanmap->{chan}->[1]->[0]=47;
+$chanmap->{fpga}->[1]->[1]=0x2003;
+$chanmap->{chan}->[1]->[1]=45;
+$chanmap->{fpga}->[1]->[2]=0x2003;
+$chanmap->{chan}->[1]->[2]=43;
+$chanmap->{fpga}->[1]->[3]=0x2003;
+$chanmap->{chan}->[1]->[3]=41;
+$chanmap->{fpga}->[1]->[4]=0x2003;
+$chanmap->{chan}->[1]->[4]=39;
+$chanmap->{fpga}->[1]->[5]=0x2003;
+$chanmap->{chan}->[1]->[5]=37;
+$chanmap->{fpga}->[1]->[6]=0x2003;
+$chanmap->{chan}->[1]->[6]=35;
+$chanmap->{fpga}->[1]->[7]=0x2003;
+$chanmap->{chan}->[1]->[7]=33;
+
+$chanmap->{fpga}->[2]->[0]=0x2003;
+$chanmap->{chan}->[2]->[0]=32;
+$chanmap->{fpga}->[2]->[1]=0x2003;
+$chanmap->{chan}->[2]->[1]=30;
+$chanmap->{fpga}->[2]->[2]=0x2003;
+$chanmap->{chan}->[2]->[2]=28;
+$chanmap->{fpga}->[2]->[3]=0x2003;
+$chanmap->{chan}->[2]->[3]=26;
+$chanmap->{fpga}->[2]->[4]=0x2003;
+$chanmap->{chan}->[2]->[4]=24;
+$chanmap->{fpga}->[2]->[5]=0x2003;
+$chanmap->{chan}->[2]->[5]=22;
+$chanmap->{fpga}->[2]->[6]=0x2003;
+$chanmap->{chan}->[2]->[6]=20;
+$chanmap->{fpga}->[2]->[7]=0x2003;
+$chanmap->{chan}->[2]->[7]=18;
+
+$chanmap->{fpga}->[3]->[0]=0x2003;
+$chanmap->{chan}->[3]->[0]=31;
+$chanmap->{fpga}->[3]->[1]=0x2003;
+$chanmap->{chan}->[3]->[1]=29;
+$chanmap->{fpga}->[3]->[2]=0x2003;
+$chanmap->{chan}->[3]->[2]=27;
+$chanmap->{fpga}->[3]->[3]=0x2003;
+$chanmap->{chan}->[3]->[3]=25;
+$chanmap->{fpga}->[3]->[4]=0x2003;
+$chanmap->{chan}->[3]->[4]=23;
+$chanmap->{fpga}->[3]->[5]=0x2003;
+$chanmap->{chan}->[3]->[5]=21;
+$chanmap->{fpga}->[3]->[6]=0x2003;
+$chanmap->{chan}->[3]->[6]=19;
+$chanmap->{fpga}->[3]->[7]=0x2003;
+$chanmap->{chan}->[3]->[7]=17;
+
+$chanmap->{fpga}->[4]->[0]=0x2003;
+$chanmap->{chan}->[4]->[0]=16;
+$chanmap->{fpga}->[4]->[1]=0x2003;
+$chanmap->{chan}->[4]->[1]=14;
+$chanmap->{fpga}->[4]->[2]=0x2003;
+$chanmap->{chan}->[4]->[2]=12;
+$chanmap->{fpga}->[4]->[3]=0x2003;
+$chanmap->{chan}->[4]->[3]=10;
+$chanmap->{fpga}->[4]->[4]=0x2003;
+$chanmap->{chan}->[4]->[4]=8;
+$chanmap->{fpga}->[4]->[5]=0x2003;
+$chanmap->{chan}->[4]->[5]=6;
+$chanmap->{fpga}->[4]->[6]=0x2003;
+$chanmap->{chan}->[4]->[6]=4;
+$chanmap->{fpga}->[4]->[7]=0x2003;
+$chanmap->{chan}->[4]->[7]=2;
+
+$chanmap->{fpga}->[5]->[0]=0x2003;
+$chanmap->{chan}->[5]->[0]=15;
+$chanmap->{fpga}->[5]->[1]=0x2003;
+$chanmap->{chan}->[5]->[1]=13;
+$chanmap->{fpga}->[5]->[2]=0x2003;
+$chanmap->{chan}->[5]->[2]=11;
+$chanmap->{fpga}->[5]->[3]=0x2003;
+$chanmap->{chan}->[5]->[3]=9;
+$chanmap->{fpga}->[5]->[4]=0x2003;
+$chanmap->{chan}->[5]->[4]=7;
+$chanmap->{fpga}->[5]->[5]=0x2003;
+$chanmap->{chan}->[5]->[5]=5;
+$chanmap->{fpga}->[5]->[6]=0x2003;
+$chanmap->{chan}->[5]->[6]=3;
+$chanmap->{fpga}->[5]->[7]=0x2003;
+$chanmap->{chan}->[5]->[7]=1;
+
+$chanmap->{fpga}->[6]->[0]=0x2002;
+$chanmap->{chan}->[6]->[0]=48;
+$chanmap->{fpga}->[6]->[1]=0x2002;
+$chanmap->{chan}->[6]->[1]=46;
+$chanmap->{fpga}->[6]->[2]=0x2002;
+$chanmap->{chan}->[6]->[2]=44;
+$chanmap->{fpga}->[6]->[3]=0x2002;
+$chanmap->{chan}->[6]->[3]=42;
+$chanmap->{fpga}->[6]->[4]=0x2002;
+$chanmap->{chan}->[6]->[4]=40;
+$chanmap->{fpga}->[6]->[5]=0x2002;
+$chanmap->{chan}->[6]->[5]=38;
+$chanmap->{fpga}->[6]->[6]=0x2002;
+$chanmap->{chan}->[6]->[6]=36;
+$chanmap->{fpga}->[6]->[7]=0x2002;
+$chanmap->{chan}->[6]->[7]=34;
+
+$chanmap->{fpga}->[7]->[0]=0x2002;
+$chanmap->{chan}->[7]->[0]=47;
+$chanmap->{fpga}->[7]->[1]=0x2002;
+$chanmap->{chan}->[7]->[1]=45;
+$chanmap->{fpga}->[7]->[2]=0x2002;
+$chanmap->{chan}->[7]->[2]=43;
+$chanmap->{fpga}->[7]->[3]=0x2002;
+$chanmap->{chan}->[7]->[3]=41;
+$chanmap->{fpga}->[7]->[4]=0x2002;
+$chanmap->{chan}->[7]->[4]=39;
+$chanmap->{fpga}->[7]->[5]=0x2002;
+$chanmap->{chan}->[7]->[5]=37;
+$chanmap->{fpga}->[7]->[6]=0x2002;
+$chanmap->{chan}->[7]->[6]=35;
+$chanmap->{fpga}->[7]->[7]=0x2002;
+$chanmap->{chan}->[7]->[7]=33;
+
+
+$chanmap->{fpga}->[8]->[0]=0x2002;
+$chanmap->{chan}->[8]->[0]=32;
+$chanmap->{fpga}->[8]->[1]=0x2002;
+$chanmap->{chan}->[8]->[1]=30;
+$chanmap->{fpga}->[8]->[2]=0x2002;
+$chanmap->{chan}->[8]->[2]=28;
+$chanmap->{fpga}->[8]->[3]=0x2002;
+$chanmap->{chan}->[8]->[3]=26;
+$chanmap->{fpga}->[8]->[4]=0x2002;
+$chanmap->{chan}->[8]->[4]=24;
+$chanmap->{fpga}->[8]->[5]=0x2002;
+$chanmap->{chan}->[8]->[5]=22;
+$chanmap->{fpga}->[8]->[6]=0x2002;
+$chanmap->{chan}->[8]->[6]=20;
+$chanmap->{fpga}->[8]->[7]=0x2002;
+$chanmap->{chan}->[8]->[7]=18;
+
+$chanmap->{fpga}->[9]->[0]=0x2002;
+$chanmap->{chan}->[9]->[0]=31;
+$chanmap->{fpga}->[9]->[1]=0x2002;
+$chanmap->{chan}->[9]->[1]=29;
+$chanmap->{fpga}->[9]->[2]=0x2002;
+$chanmap->{chan}->[9]->[2]=27;
+$chanmap->{fpga}->[9]->[3]=0x2002;
+$chanmap->{chan}->[9]->[3]=25;
+$chanmap->{fpga}->[9]->[4]=0x2002;
+$chanmap->{chan}->[9]->[4]=23;
+$chanmap->{fpga}->[9]->[5]=0x2002;
+$chanmap->{chan}->[9]->[5]=21;
+$chanmap->{fpga}->[9]->[6]=0x2002;
+$chanmap->{chan}->[9]->[6]=19;
+$chanmap->{fpga}->[9]->[7]=0x2002;
+$chanmap->{chan}->[9]->[7]=17;
+
+$chanmap->{fpga}->[10]->[0]=0x2002;
+$chanmap->{chan}->[10]->[0]=16;
+$chanmap->{fpga}->[10]->[1]=0x2002;
+$chanmap->{chan}->[10]->[1]=14;
+$chanmap->{fpga}->[10]->[2]=0x2002;
+$chanmap->{chan}->[10]->[2]=12;
+$chanmap->{fpga}->[10]->[3]=0x2002;
+$chanmap->{chan}->[10]->[3]=10;
+$chanmap->{fpga}->[10]->[4]=0x2002;
+$chanmap->{chan}->[10]->[4]=8;
+$chanmap->{fpga}->[10]->[5]=0x2002;
+$chanmap->{chan}->[10]->[5]=6;
+$chanmap->{fpga}->[10]->[6]=0x2002;
+$chanmap->{chan}->[10]->[6]=4;
+$chanmap->{fpga}->[10]->[7]=0x2002;
+$chanmap->{chan}->[10]->[7]=2;
+
+$chanmap->{fpga}->[11]->[0]=0x2002;
+$chanmap->{chan}->[11]->[0]=15;
+$chanmap->{fpga}->[11]->[1]=0x2002;
+$chanmap->{chan}->[11]->[1]=13;
+$chanmap->{fpga}->[11]->[2]=0x2002;
+$chanmap->{chan}->[11]->[2]=11;
+$chanmap->{fpga}->[11]->[3]=0x2002;
+$chanmap->{chan}->[11]->[3]=9;
+$chanmap->{fpga}->[11]->[4]=0x2002;
+$chanmap->{chan}->[11]->[4]=7;
+$chanmap->{fpga}->[11]->[5]=0x2002;
+$chanmap->{chan}->[11]->[5]=5;
+$chanmap->{fpga}->[11]->[6]=0x2002;
+$chanmap->{chan}->[11]->[6]=3;
+$chanmap->{fpga}->[11]->[7]=0x2002;
+$chanmap->{chan}->[11]->[7]=1;
+
+$chanmap->{fpga}->[12]->[0]=0x2001;
+$chanmap->{chan}->[12]->[0]=48;
+$chanmap->{fpga}->[12]->[1]=0x2001;
+$chanmap->{chan}->[12]->[1]=46;
+$chanmap->{fpga}->[12]->[2]=0x2001;
+$chanmap->{chan}->[12]->[2]=44;
+$chanmap->{fpga}->[12]->[3]=0x2001;
+$chanmap->{chan}->[12]->[3]=42;
+$chanmap->{fpga}->[12]->[4]=0x2001;
+$chanmap->{chan}->[12]->[4]=40;
+$chanmap->{fpga}->[12]->[5]=0x2001;
+$chanmap->{chan}->[12]->[5]=38;
+$chanmap->{fpga}->[12]->[6]=0x2001;
+$chanmap->{chan}->[12]->[6]=36;
+$chanmap->{fpga}->[12]->[7]=0x2001;
+$chanmap->{chan}->[12]->[7]=34;
+
+$chanmap->{fpga}->[13]->[0]=0x2001;
+$chanmap->{chan}->[13]->[0]=47;
+$chanmap->{fpga}->[13]->[1]=0x2001;
+$chanmap->{chan}->[13]->[1]=45;
+$chanmap->{fpga}->[13]->[2]=0x2001;
+$chanmap->{chan}->[13]->[2]=43;
+$chanmap->{fpga}->[13]->[3]=0x2001;
+$chanmap->{chan}->[13]->[3]=41;
+$chanmap->{fpga}->[13]->[4]=0x2001;
+$chanmap->{chan}->[13]->[4]=39;
+$chanmap->{fpga}->[13]->[5]=0x2001;
+$chanmap->{chan}->[13]->[5]=37;
+$chanmap->{fpga}->[13]->[6]=0x2001;
+$chanmap->{chan}->[13]->[6]=35;
+$chanmap->{fpga}->[13]->[7]=0x2001;
+$chanmap->{chan}->[13]->[7]=33;
+
+$chanmap->{fpga}->[14]->[0]=0x2001;
+$chanmap->{chan}->[14]->[0]=32;
+$chanmap->{fpga}->[14]->[1]=0x2001;
+$chanmap->{chan}->[14]->[1]=30;
+$chanmap->{fpga}->[14]->[2]=0x2001;
+$chanmap->{chan}->[14]->[2]=28;
+$chanmap->{fpga}->[14]->[3]=0x2001;
+$chanmap->{chan}->[14]->[3]=26;
+$chanmap->{fpga}->[14]->[4]=0x2001;
+$chanmap->{chan}->[14]->[4]=24;
+$chanmap->{fpga}->[14]->[5]=0x2001;
+$chanmap->{chan}->[14]->[5]=22;
+$chanmap->{fpga}->[14]->[6]=0x2001;
+$chanmap->{chan}->[14]->[6]=20;
+$chanmap->{fpga}->[14]->[7]=0x2001;
+$chanmap->{chan}->[14]->[7]=18;
+
+$chanmap->{fpga}->[15]->[0]=0x2001;
+$chanmap->{chan}->[15]->[0]=31;
+$chanmap->{fpga}->[15]->[1]=0x2001;
+$chanmap->{chan}->[15]->[1]=29;
+$chanmap->{fpga}->[15]->[2]=0x2001;
+$chanmap->{chan}->[15]->[2]=27;
+$chanmap->{fpga}->[15]->[3]=0x2001;
+$chanmap->{chan}->[15]->[3]=25;
+$chanmap->{fpga}->[15]->[4]=0x2001;
+$chanmap->{chan}->[15]->[4]=23;
+$chanmap->{fpga}->[15]->[5]=0x2001;
+$chanmap->{chan}->[15]->[5]=21;
+$chanmap->{fpga}->[15]->[6]=0x2001;
+$chanmap->{chan}->[15]->[6]=19;
+$chanmap->{fpga}->[15]->[7]=0x2001;
+$chanmap->{chan}->[15]->[7]=17;
+
+
+$chanmap->{fpga}->[16]->[0]=0x2001;
+$chanmap->{chan}->[16]->[0]=16;
+$chanmap->{fpga}->[16]->[1]=0x2001;
+$chanmap->{chan}->[16]->[1]=14;
+$chanmap->{fpga}->[16]->[2]=0x2001;
+$chanmap->{chan}->[16]->[2]=12;
+$chanmap->{fpga}->[16]->[3]=0x2001;
+$chanmap->{chan}->[16]->[3]=10;
+$chanmap->{fpga}->[16]->[4]=0x2001;
+$chanmap->{chan}->[16]->[4]=8;
+$chanmap->{fpga}->[16]->[5]=0x2001;
+$chanmap->{chan}->[16]->[5]=6;
+$chanmap->{fpga}->[16]->[6]=0x2001;
+$chanmap->{chan}->[16]->[6]=4;
+$chanmap->{fpga}->[16]->[7]=0x2001;
+$chanmap->{chan}->[16]->[7]=2;
+
+$chanmap->{fpga}->[17]->[0]=0x2001;
+$chanmap->{chan}->[17]->[0]=15;
+$chanmap->{fpga}->[17]->[1]=0x2001;
+$chanmap->{chan}->[17]->[1]=13;
+$chanmap->{fpga}->[17]->[2]=0x2001;
+$chanmap->{chan}->[17]->[2]=11;
+$chanmap->{fpga}->[17]->[3]=0x2001;
+$chanmap->{chan}->[17]->[3]=9;
+$chanmap->{fpga}->[17]->[4]=0x2001;
+$chanmap->{chan}->[17]->[4]=7;
+$chanmap->{fpga}->[17]->[5]=0x2001;
+$chanmap->{chan}->[17]->[5]=5;
+$chanmap->{fpga}->[17]->[6]=0x2001;
+$chanmap->{chan}->[17]->[6]=3;
+$chanmap->{fpga}->[17]->[7]=0x2001;
+$chanmap->{chan}->[17]->[7]=1;
+
+$chanmap->{fpga}->[18]->[0]=0x2000;
+$chanmap->{chan}->[18]->[0]=48;
+$chanmap->{fpga}->[18]->[1]=0x2000;
+$chanmap->{chan}->[18]->[1]=46;
+$chanmap->{fpga}->[18]->[2]=0x2000;
+$chanmap->{chan}->[18]->[2]=44;
+$chanmap->{fpga}->[18]->[3]=0x2000;
+$chanmap->{chan}->[18]->[3]=42;
+$chanmap->{fpga}->[18]->[4]=0x2000;
+$chanmap->{chan}->[18]->[4]=40;
+$chanmap->{fpga}->[18]->[5]=0x2000;
+$chanmap->{chan}->[18]->[5]=38;
+$chanmap->{fpga}->[18]->[6]=0x2000;
+$chanmap->{chan}->[18]->[6]=36;
+$chanmap->{fpga}->[18]->[7]=0x2000;
+$chanmap->{chan}->[18]->[7]=34;
+
+$chanmap->{fpga}->[19]->[0]=0x2000;
+$chanmap->{chan}->[19]->[0]=47;
+$chanmap->{fpga}->[19]->[1]=0x2000;
+$chanmap->{chan}->[19]->[1]=45;
+$chanmap->{fpga}->[19]->[2]=0x2000;
+$chanmap->{chan}->[19]->[2]=43;
+$chanmap->{fpga}->[19]->[3]=0x2000;
+$chanmap->{chan}->[19]->[3]=41;
+$chanmap->{fpga}->[19]->[4]=0x2000;
+$chanmap->{chan}->[19]->[4]=39;
+$chanmap->{fpga}->[19]->[5]=0x2000;
+$chanmap->{chan}->[19]->[5]=37;
+$chanmap->{fpga}->[19]->[6]=0x2000;
+$chanmap->{chan}->[19]->[6]=35;
+$chanmap->{fpga}->[19]->[7]=0x2000;
+$chanmap->{chan}->[19]->[7]=33;
+
+$chanmap->{fpga}->[20]->[0]=0x2000;
+$chanmap->{chan}->[20]->[0]=32;
+$chanmap->{fpga}->[20]->[1]=0x2000;
+$chanmap->{chan}->[20]->[1]=30;
+$chanmap->{fpga}->[20]->[2]=0x2000;
+$chanmap->{chan}->[20]->[2]=28;
+$chanmap->{fpga}->[20]->[3]=0x2000;
+$chanmap->{chan}->[20]->[3]=26;
+$chanmap->{fpga}->[20]->[4]=0x2000;
+$chanmap->{chan}->[20]->[4]=24;
+$chanmap->{fpga}->[20]->[5]=0x2000;
+$chanmap->{chan}->[20]->[5]=22;
+$chanmap->{fpga}->[20]->[6]=0x2000;
+$chanmap->{chan}->[20]->[6]=20;
+$chanmap->{fpga}->[20]->[7]=0x2000;
+$chanmap->{chan}->[20]->[7]=18;
+
+$chanmap->{fpga}->[21]->[0]=0x2000;
+$chanmap->{chan}->[21]->[0]=31;
+$chanmap->{fpga}->[21]->[1]=0x2000;
+$chanmap->{chan}->[21]->[1]=29;
+$chanmap->{fpga}->[21]->[2]=0x2000;
+$chanmap->{chan}->[21]->[2]=27;
+$chanmap->{fpga}->[21]->[3]=0x2000;
+$chanmap->{chan}->[21]->[3]=25;
+$chanmap->{fpga}->[21]->[4]=0x2000;
+$chanmap->{chan}->[21]->[4]=23;
+$chanmap->{fpga}->[21]->[5]=0x2000;
+$chanmap->{chan}->[21]->[5]=21;
+$chanmap->{fpga}->[21]->[6]=0x2000;
+$chanmap->{chan}->[21]->[6]=19;
+$chanmap->{fpga}->[21]->[7]=0x2000;
+$chanmap->{chan}->[21]->[7]=17;
+
+$chanmap->{fpga}->[22]->[0]=0x2000;
+$chanmap->{chan}->[22]->[0]=16;
+$chanmap->{fpga}->[22]->[1]=0x2000;
+$chanmap->{chan}->[22]->[1]=14;
+$chanmap->{fpga}->[22]->[2]=0x2000;
+$chanmap->{chan}->[22]->[2]=12;
+$chanmap->{fpga}->[22]->[3]=0x2000;
+$chanmap->{chan}->[22]->[3]=10;
+$chanmap->{fpga}->[22]->[4]=0x2000;
+$chanmap->{chan}->[22]->[4]=8;
+$chanmap->{fpga}->[22]->[5]=0x2000;
+$chanmap->{chan}->[22]->[5]=6;
+$chanmap->{fpga}->[22]->[6]=0x2000;
+$chanmap->{chan}->[22]->[6]=4;
+$chanmap->{fpga}->[22]->[7]=0x2000;
+$chanmap->{chan}->[22]->[7]=2;
+
+$chanmap->{fpga}->[23]->[0]=0x2000;
+$chanmap->{chan}->[23]->[0]=15;
+$chanmap->{fpga}->[23]->[1]=0x2000;
+$chanmap->{chan}->[23]->[1]=13;
+$chanmap->{fpga}->[23]->[2]=0x2000;
+$chanmap->{chan}->[23]->[2]=11;
+$chanmap->{fpga}->[23]->[3]=0x2000;
+$chanmap->{chan}->[23]->[3]=9;
+$chanmap->{fpga}->[23]->[4]=0x2000;
+$chanmap->{chan}->[23]->[4]=7;
+$chanmap->{fpga}->[23]->[5]=0x2000;
+$chanmap->{chan}->[23]->[5]=5;
+$chanmap->{fpga}->[23]->[6]=0x2000;
+$chanmap->{chan}->[23]->[6]=3;
+$chanmap->{fpga}->[23]->[7]=0x2000;
+$chanmap->{chan}->[23]->[7]=1;
+
+
+$chanmap->{fpga}->[0]->[8]=0x2007;
+$chanmap->{chan}->[0]->[8]=48;
+$chanmap->{fpga}->[0]->[9]=0x2007;
+$chanmap->{chan}->[0]->[9]=46;
+$chanmap->{fpga}->[0]->[10]=0x2007;
+$chanmap->{chan}->[0]->[10]=44;
+$chanmap->{fpga}->[0]->[11]=0x2007;
+$chanmap->{chan}->[0]->[11]=42;
+$chanmap->{fpga}->[0]->[12]=0x2007;
+$chanmap->{chan}->[0]->[12]=40;
+$chanmap->{fpga}->[0]->[13]=0x2007;
+$chanmap->{chan}->[0]->[13]=38;
+$chanmap->{fpga}->[0]->[14]=0x2007;
+$chanmap->{chan}->[0]->[14]=36;
+$chanmap->{fpga}->[0]->[15]=0x2007;
+$chanmap->{chan}->[0]->[15]=34;
+
+$chanmap->{fpga}->[1]->[8]=0x2007;
+$chanmap->{chan}->[1]->[8]=47;
+$chanmap->{fpga}->[1]->[9]=0x2007;
+$chanmap->{chan}->[1]->[9]=45;
+$chanmap->{fpga}->[1]->[10]=0x2007;
+$chanmap->{chan}->[1]->[10]=43;
+$chanmap->{fpga}->[1]->[11]=0x2007;
+$chanmap->{chan}->[1]->[11]=41;
+$chanmap->{fpga}->[1]->[12]=0x2007;
+$chanmap->{chan}->[1]->[12]=39;
+$chanmap->{fpga}->[1]->[13]=0x2007;
+$chanmap->{chan}->[1]->[13]=37;
+$chanmap->{fpga}->[1]->[14]=0x2007;
+$chanmap->{chan}->[1]->[14]=35;
+$chanmap->{fpga}->[1]->[15]=0x2007;
+$chanmap->{chan}->[1]->[15]=33;
+
+$chanmap->{fpga}->[2]->[8]=0x2007;
+$chanmap->{chan}->[2]->[8]=32;
+$chanmap->{fpga}->[2]->[9]=0x2007;
+$chanmap->{chan}->[2]->[9]=30;
+$chanmap->{fpga}->[2]->[10]=0x2007;
+$chanmap->{chan}->[2]->[10]=28;
+$chanmap->{fpga}->[2]->[11]=0x2007;
+$chanmap->{chan}->[2]->[11]=26;
+$chanmap->{fpga}->[2]->[12]=0x2007;
+$chanmap->{chan}->[2]->[12]=24;
+$chanmap->{fpga}->[2]->[13]=0x2007;
+$chanmap->{chan}->[2]->[13]=22;
+$chanmap->{fpga}->[2]->[14]=0x2007;
+$chanmap->{chan}->[2]->[14]=20;
+$chanmap->{fpga}->[2]->[15]=0x2007;
+$chanmap->{chan}->[2]->[15]=18;
+
+$chanmap->{fpga}->[3]->[8]=0x2007;
+$chanmap->{chan}->[3]->[8]=31;
+$chanmap->{fpga}->[3]->[9]=0x2007;
+$chanmap->{chan}->[3]->[9]=29;
+$chanmap->{fpga}->[3]->[10]=0x2007;
+$chanmap->{chan}->[3]->[10]=27;
+$chanmap->{fpga}->[3]->[11]=0x2007;
+$chanmap->{chan}->[3]->[11]=25;
+$chanmap->{fpga}->[3]->[12]=0x2007;
+$chanmap->{chan}->[3]->[12]=23;
+$chanmap->{fpga}->[3]->[13]=0x2007;
+$chanmap->{chan}->[3]->[13]=21;
+$chanmap->{fpga}->[3]->[14]=0x2007;
+$chanmap->{chan}->[3]->[14]=19;
+$chanmap->{fpga}->[3]->[15]=0x2007;
+$chanmap->{chan}->[3]->[15]=17;
+
+$chanmap->{fpga}->[4]->[8]=0x2007;
+$chanmap->{chan}->[4]->[8]=16;
+$chanmap->{fpga}->[4]->[9]=0x2007;
+$chanmap->{chan}->[4]->[9]=14;
+$chanmap->{fpga}->[4]->[10]=0x2007;
+$chanmap->{chan}->[4]->[10]=12;
+$chanmap->{fpga}->[4]->[11]=0x2007;
+$chanmap->{chan}->[4]->[11]=10;
+$chanmap->{fpga}->[4]->[12]=0x2007;
+$chanmap->{chan}->[4]->[12]=8;
+$chanmap->{fpga}->[4]->[13]=0x2007;
+$chanmap->{chan}->[4]->[13]=6;
+$chanmap->{fpga}->[4]->[14]=0x2007;
+$chanmap->{chan}->[4]->[14]=4;
+$chanmap->{fpga}->[4]->[15]=0x2007;
+$chanmap->{chan}->[4]->[15]=2;
+
+$chanmap->{fpga}->[5]->[8]=0x2007;
+$chanmap->{chan}->[5]->[8]=15;
+$chanmap->{fpga}->[5]->[9]=0x2007;
+$chanmap->{chan}->[5]->[9]=13;
+$chanmap->{fpga}->[5]->[10]=0x2007;
+$chanmap->{chan}->[5]->[10]=11;
+$chanmap->{fpga}->[5]->[11]=0x2007;
+$chanmap->{chan}->[5]->[11]=9;
+$chanmap->{fpga}->[5]->[12]=0x2007;
+$chanmap->{chan}->[5]->[12]=7;
+$chanmap->{fpga}->[5]->[13]=0x2007;
+$chanmap->{chan}->[5]->[13]=5;
+$chanmap->{fpga}->[5]->[14]=0x2007;
+$chanmap->{chan}->[5]->[14]=3;
+$chanmap->{fpga}->[5]->[15]=0x2007;
+$chanmap->{chan}->[5]->[15]=1;
+
+$chanmap->{fpga}->[6]->[8]=0x2006;
+$chanmap->{chan}->[6]->[8]=48;
+$chanmap->{fpga}->[6]->[9]=0x2006;
+$chanmap->{chan}->[6]->[9]=46;
+$chanmap->{fpga}->[6]->[10]=0x2006;
+$chanmap->{chan}->[6]->[10]=44;
+$chanmap->{fpga}->[6]->[11]=0x2006;
+$chanmap->{chan}->[6]->[11]=42;
+$chanmap->{fpga}->[6]->[12]=0x2006;
+$chanmap->{chan}->[6]->[12]=40;
+$chanmap->{fpga}->[6]->[13]=0x2006;
+$chanmap->{chan}->[6]->[13]=38;
+$chanmap->{fpga}->[6]->[14]=0x2006;
+$chanmap->{chan}->[6]->[14]=36;
+$chanmap->{fpga}->[6]->[15]=0x2006;
+$chanmap->{chan}->[6]->[15]=34;
+
+$chanmap->{fpga}->[7]->[8]=0x2006;
+$chanmap->{chan}->[7]->[8]=47;
+$chanmap->{fpga}->[7]->[9]=0x2006;
+$chanmap->{chan}->[7]->[9]=45;
+$chanmap->{fpga}->[7]->[10]=0x2006;
+$chanmap->{chan}->[7]->[10]=43;
+$chanmap->{fpga}->[7]->[11]=0x2006;
+$chanmap->{chan}->[7]->[11]=41;
+$chanmap->{fpga}->[7]->[12]=0x2006;
+$chanmap->{chan}->[7]->[12]=39;
+$chanmap->{fpga}->[7]->[13]=0x2006;
+$chanmap->{chan}->[7]->[13]=37;
+$chanmap->{fpga}->[7]->[14]=0x2006;
+$chanmap->{chan}->[7]->[14]=35;
+$chanmap->{fpga}->[7]->[15]=0x2006;
+$chanmap->{chan}->[7]->[15]=33;
+
+
+$chanmap->{fpga}->[8]->[8]=0x2006;
+$chanmap->{chan}->[8]->[8]=32;
+$chanmap->{fpga}->[8]->[9]=0x2006;
+$chanmap->{chan}->[8]->[9]=30;
+$chanmap->{fpga}->[8]->[10]=0x2006;
+$chanmap->{chan}->[8]->[10]=28;
+$chanmap->{fpga}->[8]->[11]=0x2006;
+$chanmap->{chan}->[8]->[11]=26;
+$chanmap->{fpga}->[8]->[12]=0x2006;
+$chanmap->{chan}->[8]->[12]=24;
+$chanmap->{fpga}->[8]->[13]=0x2006;
+$chanmap->{chan}->[8]->[13]=22;
+$chanmap->{fpga}->[8]->[14]=0x2006;
+$chanmap->{chan}->[8]->[14]=20;
+$chanmap->{fpga}->[8]->[15]=0x2006;
+$chanmap->{chan}->[8]->[15]=18;
+
+$chanmap->{fpga}->[9]->[8]=0x2006;
+$chanmap->{chan}->[9]->[8]=31;
+$chanmap->{fpga}->[9]->[9]=0x2006;
+$chanmap->{chan}->[9]->[9]=29;
+$chanmap->{fpga}->[9]->[10]=0x2006;
+$chanmap->{chan}->[9]->[10]=27;
+$chanmap->{fpga}->[9]->[11]=0x2006;
+$chanmap->{chan}->[9]->[11]=25;
+$chanmap->{fpga}->[9]->[12]=0x2006;
+$chanmap->{chan}->[9]->[12]=23;
+$chanmap->{fpga}->[9]->[13]=0x2006;
+$chanmap->{chan}->[9]->[13]=21;
+$chanmap->{fpga}->[9]->[14]=0x2006;
+$chanmap->{chan}->[9]->[14]=19;
+$chanmap->{fpga}->[9]->[15]=0x2006;
+$chanmap->{chan}->[9]->[15]=17;
+
+$chanmap->{fpga}->[10]->[8]=0x2006;
+$chanmap->{chan}->[10]->[8]=16;
+$chanmap->{fpga}->[10]->[9]=0x2006;
+$chanmap->{chan}->[10]->[9]=14;
+$chanmap->{fpga}->[10]->[10]=0x2006;
+$chanmap->{chan}->[10]->[10]=12;
+$chanmap->{fpga}->[10]->[11]=0x2006;
+$chanmap->{chan}->[10]->[11]=10;
+$chanmap->{fpga}->[10]->[12]=0x2006;
+$chanmap->{chan}->[10]->[12]=8;
+$chanmap->{fpga}->[10]->[13]=0x2006;
+$chanmap->{chan}->[10]->[13]=6;
+$chanmap->{fpga}->[10]->[14]=0x2006;
+$chanmap->{chan}->[10]->[14]=4;
+$chanmap->{fpga}->[10]->[15]=0x2006;
+$chanmap->{chan}->[10]->[15]=2;
+
+$chanmap->{fpga}->[11]->[8]=0x2006;
+$chanmap->{chan}->[11]->[8]=15;
+$chanmap->{fpga}->[11]->[9]=0x2006;
+$chanmap->{chan}->[11]->[9]=13;
+$chanmap->{fpga}->[11]->[10]=0x2006;
+$chanmap->{chan}->[11]->[10]=11;
+$chanmap->{fpga}->[11]->[11]=0x2006;
+$chanmap->{chan}->[11]->[11]=9;
+$chanmap->{fpga}->[11]->[12]=0x2006;
+$chanmap->{chan}->[11]->[12]=7;
+$chanmap->{fpga}->[11]->[13]=0x2006;
+$chanmap->{chan}->[11]->[13]=5;
+$chanmap->{fpga}->[11]->[14]=0x2006;
+$chanmap->{chan}->[11]->[14]=3;
+$chanmap->{fpga}->[11]->[15]=0x2006;
+$chanmap->{chan}->[11]->[15]=1;
+
+$chanmap->{fpga}->[12]->[8]=0x2005;
+$chanmap->{chan}->[12]->[8]=48;
+$chanmap->{fpga}->[12]->[9]=0x2005;
+$chanmap->{chan}->[12]->[9]=46;
+$chanmap->{fpga}->[12]->[10]=0x2005;
+$chanmap->{chan}->[12]->[10]=44;
+$chanmap->{fpga}->[12]->[11]=0x2005;
+$chanmap->{chan}->[12]->[11]=42;
+$chanmap->{fpga}->[12]->[12]=0x2005;
+$chanmap->{chan}->[12]->[12]=40;
+$chanmap->{fpga}->[12]->[13]=0x2005;
+$chanmap->{chan}->[12]->[13]=38;
+$chanmap->{fpga}->[12]->[14]=0x2005;
+$chanmap->{chan}->[12]->[14]=36;
+$chanmap->{fpga}->[12]->[15]=0x2005;
+$chanmap->{chan}->[12]->[15]=34;
+
+$chanmap->{fpga}->[13]->[8]=0x2005;
+$chanmap->{chan}->[13]->[8]=47;
+$chanmap->{fpga}->[13]->[9]=0x2005;
+$chanmap->{chan}->[13]->[9]=45;
+$chanmap->{fpga}->[13]->[10]=0x2005;
+$chanmap->{chan}->[13]->[10]=43;
+$chanmap->{fpga}->[13]->[11]=0x2005;
+$chanmap->{chan}->[13]->[11]=41;
+$chanmap->{fpga}->[13]->[12]=0x2005;
+$chanmap->{chan}->[13]->[12]=39;
+$chanmap->{fpga}->[13]->[13]=0x2005;
+$chanmap->{chan}->[13]->[13]=37;
+$chanmap->{fpga}->[13]->[14]=0x2005;
+$chanmap->{chan}->[13]->[14]=35;
+$chanmap->{fpga}->[13]->[15]=0x2005;
+$chanmap->{chan}->[13]->[15]=33;
+
+$chanmap->{fpga}->[14]->[8]=0x2005;
+$chanmap->{chan}->[14]->[8]=32;
+$chanmap->{fpga}->[14]->[9]=0x2005;
+$chanmap->{chan}->[14]->[9]=30;
+$chanmap->{fpga}->[14]->[10]=0x2005;
+$chanmap->{chan}->[14]->[10]=28;
+$chanmap->{fpga}->[14]->[11]=0x2005;
+$chanmap->{chan}->[14]->[11]=26;
+$chanmap->{fpga}->[14]->[12]=0x2005;
+$chanmap->{chan}->[14]->[12]=24;
+$chanmap->{fpga}->[14]->[13]=0x2005;
+$chanmap->{chan}->[14]->[13]=22;
+$chanmap->{fpga}->[14]->[14]=0x2005;
+$chanmap->{chan}->[14]->[14]=20;
+$chanmap->{fpga}->[14]->[15]=0x2005;
+$chanmap->{chan}->[14]->[15]=18;
+
+$chanmap->{fpga}->[15]->[8]=0x2005;
+$chanmap->{chan}->[15]->[8]=31;
+$chanmap->{fpga}->[15]->[9]=0x2005;
+$chanmap->{chan}->[15]->[9]=29;
+$chanmap->{fpga}->[15]->[10]=0x2005;
+$chanmap->{chan}->[15]->[10]=27;
+$chanmap->{fpga}->[15]->[11]=0x2005;
+$chanmap->{chan}->[15]->[11]=25;
+$chanmap->{fpga}->[15]->[12]=0x2005;
+$chanmap->{chan}->[15]->[12]=23;
+$chanmap->{fpga}->[15]->[13]=0x2005;
+$chanmap->{chan}->[15]->[13]=21;
+$chanmap->{fpga}->[15]->[14]=0x2005;
+$chanmap->{chan}->[15]->[14]=19;
+$chanmap->{fpga}->[15]->[15]=0x2005;
+$chanmap->{chan}->[15]->[15]=17;
+
+
+$chanmap->{fpga}->[16]->[8]=0x2005;
+$chanmap->{chan}->[16]->[8]=16;
+$chanmap->{fpga}->[16]->[9]=0x2005;
+$chanmap->{chan}->[16]->[9]=14;
+$chanmap->{fpga}->[16]->[10]=0x2005;
+$chanmap->{chan}->[16]->[10]=12;
+$chanmap->{fpga}->[16]->[11]=0x2005;
+$chanmap->{chan}->[16]->[11]=10;
+$chanmap->{fpga}->[16]->[12]=0x2005;
+$chanmap->{chan}->[16]->[12]=8;
+$chanmap->{fpga}->[16]->[13]=0x2005;
+$chanmap->{chan}->[16]->[13]=6;
+$chanmap->{fpga}->[16]->[14]=0x2005;
+$chanmap->{chan}->[16]->[14]=4;
+$chanmap->{fpga}->[16]->[15]=0x2005;
+$chanmap->{chan}->[16]->[15]=2;
+
+$chanmap->{fpga}->[17]->[8]=0x2005;
+$chanmap->{chan}->[17]->[8]=15;
+$chanmap->{fpga}->[17]->[9]=0x2005;
+$chanmap->{chan}->[17]->[9]=13;
+$chanmap->{fpga}->[17]->[10]=0x2005;
+$chanmap->{chan}->[17]->[10]=11;
+$chanmap->{fpga}->[17]->[11]=0x2005;
+$chanmap->{chan}->[17]->[11]=9;
+$chanmap->{fpga}->[17]->[12]=0x2005;
+$chanmap->{chan}->[17]->[12]=7;
+$chanmap->{fpga}->[17]->[13]=0x2005;
+$chanmap->{chan}->[17]->[13]=5;
+$chanmap->{fpga}->[17]->[14]=0x2005;
+$chanmap->{chan}->[17]->[14]=3;
+$chanmap->{fpga}->[17]->[15]=0x2005;
+$chanmap->{chan}->[17]->[15]=1;
+
+$chanmap->{fpga}->[18]->[8]=0x2004;
+$chanmap->{chan}->[18]->[8]=48;
+$chanmap->{fpga}->[18]->[9]=0x2004;
+$chanmap->{chan}->[18]->[9]=46;
+$chanmap->{fpga}->[18]->[10]=0x2004;
+$chanmap->{chan}->[18]->[10]=44;
+$chanmap->{fpga}->[18]->[11]=0x2004;
+$chanmap->{chan}->[18]->[11]=42;
+$chanmap->{fpga}->[18]->[12]=0x2004;
+$chanmap->{chan}->[18]->[12]=40;
+$chanmap->{fpga}->[18]->[13]=0x2004;
+$chanmap->{chan}->[18]->[13]=38;
+$chanmap->{fpga}->[18]->[14]=0x2004;
+$chanmap->{chan}->[18]->[14]=36;
+$chanmap->{fpga}->[18]->[15]=0x2004;
+$chanmap->{chan}->[18]->[15]=34;
+
+$chanmap->{fpga}->[19]->[8]=0x2004;
+$chanmap->{chan}->[19]->[8]=47;
+$chanmap->{fpga}->[19]->[9]=0x2004;
+$chanmap->{chan}->[19]->[9]=45;
+$chanmap->{fpga}->[19]->[10]=0x2004;
+$chanmap->{chan}->[19]->[10]=43;
+$chanmap->{fpga}->[19]->[11]=0x2004;
+$chanmap->{chan}->[19]->[11]=41;
+$chanmap->{fpga}->[19]->[12]=0x2004;
+$chanmap->{chan}->[19]->[12]=39;
+$chanmap->{fpga}->[19]->[13]=0x2004;
+$chanmap->{chan}->[19]->[13]=37;
+$chanmap->{fpga}->[19]->[14]=0x2004;
+$chanmap->{chan}->[19]->[14]=35;
+$chanmap->{fpga}->[19]->[15]=0x2004;
+$chanmap->{chan}->[19]->[15]=33;
+
+$chanmap->{fpga}->[20]->[8]=0x2004;
+$chanmap->{chan}->[20]->[8]=32;
+$chanmap->{fpga}->[20]->[9]=0x2004;
+$chanmap->{chan}->[20]->[9]=30;
+$chanmap->{fpga}->[20]->[10]=0x2004;
+$chanmap->{chan}->[20]->[10]=28;
+$chanmap->{fpga}->[20]->[11]=0x2004;
+$chanmap->{chan}->[20]->[11]=26;
+$chanmap->{fpga}->[20]->[12]=0x2004;
+$chanmap->{chan}->[20]->[12]=24;
+$chanmap->{fpga}->[20]->[13]=0x2004;
+$chanmap->{chan}->[20]->[13]=22;
+$chanmap->{fpga}->[20]->[14]=0x2004;
+$chanmap->{chan}->[20]->[14]=20;
+$chanmap->{fpga}->[20]->[15]=0x2004;
+$chanmap->{chan}->[20]->[15]=18;
+
+$chanmap->{fpga}->[21]->[8]=0x2004;
+$chanmap->{chan}->[21]->[8]=31;
+$chanmap->{fpga}->[21]->[9]=0x2004;
+$chanmap->{chan}->[21]->[9]=29;
+$chanmap->{fpga}->[21]->[10]=0x2004;
+$chanmap->{chan}->[21]->[10]=27;
+$chanmap->{fpga}->[21]->[11]=0x2004;
+$chanmap->{chan}->[21]->[11]=25;
+$chanmap->{fpga}->[21]->[12]=0x2004;
+$chanmap->{chan}->[21]->[12]=23;
+$chanmap->{fpga}->[21]->[13]=0x2004;
+$chanmap->{chan}->[21]->[13]=21;
+$chanmap->{fpga}->[21]->[14]=0x2004;
+$chanmap->{chan}->[21]->[14]=19;
+$chanmap->{fpga}->[21]->[15]=0x2004;
+$chanmap->{chan}->[21]->[15]=17;
+
+$chanmap->{fpga}->[22]->[8]=0x2004;
+$chanmap->{chan}->[22]->[8]=16;
+$chanmap->{fpga}->[22]->[9]=0x2004;
+$chanmap->{chan}->[22]->[9]=14;
+$chanmap->{fpga}->[22]->[10]=0x2004;
+$chanmap->{chan}->[22]->[10]=12;
+$chanmap->{fpga}->[22]->[11]=0x2004;
+$chanmap->{chan}->[22]->[11]=10;
+$chanmap->{fpga}->[22]->[12]=0x2004;
+$chanmap->{chan}->[22]->[12]=8;
+$chanmap->{fpga}->[22]->[13]=0x2004;
+$chanmap->{chan}->[22]->[13]=6;
+$chanmap->{fpga}->[22]->[14]=0x2004;
+$chanmap->{chan}->[22]->[14]=4;
+$chanmap->{fpga}->[22]->[15]=0x2004;
+$chanmap->{chan}->[22]->[15]=2;
+
+$chanmap->{fpga}->[23]->[8]=0x2004;
+$chanmap->{chan}->[23]->[8]=15;
+$chanmap->{fpga}->[23]->[9]=0x2004;
+$chanmap->{chan}->[23]->[9]=13;
+$chanmap->{fpga}->[23]->[10]=0x2004;
+$chanmap->{chan}->[23]->[10]=11;
+$chanmap->{fpga}->[23]->[11]=0x2004;
+$chanmap->{chan}->[23]->[11]=9;
+$chanmap->{fpga}->[23]->[12]=0x2004;
+$chanmap->{chan}->[23]->[12]=7;
+$chanmap->{fpga}->[23]->[13]=0x2004;
+$chanmap->{chan}->[23]->[13]=5;
+$chanmap->{fpga}->[23]->[14]=0x2004;
+$chanmap->{chan}->[23]->[14]=3;
+$chanmap->{fpga}->[23]->[15]=0x2004;
+$chanmap->{chan}->[23]->[15]=1;
+
+
+$chanmap->{fpga}->[0]->[16]=0x200b;
+$chanmap->{chan}->[0]->[16]=48;
+$chanmap->{fpga}->[0]->[17]=0x200b;
+$chanmap->{chan}->[0]->[17]=46;
+$chanmap->{fpga}->[0]->[18]=0x200b;
+$chanmap->{chan}->[0]->[18]=44;
+$chanmap->{fpga}->[0]->[19]=0x200b;
+$chanmap->{chan}->[0]->[19]=42;
+$chanmap->{fpga}->[0]->[20]=0x200b;
+$chanmap->{chan}->[0]->[20]=40;
+$chanmap->{fpga}->[0]->[21]=0x200b;
+$chanmap->{chan}->[0]->[21]=38;
+$chanmap->{fpga}->[0]->[22]=0x200b;
+$chanmap->{chan}->[0]->[22]=36;
+$chanmap->{fpga}->[0]->[23]=0x200b;
+$chanmap->{chan}->[0]->[23]=34;
+
+$chanmap->{fpga}->[1]->[16]=0x200b;
+$chanmap->{chan}->[1]->[16]=47;
+$chanmap->{fpga}->[1]->[17]=0x200b;
+$chanmap->{chan}->[1]->[17]=45;
+$chanmap->{fpga}->[1]->[18]=0x200b;
+$chanmap->{chan}->[1]->[18]=43;
+$chanmap->{fpga}->[1]->[19]=0x200b;
+$chanmap->{chan}->[1]->[19]=41;
+$chanmap->{fpga}->[1]->[20]=0x200b;
+$chanmap->{chan}->[1]->[20]=39;
+$chanmap->{fpga}->[1]->[21]=0x200b;
+$chanmap->{chan}->[1]->[21]=37;
+$chanmap->{fpga}->[1]->[22]=0x200b;
+$chanmap->{chan}->[1]->[22]=35;
+$chanmap->{fpga}->[1]->[23]=0x200b;
+$chanmap->{chan}->[1]->[23]=33;
+
+$chanmap->{fpga}->[2]->[16]=0x200b;
+$chanmap->{chan}->[2]->[16]=32;
+$chanmap->{fpga}->[2]->[17]=0x200b;
+$chanmap->{chan}->[2]->[17]=30;
+$chanmap->{fpga}->[2]->[18]=0x200b;
+$chanmap->{chan}->[2]->[18]=28;
+$chanmap->{fpga}->[2]->[19]=0x200b;
+$chanmap->{chan}->[2]->[19]=26;
+$chanmap->{fpga}->[2]->[20]=0x200b;
+$chanmap->{chan}->[2]->[20]=24;
+$chanmap->{fpga}->[2]->[21]=0x200b;
+$chanmap->{chan}->[2]->[21]=22;
+$chanmap->{fpga}->[2]->[22]=0x200b;
+$chanmap->{chan}->[2]->[22]=20;
+$chanmap->{fpga}->[2]->[23]=0x200b;
+$chanmap->{chan}->[2]->[23]=18;
+
+$chanmap->{fpga}->[3]->[16]=0x200b;
+$chanmap->{chan}->[3]->[16]=31;
+$chanmap->{fpga}->[3]->[17]=0x200b;
+$chanmap->{chan}->[3]->[17]=29;
+$chanmap->{fpga}->[3]->[18]=0x200b;
+$chanmap->{chan}->[3]->[18]=27;
+$chanmap->{fpga}->[3]->[19]=0x200b;
+$chanmap->{chan}->[3]->[19]=25;
+$chanmap->{fpga}->[3]->[20]=0x200b;
+$chanmap->{chan}->[3]->[20]=23;
+$chanmap->{fpga}->[3]->[21]=0x200b;
+$chanmap->{chan}->[3]->[21]=21;
+$chanmap->{fpga}->[3]->[22]=0x200b;
+$chanmap->{chan}->[3]->[22]=19;
+$chanmap->{fpga}->[3]->[23]=0x200b;
+$chanmap->{chan}->[3]->[23]=17;
+
+$chanmap->{fpga}->[4]->[16]=0x200b;
+$chanmap->{chan}->[4]->[16]=16;
+$chanmap->{fpga}->[4]->[17]=0x200b;
+$chanmap->{chan}->[4]->[17]=14;
+$chanmap->{fpga}->[4]->[18]=0x200b;
+$chanmap->{chan}->[4]->[18]=12;
+$chanmap->{fpga}->[4]->[19]=0x200b;
+$chanmap->{chan}->[4]->[19]=10;
+$chanmap->{fpga}->[4]->[20]=0x200b;
+$chanmap->{chan}->[4]->[20]=8;
+$chanmap->{fpga}->[4]->[21]=0x200b;
+$chanmap->{chan}->[4]->[21]=6;
+$chanmap->{fpga}->[4]->[22]=0x200b;
+$chanmap->{chan}->[4]->[22]=4;
+$chanmap->{fpga}->[4]->[23]=0x200b;
+$chanmap->{chan}->[4]->[23]=2;
+
+$chanmap->{fpga}->[5]->[16]=0x200b;
+$chanmap->{chan}->[5]->[16]=15;
+$chanmap->{fpga}->[5]->[17]=0x200b;
+$chanmap->{chan}->[5]->[17]=13;
+$chanmap->{fpga}->[5]->[18]=0x200b;
+$chanmap->{chan}->[5]->[18]=11;
+$chanmap->{fpga}->[5]->[19]=0x200b;
+$chanmap->{chan}->[5]->[19]=9;
+$chanmap->{fpga}->[5]->[20]=0x200b;
+$chanmap->{chan}->[5]->[20]=7;
+$chanmap->{fpga}->[5]->[21]=0x200b;
+$chanmap->{chan}->[5]->[21]=5;
+$chanmap->{fpga}->[5]->[22]=0x200b;
+$chanmap->{chan}->[5]->[22]=3;
+$chanmap->{fpga}->[5]->[23]=0x200b;
+$chanmap->{chan}->[5]->[23]=1;
+
+$chanmap->{fpga}->[6]->[16]=0x200a;
+$chanmap->{chan}->[6]->[16]=48;
+$chanmap->{fpga}->[6]->[17]=0x200a;
+$chanmap->{chan}->[6]->[17]=46;
+$chanmap->{fpga}->[6]->[18]=0x200a;
+$chanmap->{chan}->[6]->[18]=44;
+$chanmap->{fpga}->[6]->[19]=0x200a;
+$chanmap->{chan}->[6]->[19]=42;
+$chanmap->{fpga}->[6]->[20]=0x200a;
+$chanmap->{chan}->[6]->[20]=40;
+$chanmap->{fpga}->[6]->[21]=0x200a;
+$chanmap->{chan}->[6]->[21]=38;
+$chanmap->{fpga}->[6]->[22]=0x200a;
+$chanmap->{chan}->[6]->[22]=36;
+$chanmap->{fpga}->[6]->[23]=0x200a;
+$chanmap->{chan}->[6]->[23]=34;
+
+$chanmap->{fpga}->[7]->[16]=0x200a;
+$chanmap->{chan}->[7]->[16]=47;
+$chanmap->{fpga}->[7]->[17]=0x200a;
+$chanmap->{chan}->[7]->[17]=45;
+$chanmap->{fpga}->[7]->[18]=0x200a;
+$chanmap->{chan}->[7]->[18]=43;
+$chanmap->{fpga}->[7]->[19]=0x200a;
+$chanmap->{chan}->[7]->[19]=41;
+$chanmap->{fpga}->[7]->[20]=0x200a;
+$chanmap->{chan}->[7]->[20]=39;
+$chanmap->{fpga}->[7]->[21]=0x200a;
+$chanmap->{chan}->[7]->[21]=37;
+$chanmap->{fpga}->[7]->[22]=0x200a;
+$chanmap->{chan}->[7]->[22]=35;
+$chanmap->{fpga}->[7]->[23]=0x200a;
+$chanmap->{chan}->[7]->[23]=33;
+
+
+$chanmap->{fpga}->[8]->[16]=0x200a;
+$chanmap->{chan}->[8]->[16]=32;
+$chanmap->{fpga}->[8]->[17]=0x200a;
+$chanmap->{chan}->[8]->[17]=30;
+$chanmap->{fpga}->[8]->[18]=0x200a;
+$chanmap->{chan}->[8]->[18]=28;
+$chanmap->{fpga}->[8]->[19]=0x200a;
+$chanmap->{chan}->[8]->[19]=26;
+$chanmap->{fpga}->[8]->[20]=0x200a;
+$chanmap->{chan}->[8]->[20]=24;
+$chanmap->{fpga}->[8]->[21]=0x200a;
+$chanmap->{chan}->[8]->[21]=22;
+$chanmap->{fpga}->[8]->[22]=0x200a;
+$chanmap->{chan}->[8]->[22]=20;
+$chanmap->{fpga}->[8]->[23]=0x200a;
+$chanmap->{chan}->[8]->[23]=18;
+
+$chanmap->{fpga}->[9]->[16]=0x200a;
+$chanmap->{chan}->[9]->[16]=31;
+$chanmap->{fpga}->[9]->[17]=0x200a;
+$chanmap->{chan}->[9]->[17]=29;
+$chanmap->{fpga}->[9]->[18]=0x200a;
+$chanmap->{chan}->[9]->[18]=27;
+$chanmap->{fpga}->[9]->[19]=0x200a;
+$chanmap->{chan}->[9]->[19]=25;
+$chanmap->{fpga}->[9]->[20]=0x200a;
+$chanmap->{chan}->[9]->[20]=23;
+$chanmap->{fpga}->[9]->[21]=0x200a;
+$chanmap->{chan}->[9]->[21]=21;
+$chanmap->{fpga}->[9]->[22]=0x200a;
+$chanmap->{chan}->[9]->[22]=19;
+$chanmap->{fpga}->[9]->[23]=0x200a;
+$chanmap->{chan}->[9]->[23]=17;
+
+$chanmap->{fpga}->[10]->[16]=0x200a;
+$chanmap->{chan}->[10]->[16]=16;
+$chanmap->{fpga}->[10]->[17]=0x200a;
+$chanmap->{chan}->[10]->[17]=14;
+$chanmap->{fpga}->[10]->[18]=0x200a;
+$chanmap->{chan}->[10]->[18]=12;
+$chanmap->{fpga}->[10]->[19]=0x200a;
+$chanmap->{chan}->[10]->[19]=10;
+$chanmap->{fpga}->[10]->[20]=0x200a;
+$chanmap->{chan}->[10]->[20]=8;
+$chanmap->{fpga}->[10]->[21]=0x200a;
+$chanmap->{chan}->[10]->[21]=6;
+$chanmap->{fpga}->[10]->[22]=0x200a;
+$chanmap->{chan}->[10]->[22]=4;
+$chanmap->{fpga}->[10]->[23]=0x200a;
+$chanmap->{chan}->[10]->[23]=2;
+
+$chanmap->{fpga}->[11]->[16]=0x200a;
+$chanmap->{chan}->[11]->[16]=15;
+$chanmap->{fpga}->[11]->[17]=0x200a;
+$chanmap->{chan}->[11]->[17]=13;
+$chanmap->{fpga}->[11]->[18]=0x200a;
+$chanmap->{chan}->[11]->[18]=11;
+$chanmap->{fpga}->[11]->[19]=0x200a;
+$chanmap->{chan}->[11]->[19]=9;
+$chanmap->{fpga}->[11]->[20]=0x200a;
+$chanmap->{chan}->[11]->[20]=7;
+$chanmap->{fpga}->[11]->[21]=0x200a;
+$chanmap->{chan}->[11]->[21]=5;
+$chanmap->{fpga}->[11]->[22]=0x200a;
+$chanmap->{chan}->[11]->[22]=3;
+$chanmap->{fpga}->[11]->[23]=0x200a;
+$chanmap->{chan}->[11]->[23]=1;
+
+$chanmap->{fpga}->[12]->[16]=0x2009;
+$chanmap->{chan}->[12]->[16]=48;
+$chanmap->{fpga}->[12]->[17]=0x2009;
+$chanmap->{chan}->[12]->[17]=46;
+$chanmap->{fpga}->[12]->[18]=0x2009;
+$chanmap->{chan}->[12]->[18]=44;
+$chanmap->{fpga}->[12]->[19]=0x2009;
+$chanmap->{chan}->[12]->[19]=42;
+$chanmap->{fpga}->[12]->[20]=0x2009;
+$chanmap->{chan}->[12]->[20]=40;
+$chanmap->{fpga}->[12]->[21]=0x2009;
+$chanmap->{chan}->[12]->[21]=38;
+$chanmap->{fpga}->[12]->[22]=0x2009;
+$chanmap->{chan}->[12]->[22]=36;
+$chanmap->{fpga}->[12]->[23]=0x2009;
+$chanmap->{chan}->[12]->[23]=34;
+
+$chanmap->{fpga}->[13]->[16]=0x2009;
+$chanmap->{chan}->[13]->[16]=47;
+$chanmap->{fpga}->[13]->[17]=0x2009;
+$chanmap->{chan}->[13]->[17]=45;
+$chanmap->{fpga}->[13]->[18]=0x2009;
+$chanmap->{chan}->[13]->[18]=43;
+$chanmap->{fpga}->[13]->[19]=0x2009;
+$chanmap->{chan}->[13]->[19]=41;
+$chanmap->{fpga}->[13]->[20]=0x2009;
+$chanmap->{chan}->[13]->[20]=39;
+$chanmap->{fpga}->[13]->[21]=0x2009;
+$chanmap->{chan}->[13]->[21]=37;
+$chanmap->{fpga}->[13]->[22]=0x2009;
+$chanmap->{chan}->[13]->[22]=35;
+$chanmap->{fpga}->[13]->[23]=0x2009;
+$chanmap->{chan}->[13]->[23]=33;
+
+$chanmap->{fpga}->[14]->[16]=0x2009;
+$chanmap->{chan}->[14]->[16]=32;
+$chanmap->{fpga}->[14]->[17]=0x2009;
+$chanmap->{chan}->[14]->[17]=30;
+$chanmap->{fpga}->[14]->[18]=0x2009;
+$chanmap->{chan}->[14]->[18]=28;
+$chanmap->{fpga}->[14]->[19]=0x2009;
+$chanmap->{chan}->[14]->[19]=26;
+$chanmap->{fpga}->[14]->[20]=0x2009;
+$chanmap->{chan}->[14]->[20]=24;
+$chanmap->{fpga}->[14]->[21]=0x2009;
+$chanmap->{chan}->[14]->[21]=22;
+$chanmap->{fpga}->[14]->[22]=0x2009;
+$chanmap->{chan}->[14]->[22]=20;
+$chanmap->{fpga}->[14]->[23]=0x2009;
+$chanmap->{chan}->[14]->[23]=18;
+
+$chanmap->{fpga}->[15]->[16]=0x2009;
+$chanmap->{chan}->[15]->[16]=31;
+$chanmap->{fpga}->[15]->[17]=0x2009;
+$chanmap->{chan}->[15]->[17]=29;
+$chanmap->{fpga}->[15]->[18]=0x2009;
+$chanmap->{chan}->[15]->[18]=27;
+$chanmap->{fpga}->[15]->[19]=0x2009;
+$chanmap->{chan}->[15]->[19]=25;
+$chanmap->{fpga}->[15]->[20]=0x2009;
+$chanmap->{chan}->[15]->[20]=23;
+$chanmap->{fpga}->[15]->[21]=0x2009;
+$chanmap->{chan}->[15]->[21]=21;
+$chanmap->{fpga}->[15]->[22]=0x2009;
+$chanmap->{chan}->[15]->[22]=19;
+$chanmap->{fpga}->[15]->[23]=0x2009;
+$chanmap->{chan}->[15]->[23]=17;
+
+
+$chanmap->{fpga}->[16]->[16]=0x2009;
+$chanmap->{chan}->[16]->[16]=16;
+$chanmap->{fpga}->[16]->[17]=0x2009;
+$chanmap->{chan}->[16]->[17]=14;
+$chanmap->{fpga}->[16]->[18]=0x2009;
+$chanmap->{chan}->[16]->[18]=12;
+$chanmap->{fpga}->[16]->[19]=0x2009;
+$chanmap->{chan}->[16]->[19]=10;
+$chanmap->{fpga}->[16]->[20]=0x2009;
+$chanmap->{chan}->[16]->[20]=8;
+$chanmap->{fpga}->[16]->[21]=0x2009;
+$chanmap->{chan}->[16]->[21]=6;
+$chanmap->{fpga}->[16]->[22]=0x2009;
+$chanmap->{chan}->[16]->[22]=4;
+$chanmap->{fpga}->[16]->[23]=0x2009;
+$chanmap->{chan}->[16]->[23]=2;
+
+$chanmap->{fpga}->[17]->[16]=0x2009;
+$chanmap->{chan}->[17]->[16]=15;
+$chanmap->{fpga}->[17]->[17]=0x2009;
+$chanmap->{chan}->[17]->[17]=13;
+$chanmap->{fpga}->[17]->[18]=0x2009;
+$chanmap->{chan}->[17]->[18]=11;
+$chanmap->{fpga}->[17]->[19]=0x2009;
+$chanmap->{chan}->[17]->[19]=9;
+$chanmap->{fpga}->[17]->[20]=0x2009;
+$chanmap->{chan}->[17]->[20]=7;
+$chanmap->{fpga}->[17]->[21]=0x2009;
+$chanmap->{chan}->[17]->[21]=5;
+$chanmap->{fpga}->[17]->[22]=0x2009;
+$chanmap->{chan}->[17]->[22]=3;
+$chanmap->{fpga}->[17]->[23]=0x2009;
+$chanmap->{chan}->[17]->[23]=1;
+
+$chanmap->{fpga}->[18]->[16]=0x2008;
+$chanmap->{chan}->[18]->[16]=48;
+$chanmap->{fpga}->[18]->[17]=0x2008;
+$chanmap->{chan}->[18]->[17]=46;
+$chanmap->{fpga}->[18]->[18]=0x2008;
+$chanmap->{chan}->[18]->[18]=44;
+$chanmap->{fpga}->[18]->[19]=0x2008;
+$chanmap->{chan}->[18]->[19]=42;
+$chanmap->{fpga}->[18]->[20]=0x2008;
+$chanmap->{chan}->[18]->[20]=40;
+$chanmap->{fpga}->[18]->[21]=0x2008;
+$chanmap->{chan}->[18]->[21]=38;
+$chanmap->{fpga}->[18]->[22]=0x2008;
+$chanmap->{chan}->[18]->[22]=36;
+$chanmap->{fpga}->[18]->[23]=0x2008;
+$chanmap->{chan}->[18]->[23]=34;
+
+$chanmap->{fpga}->[19]->[16]=0x2008;
+$chanmap->{chan}->[19]->[16]=47;
+$chanmap->{fpga}->[19]->[17]=0x2008;
+$chanmap->{chan}->[19]->[17]=45;
+$chanmap->{fpga}->[19]->[18]=0x2008;
+$chanmap->{chan}->[19]->[18]=43;
+$chanmap->{fpga}->[19]->[19]=0x2008;
+$chanmap->{chan}->[19]->[19]=41;
+$chanmap->{fpga}->[19]->[20]=0x2008;
+$chanmap->{chan}->[19]->[20]=39;
+$chanmap->{fpga}->[19]->[21]=0x2008;
+$chanmap->{chan}->[19]->[21]=37;
+$chanmap->{fpga}->[19]->[22]=0x2008;
+$chanmap->{chan}->[19]->[22]=35;
+$chanmap->{fpga}->[19]->[23]=0x2008;
+$chanmap->{chan}->[19]->[23]=33;
+
+$chanmap->{fpga}->[20]->[16]=0x2008;
+$chanmap->{chan}->[20]->[16]=32;
+$chanmap->{fpga}->[20]->[17]=0x2008;
+$chanmap->{chan}->[20]->[17]=30;
+$chanmap->{fpga}->[20]->[18]=0x2008;
+$chanmap->{chan}->[20]->[18]=28;
+$chanmap->{fpga}->[20]->[19]=0x2008;
+$chanmap->{chan}->[20]->[19]=26;
+$chanmap->{fpga}->[20]->[20]=0x2008;
+$chanmap->{chan}->[20]->[20]=24;
+$chanmap->{fpga}->[20]->[21]=0x2008;
+$chanmap->{chan}->[20]->[21]=22;
+$chanmap->{fpga}->[20]->[22]=0x2008;
+$chanmap->{chan}->[20]->[22]=20;
+$chanmap->{fpga}->[20]->[23]=0x2008;
+$chanmap->{chan}->[20]->[23]=18;
+
+$chanmap->{fpga}->[21]->[16]=0x2008;
+$chanmap->{chan}->[21]->[16]=31;
+$chanmap->{fpga}->[21]->[17]=0x2008;
+$chanmap->{chan}->[21]->[17]=29;
+$chanmap->{fpga}->[21]->[18]=0x2008;
+$chanmap->{chan}->[21]->[18]=27;
+$chanmap->{fpga}->[21]->[19]=0x2008;
+$chanmap->{chan}->[21]->[19]=25;
+$chanmap->{fpga}->[21]->[20]=0x2008;
+$chanmap->{chan}->[21]->[20]=23;
+$chanmap->{fpga}->[21]->[21]=0x2008;
+$chanmap->{chan}->[21]->[21]=21;
+$chanmap->{fpga}->[21]->[22]=0x2008;
+$chanmap->{chan}->[21]->[22]=19;
+$chanmap->{fpga}->[21]->[23]=0x2008;
+$chanmap->{chan}->[21]->[23]=17;
+
+$chanmap->{fpga}->[22]->[16]=0x2008;
+$chanmap->{chan}->[22]->[16]=16;
+$chanmap->{fpga}->[22]->[17]=0x2008;
+$chanmap->{chan}->[22]->[17]=14;
+$chanmap->{fpga}->[22]->[18]=0x2008;
+$chanmap->{chan}->[22]->[18]=12;
+$chanmap->{fpga}->[22]->[19]=0x2008;
+$chanmap->{chan}->[22]->[19]=10;
+$chanmap->{fpga}->[22]->[20]=0x2008;
+$chanmap->{chan}->[22]->[20]=8;
+$chanmap->{fpga}->[22]->[21]=0x2008;
+$chanmap->{chan}->[22]->[21]=6;
+$chanmap->{fpga}->[22]->[22]=0x2008;
+$chanmap->{chan}->[22]->[22]=4;
+$chanmap->{fpga}->[22]->[23]=0x2008;
+$chanmap->{chan}->[22]->[23]=2;
+
+$chanmap->{fpga}->[23]->[16]=0x2008;
+$chanmap->{chan}->[23]->[16]=15;
+$chanmap->{fpga}->[23]->[17]=0x2008;
+$chanmap->{chan}->[23]->[17]=13;
+$chanmap->{fpga}->[23]->[18]=0x2008;
+$chanmap->{chan}->[23]->[18]=11;
+$chanmap->{fpga}->[23]->[19]=0x2008;
+$chanmap->{chan}->[23]->[19]=9;
+$chanmap->{fpga}->[23]->[20]=0x2008;
+$chanmap->{chan}->[23]->[20]=7;
+$chanmap->{fpga}->[23]->[21]=0x2008;
+$chanmap->{chan}->[23]->[21]=5;
+$chanmap->{fpga}->[23]->[22]=0x2008;
+$chanmap->{chan}->[23]->[22]=3;
+$chanmap->{fpga}->[23]->[23]=0x2008;
+$chanmap->{chan}->[23]->[23]=1;
+
+
+$chanmap->{fpga}->[0]->[24]=0x200f;
+$chanmap->{chan}->[0]->[24]=48;
+$chanmap->{fpga}->[0]->[25]=0x200f;
+$chanmap->{chan}->[0]->[25]=46;
+$chanmap->{fpga}->[0]->[26]=0x200f;
+$chanmap->{chan}->[0]->[26]=44;
+$chanmap->{fpga}->[0]->[27]=0x200f;
+$chanmap->{chan}->[0]->[27]=42;
+$chanmap->{fpga}->[0]->[28]=0x200f;
+$chanmap->{chan}->[0]->[28]=40;
+$chanmap->{fpga}->[0]->[29]=0x200f;
+$chanmap->{chan}->[0]->[29]=38;
+$chanmap->{fpga}->[0]->[30]=0x200f;
+$chanmap->{chan}->[0]->[30]=36;
+$chanmap->{fpga}->[0]->[31]=0x200f;
+$chanmap->{chan}->[0]->[31]=34;
+
+$chanmap->{fpga}->[1]->[24]=0x200f;
+$chanmap->{chan}->[1]->[24]=47;
+$chanmap->{fpga}->[1]->[25]=0x200f;
+$chanmap->{chan}->[1]->[25]=45;
+$chanmap->{fpga}->[1]->[26]=0x200f;
+$chanmap->{chan}->[1]->[26]=43;
+$chanmap->{fpga}->[1]->[27]=0x200f;
+$chanmap->{chan}->[1]->[27]=41;
+$chanmap->{fpga}->[1]->[28]=0x200f;
+$chanmap->{chan}->[1]->[28]=39;
+$chanmap->{fpga}->[1]->[29]=0x200f;
+$chanmap->{chan}->[1]->[29]=37;
+$chanmap->{fpga}->[1]->[30]=0x200f;
+$chanmap->{chan}->[1]->[30]=35;
+$chanmap->{fpga}->[1]->[31]=0x200f;
+$chanmap->{chan}->[1]->[31]=33;
+
+$chanmap->{fpga}->[2]->[24]=0x200f;
+$chanmap->{chan}->[2]->[24]=32;
+$chanmap->{fpga}->[2]->[25]=0x200f;
+$chanmap->{chan}->[2]->[25]=30;
+$chanmap->{fpga}->[2]->[26]=0x200f;
+$chanmap->{chan}->[2]->[26]=28;
+$chanmap->{fpga}->[2]->[27]=0x200f;
+$chanmap->{chan}->[2]->[27]=26;
+$chanmap->{fpga}->[2]->[28]=0x200f;
+$chanmap->{chan}->[2]->[28]=24;
+$chanmap->{fpga}->[2]->[29]=0x200f;
+$chanmap->{chan}->[2]->[29]=22;
+$chanmap->{fpga}->[2]->[30]=0x200f;
+$chanmap->{chan}->[2]->[30]=20;
+$chanmap->{fpga}->[2]->[31]=0x200f;
+$chanmap->{chan}->[2]->[31]=18;
+
+$chanmap->{fpga}->[3]->[24]=0x200f;
+$chanmap->{chan}->[3]->[24]=31;
+$chanmap->{fpga}->[3]->[25]=0x200f;
+$chanmap->{chan}->[3]->[25]=29;
+$chanmap->{fpga}->[3]->[26]=0x200f;
+$chanmap->{chan}->[3]->[26]=27;
+$chanmap->{fpga}->[3]->[27]=0x200f;
+$chanmap->{chan}->[3]->[27]=25;
+$chanmap->{fpga}->[3]->[28]=0x200f;
+$chanmap->{chan}->[3]->[28]=23;
+$chanmap->{fpga}->[3]->[29]=0x200f;
+$chanmap->{chan}->[3]->[29]=21;
+$chanmap->{fpga}->[3]->[30]=0x200f;
+$chanmap->{chan}->[3]->[30]=19;
+$chanmap->{fpga}->[3]->[31]=0x200f;
+$chanmap->{chan}->[3]->[31]=17;
+
+$chanmap->{fpga}->[4]->[24]=0x200f;
+$chanmap->{chan}->[4]->[24]=16;
+$chanmap->{fpga}->[4]->[25]=0x200f;
+$chanmap->{chan}->[4]->[25]=14;
+$chanmap->{fpga}->[4]->[26]=0x200f;
+$chanmap->{chan}->[4]->[26]=12;
+$chanmap->{fpga}->[4]->[27]=0x200f;
+$chanmap->{chan}->[4]->[27]=10;
+$chanmap->{fpga}->[4]->[28]=0x200f;
+$chanmap->{chan}->[4]->[28]=8;
+$chanmap->{fpga}->[4]->[29]=0x200f;
+$chanmap->{chan}->[4]->[29]=6;
+$chanmap->{fpga}->[4]->[30]=0x200f;
+$chanmap->{chan}->[4]->[30]=4;
+$chanmap->{fpga}->[4]->[31]=0x200f;
+$chanmap->{chan}->[4]->[31]=2;
+
+$chanmap->{fpga}->[5]->[24]=0x200f;
+$chanmap->{chan}->[5]->[24]=15;
+$chanmap->{fpga}->[5]->[25]=0x200f;
+$chanmap->{chan}->[5]->[25]=13;
+$chanmap->{fpga}->[5]->[26]=0x200f;
+$chanmap->{chan}->[5]->[26]=11;
+$chanmap->{fpga}->[5]->[27]=0x200f;
+$chanmap->{chan}->[5]->[27]=9;
+$chanmap->{fpga}->[5]->[28]=0x200f;
+$chanmap->{chan}->[5]->[28]=7;
+$chanmap->{fpga}->[5]->[29]=0x200f;
+$chanmap->{chan}->[5]->[29]=5;
+$chanmap->{fpga}->[5]->[30]=0x200f;
+$chanmap->{chan}->[5]->[30]=3;
+$chanmap->{fpga}->[5]->[31]=0x200f;
+$chanmap->{chan}->[5]->[31]=1;
+
+$chanmap->{fpga}->[6]->[24]=0x200e;
+$chanmap->{chan}->[6]->[24]=48;
+$chanmap->{fpga}->[6]->[25]=0x200e;
+$chanmap->{chan}->[6]->[25]=46;
+$chanmap->{fpga}->[6]->[26]=0x200e;
+$chanmap->{chan}->[6]->[26]=44;
+$chanmap->{fpga}->[6]->[27]=0x200e;
+$chanmap->{chan}->[6]->[27]=42;
+$chanmap->{fpga}->[6]->[28]=0x200e;
+$chanmap->{chan}->[6]->[28]=40;
+$chanmap->{fpga}->[6]->[29]=0x200e;
+$chanmap->{chan}->[6]->[29]=38;
+$chanmap->{fpga}->[6]->[30]=0x200e;
+$chanmap->{chan}->[6]->[30]=36;
+$chanmap->{fpga}->[6]->[31]=0x200e;
+$chanmap->{chan}->[6]->[31]=34;
+
+$chanmap->{fpga}->[7]->[24]=0x200e;
+$chanmap->{chan}->[7]->[24]=47;
+$chanmap->{fpga}->[7]->[25]=0x200e;
+$chanmap->{chan}->[7]->[25]=45;
+$chanmap->{fpga}->[7]->[26]=0x200e;
+$chanmap->{chan}->[7]->[26]=43;
+$chanmap->{fpga}->[7]->[27]=0x200e;
+$chanmap->{chan}->[7]->[27]=41;
+$chanmap->{fpga}->[7]->[28]=0x200e;
+$chanmap->{chan}->[7]->[28]=39;
+$chanmap->{fpga}->[7]->[29]=0x200e;
+$chanmap->{chan}->[7]->[29]=37;
+$chanmap->{fpga}->[7]->[30]=0x200e;
+$chanmap->{chan}->[7]->[30]=35;
+$chanmap->{fpga}->[7]->[31]=0x200e;
+$chanmap->{chan}->[7]->[31]=33;
+
+
+$chanmap->{fpga}->[8]->[24]=0x200e;
+$chanmap->{chan}->[8]->[24]=32;
+$chanmap->{fpga}->[8]->[25]=0x200e;
+$chanmap->{chan}->[8]->[25]=30;
+$chanmap->{fpga}->[8]->[26]=0x200e;
+$chanmap->{chan}->[8]->[26]=28;
+$chanmap->{fpga}->[8]->[27]=0x200e;
+$chanmap->{chan}->[8]->[27]=26;
+$chanmap->{fpga}->[8]->[28]=0x200e;
+$chanmap->{chan}->[8]->[28]=24;
+$chanmap->{fpga}->[8]->[29]=0x200e;
+$chanmap->{chan}->[8]->[29]=22;
+$chanmap->{fpga}->[8]->[30]=0x200e;
+$chanmap->{chan}->[8]->[30]=20;
+$chanmap->{fpga}->[8]->[31]=0x200e;
+$chanmap->{chan}->[8]->[31]=18;
+
+$chanmap->{fpga}->[9]->[24]=0x200e;
+$chanmap->{chan}->[9]->[24]=31;
+$chanmap->{fpga}->[9]->[25]=0x200e;
+$chanmap->{chan}->[9]->[25]=29;
+$chanmap->{fpga}->[9]->[26]=0x200e;
+$chanmap->{chan}->[9]->[26]=27;
+$chanmap->{fpga}->[9]->[27]=0x200e;
+$chanmap->{chan}->[9]->[27]=25;
+$chanmap->{fpga}->[9]->[28]=0x200e;
+$chanmap->{chan}->[9]->[28]=23;
+$chanmap->{fpga}->[9]->[29]=0x200e;
+$chanmap->{chan}->[9]->[29]=21;
+$chanmap->{fpga}->[9]->[30]=0x200e;
+$chanmap->{chan}->[9]->[30]=19;
+$chanmap->{fpga}->[9]->[31]=0x200e;
+$chanmap->{chan}->[9]->[31]=17;
+
+$chanmap->{fpga}->[10]->[24]=0x200e;
+$chanmap->{chan}->[10]->[24]=16;
+$chanmap->{fpga}->[10]->[25]=0x200e;
+$chanmap->{chan}->[10]->[25]=14;
+$chanmap->{fpga}->[10]->[26]=0x200e;
+$chanmap->{chan}->[10]->[26]=12;
+$chanmap->{fpga}->[10]->[27]=0x200e;
+$chanmap->{chan}->[10]->[27]=10;
+$chanmap->{fpga}->[10]->[28]=0x200e;
+$chanmap->{chan}->[10]->[28]=8;
+$chanmap->{fpga}->[10]->[29]=0x200e;
+$chanmap->{chan}->[10]->[29]=6;
+$chanmap->{fpga}->[10]->[30]=0x200e;
+$chanmap->{chan}->[10]->[30]=4;
+$chanmap->{fpga}->[10]->[31]=0x200e;
+$chanmap->{chan}->[10]->[31]=2;
+
+$chanmap->{fpga}->[11]->[24]=0x200e;
+$chanmap->{chan}->[11]->[24]=15;
+$chanmap->{fpga}->[11]->[25]=0x200e;
+$chanmap->{chan}->[11]->[25]=13;
+$chanmap->{fpga}->[11]->[26]=0x200e;
+$chanmap->{chan}->[11]->[26]=11;
+$chanmap->{fpga}->[11]->[27]=0x200e;
+$chanmap->{chan}->[11]->[27]=9;
+$chanmap->{fpga}->[11]->[28]=0x200e;
+$chanmap->{chan}->[11]->[28]=7;
+$chanmap->{fpga}->[11]->[29]=0x200e;
+$chanmap->{chan}->[11]->[29]=5;
+$chanmap->{fpga}->[11]->[30]=0x200e;
+$chanmap->{chan}->[11]->[30]=3;
+$chanmap->{fpga}->[11]->[31]=0x200e;
+$chanmap->{chan}->[11]->[31]=1;
+
+$chanmap->{fpga}->[12]->[24]=0x200d;
+$chanmap->{chan}->[12]->[24]=48;
+$chanmap->{fpga}->[12]->[25]=0x200d;
+$chanmap->{chan}->[12]->[25]=46;
+$chanmap->{fpga}->[12]->[26]=0x200d;
+$chanmap->{chan}->[12]->[26]=44;
+$chanmap->{fpga}->[12]->[27]=0x200d;
+$chanmap->{chan}->[12]->[27]=42;
+$chanmap->{fpga}->[12]->[28]=0x200d;
+$chanmap->{chan}->[12]->[28]=40;
+$chanmap->{fpga}->[12]->[29]=0x200d;
+$chanmap->{chan}->[12]->[29]=38;
+$chanmap->{fpga}->[12]->[30]=0x200d;
+$chanmap->{chan}->[12]->[30]=36;
+$chanmap->{fpga}->[12]->[31]=0x200d;
+$chanmap->{chan}->[12]->[31]=34;
+
+$chanmap->{fpga}->[13]->[24]=0x200d;
+$chanmap->{chan}->[13]->[24]=47;
+$chanmap->{fpga}->[13]->[25]=0x200d;
+$chanmap->{chan}->[13]->[25]=45;
+$chanmap->{fpga}->[13]->[26]=0x200d;
+$chanmap->{chan}->[13]->[26]=43;
+$chanmap->{fpga}->[13]->[27]=0x200d;
+$chanmap->{chan}->[13]->[27]=41;
+$chanmap->{fpga}->[13]->[28]=0x200d;
+$chanmap->{chan}->[13]->[28]=39;
+$chanmap->{fpga}->[13]->[29]=0x200d;
+$chanmap->{chan}->[13]->[29]=37;
+$chanmap->{fpga}->[13]->[30]=0x200d;
+$chanmap->{chan}->[13]->[30]=35;
+$chanmap->{fpga}->[13]->[31]=0x200d;
+$chanmap->{chan}->[13]->[31]=33;
+
+$chanmap->{fpga}->[14]->[24]=0x200d;
+$chanmap->{chan}->[14]->[24]=32;
+$chanmap->{fpga}->[14]->[25]=0x200d;
+$chanmap->{chan}->[14]->[25]=30;
+$chanmap->{fpga}->[14]->[26]=0x200d;
+$chanmap->{chan}->[14]->[26]=28;
+$chanmap->{fpga}->[14]->[27]=0x200d;
+$chanmap->{chan}->[14]->[27]=26;
+$chanmap->{fpga}->[14]->[28]=0x200d;
+$chanmap->{chan}->[14]->[28]=24;
+$chanmap->{fpga}->[14]->[29]=0x200d;
+$chanmap->{chan}->[14]->[29]=22;
+$chanmap->{fpga}->[14]->[30]=0x200d;
+$chanmap->{chan}->[14]->[30]=20;
+$chanmap->{fpga}->[14]->[31]=0x200d;
+$chanmap->{chan}->[14]->[31]=18;
+
+$chanmap->{fpga}->[15]->[24]=0x200d;
+$chanmap->{chan}->[15]->[24]=31;
+$chanmap->{fpga}->[15]->[25]=0x200d;
+$chanmap->{chan}->[15]->[25]=29;
+$chanmap->{fpga}->[15]->[26]=0x200d;
+$chanmap->{chan}->[15]->[26]=27;
+$chanmap->{fpga}->[15]->[27]=0x200d;
+$chanmap->{chan}->[15]->[27]=25;
+$chanmap->{fpga}->[15]->[28]=0x200d;
+$chanmap->{chan}->[15]->[28]=23;
+$chanmap->{fpga}->[15]->[29]=0x200d;
+$chanmap->{chan}->[15]->[29]=21;
+$chanmap->{fpga}->[15]->[30]=0x200d;
+$chanmap->{chan}->[15]->[30]=19;
+$chanmap->{fpga}->[15]->[31]=0x200d;
+$chanmap->{chan}->[15]->[31]=17;
+
+
+$chanmap->{fpga}->[16]->[24]=0x200d;
+$chanmap->{chan}->[16]->[24]=16;
+$chanmap->{fpga}->[16]->[25]=0x200d;
+$chanmap->{chan}->[16]->[25]=14;
+$chanmap->{fpga}->[16]->[26]=0x200d;
+$chanmap->{chan}->[16]->[26]=12;
+$chanmap->{fpga}->[16]->[27]=0x200d;
+$chanmap->{chan}->[16]->[27]=10;
+$chanmap->{fpga}->[16]->[28]=0x200d;
+$chanmap->{chan}->[16]->[28]=8;
+$chanmap->{fpga}->[16]->[29]=0x200d;
+$chanmap->{chan}->[16]->[29]=6;
+$chanmap->{fpga}->[16]->[30]=0x200d;
+$chanmap->{chan}->[16]->[30]=4;
+$chanmap->{fpga}->[16]->[31]=0x200d;
+$chanmap->{chan}->[16]->[31]=2;
+
+$chanmap->{fpga}->[17]->[24]=0x200d;
+$chanmap->{chan}->[17]->[24]=15;
+$chanmap->{fpga}->[17]->[25]=0x200d;
+$chanmap->{chan}->[17]->[25]=13;
+$chanmap->{fpga}->[17]->[26]=0x200d;
+$chanmap->{chan}->[17]->[26]=11;
+$chanmap->{fpga}->[17]->[27]=0x200d;
+$chanmap->{chan}->[17]->[27]=9;
+$chanmap->{fpga}->[17]->[28]=0x200d;
+$chanmap->{chan}->[17]->[28]=7;
+$chanmap->{fpga}->[17]->[29]=0x200d;
+$chanmap->{chan}->[17]->[29]=5;
+$chanmap->{fpga}->[17]->[30]=0x200d;
+$chanmap->{chan}->[17]->[30]=3;
+$chanmap->{fpga}->[17]->[31]=0x200d;
+$chanmap->{chan}->[17]->[31]=1;
+
+$chanmap->{fpga}->[18]->[24]=0x200c;
+$chanmap->{chan}->[18]->[24]=48;
+$chanmap->{fpga}->[18]->[25]=0x200c;
+$chanmap->{chan}->[18]->[25]=46;
+$chanmap->{fpga}->[18]->[26]=0x200c;
+$chanmap->{chan}->[18]->[26]=44;
+$chanmap->{fpga}->[18]->[27]=0x200c;
+$chanmap->{chan}->[18]->[27]=42;
+$chanmap->{fpga}->[18]->[28]=0x200c;
+$chanmap->{chan}->[18]->[28]=40;
+$chanmap->{fpga}->[18]->[29]=0x200c;
+$chanmap->{chan}->[18]->[29]=38;
+$chanmap->{fpga}->[18]->[30]=0x200c;
+$chanmap->{chan}->[18]->[30]=36;
+$chanmap->{fpga}->[18]->[31]=0x200c;
+$chanmap->{chan}->[18]->[31]=34;
+
+$chanmap->{fpga}->[19]->[24]=0x200c;
+$chanmap->{chan}->[19]->[24]=47;
+$chanmap->{fpga}->[19]->[25]=0x200c;
+$chanmap->{chan}->[19]->[25]=45;
+$chanmap->{fpga}->[19]->[26]=0x200c;
+$chanmap->{chan}->[19]->[26]=43;
+$chanmap->{fpga}->[19]->[27]=0x200c;
+$chanmap->{chan}->[19]->[27]=41;
+$chanmap->{fpga}->[19]->[28]=0x200c;
+$chanmap->{chan}->[19]->[28]=39;
+$chanmap->{fpga}->[19]->[29]=0x200c;
+$chanmap->{chan}->[19]->[29]=37;
+$chanmap->{fpga}->[19]->[30]=0x200c;
+$chanmap->{chan}->[19]->[30]=35;
+$chanmap->{fpga}->[19]->[31]=0x200c;
+$chanmap->{chan}->[19]->[31]=33;
+
+$chanmap->{fpga}->[20]->[24]=0x200c;
+$chanmap->{chan}->[20]->[24]=32;
+$chanmap->{fpga}->[20]->[25]=0x200c;
+$chanmap->{chan}->[20]->[25]=30;
+$chanmap->{fpga}->[20]->[26]=0x200c;
+$chanmap->{chan}->[20]->[26]=28;
+$chanmap->{fpga}->[20]->[27]=0x200c;
+$chanmap->{chan}->[20]->[27]=26;
+$chanmap->{fpga}->[20]->[28]=0x200c;
+$chanmap->{chan}->[20]->[28]=24;
+$chanmap->{fpga}->[20]->[29]=0x200c;
+$chanmap->{chan}->[20]->[29]=22;
+$chanmap->{fpga}->[20]->[30]=0x200c;
+$chanmap->{chan}->[20]->[30]=20;
+$chanmap->{fpga}->[20]->[31]=0x200c;
+$chanmap->{chan}->[20]->[31]=18;
+
+$chanmap->{fpga}->[21]->[24]=0x200c;
+$chanmap->{chan}->[21]->[24]=31;
+$chanmap->{fpga}->[21]->[25]=0x200c;
+$chanmap->{chan}->[21]->[25]=29;
+$chanmap->{fpga}->[21]->[26]=0x200c;
+$chanmap->{chan}->[21]->[26]=27;
+$chanmap->{fpga}->[21]->[27]=0x200c;
+$chanmap->{chan}->[21]->[27]=25;
+$chanmap->{fpga}->[21]->[28]=0x200c;
+$chanmap->{chan}->[21]->[28]=23;
+$chanmap->{fpga}->[21]->[29]=0x200c;
+$chanmap->{chan}->[21]->[29]=21;
+$chanmap->{fpga}->[21]->[30]=0x200c;
+$chanmap->{chan}->[21]->[30]=19;
+$chanmap->{fpga}->[21]->[31]=0x200c;
+$chanmap->{chan}->[21]->[31]=17;
+
+$chanmap->{fpga}->[22]->[24]=0x200c;
+$chanmap->{chan}->[22]->[24]=16;
+$chanmap->{fpga}->[22]->[25]=0x200c;
+$chanmap->{chan}->[22]->[25]=14;
+$chanmap->{fpga}->[22]->[26]=0x200c;
+$chanmap->{chan}->[22]->[26]=12;
+$chanmap->{fpga}->[22]->[27]=0x200c;
+$chanmap->{chan}->[22]->[27]=10;
+$chanmap->{fpga}->[22]->[28]=0x200c;
+$chanmap->{chan}->[22]->[28]=8;
+$chanmap->{fpga}->[22]->[29]=0x200c;
+$chanmap->{chan}->[22]->[29]=6;
+$chanmap->{fpga}->[22]->[30]=0x200c;
+$chanmap->{chan}->[22]->[30]=4;
+$chanmap->{fpga}->[22]->[31]=0x200c;
+$chanmap->{chan}->[22]->[31]=2;
+
+$chanmap->{fpga}->[23]->[24]=0x200c;
+$chanmap->{chan}->[23]->[24]=15;
+$chanmap->{fpga}->[23]->[25]=0x200c;
+$chanmap->{chan}->[23]->[25]=13;
+$chanmap->{fpga}->[23]->[26]=0x200c;
+$chanmap->{chan}->[23]->[26]=11;
+$chanmap->{fpga}->[23]->[27]=0x200c;
+$chanmap->{chan}->[23]->[27]=9;
+$chanmap->{fpga}->[23]->[28]=0x200c;
+$chanmap->{chan}->[23]->[28]=7;
+$chanmap->{fpga}->[23]->[29]=0x200c;
+$chanmap->{chan}->[23]->[29]=5;
+$chanmap->{fpga}->[23]->[30]=0x200c;
+$chanmap->{chan}->[23]->[30]=3;
+$chanmap->{fpga}->[23]->[31]=0x200c;
+$chanmap->{chan}->[23]->[31]=1;
+
+
+$chanmap->{fpga}->[0]->[32]=0x2013;
+$chanmap->{chan}->[0]->[32]=48;
+$chanmap->{fpga}->[0]->[33]=0x2013;
+$chanmap->{chan}->[0]->[33]=46;
+$chanmap->{fpga}->[0]->[34]=0x2013;
+$chanmap->{chan}->[0]->[34]=44;
+$chanmap->{fpga}->[0]->[35]=0x2013;
+$chanmap->{chan}->[0]->[35]=42;
+$chanmap->{fpga}->[0]->[36]=0x2013;
+$chanmap->{chan}->[0]->[36]=40;
+$chanmap->{fpga}->[0]->[37]=0x2013;
+$chanmap->{chan}->[0]->[37]=38;
+$chanmap->{fpga}->[0]->[38]=0x2013;
+$chanmap->{chan}->[0]->[38]=36;
+$chanmap->{fpga}->[0]->[39]=0x2013;
+$chanmap->{chan}->[0]->[39]=34;
+
+$chanmap->{fpga}->[1]->[32]=0x2013;
+$chanmap->{chan}->[1]->[32]=47;
+$chanmap->{fpga}->[1]->[33]=0x2013;
+$chanmap->{chan}->[1]->[33]=45;
+$chanmap->{fpga}->[1]->[34]=0x2013;
+$chanmap->{chan}->[1]->[34]=43;
+$chanmap->{fpga}->[1]->[35]=0x2013;
+$chanmap->{chan}->[1]->[35]=41;
+$chanmap->{fpga}->[1]->[36]=0x2013;
+$chanmap->{chan}->[1]->[36]=39;
+$chanmap->{fpga}->[1]->[37]=0x2013;
+$chanmap->{chan}->[1]->[37]=37;
+$chanmap->{fpga}->[1]->[38]=0x2013;
+$chanmap->{chan}->[1]->[38]=35;
+$chanmap->{fpga}->[1]->[39]=0x2013;
+$chanmap->{chan}->[1]->[39]=33;
+
+$chanmap->{fpga}->[2]->[32]=0x2013;
+$chanmap->{chan}->[2]->[32]=32;
+$chanmap->{fpga}->[2]->[33]=0x2013;
+$chanmap->{chan}->[2]->[33]=30;
+$chanmap->{fpga}->[2]->[34]=0x2013;
+$chanmap->{chan}->[2]->[34]=28;
+$chanmap->{fpga}->[2]->[35]=0x2013;
+$chanmap->{chan}->[2]->[35]=26;
+$chanmap->{fpga}->[2]->[36]=0x2013;
+$chanmap->{chan}->[2]->[36]=24;
+$chanmap->{fpga}->[2]->[37]=0x2013;
+$chanmap->{chan}->[2]->[37]=22;
+$chanmap->{fpga}->[2]->[38]=0x2013;
+$chanmap->{chan}->[2]->[38]=20;
+$chanmap->{fpga}->[2]->[39]=0x2013;
+$chanmap->{chan}->[2]->[39]=18;
+
+$chanmap->{fpga}->[3]->[32]=0x2013;
+$chanmap->{chan}->[3]->[32]=31;
+$chanmap->{fpga}->[3]->[33]=0x2013;
+$chanmap->{chan}->[3]->[33]=29;
+$chanmap->{fpga}->[3]->[34]=0x2013;
+$chanmap->{chan}->[3]->[34]=27;
+$chanmap->{fpga}->[3]->[35]=0x2013;
+$chanmap->{chan}->[3]->[35]=25;
+$chanmap->{fpga}->[3]->[36]=0x2013;
+$chanmap->{chan}->[3]->[36]=23;
+$chanmap->{fpga}->[3]->[37]=0x2013;
+$chanmap->{chan}->[3]->[37]=21;
+$chanmap->{fpga}->[3]->[38]=0x2013;
+$chanmap->{chan}->[3]->[38]=19;
+$chanmap->{fpga}->[3]->[39]=0x2013;
+$chanmap->{chan}->[3]->[39]=17;
+
+$chanmap->{fpga}->[4]->[32]=0x2013;
+$chanmap->{chan}->[4]->[32]=16;
+$chanmap->{fpga}->[4]->[33]=0x2013;
+$chanmap->{chan}->[4]->[33]=14;
+$chanmap->{fpga}->[4]->[34]=0x2013;
+$chanmap->{chan}->[4]->[34]=12;
+$chanmap->{fpga}->[4]->[35]=0x2013;
+$chanmap->{chan}->[4]->[35]=10;
+$chanmap->{fpga}->[4]->[36]=0x2013;
+$chanmap->{chan}->[4]->[36]=8;
+$chanmap->{fpga}->[4]->[37]=0x2013;
+$chanmap->{chan}->[4]->[37]=6;
+$chanmap->{fpga}->[4]->[38]=0x2013;
+$chanmap->{chan}->[4]->[38]=4;
+$chanmap->{fpga}->[4]->[39]=0x2013;
+$chanmap->{chan}->[4]->[39]=2;
+
+$chanmap->{fpga}->[5]->[32]=0x2013;
+$chanmap->{chan}->[5]->[32]=15;
+$chanmap->{fpga}->[5]->[33]=0x2013;
+$chanmap->{chan}->[5]->[33]=13;
+$chanmap->{fpga}->[5]->[34]=0x2013;
+$chanmap->{chan}->[5]->[34]=11;
+$chanmap->{fpga}->[5]->[35]=0x2013;
+$chanmap->{chan}->[5]->[35]=9;
+$chanmap->{fpga}->[5]->[36]=0x2013;
+$chanmap->{chan}->[5]->[36]=7;
+$chanmap->{fpga}->[5]->[37]=0x2013;
+$chanmap->{chan}->[5]->[37]=5;
+$chanmap->{fpga}->[5]->[38]=0x2013;
+$chanmap->{chan}->[5]->[38]=3;
+$chanmap->{fpga}->[5]->[39]=0x2013;
+$chanmap->{chan}->[5]->[39]=1;
+
+$chanmap->{fpga}->[6]->[32]=0x2012;
+$chanmap->{chan}->[6]->[32]=48;
+$chanmap->{fpga}->[6]->[33]=0x2012;
+$chanmap->{chan}->[6]->[33]=46;
+$chanmap->{fpga}->[6]->[34]=0x2012;
+$chanmap->{chan}->[6]->[34]=44;
+$chanmap->{fpga}->[6]->[35]=0x2012;
+$chanmap->{chan}->[6]->[35]=42;
+$chanmap->{fpga}->[6]->[36]=0x2012;
+$chanmap->{chan}->[6]->[36]=40;
+$chanmap->{fpga}->[6]->[37]=0x2012;
+$chanmap->{chan}->[6]->[37]=38;
+$chanmap->{fpga}->[6]->[38]=0x2012;
+$chanmap->{chan}->[6]->[38]=36;
+$chanmap->{fpga}->[6]->[39]=0x2012;
+$chanmap->{chan}->[6]->[39]=34;
+
+$chanmap->{fpga}->[7]->[32]=0x2012;
+$chanmap->{chan}->[7]->[32]=47;
+$chanmap->{fpga}->[7]->[33]=0x2012;
+$chanmap->{chan}->[7]->[33]=45;
+$chanmap->{fpga}->[7]->[34]=0x2012;
+$chanmap->{chan}->[7]->[34]=43;
+$chanmap->{fpga}->[7]->[35]=0x2012;
+$chanmap->{chan}->[7]->[35]=41;
+$chanmap->{fpga}->[7]->[36]=0x2012;
+$chanmap->{chan}->[7]->[36]=39;
+$chanmap->{fpga}->[7]->[37]=0x2012;
+$chanmap->{chan}->[7]->[37]=37;
+$chanmap->{fpga}->[7]->[38]=0x2012;
+$chanmap->{chan}->[7]->[38]=35;
+$chanmap->{fpga}->[7]->[39]=0x2012;
+$chanmap->{chan}->[7]->[39]=33;
+
+
+$chanmap->{fpga}->[8]->[32]=0x2012;
+$chanmap->{chan}->[8]->[32]=32;
+$chanmap->{fpga}->[8]->[33]=0x2012;
+$chanmap->{chan}->[8]->[33]=30;
+$chanmap->{fpga}->[8]->[34]=0x2012;
+$chanmap->{chan}->[8]->[34]=28;
+$chanmap->{fpga}->[8]->[35]=0x2012;
+$chanmap->{chan}->[8]->[35]=26;
+$chanmap->{fpga}->[8]->[36]=0x2012;
+$chanmap->{chan}->[8]->[36]=24;
+$chanmap->{fpga}->[8]->[37]=0x2012;
+$chanmap->{chan}->[8]->[37]=22;
+$chanmap->{fpga}->[8]->[38]=0x2012;
+$chanmap->{chan}->[8]->[38]=20;
+$chanmap->{fpga}->[8]->[39]=0x2012;
+$chanmap->{chan}->[8]->[39]=18;
+
+$chanmap->{fpga}->[9]->[32]=0x2012;
+$chanmap->{chan}->[9]->[32]=31;
+$chanmap->{fpga}->[9]->[33]=0x2012;
+$chanmap->{chan}->[9]->[33]=29;
+$chanmap->{fpga}->[9]->[34]=0x2012;
+$chanmap->{chan}->[9]->[34]=27;
+$chanmap->{fpga}->[9]->[35]=0x2012;
+$chanmap->{chan}->[9]->[35]=25;
+$chanmap->{fpga}->[9]->[36]=0x2012;
+$chanmap->{chan}->[9]->[36]=23;
+$chanmap->{fpga}->[9]->[37]=0x2012;
+$chanmap->{chan}->[9]->[37]=21;
+$chanmap->{fpga}->[9]->[38]=0x2012;
+$chanmap->{chan}->[9]->[38]=19;
+$chanmap->{fpga}->[9]->[39]=0x2012;
+$chanmap->{chan}->[9]->[39]=17;
+
+$chanmap->{fpga}->[10]->[32]=0x2012;
+$chanmap->{chan}->[10]->[32]=16;
+$chanmap->{fpga}->[10]->[33]=0x2012;
+$chanmap->{chan}->[10]->[33]=14;
+$chanmap->{fpga}->[10]->[34]=0x2012;
+$chanmap->{chan}->[10]->[34]=12;
+$chanmap->{fpga}->[10]->[35]=0x2012;
+$chanmap->{chan}->[10]->[35]=10;
+$chanmap->{fpga}->[10]->[36]=0x2012;
+$chanmap->{chan}->[10]->[36]=8;
+$chanmap->{fpga}->[10]->[37]=0x2012;
+$chanmap->{chan}->[10]->[37]=6;
+$chanmap->{fpga}->[10]->[38]=0x2012;
+$chanmap->{chan}->[10]->[38]=4;
+$chanmap->{fpga}->[10]->[39]=0x2012;
+$chanmap->{chan}->[10]->[39]=2;
+
+$chanmap->{fpga}->[11]->[32]=0x2012;
+$chanmap->{chan}->[11]->[32]=15;
+$chanmap->{fpga}->[11]->[33]=0x2012;
+$chanmap->{chan}->[11]->[33]=13;
+$chanmap->{fpga}->[11]->[34]=0x2012;
+$chanmap->{chan}->[11]->[34]=11;
+$chanmap->{fpga}->[11]->[35]=0x2012;
+$chanmap->{chan}->[11]->[35]=9;
+$chanmap->{fpga}->[11]->[36]=0x2012;
+$chanmap->{chan}->[11]->[36]=7;
+$chanmap->{fpga}->[11]->[37]=0x2012;
+$chanmap->{chan}->[11]->[37]=5;
+$chanmap->{fpga}->[11]->[38]=0x2012;
+$chanmap->{chan}->[11]->[38]=3;
+$chanmap->{fpga}->[11]->[39]=0x2012;
+$chanmap->{chan}->[11]->[39]=1;
+
+$chanmap->{fpga}->[12]->[32]=0x2011;
+$chanmap->{chan}->[12]->[32]=48;
+$chanmap->{fpga}->[12]->[33]=0x2011;
+$chanmap->{chan}->[12]->[33]=46;
+$chanmap->{fpga}->[12]->[34]=0x2011;
+$chanmap->{chan}->[12]->[34]=44;
+$chanmap->{fpga}->[12]->[35]=0x2011;
+$chanmap->{chan}->[12]->[35]=42;
+$chanmap->{fpga}->[12]->[36]=0x2011;
+$chanmap->{chan}->[12]->[36]=40;
+$chanmap->{fpga}->[12]->[37]=0x2011;
+$chanmap->{chan}->[12]->[37]=38;
+$chanmap->{fpga}->[12]->[38]=0x2011;
+$chanmap->{chan}->[12]->[38]=36;
+$chanmap->{fpga}->[12]->[39]=0x2011;
+$chanmap->{chan}->[12]->[39]=34;
+
+$chanmap->{fpga}->[13]->[32]=0x2011;
+$chanmap->{chan}->[13]->[32]=47;
+$chanmap->{fpga}->[13]->[33]=0x2011;
+$chanmap->{chan}->[13]->[33]=45;
+$chanmap->{fpga}->[13]->[34]=0x2011;
+$chanmap->{chan}->[13]->[34]=43;
+$chanmap->{fpga}->[13]->[35]=0x2011;
+$chanmap->{chan}->[13]->[35]=41;
+$chanmap->{fpga}->[13]->[36]=0x2011;
+$chanmap->{chan}->[13]->[36]=39;
+$chanmap->{fpga}->[13]->[37]=0x2011;
+$chanmap->{chan}->[13]->[37]=37;
+$chanmap->{fpga}->[13]->[38]=0x2011;
+$chanmap->{chan}->[13]->[38]=35;
+$chanmap->{fpga}->[13]->[39]=0x2011;
+$chanmap->{chan}->[13]->[39]=33;
+
+$chanmap->{fpga}->[14]->[32]=0x2011;
+$chanmap->{chan}->[14]->[32]=32;
+$chanmap->{fpga}->[14]->[33]=0x2011;
+$chanmap->{chan}->[14]->[33]=30;
+$chanmap->{fpga}->[14]->[34]=0x2011;
+$chanmap->{chan}->[14]->[34]=28;
+$chanmap->{fpga}->[14]->[35]=0x2011;
+$chanmap->{chan}->[14]->[35]=26;
+$chanmap->{fpga}->[14]->[36]=0x2011;
+$chanmap->{chan}->[14]->[36]=24;
+$chanmap->{fpga}->[14]->[37]=0x2011;
+$chanmap->{chan}->[14]->[37]=22;
+$chanmap->{fpga}->[14]->[38]=0x2011;
+$chanmap->{chan}->[14]->[38]=20;
+$chanmap->{fpga}->[14]->[39]=0x2011;
+$chanmap->{chan}->[14]->[39]=18;
+
+$chanmap->{fpga}->[15]->[32]=0x2011;
+$chanmap->{chan}->[15]->[32]=31;
+$chanmap->{fpga}->[15]->[33]=0x2011;
+$chanmap->{chan}->[15]->[33]=29;
+$chanmap->{fpga}->[15]->[34]=0x2011;
+$chanmap->{chan}->[15]->[34]=27;
+$chanmap->{fpga}->[15]->[35]=0x2011;
+$chanmap->{chan}->[15]->[35]=25;
+$chanmap->{fpga}->[15]->[36]=0x2011;
+$chanmap->{chan}->[15]->[36]=23;
+$chanmap->{fpga}->[15]->[37]=0x2011;
+$chanmap->{chan}->[15]->[37]=21;
+$chanmap->{fpga}->[15]->[38]=0x2011;
+$chanmap->{chan}->[15]->[38]=19;
+$chanmap->{fpga}->[15]->[39]=0x2011;
+$chanmap->{chan}->[15]->[39]=17;
+
+
+$chanmap->{fpga}->[16]->[32]=0x2011;
+$chanmap->{chan}->[16]->[32]=16;
+$chanmap->{fpga}->[16]->[33]=0x2011;
+$chanmap->{chan}->[16]->[33]=14;
+$chanmap->{fpga}->[16]->[34]=0x2011;
+$chanmap->{chan}->[16]->[34]=12;
+$chanmap->{fpga}->[16]->[35]=0x2011;
+$chanmap->{chan}->[16]->[35]=10;
+$chanmap->{fpga}->[16]->[36]=0x2011;
+$chanmap->{chan}->[16]->[36]=8;
+$chanmap->{fpga}->[16]->[37]=0x2011;
+$chanmap->{chan}->[16]->[37]=6;
+$chanmap->{fpga}->[16]->[38]=0x2011;
+$chanmap->{chan}->[16]->[38]=4;
+$chanmap->{fpga}->[16]->[39]=0x2011;
+$chanmap->{chan}->[16]->[39]=2;
+
+$chanmap->{fpga}->[17]->[32]=0x2011;
+$chanmap->{chan}->[17]->[32]=15;
+$chanmap->{fpga}->[17]->[33]=0x2011;
+$chanmap->{chan}->[17]->[33]=13;
+$chanmap->{fpga}->[17]->[34]=0x2011;
+$chanmap->{chan}->[17]->[34]=11;
+$chanmap->{fpga}->[17]->[35]=0x2011;
+$chanmap->{chan}->[17]->[35]=9;
+$chanmap->{fpga}->[17]->[36]=0x2011;
+$chanmap->{chan}->[17]->[36]=7;
+$chanmap->{fpga}->[17]->[37]=0x2011;
+$chanmap->{chan}->[17]->[37]=5;
+$chanmap->{fpga}->[17]->[38]=0x2011;
+$chanmap->{chan}->[17]->[38]=3;
+$chanmap->{fpga}->[17]->[39]=0x2011;
+$chanmap->{chan}->[17]->[39]=1;
+
+$chanmap->{fpga}->[18]->[32]=0x2010;
+$chanmap->{chan}->[18]->[32]=48;
+$chanmap->{fpga}->[18]->[33]=0x2010;
+$chanmap->{chan}->[18]->[33]=46;
+$chanmap->{fpga}->[18]->[34]=0x2010;
+$chanmap->{chan}->[18]->[34]=44;
+$chanmap->{fpga}->[18]->[35]=0x2010;
+$chanmap->{chan}->[18]->[35]=42;
+$chanmap->{fpga}->[18]->[36]=0x2010;
+$chanmap->{chan}->[18]->[36]=40;
+$chanmap->{fpga}->[18]->[37]=0x2010;
+$chanmap->{chan}->[18]->[37]=38;
+$chanmap->{fpga}->[18]->[38]=0x2010;
+$chanmap->{chan}->[18]->[38]=36;
+$chanmap->{fpga}->[18]->[39]=0x2010;
+$chanmap->{chan}->[18]->[39]=34;
+
+$chanmap->{fpga}->[19]->[32]=0x2010;
+$chanmap->{chan}->[19]->[32]=47;
+$chanmap->{fpga}->[19]->[33]=0x2010;
+$chanmap->{chan}->[19]->[33]=45;
+$chanmap->{fpga}->[19]->[34]=0x2010;
+$chanmap->{chan}->[19]->[34]=43;
+$chanmap->{fpga}->[19]->[35]=0x2010;
+$chanmap->{chan}->[19]->[35]=41;
+$chanmap->{fpga}->[19]->[36]=0x2010;
+$chanmap->{chan}->[19]->[36]=39;
+$chanmap->{fpga}->[19]->[37]=0x2010;
+$chanmap->{chan}->[19]->[37]=37;
+$chanmap->{fpga}->[19]->[38]=0x2010;
+$chanmap->{chan}->[19]->[38]=35;
+$chanmap->{fpga}->[19]->[39]=0x2010;
+$chanmap->{chan}->[19]->[39]=33;
+
+$chanmap->{fpga}->[20]->[32]=0x2010;
+$chanmap->{chan}->[20]->[32]=32;
+$chanmap->{fpga}->[20]->[33]=0x2010;
+$chanmap->{chan}->[20]->[33]=30;
+$chanmap->{fpga}->[20]->[34]=0x2010;
+$chanmap->{chan}->[20]->[34]=28;
+$chanmap->{fpga}->[20]->[35]=0x2010;
+$chanmap->{chan}->[20]->[35]=26;
+$chanmap->{fpga}->[20]->[36]=0x2010;
+$chanmap->{chan}->[20]->[36]=24;
+$chanmap->{fpga}->[20]->[37]=0x2010;
+$chanmap->{chan}->[20]->[37]=22;
+$chanmap->{fpga}->[20]->[38]=0x2010;
+$chanmap->{chan}->[20]->[38]=20;
+$chanmap->{fpga}->[20]->[39]=0x2010;
+$chanmap->{chan}->[20]->[39]=18;
+
+$chanmap->{fpga}->[21]->[32]=0x2010;
+$chanmap->{chan}->[21]->[32]=31;
+$chanmap->{fpga}->[21]->[33]=0x2010;
+$chanmap->{chan}->[21]->[33]=29;
+$chanmap->{fpga}->[21]->[34]=0x2010;
+$chanmap->{chan}->[21]->[34]=27;
+$chanmap->{fpga}->[21]->[35]=0x2010;
+$chanmap->{chan}->[21]->[35]=25;
+$chanmap->{fpga}->[21]->[36]=0x2010;
+$chanmap->{chan}->[21]->[36]=23;
+$chanmap->{fpga}->[21]->[37]=0x2010;
+$chanmap->{chan}->[21]->[37]=21;
+$chanmap->{fpga}->[21]->[38]=0x2010;
+$chanmap->{chan}->[21]->[38]=19;
+$chanmap->{fpga}->[21]->[39]=0x2010;
+$chanmap->{chan}->[21]->[39]=17;
+
+$chanmap->{fpga}->[22]->[32]=0x2010;
+$chanmap->{chan}->[22]->[32]=16;
+$chanmap->{fpga}->[22]->[33]=0x2010;
+$chanmap->{chan}->[22]->[33]=14;
+$chanmap->{fpga}->[22]->[34]=0x2010;
+$chanmap->{chan}->[22]->[34]=12;
+$chanmap->{fpga}->[22]->[35]=0x2010;
+$chanmap->{chan}->[22]->[35]=10;
+$chanmap->{fpga}->[22]->[36]=0x2010;
+$chanmap->{chan}->[22]->[36]=8;
+$chanmap->{fpga}->[22]->[37]=0x2010;
+$chanmap->{chan}->[22]->[37]=6;
+$chanmap->{fpga}->[22]->[38]=0x2010;
+$chanmap->{chan}->[22]->[38]=4;
+$chanmap->{fpga}->[22]->[39]=0x2010;
+$chanmap->{chan}->[22]->[39]=2;
+
+$chanmap->{fpga}->[23]->[32]=0x2010;
+$chanmap->{chan}->[23]->[32]=15;
+$chanmap->{fpga}->[23]->[33]=0x2010;
+$chanmap->{chan}->[23]->[33]=13;
+$chanmap->{fpga}->[23]->[34]=0x2010;
+$chanmap->{chan}->[23]->[34]=11;
+$chanmap->{fpga}->[23]->[35]=0x2010;
+$chanmap->{chan}->[23]->[35]=9;
+$chanmap->{fpga}->[23]->[36]=0x2010;
+$chanmap->{chan}->[23]->[36]=7;
+$chanmap->{fpga}->[23]->[37]=0x2010;
+$chanmap->{chan}->[23]->[37]=5;
+$chanmap->{fpga}->[23]->[38]=0x2010;
+$chanmap->{chan}->[23]->[38]=3;
+$chanmap->{fpga}->[23]->[39]=0x2010;
+$chanmap->{chan}->[23]->[39]=1;
+
index ee9456a982784768428c708b429644b37df7b980..fe452f4a4d42e85ad4e945f994a11b5c309641fe 100644 (file)
 0x2007      99    3
 0x8001      99    5
 
-0x2008             78     0
-0x2009             78     1
-0x200a             78     2
-0x200b             78     3
-0x8002      78            5
+#0x2008            78     0
+#0x2009            78     1
+#0x200a            78     2
+#0x200b            78     3
+#0x8002      78           5
+0x2008      73     0
+0x2009      73     1
+0x200a      73     2
+0x200b      73     3
+0x8002      73     5
+
 
 0x200c             74     0
 0x200d             74     1
@@ -84,4 +90,9 @@
 0x202a    77      2
 0x202b    77      3
 0x800a    77      5
-
+#AUX
+0x202c    57      0
+0x202d    57      1
+0x202e    57      2
+0x202f    57      3
+0x800b    57      5
diff --git a/users/gsi_dirc/barreloff.pl b/users/gsi_dirc/barreloff.pl
new file mode 100644 (file)
index 0000000..b2e2ea9
--- /dev/null
@@ -0,0 +1,7 @@
+#!/usr/bin/perl
+
+
+foreach my $i (0x2000..0x2013) {
+  system("trbcmd w $i 0xc802 0");
+  system("trbcmd w $i 0xc803 0");
+  }
index cd206215250e262c41fd49e223fa804eb4f14b3e..cc336631a10250c46c6297150b39f5fcf95754e0 100755 (executable)
@@ -5,12 +5,12 @@ use strict;
 use Parallel::ForkManager;
 use Net::Ping;
 
-my @trbs = (56, 72, 99, 78, 74, 104, 97, 83, 89, 111, 13, 77, 57);
+my @trbs = (56, 72, 99, 73, 74, 104, 97, 83, 89, 111, 13, 77, 57);
 
 my $map = {
  0 => { trb =>  72, sys => "MCP 00"},
  1 => { trb =>  99, sys => "MCP 01"},
- 2 => { trb =>  78, sys => "MCP 02"},
+ 2 => { trb =>  73, sys => "MCP 02"},
  3 => { trb =>  74, sys => "MCP 03"},
  4 => { trb => 104, sys => "MCP 04"},
  5 => { trb =>  97, sys => "TOF 1"},
diff --git a/users/gsi_dirc/dmon_config.pl b/users/gsi_dirc/dmon_config.pl
new file mode 100755 (executable)
index 0000000..64e2602
--- /dev/null
@@ -0,0 +1,126 @@
+#This a an example configuration file. Copy this file to your user directory and give 
+#start.pl a link to this file as first argument.
+
+#Scripts to start & order of icons in the Overview
+activeScripts => [['time','ping','-','-','daqop'],
+                  ['numfee','temperature','reftime','trgerrors','-'],
+                  ['beamintensity','beammonitors','-','-','-'],
+                  ['trgrate','datarate','deadtime','-','-'],
+                  ['padiwatemp','padiwaonline','-','-','-'],
+                  ['heatmapdirc','heatmapflash','heatmapdiscdirc','-','-'],
+                  ['evtbnetmem','eb2','eb3','-','-'],
+                  ],
+                  
+#Names to be shown in left column of Overview (max 4 letters!)
+qaNames => ['sys','main','beam','rate','Pdwa','Heat','EB'],                  
+
+#Expected number of FPGAs in system
+NumberOfFpga => 58,
+NumberOfPadiwa => 87,
+
+#The address of the individual boards
+CtsAddress   => 0x7999,   
+PadiwaBroadcastAddress => 0xfe4c,
+
+PadiwaTrbAddresses => [0x2000,0x2001,0x2002,0x2003,0x2004,0x2005,0x2006,0x2007,
+                       0x2008,0x2009,0x200a,0x200b,0x200c,0x200d,0x200e,0x200f,
+                       0x2010,0x2011,0x2012,0x2013,0x2014,0x2015,0x2016,0x2018,
+                       0x2019,0x201a,0x201c,0x2024,0x2025,0x2026,0x2027,0x2028],
+PadiwaChainMask =>    [0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,
+                       0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,
+                       0x0007,0x0007,0x0007,0x0007,0x0001,0x0003,0x0003,0x0001,
+                       0x0003,0x0003,0x0003,0x0007,0x0007,0x0007,0x0007,0x0007],
+                       
+#0x2020,0x2023, no padiwa
+#,0x201d,0x201e,0x201f off
+#0x2029,0x202a,0x202b,0x202c,0x202d,0x202e,0x202f
+OtherTrbAddresses => [0x7999,0x2020,0x2023,0x202c,0x202d],
+
+
+
+HubTrbAddresses =>  [0x8100,0x8101,0x8102,0x8103,0x8000,0X8001,0x8002,0x8003,0x8004,0x8005,0x8006,0x8007,0x8008,0x8009,0x800a,0x800b],
+
+                    
+#Addresses of all TDCs. Either single or broadcast addresses
+TdcAddress   => [0xfe4c,0xfe48,0xfe4a],  
+
+#IPs of all devices which should react on a ping
+TrbIP => [
+    "192.168.0.72",
+    "192.168.0.99",
+    "192.168.0.73",
+    "192.168.0.74",
+    "192.168.0.104",
+    "192.168.0.97",
+    "192.168.0.83",
+    "192.168.0.89",
+    "192.168.0.111",
+    "192.168.0.13",
+    "192.168.0.77",
+    "192.168.0.56"
+],
+
+#Channel to read spill intensity from. Give limit for off-spill detection
+BeamTRB => 0x202c,
+BeamChan => 0xc001,
+SpillThreshold => 50,
+
+#Name detectors 
+BeamDetectorsTrb  => [0x202c,0x202c,0x202c,0x2014,0x2018],
+BeamDetectorsChan => [0xc001,0xc005,0xc003,0xc001,0xc001],
+BeamDetectorsName => ['Trig1','Trig2','Laser1','MCP1','MCP2'],
+#BeamDetectorsTrb  => [0x0110, 0x0110, 0x0111,0x0110,0x0111,0x0110,0x0113,0x0111,0x0110],
+#BeamDetectorsChan => [0xc001, 0xc003, 0xc001,0xc009,0xc005,0xc00b,0xc009,0xc009,0xc005],
+#BeamDetectorsName => ['Fngr_d', 'Lead_d', 'C1',  'C1_d', 'C2',  'C2_d', 'Lead1', 'Lead2', 'Hodo'],
+
+#User directory
+UserDirectory => '/home/hadaq/trbsoft/daqtools/users/gsi_dirc/',
+#PowerSupScript => 'measure_powers.sh' # relative to user dir
+
+#BarrelDirc Heatmap settings
+HeatmapDirc => {
+  # upper limit for high end of color scale
+  max_count_uclamp => 100000,
+  # lower limit for high end of color scale
+  max_count_lclamp => 10,
+  
+  # when set to 1 normalization of color scale is instantaneous,
+  # when set to 0, normalization has "inertia"
+  instant_normalization => 1,
+  
+  # the inertia of the adaption of the color scale in the unit of 1/(gliding average weight)
+  normalization_inertia => 3 
+},
+
+HeatmapFlash => {
+  # upper limit for high end of color scale
+  max_count_uclamp => 200000,
+  # lower limit for high end of color scale
+  max_count_lclamp => 10,
+  
+  # when set to 1 normalization of color scale is instantaneous,
+  # when set to 0, normalization has "inertia"
+  instant_normalization => 1,
+  
+  # the inertia of the adaption of the color scale in the unit of 1/(gliding average weight)
+  normalization_inertia => 3 
+},
+
+HeatmapDiscDirc => {
+  # upper limit for high end of color scale
+  max_count_uclamp => 100000,
+  # lower limit for high end of color scale
+  max_count_lclamp => 30,
+  
+  # when set to 1 normalization of color scale is instantaneous,
+  # when set to 0, normalization has "inertia"
+  instant_normalization => 1,
+  
+  # the inertia of the adaption of the color scale in the unit of 1/(gliding average weight)
+  normalization_inertia => 3 
+},
+
+EvtbNetmem => {
+  shm_string => "test"
+}
+
diff --git a/users/gsi_dirc/dmon_restart.pl b/users/gsi_dirc/dmon_restart.pl
new file mode 100755 (executable)
index 0000000..2620a7c
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+cd ../../dmon
+./stop.pl
+./start.pl ../users/gsi_dirc/dmon_config.pl
diff --git a/users/gsi_dirc/makethresholds.sh b/users/gsi_dirc/makethresholds.sh
new file mode 100755 (executable)
index 0000000..4358c78
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/bash
+rm padiwa_threshold_results.log
+# ./write_thresholds.pl thresh/dummythresholds.thr -o 0
+trbcmd setbit 0x7999 0xa00c 0x80000000
+
+./run_thresh_on_system.pl --endpoints=0x2000..0x2013\
+  --chains=0..2 --offset=0 --polarity 1  --tool ./thresholds_new.pl 
+
+export TIMEST=`date +%Y%m%d%H%M`
+
+mv padiwa_threshold_results.log thresh/$TIMEST.thr
+
+./write_thresholds.pl thresh/$TIMEST.thr -o 0
+trbcmd clearbit 0x7999 0xa00c 0x80000000
+
+
+
+
+
+
+# ./run_thresh_on_system.pl \
+#  --endpoints=0x0013,0x0021,0x0033,0x0041,0x0053,0x0061,0x0073,0x0081,0x0093,0x00a1,0x00b3,0x00c1,0x00d3,0x00e1,0x00f3,0x0101 \
+#  --32channel --chains=0 --offset=0 --polarity 1 
+# ./write_thresholds.pl thresh/dummythresholds.thr -o 0
+# ./run_thresh_on_system.pl \
+#  --endpoints=0x0012,0x0020,0x0032,0x0040,0x0052,0x0060,0x0072,0x0080,0x0092,0x00a0,0x00b2,0x00c0,0x00d2,0x00e0,0x00f2,0x0100 \
+#  --32channel --chains=0 --offset=0 --polarity 1 
+# ./write_thresholds.pl thresh/dummythresholds.thr -o 0
+# ./run_thresh_on_system.pl \
+#  --endpoints=0x0011,0x0023,0x0031,0x0043,0x0051,0x0063,0x0071,0x0083,0x0091,0x00a3,0x00b1,0x00c3,0x00d1,0x00e3,0x00f1,0x0103 \
+#  --32channel --chains=0 --offset=0 --polarity 1 
+# ./write_thresholds.pl thresh/dummythresholds.thr -o 0
+# ./run_thresh_on_system.pl \
+#  --endpoints=0x0010,0x0022,0x0030,0x0042,0x0050,0x0062,0x0070,0x0082,0x0090,0x00a2,0x00b0,0x00c2,0x00d0,0x00e2,0x00f0,0x0102 \
+#  --32channel --chains=0 --offset=0 --polarity 1 
+
+# 
+# ./run_thresh_on_system.pl --endpoints=0x0010-0x0013,0x0020-0x0023,0x0030-0x0033,0x0040-0x0043,0x0050-0x0053,0x0060-0x0063,0x0070-0x0073,0x0080-0x0083,0x0090-0x0093,0x00a0-0x00a3,0x00b0-0x00b3,0x00c0-0x00c3,0x00d0-0x00d3,0x00e0-0x00e3,0x00f0-0x00f3,0x0100-0x0103\
+#   --32channel --chains=0 --offset=0 --polarity 0 --tool ./thresholds_automatic.pl
index eeb62349e911458c5b68cc57b11069f832990798..8f5ddf1ea65d754fc58792e06588fce3c3345977 100644 (file)
   0x201f   0         0x00000000           0x00000000
 
 #DISC DIRC
-#  0x2029   0         0x00000000           0x00000000
-#  0x202a   0         0x00000000           0x00000000
-#  0x202b   0         0x00000000           0x00000000
+  0x2029   0         0x00000000           0x00000000
+  0x202a   0         0x00000000           0x00000000
+  0x202b   0         0x00000000           0x00000000
+
+# AUX
+  0x202c   0         0xffffffff           0x00000000
+  0x202d   0         0xffffffff           0x00000000
+  0x202e   0         0x00000000           0x00000000
+  0x202f   0         0x00000000           0x00000000
index d111505acdb33e8933f3f7193c153e9428f54747..af8961d851a9252a04e148326d8dfded6aa1a7b8 100755 (executable)
@@ -21,9 +21,9 @@
  0x8006     0     0x8006    0x00020001   0x00030064     0x1DE8       0x578         1          0           1            1                0x0 
  0x8007     0     0x8007    0x00020001   0x00030064     0x1DE8       0x578         1          0           1            1                0x0 
  0x8008     0     0x8008    0x00020001   0x00030064     0x1DE8       0x578         1          0           1            1                0x0 
-# 0x8009     0     0x8009    0x00020001   0x00030064     0x1DE8       0x578         1          0           1            1                0x0 
-# 0x8010     0     0x8010    0x00020001   0x00030064     0x1DE8       0x578         1          0           1            1                0x0 
-# 0x8011     0     0x8011    0x00020001   0x00030064     0x1DE8       0x578         1          0           1            1                0x0 
+ 0x8009     0     0x8009    0x00020001   0x00030064     0x1DE8       0x578         1          0           1            1                0x0 
+ 0x800a     0     0x800a    0x00020001   0x00030064     0x1DE8       0x578         1          0           1            1                0x0 
+ 0x800b     0     0x800b    0x00020001   0x00030064     0x1DE8       0x578         1          0           1            1                0x0 
 # 0x8012     0     0x8012    0x00020001   0x00030064     0x1DE8       0x578         1          0           1            1                0x0 
 # 0x8013     0     0x8013    0x00020001   0x00030064     0x1DE8       0x578         1          0           1            1                0x0 
 # 0x8014     0     0x8014    0x00020001   0x00030064     0x1DE8       0x578         1          0           1            1                0x0 
index 96037fbcf3405a1ef429111949fadbfbfe182668..e665b273b5a3295b2796957679b90565ee1df2b3 100755 (executable)
 # Hub    #  Type  #     C0     #     C1     #     C2     #     C3     #     C4     #     C5     #     C6     #     C7     #     C8     #
 ########################################################################################################################################
 
- 0x7999        0   0x1e04f330    0x000e      0xc0a80003      0xc34f     0xdead8000     0x001b   0xc0a80000      0xc350     0x0578
- 0x8000        0   0x1e04f330    0x000e      0xc0a80003      0xc350     0xdead8001     0x001b   0xc0a80001      0xc351     0x0578
- 0x8001        0   0x1e04f330    0x000e      0xc0a80003      0xc351     0xdead8002     0x001b   0xc0a80002      0xc352     0x0578
- 0x8002        0   0x1e04f330    0x000e      0xc0a80003      0xc352     0xdead8003     0x001b   0xc0a80003      0xc353     0x0578
- 0x8003        0   0x1e04f330    0x000e      0xc0a80003      0xc353     0xdead8004     0x001b   0xc0a80004      0xc354     0x0578
- 0x8004        0   0x1e04f330    0x000e      0xc0a80003      0xc354     0xdead8005     0x001b   0xc0a80005      0xc355     0x0578
- 0x8005        0   0x1e04f330    0x000e      0xc0a80003      0xc355     0xdead8006     0x001b   0xc0a80006      0xc356     0x0578
- 0x8006        0   0x1e04f330    0x000e      0xc0a80003      0xc356     0xdead8007     0x001b   0xc0a80007      0xc357     0x0578
- 0x8007        0   0x1e04f330    0x000e      0xc0a80003      0xc357     0xdead8008     0x001b   0xc0a80008      0xc358     0x0578
- 0x8008        0   0x1e04f330    0x000e      0xc0a80003      0xc358     0xdead8009     0x001b   0xc0a80009      0xc359     0x0578
-# 0x8009        0   0x1e04f330    0x000e      0xc0a80003      0xc359     0xdead8010     0x001b   0xc0a80010      0xc35a     0x0578
-# 0x8010        0   0x7a0b83ca    0x0cc4      0xc0a80002      0xc35b     0xdead8011     0x001b   0xc0a80011      0xc35b     0x0578
-# 0x8011        0   0x7a0b83ca    0x0cc4      0xc0a80002      0xc35c     0xdead8012     0x001b   0xc0a80012      0xc35c     0x0578
-# 0x8012        0   0x7a0b83ca    0x0cc4      0xc0a80002      0xc35d     0xdead8013     0x001b   0xc0a80013      0xc35d     0x0578
-# 0x8013        0   0x7a0b83ca    0x0cc4      0xc0a80002      0xc35e     0xdead8014     0x001b   0xc0a80014      0xc35e     0x0578
-# 0x8014        0   0x7a0b83ca    0x0cc4      0xc0a80002      0xc35f     0xdead8015     0x001b   0xc0a80015      0xc35f     0x0578
-# 0x8015        0   0x7a0b83ca    0x0cc4      0xc0a80002      0xc360     0xdead8016     0x001b   0xc0a80016      0xc360     0x0578
-# 0x8016        0   0x7a0b83ca    0x0cc4      0xc0a80002      0xc361     0xdead8017     0x001b   0xc0a80017      0xc361     0x0578
-# 0x8017        0   0x7a0b83ca    0x0cc4      0xc0a80002      0xc362     0xdead8018     0x001b   0xc0a80018      0xc362     0x0578
-# 0x8018        0   0x7a0b83ca    0x0cc4      0xc0a80002      0xc363     0xdead8019     0x001b   0xc0a80019      0xc363     0x0578
-# 0x8019        0   0x7a0b83ca    0x0cc4      0xc0a80002      0xc364     0xdead8020     0x001b   0xc0a80020      0xc364     0x0578
-# 0x8020        0   0x7a0b83ca    0x0cc4      0xc0a80002      0xc365     0xdead8021     0x001b   0xc0a80021      0xc365     0x0578
-# 0x8021        0   0x7a0b83ca    0x0cc4      0xc0a80002      0xc366     0xdead8022     0x001b   0xc0a80022      0xc366     0x0578
-#0x8022        0   0x7a0b83ca    0x0cc4      0xc0a80002      0xc367     0xdead8023     0x001b   0xc0a80023      0xc367     0x0578
-#0x8023        0   0x7a0b83ca    0x0cc4      0xc0a80002      0xc368     0xdead8024     0x001b   0xc0a80024      0xc368     0x0578
-#0x8024        0   0x7a0b83ca    0x0cc4      0xc0a80002      0xc369     0xdead8025     0x001b   0xc0a80025      0xc369     0x0578
-#0x8025        0   0x7a0b83ca    0x0cc4      0xc0a80002      0xc36a     0xdead8026     0x001b   0xc0a80026      0xc36a     0x00cc4
-
+ 0x7999        0   0x1e04f330    0x000e      0xc0a80003      0xc34f     0xdead7fff     0x001b   0xc0a80000      0xc350     0x0578
+ 0x8000        0   0x1e04f330    0x000e      0xc0a80003      0xc350     0xdead8000     0x001b   0xc0a80001      0xc351     0x0578
+ 0x8001        0   0x1e04f330    0x000e      0xc0a80003      0xc351     0xdead8001     0x001b   0xc0a80002      0xc352     0x0578
+ 0x8002        0   0x1e04f330    0x000e      0xc0a80003      0xc352     0xdead8002     0x001b   0xc0a80003      0xc353     0x0578
+ 0x8003        0   0x1e04f330    0x000e      0xc0a80003      0xc353     0xdead8003     0x001b   0xc0a80004      0xc354     0x0578
+ 0x8004        0   0x1e04f330    0x000e      0xc0a80003      0xc354     0xdead8004     0x001b   0xc0a80005      0xc355     0x0578
+ 0x8005        0   0x1e04f330    0x000e      0xc0a80003      0xc355     0xdead8005     0x001b   0xc0a80006      0xc356     0x0578
+ 0x8006        0   0x1e04f330    0x000e      0xc0a80003      0xc356     0xdead8006     0x001b   0xc0a80007      0xc357     0x0578
+ 0x8007        0   0x1e04f330    0x000e      0xc0a80003      0xc357     0xdead8007     0x001b   0xc0a80008      0xc358     0x0578
+ 0x8008        0   0x1e04f330    0x000e      0xc0a80003      0xc358     0xdead8008     0x001b   0xc0a80009      0xc359     0x0578
+ 0x8009        0   0x1e04f330    0x000e      0xc0a80003      0xc359     0xdead8009     0x001b   0xc0a8000a      0xc35a     0x0578
+ 0x800a        0   0x1e04f330    0x000e      0xc0a80003      0xc35a     0xdead800a     0x001b   0xc0a8000b      0xc35b     0x0578
+ 0x800b        0   0x1e04f330    0x000e      0xc0a80003      0xc35b     0xdead800b     0x001b   0xc0a8000c      0xc35c     0x0578
 
 #  0x7999        0   0x1e04f330    0x000e      0xc0a80002      0xc350     0xdead8000     0x001b   0xc0a80000      0xc350     0x0578
 #  0x8000        0   0x1e04f330    0x000e      0xc0a80002      0xc351     0xdead8001     0x001b   0xc0a80001      0xc351     0x0578
index 87fac053529456381964e33a32d08f38a6ab61ae..a75a21611729f1738f4a9f5805464f771c3de1b2 100755 (executable)
@@ -7,12 +7,14 @@ my $help = "";
 my $dataPath = "/d/may2015/";
 my $label = "test";
 my $time = -1;
+my $name = "cc";
 my $c;
 
 my $result = GetOptions (
     "h|help"    => \$help,
     "t|time=i"  => \$time,
     "l|label=s" => \$label,
+    "n|filename=s" => \$name,
     "p|path=s"  => \$dataPath
     );
 
@@ -32,14 +34,14 @@ $c=qq|pkill -f "daq_evtbuild -S $label"|; qx($c); # if any, kill existing daq_ev
 $c=qq|pkill -f "daq_netmem -S $label"|;   qx($c); # if any, kill existing daq_netmem
 
 
-$c=qq|xterm -geometry 122x15-0+0 -e bash -c 'daq_evtbuild -S $label -m 10 -x cc -d file -o $dataPath'|;
-#$c=qq|xterm -geometry 122x16-0+0 -e bash -c 'daq_evtbuild -S $label -m 23 -x cc -d file -o $dataPath'|;
+$c=qq|xterm -geometry 122x15-0+0 -e bash -c 'daq_evtbuild -S $label -m 13 -x $name --filesize 512 -d file -o $dataPath'|;
+#$c=qq|xterm -geometry 122x16-0+0 -e bash -c 'daq_evtbuild -S $label -m 23 -x $name -d file -o $dataPath'|;
 #print $c;
 
 system("$c &");
 
 sleep 1;
-$c=qq"xterm -geometry 82x35-0+210 -e bash -c 'daq_netmem -S $label -m 10 -i UDP:127.0.0.1:49999 -i UDP:127.0.0.1:50000 -i UDP:127.0.0.1:50001 -i UDP:127.0.0.1:50002 -i UDP:127.0.0.1:50003 -i UDP:127.0.0.1:50004 -i UDP:127.0.0.1:50005 -i UDP:127.0.0.1:50006 -i UDP:127.0.0.1:50007 -i UDP:127.0.0.1:50008 '";
+$c=qq"xterm -geometry 82x45-0+210 -e bash -c 'daq_netmem -S $label -m 13 -i UDP:127.0.0.1:49999 -i UDP:127.0.0.1:50000 -i UDP:127.0.0.1:50001 -i UDP:127.0.0.1:50002 -i UDP:127.0.0.1:50003 -i UDP:127.0.0.1:50004 -i UDP:127.0.0.1:50005 -i UDP:127.0.0.1:50006 -i UDP:127.0.0.1:50007 -i UDP:127.0.0.1:50008 -i UDP:127.0.0.1:50009 -i UDP:127.0.0.1:50010 -i UDP:127.0.0.1:50011'";
 
 
 
index 721cb3b6106fcad3714895a4d4243948eb1e78d3..a01112535769472ac46439ac7005ffac1056f3bc 100755 (executable)
@@ -49,20 +49,32 @@ trbcmd w 0xfe4c 0xc800 0x00002000 ## Triggered mode
 #trbcmd w 0xfe4c 0xc800 0x00000001 ## logic analyser control register
 #trbcmd w 0xfe4c 0xc800 0x00001001 ## 2014-10-02 disable the "triggered mode"
 
-trbcmd w 0xfe4c 0xc801 0x80620062 ##  triggerwindow +/-490ns ;5ns granularity
+trbcmd w 0xfe4c 0xc801 0x80c600c6 ##  triggerwindow +/-990ns ;5ns granularity
 #trbcmd w 0xfe4c 0xc801 0x801e001e ##  triggerwindow +/-150ns ;5ns granularity
 
 # Default TDC-channel enable for all channels
 trbcmd w 0xfe4c 0xc802 0xffffffff ## channel 01-32 enable
 trbcmd w 0xfe4c 0xc803 0x0000ffff ## channel 33-64 enable
-#trbcmd w 0xfe4c 0xc804 0x0000007c ## data transfer limit
+trbcmd w 0xfe4c 0xc804 0x0000007c ## data transfer limit
 
 
 # special Matthias TDCs
 trbcmd w 0xfe48 0xc800 0x00002000 ## Triggered mode
-trbcmd w 0xfe48 0xc801 0x80620062 ##  triggerwindow +/-490ns ;5ns granularity
+trbcmd w 0xfe48 0xc801 0x80c600c6 ##  triggerwindow +/-990ns ;5ns granularity
 trbcmd w 0xfe48 0xc802 0xffffffff ## channel 01-32 enable
 trbcmd w 0xfe48 0xc803 0xffffffff ## channel 33-64 enable
+trbcmd w 0xfe48 0xc804 0x0000007c ## data transfer limit
+
+
+# AUX TDCs
+trbcmd w 0xfe4a 0xc800 0x00002000 ## Triggered mode
+trbcmd w 0xfe4a 0xc801 0x80c600c6 ##  triggerwindow +/-990ns ;5ns granularity
+trbcmd w 0xfe4a 0xc802 0x00000000 ## channel 33-64 enable
+trbcmd w 0x202c 0xc802 0xffffffff ## channel 01-32 enable
+trbcmd w 0x202d 0xc802 0xffffffff ## channel 01-32 enable
+trbcmd w 0xfe4a 0xc803 0x00000000 ## channel 33-64 enable
+trbcmd w 0xfe4a 0xc804 0x0000007c ## data transfer limit
+
 
 
 ~/trbsoft/daqtools/tools/loadregisterdb.pl register_config_tdc.db
@@ -100,6 +112,7 @@ trbcmd i 0xffff | wc -l
 
 # Barrel DIRC
 prepare_padiwas_invert_leds.pl --endpoints=0x2000-0x2013 --chains=0..2 --invert=0xffff --stretch=0x0000
+padiwa_led_off.pl
 
 # Beam
 prepare_padiwas_invert_leds.pl --endpoints=0x2014-0x201f --chains=0..2 --invert=0xffff
@@ -124,7 +137,14 @@ cd ~/trbsoft/daqtools/thresholds/
 
 ## 2015 ./load_thresh_mcptof.sh  1500 1500 1500 1500 
 
-./write_thresholds.pl padiwa_threshold_results_mcp_tof.log -o 0x2000 >> /dev/null # =14.5mV after amp
+#MCP-TOF, SciTils
+./write_thresholds.pl mcptof_mcpout_zero.log -o 2000 >> /dev/null # =14 mV after amp
+./write_thresholds.pl mcptof_pixels_zero.log -o 2000 >> /dev/null # =14 mV after amp
+./write_thresholds.pl mcptof_scitil_zero.log -o 2000 >> /dev/null # =20 mV after amp
+./write_thresholds.pl mcptof_hodo_zero.log -o 1000 >> /dev/null # =7 mV after amp
+
+## Barrel DIRC
+./write_thresholds.pl ~/trbsoft/daqtools/users/gsi_dirc/thresh/201505101447.thr -o 600 >> /dev/null # 1.5mV at plug
 
 cd -
 
@@ -137,5 +157,9 @@ trbcmd w 0x7999 0xa150 0x10000
 # pulser enable
 #trbcmd setbit 0x7999 0xa101 0x2
 
-# enable multiplexer 2
-trbcmd setbit 0x7999 0xa101 0x40
+# enable multiplexer 0
+trbcmd setbit 0x7999 0xa101 0x10
+
+trbcmd w 0x7999 0xa150 0x270f  #1kHz pulser
+trbcmd w 0x7999 0xa151 0x05f5e100  #1Hz pulser
+trbcmd loadbit 0x7999 0xa158 0x00000f00 0x00000d00  #Pulser 1 is calibration
diff --git a/users/gsi_dirc/write_thresholds.pl b/users/gsi_dirc/write_thresholds.pl
new file mode 120000 (symlink)
index 0000000..25f7de0
--- /dev/null
@@ -0,0 +1 @@
+../../thresholds/write_thresholds.pl
\ No newline at end of file