From: hadaq Date: Fri, 20 Dec 2024 09:42:57 +0000 (+0100) Subject: update hmon scripts X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=9b2d8ffa8bcadb849cde4452f52b9775291bdc99;p=hadesdaq.git update hmon scripts --- diff --git a/hmon/Hmon.pm b/hmon/Hmon.pm index 7c99b82..19e4aef 100644 --- a/hmon/Hmon.pm +++ b/hmon/Hmon.pm @@ -474,6 +474,7 @@ sub getsystem { if($b >= 0x8200 && $b < 0x82ff) { return "RICH Comb.";} if($b >= 0x83c0 && $b < 0x83cf) { return "RICH Hubs";} if($b >= 0x84c0 && $b < 0x84cf) { return "RPC Hubs";} + if($b >= 0x8500 && $b < 0x85ff) { return "MDC Hubs";} if($b >= 0x86c0 && $b < 0x86cf) { return "TOF Hubs";} if($b >= 0x8700 && $b < 0x870f) { return "Wall Hubs";} if($b >= 0x8800 && $b < 0x887f) { return "Central Hubs";} @@ -483,6 +484,7 @@ sub getsystem { if($b >= 0x8b00 && $b < 0x8bff) { return "STS Hubs";} if($b >= 0x8c00 && $b < 0x8cff) { return "fRPC Hubs";} if($b >= 0x8d00 && $b < 0x8dff) { return "iTOF Hubs";} + if($b >= 0x9000 && $b < 0xafff) { return "MDC";} diff --git a/hmon/QA.pm b/hmon/QA.pm index d12798b..5b7100b 100644 --- a/hmon/QA.pm +++ b/hmon/QA.pm @@ -146,6 +146,9 @@ use constant {CTSAddress => 0x0003}; ############################################################################### # Switched off systems ############################################################################### + +our $RichOff = 1; + our $MdcHvOff = 0; our $RichHvOff = 0; our $RichGasOff = 0; diff --git a/hmon/hmon_eberrbits_withreset.pl b/hmon/hmon_eberrbits_withreset.pl index 7cc9951..4e709e1 100755 --- a/hmon/hmon_eberrbits_withreset.pl +++ b/hmon/hmon_eberrbits_withreset.pl @@ -40,12 +40,12 @@ TRB_8880 => "Start", TRB_8890 => "Veto", TRB_8900 => "Pion1 ", TRB_8910 => "Pion2 ", -TRB_1000 => "MDC12sec1", -TRB_1010 => "MDC12sec2", -TRB_1020 => "MDC12sec3", -TRB_1030 => "MDC12sec4", -TRB_1040 => "MDC12sec5", -TRB_1050 => "MDC12sec6", +TRB_8500 => "MDC12-0", +TRB_8510 => "MDC12-1", +TRB_8520 => "MDC12-2", +TRB_8530 => "MDC12-3", +TRB_8540 => "MDC12-4", +TRB_8550 => "MDC12-5", TRB_1100 => "MDC34sec1", TRB_1110 => "MDC34sec2", TRB_1120 => "MDC34sec3", diff --git a/hmon/hmon_endpoints.pl b/hmon/hmon_endpoints.pl index ae14682..8d83ef3 100755 --- a/hmon/hmon_endpoints.pl +++ b/hmon/hmon_endpoints.pl @@ -55,12 +55,12 @@ while(1) { my @all_boards =(); my @mdc_boards =(0x8015,0x8016, # ###MDC Concentrator - 0x1000,0x1001,0x1002,0x1003,0x1004, - 0x1010,0x1011,0x1012,0x1013,0x1014, - 0x1020,0x1021,0x1022,0x1023,0x1024, - 0x1030,0x1031,0x1032,0x1033,0x1034, - 0x1040,0x1041,0x1042,0x1043,0x1044, - 0x1050,0x1051,0x1052,0x1053,0x1054, +# 0x1000,0x1001,0x1002,0x1003,0x1004, +# 0x1010,0x1011,0x1012,0x1013,0x1014, +# 0x1020,0x1021,0x1022,0x1023,0x1024, +# 0x1030,0x1031,0x1032,0x1033,0x1034, +# 0x1040,0x1041,0x1042,0x1043,0x1044, +# 0x1050,0x1051,0x1052,0x1053,0x1054, 0x1100,0x1101,0x1102,0x1103,0x1104, 0x1110,0x1111,0x1112,0x1113,0x1114, 0x1120,0x1121,0x1122,0x1123,0x1124, @@ -70,23 +70,32 @@ while(1) { ### ); - foreach my $p (0..3) { - foreach my $s (0..5) { - foreach my $m (0..15) { - next if($p==0 && $m >=14); - my $address = 0x2000 + $p*0x100 + $s*0x10 + $m; - push (@mdc_boards, $address); - } - } - } +push(@mdc_boards,(0x8500, 0x8501, 0x8502, 0x8503, 0x8504, 0x8510, 0x8511, 0x8512, 0x8513, 0x8520, 0x8521, 0x8522, 0x8523, 0x8530, 0x8531, 0x8532, 0x8533, 0x8540, 0x8541, 0x8542, 0x8543, 0x8550, 0x8551, 0x8552, 0x8553, 0x8554)); #MDC 1/2 hubs + +#push(@mdc_boards,( 0x8e00, 0xa000, 0xa001, 0x8e01, 0xa010, 0xa011, 0xa012, 0x8e02, 0xa020, 0xa021, 0xa022, 0x8e03, 0xa030, 0xa031, 0x8e04, 0xa040, 0xa041, 0x8e05, 0xa050, 0xa051, 0x8e06, 0xa060, 0xa061, 0xa062, 0x8e07, 0xa070, 0xa071, 0xa072, 0x8e08, 0xa080, 0xa081, 0x8e09, 0xa090, 0xa091, 0x8e0a, 0xa0a0, 0xa0a1, 0xa0a2, 0x8e0b, 0xa0b0, 0xa0b1, 0x8e0c, 0xa0c0, 0xa0c1, 0xa0c2, 0x8e0d, 0xa0d0, 0xa0d1, 0x8e10, 0xa100, 0xa101, 0x8e11, 0xa110, 0xa111, 0xa112, 0x8e12, 0xa120, 0xa121, 0xa122, 0x8e13, 0xa130, 0xa131, 0x8e14, 0xa140, 0xa141, 0x8e15, 0xa150, 0xa151, 0x8e16, 0xa160, 0xa161, 0xa162, 0x8e17, 0xa170, 0xa171, 0xa172, 0x8e18, 0xa180, 0xa181, 0x8e19, 0xa190, 0xa191, 0x8e1a, 0xa1a0, 0xa1a1, 0xa1a2, 0x8e1b, 0xa1b0, 0xa1b1, 0x8e1c, 0xa1c0, 0xa1c1, 0xa1c2, 0x8e1d, 0xa1d0, 0xa1d1, 0x8e20, 0xa200, 0xa201, 0x8e21, 0xa210, 0xa211, 0xa212, 0x8e22, 0xa220, 0xa221, 0xa222, 0x8e23, 0xa230, 0xa231, 0x8e24, 0xa240, 0xa241, 0x8e25, 0xa250, 0xa251, 0x8e26, 0xa260, 0xa261, 0xa262, 0x8e27, 0xa270, 0xa271, 0xa272, 0x8e28, 0xa280, 0xa281, 0x8e29, 0xa290, 0xa291, 0x8e2a, 0xa2a0, 0xa2a1, 0xa2a2, 0x8e2b, 0xa2b0, 0xa2b1, 0x8e2c, 0xa2c0, 0xa2c1, 0xa2c2, 0x8e2d, 0xa2d0, 0xa2d1, 0x8e30, 0xa300, 0xa301, 0x8e31, 0xa310, 0xa311, 0xa312, 0x8e32, 0xa320, 0xa321, 0xa322, 0x8e33, 0xa330, 0xa331, 0x8e34, 0xa340, 0xa341, 0x8e35, 0xa350, 0xa351, 0x8e36, 0xa360, 0xa361, 0xa362, 0x8e37, 0xa370, 0xa371, 0xa372, 0x8e38, 0xa380, 0xa381, 0x8e39, 0xa390, 0xa391, 0x8e3a, 0xa3a0, 0xa3a1, 0xa3a2, 0x8e3b, 0xa3b0, 0xa3b1, 0x8e3c, 0xa3c0, 0xa3c1, 0xa3c2, 0x8e3d, 0xa3d0, 0xa3d1, 0x8e40, 0xa400, 0xa401, 0x8e41, 0xa410, 0xa411, 0xa412, 0x8e42, 0xa420, 0xa421, 0xa422, 0x8e43, 0xa430, 0xa431, 0x8e44, 0xa440, 0xa441, 0x8e45, 0xa450, 0xa451, 0x8e46, 0xa460, 0xa461, 0xa462, 0x8e47, 0xa470, 0xa471, 0xa472, 0x8e48, 0xa480, 0xa481, 0x8e49, 0xa490, 0xa491, 0x8e4a, 0xa4a0, 0xa4a1, 0xa4a2, 0x8e4b, 0xa4b0, 0xa4b1, 0x8e4c, 0xa4c0, 0xa4c1, 0xa4c2, 0x8e4d, 0xa4d0, 0xa4d1, 0x8e50, 0xa500, 0xa501, 0x8e51, 0xa510, 0xa511, 0xa512, 0x8e52, 0xa520, 0xa521, 0xa522, 0x8e53, 0xa530, 0xa531, 0x8e54, 0xa540, 0xa541, 0x8e55, 0xa550, 0xa551, 0x8e56, 0xa560, 0xa561, 0xa562, 0x8e57, 0xa570, 0xa571, 0xa572, 0x8e58, 0xa580, 0xa581, 0x8e59, 0xa590, 0xa591, 0x8e5a, 0xa5a0, 0xa5a1, 0xa5a2, 0x8e5b, 0xa5b0, 0xa5b1, 0x8e5c, 0xa5c0, 0xa5c1, 0xa5c2, 0x8e5d, 0xa5d0, 0xa5d1)); #MDC I + +push(@mdc_boards,( 0x8e60, 0xa600, 0xa601, 0x8e61, 0xa610, 0xa611, 0x8e62, 0xa620, 0xa621, 0x8e63, 0xa630, 0xa631, 0x8e64, 0xa640, 0xa641, 0x8e65, 0xa650, 0xa651, 0x8e66, 0xa660, 0xa661, 0x8e67, 0xa670, 0xa671, 0x8e68, 0xa680, 0xa681, 0x8e69, 0xa690, 0xa691, 0x8e6a, 0xa6a0, 0xa6a1, 0x8e6b, 0xa6b0, 0xa6b1, 0x8e6c, 0xa6c0, 0xa6c1, 0x8e6d, 0xa6d0, 0xa6d1, 0x8e6e, 0xa6e0, 0xa6e1, 0xa6e2, 0x8e6f, 0xa6f0, 0xa6f1, 0xa6f2, 0x8e70, 0xa700, 0xa701, 0x8e71, 0xa710, 0xa711, 0x8e72, 0xa720, 0xa721, 0x8e73, 0xa730, 0xa731, 0x8e74, 0xa740, 0xa741, 0x8e75, 0xa750, 0xa751, 0x8e76, 0xa760, 0xa761, 0x8e77, 0xa770, 0xa771, 0x8e78, 0xa780, 0xa781, 0x8e79, 0xa790, 0xa791, 0x8e7a, 0xa7a0, 0xa7a1, 0x8e7b, 0xa7b0, 0xa7b1, 0x8e7c, 0xa7c0, 0xa7c1, 0x8e7d, 0xa7d0, 0xa7d1, 0x8e7e, 0xa7e0, 0xa7e1, 0xa7e2, 0x8e7f, 0xa7f0, 0xa7f1, 0xa7f2, 0x8e80, 0xa800, 0xa801, 0x8e81, 0xa810, 0xa811, 0x8e82, 0xa820, 0xa821, 0x8e83, 0xa830, 0xa831, 0x8e84, 0xa840, 0xa841, 0x8e85, 0xa850, 0xa851, 0x8e86, 0xa860, 0xa861, 0x8e87, 0xa870, 0xa871, 0x8e88, 0xa880, 0xa881, 0x8e89, 0xa890, 0xa891, 0x8e8a, 0xa8a0, 0xa8a1, 0x8e8b, 0xa8b0, 0xa8b1, 0x8e8c, 0xa8c0, 0xa8c1, 0x8e8d, 0xa8d0, 0xa8d1, 0x8e8e, 0xa8e0, 0xa8e1, 0xa8e2, 0x8e8f, 0xa8f0, 0xa8f1, 0xa8f2, 0x8e90, 0xa900, 0xa901, 0x8e91, 0xa910, 0xa911, 0x8e92, 0xa920, 0xa921, 0x8e93, 0xa930, 0xa931, 0x8e94, 0xa940, 0xa941, 0x8e95, 0xa950, 0xa951, 0x8e96, 0xa960, 0xa961, 0x8e97, 0xa970, 0xa971, 0x8e98, 0xa980, 0xa981, 0x8e99, 0xa990, 0xa991, 0x8e9a, 0xa9a0, 0xa9a1, 0x8e9b, 0xa9b0, 0xa9b1, 0x8e9c, 0xa9c0, 0xa9c1, 0x8e9d, 0xa9d0, 0xa9d1, 0x8e9e, 0xa9e0, 0xa9e1, 0xa9e2, 0x8e9f, 0xa9f0, 0xa9f1, 0xa9f2, 0x8ea0, 0xaa00, 0xaa01, 0x8ea1, 0xaa10, 0xaa11, 0x8ea2, 0xaa20, 0xaa21, 0x8ea3, 0xaa30, 0xaa31, 0x8ea4, 0xaa40, 0xaa41, 0x8ea5, 0xaa50, 0xaa51, 0x8ea6, 0xaa60, 0xaa61, 0x8ea7, 0xaa70, 0xaa71, 0x8ea8, 0xaa80, 0xaa81, 0x8ea9, 0xaa90, 0xaa91, 0x8eaa, 0xaaa0, 0xaaa1, 0x8eab, 0xaab0, 0xaab1, 0x8eac, 0xaac0, 0xaac1, 0x8ead, 0xaad0, 0xaad1, 0x8eae, 0xaae0, 0xaae1, 0xaae2, 0x8eaf, 0xaaf0, 0xaaf1, 0xaaf2, 0x8eb0, 0xab00, 0xab01, 0x8eb1, 0xab10, 0xab11, 0x8eb2, 0xab20, 0xab21, 0x8eb3, 0xab30, 0xab31, 0x8eb4, 0xab40, 0xab41, 0x8eb5, 0xab50, 0xab51, 0x8eb6, 0xab60, 0xab61, 0x8eb7, 0xab70, 0xab71, 0x8eb8, 0xab80, 0xab81, 0x8eb9, 0xab90, 0xab91, 0x8eba, 0xaba0, 0xaba1, 0x8ebb, 0xabb0, 0xabb1, 0x8ebc, 0xabc0, 0xabc1, 0x8ebd, 0xabd0, 0xabd1, 0x8ebe, 0xabe0, 0xabe1, 0xabe2, 0x8ebf, 0xabf0, 0xabf1, 0xabf2)); #MDC II + +#old planes 3/4 +# foreach my $p (2..3) { +# foreach my $s (0..5) { +# foreach my $m (0..15) { +# next if($p==0 && $m >=14); +# my $address = 0x2000 + $p*0x100 + $s*0x10 + $m; +# push (@mdc_boards, $address); +# } +# } +# } - foreach my $mdc_sec (@QA::mdc_chambers_removed) { - foreach my $m (0..15) { - next if($mdc_sec<0x10 && $m >=14); - my $address = 0x2000 + $mdc_sec*0x10 + $m; - push (@QA::mdc_boards_removed, $address); - } - } + + +# foreach my $mdc_sec (@QA::mdc_chambers_removed) { +# foreach my $m (0..15) { +# next if($mdc_sec<0x10 && $m >=14); +# my $address = 0x2000 + $mdc_sec*0x10 + $m; +# push (@QA::mdc_boards_removed, $address); +# } +# } my @rich_boards =(0x8017,0x8018, 0x83c0,0x83c1,0x83c2,0x83c3,0x83c4,0x83c5,0x83c6,0x83c7,0x83c8,0x83c9,0x83ca,0x83cb, @@ -232,8 +241,8 @@ while(1) { # 0x8900,0x3800,0x3801, # 0x8910,0x3810,0x3811, #Start TRB3sc - 0x8880, - 0x5000,0x5001,0x5002,0x5003,0x5004, #0x5005,0x5006,0x5007, +# 0x8880, +# 0x5000,0x5001,0x5002,0x5003,0x5004, #0x5005,0x5006,0x5007, #Hodo TRB3 # 0x8890,0x5010,0x5011, #0x5012, #Trigger @@ -304,6 +313,8 @@ while(1) { QA::WriteQALog($flog,"endp","mdc",$waittime,$qastate,$title,$value,$longtext); if($qastate > 60) { $longtext =~ s/\//g; + $longtext =~ s/\(/\\\\\(/g; + $longtext =~ s/\)/\\\\\)/g; system("logger -p local1.info -t DAQ Endp \\ $longtext") unless (($timecnt->{mdc}++)%$loggerperiod); } else {$timecnt->{mdc} = 0;} @@ -385,8 +396,10 @@ while(1) { $qastate = QA::GetQAState('below',$num_rich_missing,@QA::RichEndpMissingLimits); -# $qastate = QA::NOTE if $num_rich_missing > 900; - if($qastate > 60) { + $qastate = QA::NOTE if $QA::RichOff; #$num_rich_missing > 900; + if($qastate > 60) { + $rich_longtext =~ s/\(/\\\(/g; + $rich_longtext =~ s/\)/\\\)/g; system("logger -p local1.info -t DAQ Endp \\ $rich_longtext") unless (($timecnt->{rich}++)%$loggerperiod); } else {$timecnt->{rich} = 0;} @@ -430,6 +443,8 @@ while(1) { QA::WriteQALog($flog,"endp","tof",$waittime,$qastate, $tof_title,$tof_value,$tof_longtext); if($qastate > 60) { + $tof_longtext =~ s/\(/\\\(/g; + $tof_longtext =~ s/\)/\\\)/g; system("logger -p local1.info -t DAQ Endp \\ $tof_longtext") unless (($timecnt->{tof}++)%$loggerperiod); } else {$timecnt->{tof} = 0;} @@ -463,6 +478,8 @@ while(1) { QA::WriteQALog($flog,"endp","rpc",$waittime,$qastate, $rpc_title,$rpc_value,$rpc_longtext); if($qastate > 60) { + $rpc_longtext =~ s/\(/\\\(/g; + $rpc_longtext =~ s/\)/\\\)/g; system("logger -p local1.info -t DAQ Endp \\ $rpc_longtext") unless (($timecnt->{rpc}++)%$loggerperiod); } @@ -495,6 +512,8 @@ while(1) { QA::WriteQALog($flog,"endp","other",$waittime,$qastate, $other_title,$other_value,$other_longtext); if($qastate > 60) { + $other_longtext =~ s/\(/\\\(/g; + $other_longtext =~ s/\)/\\\)/g; system("logger -p local1.info -t DAQ Endp \\ $other_longtext") unless (($timecnt->{oth}++)%$loggerperiod); } else {$timecnt->{oth} = 0;} diff --git a/hmon/hmon_mdcnew_missing.pl b/hmon/hmon_mdcnew_missing.pl index 557a3ed..2d2f4ad 100755 --- a/hmon/hmon_mdcnew_missing.pl +++ b/hmon/hmon_mdcnew_missing.pl @@ -13,7 +13,7 @@ use HADES::TrbNet; use lib '.'; use MDC; -$ENV{DAQOPSERVER} = 'localhost:40'; +#$ENV{DAQOPSERVER} = 'localhost:40'; trb_init_ports() or die trb_strerror(); diff --git a/hmon/hmon_mdcnew_rate.pl b/hmon/hmon_mdcnew_rate.pl new file mode 100755 index 0000000..9ef1ecc --- /dev/null +++ b/hmon/hmon_mdcnew_rate.pl @@ -0,0 +1,158 @@ +#!/usr/bin/perl + +use warnings; +use strict; +use Data::Dumper; +use Data::TreeDumper; +use Hmon; +use QA; +use HADES::TrbNet; +use HPlot; +use Time::HiRes qw(usleep time); +use List::Util qw[min max sum]; +use MDC; + +use Encode qw(encode from_to); +use JSON::XS; + +my $fqa = QA::OpenQAFile(); + + +HPlot::PlotInit({ + name => "MdcRate", + file => "files/MdcRate", + title => "MDC Rate", + entries => 96, + curves => 240, + type => HPlot::TYPE_HEATMAP, + output => HPlot::OUT_PNG, + zlabel => "Hitrate", + sizex => 510, + sizey => 810, + nokey => 1, + buffer => 1, + ymin => 239.5, + ymax => -0.5, + xmin => -0.5, + xmax => 95.5, + cbmax => "1000<*<1E6", + cbmin => 0, + noinit => 1, + additional => "set logscale cb;set format cb \"_{10}{\%L}\";set xtics ('0' -0.5, '16' 15.5, '32' 31.5, '48' 47.5, '64' 63.5, '80' 79.5); set ytics ('I0' 8,'I2' 48,'I4' 88,'II0' 128,'II2' 168,'II4' 208); set grid xtics front; set ytics scale 0;", + showvalues => 0, + }); + + +HPlot::PlotInit({ + name => "MdcSpikeRate", + file => "files/MdcSpikeRate", + title => "MDC Spike Rate", + entries => 96, + curves => 240, + type => HPlot::TYPE_HEATMAP, + output => HPlot::OUT_PNG, + zlabel => "Hitrate", + sizex => 510, + sizey => 810, + nokey => 1, + buffer => 1, + ymin => 239.5, + ymax => -0.5, + xmin => -0.5, + xmax => 95.5, + cbmax => "1000<*<1E6", + cbmin => 0, + noinit => 1, + additional => "set logscale cb;set format cb \"_{10}{\%L}\";set xtics ('0' -0.5, '16' 15.5, '32' 31.5, '48' 47.5, '64' 63.5, '80' 79.5); set ytics ('I0' 8,'I2' 48,'I4' 88,'II0' 128,'II2' 168,'II4' 208); set grid xtics front; set ytics scale 0;", + showvalues => 0, + }); + +my $str = Hmon::MakeTitle(13, 17, "MDC All Hit Rate / MDC Spike Rate",0); +$str .= qq@\n@; +$str .= qq@\n@; + +$str .= Hmon::MakeFooter(); +Hmon::WriteFile("MDCnewRate",$str); + + +my $old; +my $oold; +my $oldtime = time(); +my $ooldtime = time(); +my $time = time(); +my $otime = time(); +my $diff; +my $iter = 0; + + + +trb_init_ports() or die trb_strerror(); + +my $qastate = QA::OK; +my $text = "OK"; +my $shorttext = "OK"; + +while(1) { + HPlot::PlotClear('MdcRate'); + HPlot::PlotClear('MdcSpikeRate'); + + my $tdiff = (time() - $oldtime)||1; + my $o = trb_register_read_mem(0xfe91,0xc120,0,32) or die trb_strerror() or sleep 5 and next; + my $otdiff = (time() - $ooldtime)||1; + my $oo = trb_register_read_mem(0xfe91,0xdfc0,0,32) or die trb_strerror() or sleep 5 and next; + + if (defined $old) { + foreach my $b (keys %$o) { + #my $ratesum = 0; + my($pl,$se,$bo,$en) = MDC::get_position($b); + + + my $xpos = $en*32; + my $ypos = $pl*120+$se*20+$bo; + + for my $v (0..31) { + my $vdiff = ($o->{$b}->[$v]&0xffffff) - ($old->{$b}->[$v]&0xffffff); + + if ($vdiff < 0) { $vdiff += 2**24;} + $diff->{$b}->[$v] = $vdiff/$tdiff; + HPlot::PlotFill('MdcSpikeRate',$diff->{$b}->[$v],$xpos+$v,$ypos); + } + for my $v (0..31) { + my $vdiff = ($oo->{$b}->[$v]&0xffffff) - ($oold->{$b}->[$v]&0xffffff); + + if ($vdiff < 0) { $vdiff += 2**24;} + $diff->{$b}->[$v+32] = $vdiff/$otdiff; + HPlot::PlotFill('MdcRate',$diff->{$b}->[$v+32],$xpos+$v,$ypos); + } + + } + HPlot::PlotDrawFork('MdcRate'); + HPlot::PlotDrawFork('MdcSpikeRate'); + + + + } + +# if(sum(@lowrate) > $lowratecount * 6) { +# +# $qastate = QA::OK; +# $text = "OK"; +# $shorttext = ""; +# +# for my $i (0..5) { +# if ($highrate[$i] > $highratecount) { +# $qastate = QA::ERROR; +# $shorttext = "Problem"; +# $text = "Sector $i has $highrate[$i] high rates."; +# } +# } +# +# # QA::WriteQALog($fqa,"feeerr","rpc", 60, $qastate, "RPC Thresh", $shorttext, $text); +# } + + $old = $o; + $oold = $oo; + $oldtime = time(); + $ooldtime = time(); + sleep 1; + } diff --git a/hmon/hmon_mdcnew_temp.pl b/hmon/hmon_mdcnew_temp.pl index ff35c5a..5ecf6d9 100755 --- a/hmon/hmon_mdcnew_temp.pl +++ b/hmon/hmon_mdcnew_temp.pl @@ -9,6 +9,7 @@ use POSIX qw/floor ceil/; use List::Util 'max'; use Perl2Epics; use QA; +use MDC; use Hmon; my $flog = Hmon::OpenLogfile(); @@ -16,7 +17,7 @@ my $fqa = QA::OpenQAFile(); use HADES::TrbNet; -$ENV{DAQOPSERVER} = 'localhost:40'; +#$ENV{DAQOPSERVER} = 'localhost:40'; my @str; @@ -45,11 +46,12 @@ while (1) { foreach my $board ( keys %$rh_mdc_temp) { - my $id_0 = ($board >> 7)&2 + (($board >> 4)&0xf) / 6; - my $id_1 = ($board >> 4&0xf) % 6; - my $id_2 = ($board >> 0) & 0x0f; - $store->{$id_0}->{$id_1}->{$id_2} = - ($rh_mdc_temp->{$board} & 0xffff) / 256; +# my $id_0 = ($board >> 7)&2 + (($board >> 4)&0xf) / 6; +# my $id_1 = ($board >> 4&0xf) % 6; +# my $id_2 = ($board >> 0) & 0x0f; + my ($pl,$se,$bo,$en) = MDC::get_position($board); + + $store->{$pl}->{$se}->{$bo} = ($rh_mdc_temp->{$board} & 0xffff) / 256; # printf "temp: %x %x %x\n", $id_0, $id_1, $id_2; # printf "temp: %x\n", $store->{$id_0}->{$id_1}->{$id_2}; } diff --git a/hmon/hmon_mdcnew_temp_1wire.pl b/hmon/hmon_mdcnew_temp_1wire.pl new file mode 100755 index 0000000..59a5b73 --- /dev/null +++ b/hmon/hmon_mdcnew_temp_1wire.pl @@ -0,0 +1,95 @@ +#!/usr/bin/perl + +use warnings; +use strict; +use Data::Dumper; +use Data::TreeDumper; +use Hmon; +use QA; +use HPlot; +use lib '.'; +use MDC; +use Time::HiRes qw(usleep time); +use List::Util qw[min max]; + +use HADES::TrbNet; + +#$ENV{DAQOPSERVER} = 'localhost:40'; +trb_init_ports() or die trb_strerror(); + + +HPlot::PlotInit({ + name => "MDCNew1wire", + file => "files/MDCNew1wire", + title => "Temperatures", + entries => 5, + curves => 16, + type => HPlot::TYPE_HEATMAP, + output => HPlot::OUT_PNG, + zlabel => "Temperature", + sizex => 400, + sizey => 300, + nokey => 1, + buffer => 0, + ymin => 15.5, + ymax => -0.5, + xmin => -0.5, + xmax => 4.5, + #cbmax => "100<*<1E7", + #cbmin => 0, + noinit => 1, + additional => "set format y \"%02o\";set ytics (0,5,8,13,16,21,24,29);set xtics('IS' 0,'OS' 1, 'IL' 2,'OL' 3,'IC' 4);", + showvalues => 1, } + ); + + +my $str = Hmon::MakeTitle(6, 7, "MDC Temperatures",0); +$str .= qq@
\n@; +$str .= Hmon::MakeFooter(); +Hmon::WriteFile("MDCNew1wireTemps",$str); + +my $sensors; + + open FILE, "../../hades_mdc_settings/installation/temperature_sensors.db" or die $!."\ntemperature_sensors.db not found."; + while (my $a = ) { + if(my @values = $a =~ /^\s*(\d)\s+(\d)\s+([\w]+)\s+([\w]+)\s+([\w]+)\s+([\w]+)\s+([\w]+)/) { + $sensors->[$values[0]][$values[1]][0] = lc($values[2]); + $sensors->[$values[0]][$values[1]][1] = lc($values[3]); + $sensors->[$values[0]][$values[1]][2] = lc($values[4]); + $sensors->[$values[0]][$values[1]][3] = lc($values[5]); + $sensors->[$values[0]][$values[1]][4] = lc($values[6]); + } + } + + close FILE; +# print Dumper $sensors; + +while (1) { + HPlot::PlotClear('MDCNew1wire'); + my $cmd = "cd ../../hades_mdc_settings/scripts/;./read_1wire_sensors.pl"; + my @readings = qx($cmd); + my $store; + foreach my $a (@readings) { + if(my @values = $a =~ /^\w+\s+([\w]{16})\s+(\d\d\.\d\d)/) { + $store->{$values[0]} = $values[1]; + } + } + foreach my $p (0..1) { + foreach my $s (0..5) { + foreach my $t (0..4) { + if($store->{$sensors->[$p][$s][$t]}) { + my $v = $store->{$sensors->[$p][$s][$t]}; + HPlot::PlotFill('MDCNew1wire',$v,$t,$p*8+$s); + } + } + } + } + + HPlot::PlotDraw('MDCNew1wire'); + +# print Dumper $store; +# last; + sleep 10; + } + + diff --git a/hmon/hmon_mdcnew_temperatures.pl b/hmon/hmon_mdcnew_temperatures.pl index 6291213..b9d4994 100755 --- a/hmon/hmon_mdcnew_temperatures.pl +++ b/hmon/hmon_mdcnew_temperatures.pl @@ -14,7 +14,7 @@ use List::Util qw[min max]; use HADES::TrbNet; -$ENV{DAQOPSERVER} = 'localhost:40'; +#$ENV{DAQOPSERVER} = 'localhost:40'; trb_init_ports() or die trb_strerror(); diff --git a/hmon/hmon_mdcnew_voltage.pl b/hmon/hmon_mdcnew_voltage.pl index 14fd6b0..35dcb97 100755 --- a/hmon/hmon_mdcnew_voltage.pl +++ b/hmon/hmon_mdcnew_voltage.pl @@ -10,8 +10,9 @@ use POSIX qw/floor ceil/; use Hmon; use QA; use HADES::TrbNet; +use MDC; -$ENV{DAQOPSERVER} = 'localhost:40'; +# $ENV{DAQOPSERVER} = 'localhost:40'; my $store = {}; @@ -44,9 +45,11 @@ while (1) { my $reg_address = 0; foreach my $val (@{$rh_volt->{$board}}) { $store->{$reg_address}->{$board} = $val / 16 ; - my $plane = ($board >> 7)&2 + (($board >> 4)&0xf) / 6; - $store2->[$reg_address] {$plane} {($board >> 4&0xf) % 6} {($board >> 0) & 0x0f} = $store->{$reg_address}->{$board} / 1000.0 ; + my ($pl,$se,$bo,$en) = MDC::get_position($board); +# my $plane = ($board >> 7)&2 + (($board >> 4)&0xf) / 6; +# $store2->[$reg_address] {$plane} {($board >> 4&0xf) % 6} {($board >> 0) & 0x0f} = $store->{$reg_address}->{$board} / 1000.0 ; + $store2->[$reg_address] {$pl} {$se} {$bo} = $store->{$reg_address}->{$board} / 1000.0 ; $reg_address++; } } diff --git a/hmon/hmon_seu.pl b/hmon/hmon_seu.pl index 5b24f07..da9889c 100755 --- a/hmon/hmon_seu.pl +++ b/hmon/hmon_seu.pl @@ -31,6 +31,8 @@ trb_register_write(0xfe40,0xd500,1); trb_register_write(0xfe4C,0xd500,1); trb_register_write(0xfe47,0xd500,1); trb_register_write(0xfe52,0xd500,1); +trb_register_write(0xfe90,0xd500,1); +trb_register_write(0xfe91,0xd500,1); while(1) { my $totalboards = 0; diff --git a/hmon/hmon_trgerr.pl b/hmon/hmon_trgerr.pl index 2d6c260..800745c 100755 --- a/hmon/hmon_trgerr.pl +++ b/hmon/hmon_trgerr.pl @@ -7,6 +7,7 @@ use Hmon; use QA; use HADES::TrbNet; use List::Util qw(min max); +use MDC; my %laststore2; @@ -14,7 +15,6 @@ my $fqa = QA::OpenQAFile(); trb_init_ports() or die trb_strerror(); -my %store; my %store2; my $boards = {}; my $allboards = {}; @@ -24,6 +24,7 @@ my $seconds = 0; while (1) { my $rh_trigErr = trb_register_read(0xffff, 0x06) or sleep 5 and next; my $rh_trigErr2 = trb_register_read(0xffff, 0x07) or sleep 5 and next; + my %store; #print Dumper $rh_trigErr; @@ -37,12 +38,17 @@ while (1) { my $id_1 = ($board >> 8) & 0x0f; my $id_2 = ($board >> 4) & 0x0f; my $id_3 = ($board >> 0) & 0x0f; + my($pl,$se,$bo,$en) = MDC::get_position($board); + my $val = ((($rh_trigErr->{$board} >> 16) & 0xffff) + ($rh_trigErr->{$board} & 0xffff)); #printf "board: %x: id: $id id_0: $id_0 id_1: $id_1 id_2: $id_2 id_3: $id_3 val: $val\n",$board; if ($id_0 == 0x2) { $store{$id_1}->{$id_2}->{$id_3} = $val; } + if($id_0 == 0xa || $id_0 == 0xb) { + $store{$pl}->{$se}->{$bo} += $val; + } $boards->{$board} = $val; $store2{$id} += $val; } @@ -54,11 +60,15 @@ while (1) { my $id_1 = ($board >> 8) & 0x0f; my $id_2 = ($board >> 4) & 0x0f; my $id_3 = ($board >> 0) & 0x0f; + my($pl,$se,$bo,$en) = MDC::get_position($board); my $val = ((($rh_trigErr2->{$board} >> 16) & 0xffff) + ($rh_trigErr2->{$board} & 0xffff)); if ($id_0 == 0x2) { $store{$id_1}->{$id_2}->{$id_3} += $val; } + if($id_0 == 0xa || $id_0 == 0xb) { + $store{$pl}->{$se}->{$bo} += $val; + } # $boards->{$board} += $val if $val && defined $laststore2{$id}; $boards->{$board} += $val; $store2{$id} += $val; diff --git a/hmon/permanent/MDC.pm b/hmon/permanent/MDC.pm new file mode 120000 index 0000000..96300ea --- /dev/null +++ b/hmon/permanent/MDC.pm @@ -0,0 +1 @@ +../../../hades_mdc_settings/scripts/MDC.pm \ No newline at end of file diff --git a/hmon/permanent/hmon_mdc_powerboard_ping_loop.pl b/hmon/permanent/hmon_mdc_powerboard_ping_loop.pl new file mode 100755 index 0000000..cbaae18 --- /dev/null +++ b/hmon/permanent/hmon_mdc_powerboard_ping_loop.pl @@ -0,0 +1,3 @@ +#!/usr/bin/perl -w + +system("cd /home/hadaq/trbsoft/hades_mdc_settings/helperscripts/;./powerboard_ping_loop.pl"); diff --git a/hmon/permanent/hmon_mdcnew_powerstatus.pl b/hmon/permanent/hmon_mdcnew_powerstatus.pl new file mode 100755 index 0000000..bfb7d94 --- /dev/null +++ b/hmon/permanent/hmon_mdcnew_powerstatus.pl @@ -0,0 +1,176 @@ +#!/usr/bin/perl + +use warnings; +use strict; +use Data::Dumper; +use Data::TreeDumper; +use Hmon; +use QA; +use HPlot; +use lib '.'; +use lib '/home/hadaq/trbsoft/hades_mdc_settings/scripts'; +use MDC; +use MDCPower; +use Time::HiRes qw(usleep time); +use List::Util qw[min max]; + +use HADES::TrbNet; + +#$ENV{DAQOPSERVER} = 'localhost:40'; +trb_init_ports() or die trb_strerror(); + + + +HPlot::PlotInit({ + name => "MDCVoltSet", + file => "files/MDCVoltSet", + title => "Voltage Settings", + entries => 48, + curves => 30, + type => HPlot::TYPE_HEATMAP, + output => HPlot::OUT_PNG, + zlabel => "Hitrate", + sizex => 610, + sizey => 510, + nokey => 1, + buffer => 0, + ymin => 29.5, + ymax => -0.5, + xmin => -0.5, + xmax => 47.5, + #cbmax => "100<*<1E7", + #cbmin => 0, + noinit => 1, + additional => "set format y \"%02o\";set ytics (0,5,8,13,16,21,24,29);set xtics('0' 0,'2' 6, '4' 12,'6' 18,'8' 24,'A' 30, 'C' 36, 'E' 42);", + showvalues => 0, } + ); + +HPlot::PlotInit({ + name => "MDCPowerBoardCurrents", + file => "files/MDCPowerBoardCurrents", + title => "MDC Powerboard Currents", + entries => 4, + curves => 30, + type => HPlot::TYPE_HEATMAP, + output => HPlot::OUT_PNG, + zlabel => "Current", + sizex => 310, + sizey => 510, + nokey => 1, + buffer => 0, + ymin => 29.5, + ymax => -0.5, + xmin => -0.5, + xmax => 3.5, + #cbmax => "100<*<1E7", + #cbmin => 0, + noinit => 1, + additional => "set format y \"%02o\";set ytics (0,5,8,13,16,21,24,29);set xtics(0,1,2,3);", + showvalues => 3, } + ); + +HPlot::PlotInit({ + name => "MDCPowerBoardTemp", + file => "files/MDCPowerBoardTemp", + title => "MDC Powerboard Temperatures", + entries => 4, + curves => 30, + type => HPlot::TYPE_HEATMAP, + output => HPlot::OUT_PNG, + zlabel => "Temperature", + sizex => 310, + sizey => 510, + nokey => 1, + buffer => 0, + ymin => 29.5, + ymax => -0.5, + xmin => -0.5, + xmax => 3.5, + #cbmax => "100<*<1E7", + #cbmin => 0, + noinit => 1, + additional => "set format y \"%02o\";set ytics (0,5,8,13,16,21,24,29);set xtics(0,1,2,3);", + showvalues => 2, } + ); + +HPlot::PlotInit({ + name => "MDCPowerBoardVoltages", + file => "files/MDCPowerBoardVoltage", + title => "MDC Powerboard Voltages", + entries => 4, + curves => 30, + type => HPlot::TYPE_HEATMAP, + output => HPlot::OUT_PNG, + zlabel => "Input Voltage", + sizex => 310, + sizey => 510, + nokey => 1, + buffer => 0, + ymin => 29.5, + ymax => -0.5, + xmin => -0.5, + xmax => 3.5, + #cbmax => "100<*<1E7", + #cbmin => 0, + noinit => 1, + additional => "set format y \"%02o\";set ytics (0,5,8,13,16,21,24,29);set xtics(0,1,2,3);", + showvalues => 2, } + ); + +my $str = Hmon::MakeTitle(8, 11, "MDC Voltage Settings",0); +$str .= qq@
\n@; +$str .= Hmon::MakeFooter(); +Hmon::WriteFile("MDCNewVoltSet",$str); + +$str = Hmon::MakeTitle(12, 11, "MDC Powerboard Current / Voltage / Temperature",0); +$str .= qq@\n@; +$str .= qq@\n@; +$str .= qq@
\n@; +$str .= Hmon::MakeFooter(); +Hmon::WriteFile("MDCNewPowerBoards",$str); + +while (1) { + HPlot::PlotClear('MDCVoltSet'); + HPlot::PlotClear('MDCPowerBoardCurrents'); + HPlot::PlotClear('MDCPowerBoardVoltages'); + HPlot::PlotClear('MDCPowerBoardTemp'); + + my $data; + for my $p (0..1) { + for my $s (0..5) { + $data->{$p}{$s} = eval(`cd ~/trbsoft/hades_mdc_settings/scripts;./powerboard_status.pl -p $p -s $s -r`); + my $ypos = 8*$p+$s; + for my $b (0..15) { + my ($host,$board,$outp) = MDC::get_power_output(MDC::get_address($p,$s,$b,5)); + next if $board == -1; + next if $outp == -1; + my $xpos = $b*3; + my $val0 = $data->{$p}{$s}[$board]{adjust}[$outp][0]||"NaN"; + my $val1 = $data->{$p}{$s}[$board]{adjust}[$outp][1]||"NaN"; + HPlot::PlotFill('MDCVoltSet',$val0,$xpos,$ypos); + HPlot::PlotFill('MDCVoltSet',$val1,$xpos+1,$ypos); + } + HPlot::PlotFill('MDCPowerBoardCurrents',$data->{$p}{$s}[0]{curr}||"NaN",0,$ypos); + HPlot::PlotFill('MDCPowerBoardCurrents',$data->{$p}{$s}[1]{curr}||"NaN",1,$ypos); + HPlot::PlotFill('MDCPowerBoardCurrents',$data->{$p}{$s}[2]{curr}||"NaN",2,$ypos); + HPlot::PlotFill('MDCPowerBoardCurrents',$data->{$p}{$s}[3]{curr}||"NaN",3,$ypos); + + HPlot::PlotFill('MDCPowerBoardVoltages',$data->{$p}{$s}[0]{vin}||"NaN",0,$ypos); + HPlot::PlotFill('MDCPowerBoardVoltages',$data->{$p}{$s}[1]{vin}||"NaN",1,$ypos); + HPlot::PlotFill('MDCPowerBoardVoltages',$data->{$p}{$s}[2]{vin}||"NaN",2,$ypos); + HPlot::PlotFill('MDCPowerBoardVoltages',$data->{$p}{$s}[3]{vin}||"NaN",3,$ypos); + + HPlot::PlotFill('MDCPowerBoardTemp',$data->{$p}{$s}[0]{temp}||"NaN",0,$ypos); + HPlot::PlotFill('MDCPowerBoardTemp',$data->{$p}{$s}[1]{temp}||"NaN",1,$ypos); + HPlot::PlotFill('MDCPowerBoardTemp',$data->{$p}{$s}[2]{temp}||"NaN",2,$ypos); + HPlot::PlotFill('MDCPowerBoardTemp',$data->{$p}{$s}[3]{temp}||"NaN",3,$ypos); + } + } + + HPlot::PlotDraw('MDCVoltSet'); + HPlot::PlotDraw('MDCPowerBoardCurrents'); + HPlot::PlotDraw('MDCPowerBoardVoltages'); + HPlot::PlotDraw('MDCPowerBoardTemp'); + sleep 60; + } + diff --git a/hmon/permanent/powerdistributor_positions.db b/hmon/permanent/powerdistributor_positions.db new file mode 120000 index 0000000..2002928 --- /dev/null +++ b/hmon/permanent/powerdistributor_positions.db @@ -0,0 +1 @@ +../../../mdc_settings/installation/powerdistributor_positions.db \ No newline at end of file