<?php

// display network localization 
if ($onsite) placeBox(-135, 1190, "Inside KIT CN network", 250, 2, "#DDDDDD");
if (substr($ip, 0, 7) == "134.107") placeBox(-135, 1190, "MPP Munich network", 250, 2, "#FFFFFF");
if (substr($ip, 0, 7) == "128.176") placeBox(-135, 1190, "WWU Muenster network", 250, 2, "#FFFFFF");

// #####  global variable for PS and MS operation mode
$PSmode = $adeiValue[32][0];
$MSmode = $adeiValue[33][0];

$tol = 0.5;

$local = false;
if ((substr($ip, 0, 13) == "141.52.12.158") | (substr($ip, 0, 13) == "141.52.12.63"))
	{
      placeBox(-75, 1190,  "local dev computer", 250, 2, "#FFFFFF");
      $local = true;
      $MSmode = 5;
      $PSmode = 5;
    }
 

      // ########## PS PCS7 operation mode ##########

    $OpModeText = "PS mode: ";
    $color = "#FFFFFF";
    if ($PSmode == 0) { $OpModeText = $OpModeText." commissioning"; $color="#FFA0A0"; }
    else if ($PSmode == 1) $OpModeText = $OpModeText.$PSmode." pump down";
    else if ($PSmode == 2) $OpModeText = $OpModeText.$PSmode." venting";
    else if ($PSmode == 3) $OpModeText = $OpModeText.$PSmode." pumping";
    else if ($PSmode == 4) $OpModeText = $OpModeText.$PSmode." baking";
    else if ($PSmode == 5) { $OpModeText = $OpModeText.$PSmode." high voltage"; $color="#B0FFB0"; }
    placeBox(-115, 1190, $OpModeText, 250, 2, $color);


       // ########## PS PCS7 operation mode ##########

    $OpModeText = "MS mode: ";
    $color = "#FFFFFF";
    if ($MSmode == 0) { $OpModeText = $OpModeText." commissioning"; $color="#FFA0A0"; }
    else if ($MSmode == 1) $OpModeText = $OpModeText.$MSmode." pump down";
    else if ($MSmode == 2) $OpModeText = $OpModeText.$MSmode." venting";
    else if ($MSmode == 3) $OpModeText = $OpModeText.$MSmode." pumping";
    else if ($MSmode == 4) $OpModeText = $OpModeText.$MSmode." baking";
    else if ($MSmode == 5) { $OpModeText = $OpModeText.$MSmode." high voltage"; $color="#B0FFB0"; }
    placeBox(-95, 1190, $OpModeText, 250, 2, $color);


	// ########## VALVES ##########

	// V4
	$value = $adeiValue[36][1];
	$clearance = $adeiValue[36][0];
	$pic = "valve";
    $V4_open = false;
	if (($value == 1) && ($clearance == 1)) {$pic = $pic . "On"; $V4_open = true;}
	else if (($value == 0) && ($clearance == 0)) $pic = $pic . "Off";
	else if (($value == 0) && ($clearance == 1)) $pic = $pic . "FREE";
	else if (($value == 1) && ($clearance == 0)) $pic = $pic . "Error";
	placePicWithLink(303, 60, $pic . ".png", 30, "status CPS-PS gate vlave V4 &#10;purple: clearance to open, red: no clearance, grey: undefined", $adeiChannel[36][0].",".$adeiChannel[36][1]);
		
	// PS-MS flapper valve VMO 4110
    $value_open = $adeiValue[9][8];
    $value_closed = $adeiValue[9][9];
	$pic = "valve";
    if (($value_open == 1) && ($value_closed == 0)) $pic = $pic . "On";
	else if (($value_open == 0) && ($value_closed == 1)) $pic = $pic . "Off";
	placePicWithLink(303, 283, $pic . ".png", 30, "status PS-MS beam-line gate valve VMO-4110 &#10;green: open, red: closed, grey: undefined", $adeiChannel[9][8].",".$adeiChannel[9][9]);

    // FPD gate valve
	$value = $adeiValue[36][2];
	$clearance = $adeiValue[31][0];
	$pic = "valve";
	if (($value == 1) && ($clearance == 1)) $pic = $pic . "On";
	else if (($value == 0) && ($clearance == 0)) $pic = $pic . "Off";
	else if (($value == 0) && ($clearance == 1)) $pic = $pic . "FREE";
	else if (($value == 1) && ($clearance == 0)) $pic = $pic . "Error";
	placePicWithLink(303, 1466, $pic . ".png", 30, "status FPD beam-line gate valve&#10;green: open, red: closed, grey: undefined", $adeiChannel[36][2].",".$adeiChannel[31][0]);



	// ########## MAGNETS ##########

	// CPS
	$NlCPS = 20550 / 0.9133;
	$BfieldCPS = 1.26e-6 * $adeiValue[24][0] * $NlCPS;	// mu0 * I * N/l
	if ($BfieldCPS < 0.1) { $value = "OFF"; $color = "#FF0000"; }
	else { $value = sprintf('%.1F T', $BfieldCPS); $color = "#000000"; }
	placeTextWithLink(240, 2, $value, 60, 5, $color, "field of CPS behind separation wall derived from current", $adeiChannel[24][0]);
	placeText(265, 2, "CPS", 60, 2, "#000000");

		
	// PS1
	if ($adeiValue[3][3] == 0) { $value = "LEM"; $color = "#FF0000"; }
	else { $value = sprintf('%.1F T', $adeiValue[3][1] / 157.0 * 4.5); $color = "#000000"; }
	placeTextWithLink(240, 66, $value, 70, 5, $color, "stand-alone center field PS1 magnet", $adeiChannel[3][1]);
	placeText(265, 66, "PS1", 70, 2, "#000000");

	// PS2
	if ($adeiValue[3][2] == 0) { $value = "LEM"; $color = "#FF0000"; }
	else { $value = sprintf('%.1F T', $adeiValue[3][0] / 157.0 * 4.5); $color = "#000000"; }
	placeTextWithLink(240, 274, $value, 70, 5, $color, "stand-alone center field PS2 magnet", $adeiChannel[3][0]);
	placeText(265, 274, "PS2", 70, 2, "#000000");

	// Pinch
	placeTextWithLink(240, 1420, sprintf('%.1F', $adeiValue[6][16] / 86.98 * 6.0) . " T", 70, 5, "#000000", "stand-alone center field PCH magnet", $adeiChannel[6][16]);
	placeText(265, 1420, "PCH", 70, 2, "#000000");

	// Detector
	placeTextWithLink(240, 1495, sprintf('%.1F', $adeiValue[6][17] / 93.59 * 6.0) . " T", 70, 5, "#000000", "stand-alone center field DET magnet", $adeiChannel[6][17]);
	placeText(265, 1495, "DET", 70, 2, "#000000");



	// ########## PAE ##########

	placeTextWithLink(303, 1553, sprintf('%.1F', $adeiValue[6][2]) . " kV", 90, 5, "#000000", "PAE potential", $adeiChannel[6][2]);
	placeText(328, 1553, "PAE", 90, 2, "#000000");



	// ########## PUMP PORTS ##########

	placeText(416, 1623, "PP2", 50, 2, "#000000");
	placeText(466, 1623, "PP1", 50, 2, "#000000");
	placeText(516, 1623, "PP3", 50, 2, "#000000");



	// ########## BAFFLE ##########

	$max = array( 90, 94, 88 );

        $time_conversion_factor = 621355968000000000; // conversion for PCS7 .NET value;
        $timestamp = ($adeiValue[15][8] - $time_conversion_factor) / 10000000;
        echo '<h4 style="font-family: inherit; font-weight: plain; font-style: normal;">Baffle timestamp: ' . date("r", $timestamp ) . '</h4>';


        //placeText(560, 1395, "LN<sub>2</sub> Tank", 130, 5, "#000000");
        $link = $adeiChannel[15][6] . "," . $adeiChannel[15][7];
        //placePicWithLink(563,1367, "LN2tank.png", 45, "LN2 tank", $link);

        $value = $adeiValue[15][6]*0.77+0.83;
        $link = $adeiChannel[15][6];
        $text = sprintf('%.0F', $value) . " %";
        //placeTextWithLink(590, 1395, $text, 70, 4, "#000000", "LN2 tank level", $link);	
 
        $value = $adeiValue[15][7]-1.86;
        $link = $adeiChannel[15][7];
        $text = sprintf('%.1F', $value) . " bar";
        //placeTextWithLink(590, 1450, $text, 70, 4, "#000000", "LN2 tank pressure", $link);	

	for ($id = 0; $id < 3; $id++)
	{
		$value = $adeiValue[15][$id];
		$pic = "ice.png";
		$text = "---";

		if ($value < 800)
		{
			$text = sprintf('%.0F', $value) . " K";
			if ($value > $max[$id]) $pic = "iceOff.png";
			else
			{
				$value = $adeiValue[15][$id + 3];
				if ($value > 0.1 && $value <= 100.0) $pic = "iceOn.png";
				else $pic = "iceBlink.gif";
			}
		}

		$pos = $id;
		if ($id == 0) $pos = 1;
		else if ($id == 1) $pos = 0;

		$link = $adeiChannel[15][$id] . "," . $adeiChannel[15][$id + 3];
		placePicWithLink(410 + $pos * 50, 1375, $pic, 30, "status baffle PP" . ($id + 1) . "&#10;blue: cooled, red: warmed, blinking: warming, grey: undefined", $link);
		placeTextWithLink(437 + $pos * 50, 1355, $text, 70, 4, "#000000", "temperature baffle PP" . ($id + 1), $link);	
	}



	// ########## PRESSURES ##########

	// CC2320
        $value = $adeiValue[7][0];
	$pic = "cc";
	$text = "---";
	if ($value > 1E+2) { $pic = $pic; $text = "OFF"; }
	else if ($value > 2E-5) { $pic = $pic . "Off"; $text = "high"; }
	else if ($value <= 1E-4 && $value >= 1E-11) { $pic = $pic . "On"; $text = sprintf('%.1E', $value); }
	else if ($value < 1E-11) { $text = "LOW"; }
	placePicWithLink(410, 1435, $pic . ".png", 30, "status cold cathode gauge CC2320&#10;green: on, red: off, grey: undefined", $adeiChannel[7][0]);
    placeTextWithLink(439, 1415, $text, 70, 4, "#000000", "pressure [mbar] cold cathode gauge CC2320:&#010P = ".sprintf('%.3E mbar;', $value), $adeiChannel[7][0]);

        $time_conversion_factor = 621355968000000000; // conversion for PCS7 .NET value;
        $timestamp = ($adeiValue[7][8] - $time_conversion_factor) / 10000000;
        echo '<h4 style="font-family: inherit; font-weight: plain; font-style: normal;">Vacuum timestamp: ' . date("r", $timestamp ) . '</h4>';


	// CC2345
	$value = $adeiValue[7][7];
	$pic = "cc";
	$text = "---";
	if ($value > 1E-4) { $pic = $pic . "Off"; $text = "OFF"; }
	else if ($value <= 1E-4 && $value >= 1E-11) { $pic = $pic . "On"; $text = sprintf('%.1E', $value); }
	else if ($value < 1E-11) { $text = "LOW"; }
	placePicWithLink(427, 1482, $pic . ".png", 30, "status cold cathode gauge CC2345&#10;green: on, red: off, grey: undefined", $adeiChannel[7][7]);
	placeTextWithLink(406, 1462, $text, 70, 4, "#000000", "pressure [mbar] cold cathode gauge CC2345:&#010P = ".sprintf('%.3E mbar;', $value), $adeiChannel[7][7]);

	// Ex3110 
	$value = $adeiValue[8][0];
	$pic = "ex";
	$text = "---";
	if ($value > 2E-5) {$text = "OFF"; {if ($MSmode < 5) $pic = $pic . "Off"; else $pic = $pic;}}
	else if ($value <= 2E-5 && $value > 1E-12) { $pic = $pic . "On"; $text = sprintf('%.1E', $value); }
	placePicWithLink(510, 1435, $pic . ".png", 30, "status extractor ion gauge Ex3110&#10;green: on, red: off, grey: undefined", $adeiChannel[8][0]);
	placeTextWithLink(539, 1415, $text, 70, 4, "#000000", "pressure [mbar] extractor ion gauge Ex3110", $adeiChannel[8][0]);

	// Ex1110
	$value = $adeiValue[28][0];
    $link = $adeiChannel[28][0];
    $pic = "ex";
	$text = "---";
	if ($value > 2E-5) {$text = "OFF"; {if ($MSmode < 5) $pic = $pic . "Off"; else $pic = $pic;}}
	else if ($value <= 2E-5 && $value > 1E-12) { $pic = $pic . "On"; $text = sprintf('%.1E', $value);}
	placePicWithLink(460, 1435, $pic.".png", 30, "status extractor ion gauge Ex1110&#10;green: off, blinking: on, grey: undefined", $link);
	placeTextWithLink(489, 1415, $text, 70, 4, "#000000", "pressure [mbar] extractor ion gauge Ex1110", $link);

	// Ex0096
	$value = $adeiValue[9][2];
    $link = $adeiChannel[9][2];
	$pic = "ex";
	$text = "---";
    if ($value > 1E+2) {$text = "OFF"; {if ($MSmode < 5) $pic = $pic . "Off"; else $pic = $pic;}}
    else if ($value > 2E-5) { $pic = $pic . "Off"; $text = "OFF"; }
	else if ($value <= 2E-5 && $value > 1E-12) { $pic = $pic . "On"; $text = sprintf('%.1E', $value);}
    placePicWithLink(230, 1220, $pic.".png", 30, "status extractor ion gauge 0096&#10;green: off, blinking: on, grey: undefined", $link);
	placeTextWithLink(259, 1200, $text, 70, 4, "#000000", "pressure [mbar] extractor ion gauge 0096", $link);

	// CC FPD
	$value = $adeiValue[6][1];
	$pic = "cc";
	$text = "---";
	if ($value > 1E-4) { $pic = $pic . "Off"; $text = "OFF"; }
	if ($value < 1E-11) { $pic = $pic . "Off"; $text = "OFF"; }
	else if ($value <= 1E-4 && $value > 1E-12) { $pic = $pic . "On"; $text = sprintf('%.1E', $value); }
	placePicWithLink(188, 1475, $pic . ".png", 30, "status FPD cold cathode gauge&#10;green: on, red: off, grey: undefined", $adeiChannel[6][1]);
	placeTextWithLink(217, 1455, $text, 70, 4, "#000000", "pressure [mbar] FPD cold cathode gauge", $adeiChannel[6][1]);

	// Gauge Baffle
	$value = $adeiValue[4][0];
        $link = $adeiChannel[4][0];
        $color = "#000000";
        $pic = "gauge";
	$text = "---";
	if ($value > 1E-4) { $pic = $pic . "Off"; $text = "OFF"; }
        // standard cold blue "#0026FF"  ,  ice cold blue "#107BC7"
        if ($value < 2E-6 && $value > 1E-9) { $pic ="gaugeOn"; $color ="#107BC7"; $text = sprintf('%.1E', $value); }
	else if ($value >= 1E-6 && $value < 1e-1) { $pic = "gaugeOff"; $color = "FF0000"; $text = sprintf('%.1E', $value); }

	placePicWithLink(460, 1315, $pic . ".png", 30, "status baffle insulation vacuum gauge&#10;gray: off, green: on, red: too high&#10Should be < 5e-6 mbar for HV operation!!!", $link);
	placeTextWithLink(460+29, 1295, $text, 70, 4, $color, "pressure [mbar] baffle insulation vacuum gauge", $link);

	// PS CC1232
	$value = $adeiValue[27][0];
        $link = $adeiChannel[27][0];
	$pic = "cc";
	$text = "---";
	if ($value >= 9.9E-5) { $pic = $pic . "Off"; $text = "OFF"; }
	else if ($value < 1E-4 && $value > 1.2E-11) { $pic = $pic . "On"; $text = sprintf('%.1E', $value); }
        placePicWithLink(370, 240, $pic . ".png", 30, "status cold cathode gauge CC1232&#10;green: on, red: off, grey: undefined", $link);
	placeTextWithLink(399, 220, $text, 70, 4, "#000000", "pressure [mbar] cold cathode gauge CC1232", $link);

	// PS Ex1221 
	$value = $adeiValue[27][5];
        $link = $adeiChannel[27][5];
	$pic = "ex";
	$text = "---";
        if ($value >= 9.9E-5) {$text = "OFF"; {if ($PSmode < 5) $pic = $pic . "Off"; else $pic = $pic;}}
	else if ($value < 1E-4 && $value > 7E-13) { $pic = $pic . "On"; $text = sprintf('%.1E', $value); }
	placePicWithLink(188, 141, $pic . ".png", 30, "status extractor ion gauge Ex1221&#10;green: on, red: off, grey: undefined", $link);
	placeTextWithLink(217, 121, $text, 70, 4, "#000000", "pressure [mbar] extractor ion gauge Ex1221", $link);




	// ########## VACUUM PUMPS ##########

       // MS TMP Temperatures

        //T<sub>max</sub> 
	$value = max($adeiValue[25][0], $adeiValue[25][1], $adeiValue[25][2]);
        $link = $adeiChannel[25][0] . "," . $adeiChannel[25][1] . "," . $adeiChannel[25][2];
	$color = "#000000";
	if ($value < 10) $color = "#0026FF";
	else if ($value > 50) $color = "#FF0000";
	placeTextWithLink(435, 1625, sprintf('%.1F &#176;C', $value), 70, 3, $color, "TMP max temperature PP2", $link);

	$value = max($adeiValue[26][0], $adeiValue[26][1], $adeiValue[26][2]);
        $link = $adeiChannel[26][0] . "," . $adeiChannel[26][1] . "," . $adeiChannel[26][2];
	$color = "#000000";
	if ($value < 10) $color = "#0026FF";
	else if ($value > 50) $color = "#FF0000";
	placeTextWithLink(535, 1625, sprintf('%.1F &#176;C', $value), 70, 3, $color, "TMP max temperature PP3", $link);



	// TMPs (PP2 + PP3)

	for ($pp = 0; $pp < 2; $pp++)
	{
		for ($id = 0; $id < 3; $id++)
		{
			$value = $adeiValue[$pp + 7][$id + 1];
			$pic = "tmp";
			$text = "---";

			if ($value < 30)
			{
			  If ($MSmode < 5) $pic = $pic . "Off";
			}
			else if ($value >= 30 && $value < 520)
			{
				$text = sprintf('%.0F', $value);
				if ($value > 500)
				{
					$value = $adeiValue[$pp + 7][$id + 4];
                                        //$pic = $pic . "On";
                                        if ($value == 1) $pic = $pic . "On";
					else if ($value == 0) $pic = $pic . "Closed";
				}
				else if ($value > 220)
				{
					$value = $adeiValue[$pp + 7][$id + 4];
                                        //$pic = $pic . "On";
                                        if ($value == 1) $pic = $pic . "Standby";
					else if ($value == 0) $pic = $pic . "Standby";
				}
			}

            if (($id == 2) & ($pp == 0)) $pic = "tmp";
          
			placePicWithLink(410 + $pp * 100, 1528 + $id * 35, $pic . ".png", 30, "status turbo-molecular pump TMP" . ($pp + 2) . ($id + 4) . "20&#10;green: on, yellow: on but isolated, red: off, grey: undefined", $adeiChannel[$pp + 7][$id + 1]);
			placeTextWithLink(439 + $pp * 100, 1518 + $id * 35, $text, 50, 4, "#000000", "rotational speed [Hz] turbo-molecular pump TMP" . ($pp + 2) . ($id + 4) . "20", $adeiChannel[$pp + 7][$id + 1]);
		}
	}

       // PS TMPs

	for ($id = 0; $id < 2; $id++)
	{
        $value = $adeiValue[27][$id + 1];
        $link = $adeiChannel[27][$id + 1];
		$pic = "tmp";
		$text = "---";

		if ($value < 50)
		{
		  If ($PSmode < 5) $pic = $pic . "Off";
		}
		else if ($value >= 50 && $value < 700)
		{
			$text = sprintf('%.0F', $value);
			if ($value > 570)
			{
				$value = $adeiValue[27][$id + 3];
                                //$pic = $pic . "On";
                                if ($value == 1) $pic = $pic . "On";
				else if ($value == 0) $pic = $pic . "Standby";
			}
		}

		placePicWithLink(370, 157 + $id * 35, $pic . ".png", 30, "status turbo-molecular pump TMP" . (1122 + $id) . "&#10;green: on, yellow: on but isolated, red: off, grey: undefined", $link);
		placeTextWithLink(399, 148 + $id * 35, $text, 50, 4, "#000000", "rotational speed [Hz] turbo-molecular pump TMP" . (1122 + $id), $link);
	}


	// FPD CP

	$value = $adeiValue[6][3];
	$pic = "cp";
	$text = "---";

	if ($value > 20)
	{
		$pic = $pic . "Off";
	}
	else if ($value <= 20 && $value > 5)
	{
		$text = sprintf('%.0F K', $value);
		$value = $adeiValue[6][12];
		if ($value == 1) { $pic = $pic . "On"; }
		else if ($value == 0) { $pic = $pic . "Standby"; }
	}

	placePicWithLink(345, 1480, $pic . ".png", 30, "status FPD UHV cryo pump&#10;green: on, yellow: on but isolated, red: off, grey: undefined", $adeiChannel[6][3]);
	placeTextWithLink(375, 1460, $text, 70, 3, "#000000", "temperature FPD UHV cryo pump", $adeiChannel[6][3]);



	// ########## FPD SOURCES ##########

	$pic = "source";
	$text = "---";
	if ($adeiValue[6][9] == 1 && $adeiValue[6][10] == 1) { $pic = $pic . "On"; $text = "OUT"; }
	else if ($adeiValue[6][9] == 1 && $adeiValue[6][10] == 0) { $pic = $pic . "EIn"; $text = "IN"; }
	else if ($adeiValue[6][9] == 0 && $adeiValue[6][10] == 1) { $pic = $pic . "GIn"; $text = "IN"; }
	else if ($adeiValue[6][9] == 0 && $adeiValue[6][10] == 0) { $pic = $pic . "Off"; $text = "IN"; }
	$link = $adeiChannel[6][9] . "," . $adeiChannel[6][10];
	placePicWithLink(345, 1525, $pic . ".png", 30, "status FPD sources (electron and gamma source)&#10;green: retracted (out), red: inserted (in), grey: undefined", $link);
	placeTextWithLink(375, 1505, $text, 70, 3, "#000000", "status FPD sources (electron and gamma source)", $link);




	// ########## AIR COILS ##########


	// LFCS

	$tol = 0.3;
	$text = "Unkn";
	$color = "#FFD800";
        $lfcs_array_offset = 2;
     
        $lfcs_config = -1;  // store config for emcs later in loop
	for ($pp = 0; $pp < sizeof($aircoil_settings); $pp++)
	{
		for ($id = 0; $id < 22; $id++) // still old air coil number
		{
                        $tol = abs($tol);
			if ($id == 20) {$lfcs_array_offset = -19; }
			if ($id == 21) {$lfcs_array_offset = -21; }
			if (abs($adeiValue[0][$id + $lfcs_array_offset] - $aircoil_settings[$pp][$id + 1]) < $tol)
			{
			  if ($id == 19) { $text = $aircoil_settings[$pp][0]; $lfcs_config = $pp; $color = "#FF9300"; }
			  if ($id == 21) { $color = "#4CFF00"; }			}
			else break;
		}
		if ($lfcs_config > -1) break;
	}
	if ($text == "All Off") { $text = "OFF"; $color = "#FF0000"; }

        $mace_setting["LFCS"]=$text; 
        placeText(-15, 232, "LFCS", 85, 5, "#000000");
        placeBox(10, 230, $text, 85, 3, $color);

        // EMCS

	$tol = 0.2;
	$text = "???";
	$color = "#FFD800";
        $EMCShor = $aircoil_settings[$lfcs_config][21];
        $EMCSver = $aircoil_settings[$lfcs_config][22];

	if ($adeiValue[0][0] > $EMCSver - $tol && $adeiValue[0][0] < $EMCSver + $tol && $adeiValue[0][1] > $EMCShor - $tol && $adeiValue[0][1] < $EMCShor + $tol) { $text = "On OK"; $color = "#4CFF00"; }
	else if ($adeiValue[0][0] > $tol || $adeiValue[0][1] > $tol) { $text = "Unkn"; $color = "#FFD800"; }
        else { $text = "ERR ".$lfcs[$lfcs_config][16]; $color = "#FF0000"; }
	if ($adeiValue[0][0] < $tol && $adeiValue[0][1] < $tol && $adeiValue[0][0] > -$tol && $adeiValue[0][1] > -$tol) { $text = "OFF"; $color = "#FF0000"; }

        $mace_setting["EMCS"]=$text; 
 	placeText(50, 232, "EMCS", 85, 5, "#000000");
        placeBox(75, 230, $text, 85, 3, $color);


        // print current values 
	$tol = 0.5;
	for ($coil = 0; $coil < 22; $coil++)
	{
		$current = $adeiValue[0][$coil];
		$voltage = $adeiValue[1][$coil];

		$voltage = sprintf('%.1F', $voltage);
		
		$color = "#000000";
		if (abs($current) < $adeiValue[21][$coil] - $tol || abs($current) > $adeiValue[21][$coil] + $tol) $color = "#FF0000";
		if ($current < -$tol && $adeiValue[22][$coil] != 1) $color = "#FF0000";
		if ($current > $tol && $adeiValue[22][$coil] != 0) $color = "#FF0000";

		$current = sprintf('%.1F', $current);
		if ($current <= -100 || $current >= 100) $current = sprintf('%.0F', $current);
		if ($current >= -0.1 && $current <= 0.1) $current = sprintf('%.1F', 0.0); 
		
		$vpos = -26;
		$pos = 609 + ($coil - 4) * 42.9;
		if ($coil == 0) {$pos = 320; $vpos = 56;}      // pos for EMCS VER
		else if ($coil == 1) {$pos = 378; $vpos = 56;} // pos for EMCS HOR
		else if ($coil == 21) {$pos = $pos + 4;}       // for coil 21

		$lem = $adeiValue[2][$coil];
		$color = "#006400";
		if ($lem == 1) $current = "LEM";

		$label = ($coil - 1);
		if ($coil == 0) $label = "VER";
		else if ($coil == 1) $label = "HOR";

		// add value label
		//if ($coil == 2) {
		//  placeText($vpos+2, $pos-30, "I [A] =", 50, 2, "#888888");
		//  placeText($vpos+17, $pos-30, "U [V]  =", 47, 1, "#888888");
		//}
		
		// add air coil numbers here
		placeText($vpos+32, $pos, $label, 70, 2, "#000000");

		// print voltage value of air coil
		placeTextWithLink($vpos+18, $pos, $voltage, 70, 1, $color, "air-coil voltage [V]", $adeiChannel[1][$coil]);
		
		// print current value of air coil
		placeTextWithLink($vpos, $pos, $current, 70, 4, $color, "air-coil current [A]&#10;LEM: DCCT offline", $adeiChannel[0][$coil]);
	}




// ######### HV Divider Temp Monitoring
	
  if ($MSmode == 5)
      { // only display in MS operation mode High-Voltage

        $K35_temp = $adeiValue[10][26];
        $K35_link = $adeiChannel[10][26];
        $K65_temp = $adeiValue[10][27];
        $K65_link = $adeiChannel[10][27];
	$divider_temp_spec = 25.0;
	$tol_div = 0.2;

	$color = "#FFFFFF";
	if (abs($K35_temp - $divider_temp_spec) > $tol_div) $color = "#FF0000";
	if (abs($K35_temp) < 1) $color = "#ABABAB";
	placeBox(586, 322,sprintf('%.1F &#176;C', $K35_temp), 50, 2, $color);

	placePicWithLink(536,324, "K35_drawing.png", 50, "K35 temperature status", $K35_link);
	
	$color = "#FFFFFF";
	if (abs($K65_temp - $divider_temp_spec) > $tol_div) $color = "#FF0000";
	if (abs($K65_temp) < 1) $color = "#ABABAB";
	placeBox(586, 378,sprintf('%.1F &#176;C', $K65_temp), 50, 2, $color);

	placePicWithLink(536,379, "K65_drawing.png", 50, "K65 temperature status", $K65_link);
      }

// ########## HIGH VOLTAGE ##########

if (($MSmode == 5) or ($MSmode == 4))
  { // only display in MS operation mode High-Voltage or baking

    // #####  path to patch panel configuration file
    if (file_exists("patchpanel/data/activeIEconfig.txt"))
      {$path_to_patchpanel = "patchpanel/data/activeIEconfig.txt"; }// only for KAAS server
    else {$path_to_patchpanel = "patchpanel/ringstoadei.txt"; }   // for IKP dev server
   
   // load patch-panel configuration
    $handle = fopen($path_to_patchpanel, "r");
    
    $ringsToAdei = array();
    if ($handle)
      {
	while (($buffer = fgets($handle, 4096)) !== false)
	  {
	    $buffer = trim($buffer);
	    $ringsToAdei[count($ringsToAdei)] = $buffer;
	  }
	fclose($handle);
      }
    
    // labels
    
    $posY = 8; // offset between labels and voltages (13)
    $posX = 10; // down/bottom (7)


    if ($MSmode == 5)
 	{ // only display in MS operation mode High-Voltage

        $K35_value = $adeiValue[30][0];
        $K35_link = $adeiChannel[30][0];
        $K35_TS = $adeiValue[30][1];
        $K35_RunFlag = $adeiValue[30][2];
     	$K35_text = "not connected";

        $APR_value = $adeiValue[10][32];
        $APR_link = $adeiChannel[10][32];
	    $APR_text = "not connected";
      
        $K65_value = $adeiValue[30][3];
        $K65_link = $adeiChannel[30][3];
        $K65_TS = $adeiValue[30][4];
        $K65_RunFlag = $adeiValue[30][5];
            
	// Kal1 = JRL at PS vessel voltage
	// Kal1 = DVM at IE Common voltage for SuperKrypton 2021
        $Kal1_value = $adeiValue[30][6];
        $Kal1_link = $adeiChannel[30][6];
        $Kal1_TS = $adeiValue[30][7];
        $Kal1_RunFlag = $adeiValue[30][8];
	$Kal1_text = "DVM @ IE Common";
	
	$time_conversion_factor = 2082844800;
        $most_recent_TS = max($K35_TS,$K65_TS,$Kal1_TS);
	if (max($K35_RunFlag,$K65_RunFlag,$Kal1_RunFlag) > 0)
	  {
	    $timestamp = ($most_recent_TS - $time_conversion_factor);
	    echo '<h4 style="font-family: inherit; font-weight: plain; font-style: normal;">HV meas. timestamp: ' . date("r", $timestamp ) . '</h4>';
	  }
	  else echo '<font size="4" color="#000000">&nbsp;HV meas. OFFLINE </font><br>';

   	//############# HV Monitoring K35 #################
	
	// HV switch for K35
	$hv_switch1103_k35 = $adeiValue[35][2];
	$K35_text = "K35 readout";
	if ($hv_switch1103_k35 == 1) $K35_text = "K35 @ MoS Voltage";
	else if ($hv_switch1103_k35 == 0) $K35_text = "K35 @ MS Voltage + IE";
	
	// voltage monitoring readout K35
	$color = "#000000";
	$factor_m = 1972.462;
	$factor_m_rel_error = 1.0e-6;
	$offset = 4.97e-06;
	$offset_error = 3.4e-07;
	$gain = 0.999999323;
	$gain_error = 8.9e-08;
	$value = ($K35_value - $offset) * $gain * $factor_m;
	$voltage_error = abs($value * $factor_m_rel_error * 1e3); // in mV
	if ($voltage_error*100 < 1) { $voltage_error = 0.2; }
	
	// voltage display K35
	$link = $K35_link;
	$text = "K35 divider readout 436-REU-0-0201-0001, since KNM10 connected to main spectrometer precision voltage.";

	// coordinate offset on display
	$Xoffset = 660;
	$Yoffset = 320;
	
	//	if (($K35_RunFlag > 0) && $local) 
	if (($K35_RunFlag > 0) & ($value < 1))
	  {
	    placeTextWithLink($Yoffset+20, $Xoffset-54, "U<sub>0</sub> = ".sprintf('%.3F', $value ) . "(" . sprintf('%.0F', $voltage_error ) .") V" , 270, 5, $color, $text, $link);
	  }

	//display stability indicators
	{
	  if ((sizeof($REU0201) > 2) & ($value < 1000))
	    {
	      placeText($Yoffset+45, $Xoffset+11, $K35_text, 140, 2, $color); // K35 voltage reading
	      
	      if ($REU0201[0]['ppmdev'] <= 2e-6) $color1 = "lightgreen";
	      if ($REU0201[1]['ppmdev'] <= 2e-6) $color2 = "lightgreen";
	      if ($REU0201[2]['ppmdev'] <= 2e-6) $color3 = "lightgreen";
	      if ($REU0201[3]['ppmdev'] <= 2e-6) $color4 = "lightgreen";
	      
	      if ($REU0201[0]['ppmdev'] > 2e-6) $color1 = "orange";
	      if ($REU0201[1]['ppmdev'] > 2e-6) $color2 = "orange";
	      if ($REU0201[2]['ppmdev'] > 2e-6) $color3 = "orange";
	      if ($REU0201[3]['ppmdev'] > 2e-6) $color4 = "orange";
	      
	      if ($REU0201[0]['ppmdev'] > 5e-6) $color1 = "#FFA0A0";
	      if ($REU0201[1]['ppmdev'] > 5e-6) $color2 = "#FFA0A0";
	      if ($REU0201[2]['ppmdev'] > 5e-6) $color3 = "#FFA0A0";
	      if ($REU0201[3]['ppmdev'] > 5e-6) $color4 = "#FFA0A0";
	      
	      placeBox($Yoffset+60, $Xoffset+115, "10s", 35, 1, $color1);
	      placeBox($Yoffset+60, $Xoffset+80, "20s", 35, 1, $color2);
	      placeBox($Yoffset+60, $Xoffset+45, "1m", 35, 1, $color3);
	      placeBox($Yoffset+60, $Xoffset+10, "5m", 35, 1, $color4);
	      
	      echo '<h4 style="font-family: inherit; font-weight: plain; font-style: normal;">HV status timestamp 0201: ' . $extraction_time_HV . '</h4>';
	    }
	  else placeText($Yoffset+45, $Xoffset+11, $K35_text, 140, 2, $color); // K35 voltage reading
	}
	
	//############# HV Monitoring K65 #################

	// HV switch for K65
	$hv_switch1102_k65 = $adeiValue[35][1];
	$K65_text = "K65 readout";
	if ($hv_switch1102_k65 == 1) $K65_text = "K65 @ MoS Voltage";
	else if ($hv_switch1102_k65 == 0) $K65_text = "K65 @ MS Voltage + IE";
	
    // calibration from KDB: [ -2.43e-06, 0.999999697, -3636.269 ]  
    
	// voltage monitoring readout K65
	$color = "#000000";
  	$factor_m = 3636.261;
	$factor_m_rel_error = 1.0e-6; // including calibration, gain and offset error
	$offset = 8.72e-06;
	$offset_error = 1.9e-7;
	$gain = 0.999998588;
	$gain_error = 7.7e-8;
	$value = ($K65_value - $offset) * $gain * $factor_m;
	$voltage_error = abs($value * $factor_m_rel_error * 1e3); // in mV
	if ($voltage_error < 1) { $voltage_error = 1; }        
	
	// voltage display K65
	$link = $K65_link;
	$text = "K65 divider channel 436-REU-0-0301-0001, precision voltage value, KNM5 calibration, in 2022 connected to K35";

	$Xoffset = 930;
	$Yoffset = 320;
	
	if (($K65_RunFlag > 0) & ($value < 1))
	  {
	    if (($value < -19724.6) & ($value > -19724.7)) placeText(340, 796, "calibration in progress", 170, 2, "green"); // calibration ongoing
	    placeTextWithLink($Yoffset+20, $Xoffset-54, "U<sub>0</sub> = ".sprintf('%.3F', $value ) . "(" . sprintf('%.0F', $voltage_error ) .") V" , 270, 5, $color, $text, $link);
	  }
	
	//display stability indicators
	{
	  if ((sizeof($REU0301) > 2) & ($value < 1000))
	    {
	      placeText($Yoffset+45, $Xoffset+11, $K65_text, 140, 2, $color); // K65 voltage reading
	      
	      if ($REU0301[0]['ppmdev'] <= 2e-6) $color1 = "lightgreen";
	      if ($REU0301[1]['ppmdev'] <= 2e-6) $color2 = "lightgreen";
	      if ($REU0301[2]['ppmdev'] <= 2e-6) $color3 = "lightgreen";
	      if ($REU0301[3]['ppmdev'] <= 2e-6) $color4 = "lightgreen";
	      
	      if ($REU0301[0]['ppmdev'] > 2e-6) $color1 = "orange";
	      if ($REU0301[1]['ppmdev'] > 2e-6) $color2 = "orange";
	      if ($REU0301[2]['ppmdev'] > 2e-6) $color3 = "orange";
	      if ($REU0301[3]['ppmdev'] > 2e-6) $color4 = "orange";
	      
	      if ($REU0301[0]['ppmdev'] > 5e-6) $color1 = "#FFA0A0";
	      if ($REU0301[1]['ppmdev'] > 5e-6) $color2 = "#FFA0A0";
	      if ($REU0301[2]['ppmdev'] > 5e-6) $color3 = "#FFA0A0";
	      if ($REU0301[3]['ppmdev'] > 5e-6) $color4 = "#FFA0A0";
	      
	      placeBox($Yoffset+60, $Xoffset+115, "10s", 35, 1, $color1);
	      placeBox($Yoffset+60, $Xoffset+80, "20s", 35, 1, $color2);
	      placeBox($Yoffset+60, $Xoffset+45, "1m", 35, 1, $color3);
	      placeBox($Yoffset+60, $Xoffset+10, "5m", 35, 1, $color4);
	      
	      echo '<h4 style="font-family: inherit; font-weight: plain; font-style: normal;">HV status timestamp 0301: ' . $extraction_time_HV . '</h4>';
	    }
	  else placeText($Yoffset+45, $Xoffset+11, $K65_text, 140, 2, $color); // K65 voltage reading
	}
	      
	//############# HV Monitoring Kal_U1 #################
	
	// voltage monitoring readout Kal1 e.g. JRL at PS
	// in 2021 used for IE Common monitoring
	$color = "#000000";
	//$factor_m = 5000.1021;
	//$offset = 4.529e-6;
	//$gain = 0.999997525656185;
	$factor_m = 1.0;
	$offset = 0.0;
	$gain = 1.0;
	$value = ($Kal1_value - $offset) * $gain * $factor_m;
	//        $voltage_error = abs($value * 2e-3);
	$voltage_error = abs($value * 20 * 10e-6);
	//if ($voltage_error*100 < 1) { $voltage_error = 0.2; }
	if ($voltage_error*100 < 0.002) { $voltage_error = 0.002; }
	
	// voltage display
	$link = $Kal1_link;
	//	$text = "JRL divider at Kal1 monitoring input 436-REU-0-0501-0001, precision voltage value";
	$text = "DVM at IE Common, 436-REU-0-0401-001, precision voltage value";
	
	if ($Kal1_RunFlag > 0)
	{
	  placeText(304, 815, $Kal1_text, 130, 2, $color); // Kal1 voltage reading
	  if (abs($value) > 36000) placeText(490, 116, "calibration in progress", 170, 2, "green"); // calibration ongoing
	  placeTextWithLink(284, 765, "U<sub>IE</sub> = ".sprintf('%.3F', $value ) . "(" . sprintf('%.0F', $voltage_error*100 ) .") V" , 230, 4, $color, $text, $link);
	}
      
	// Post Regulation Current Monitor

	$U_ist = abs($adeiValue[10][0]);
	$APR_on = abs($adeiValue[10][29]);
	$PID_setpoint = abs($adeiValue[10][30]);
	$I_PR = abs($adeiValue[10][31]);
	$P_PR = $U_ist * $I_PR/1000;
	
	// low voltage U < 25 kV, high voltage up to 33 kV, not higher.
	// set limits to make sure not to exceed 28W limit or 0.95 mA for low voltages
	// at high voltages limit to 24W or 0,7 mA for stable operation
	
	$pic = "postreg";
	if ($I_PR >= 0.1)
	  {
	    if ($I_PR < 0.46) {$pic = $pic."Warn";}
	    else if (($I_PR >= 0.46) && ($I_PR <= 0.95) && ($P_PR < 28)) {$pic = $pic."On";}
	    else if (($I_PR > 0.95) | ($P_PR >= 28)) {$pic = $pic."Alarm";}
	  }
	else $pic = $pic."Off";
	
	$pos_y = 501;
	$pos_x = 455;
	
	$color = "#000000";
	placePic($pos_y,$pos_x, $pic.".png", 30, "Status of HV post regulation &#010green  = normal operation &#010gray    = off &#010red      = current or power too high &#010orange = current too low");

	if ($I_PR < 0.1)
	  {
	    placeText($pos_y+31,$pos_x-15, "OFF", 60, 2, $color, "HV post regulation offline.");
	  }
	else
	  {
	    placeTextWithLink($pos_y+31,$pos_x-15, sprintf('%.2F mA', $I_PR), 60, 2, $color,
			      "Current through post regulation triode shunt. 0.46-0.95 mA as long as power < 28 W for optimal performance.",
			      $adeiChannel[10][28]);
	    
	    placeTextWithLink($pos_y+45,$pos_x-14, sprintf('%2.0F W', $P_PR), 60, 2, $color,
			      "Power consumption of post regulation triode shunt. Must be < 28 W to prevent damage to triode.",
			      $adeiChannel[10][28]);

	    if ($APR_on)
	      {
		    if ($PID_setpoint < 9.0) { $APR_text = "APR ON"; $color = "#40AA40"; }
		    else { $APR_text = "APR HIGH"; $color = "#FF0000"; }

		    placeTextWithLink($pos_y+57,$pos_x-9, $APR_text, 50, 0, $color,
				  "Advanced Post Regulation (APR) status. &#010Correction at ".sprintf('%.2F &#037;', 10*$PID_setpoint).". &#010Keep below 90 % at all times.",
				  $adeiChannel[10][30]);
	      }
	  }    
  
      
 	//############# HV PID set point display #################
	
	$APR_text = "APR set point";
	
	// voltage monitoring readout K35 used for APR target value calculation
	$color = "#777777";
	$factor_m = 1972.462;
	$factor_m_rel_error = 1.0e-6;
	$offset = 0;//4.97e-06;  // ORCA does not use offset for defining APR
	$offset_error = 3.4e-07;
	$gain = 1;//0.999999323;  // ORCA does not use gain for defining APR
	$gain_error = 8.9e-08;
	$value = ($APR_value - $offset) * $gain * $factor_m;
	$voltage_error = abs($value * $factor_m_rel_error * 1e3); // in mV
	if ($voltage_error*100 < 1) { $voltage_error = 0.2; }
	
	// voltage display APR
	$link = $APR_link;
	$text = "APR target voltage 436-CFB-0-1500-0033, only valid if K35 is used for APR control.";
	
	// coordinate offset on display
	$Xoffset = 660;
	$Yoffset = 373;

	// only show in case K35 is active
	if (($K35_RunFlag > 0) & ($APR_on > 0))
	  {
	    placeTextWithLink($Yoffset+20, $Xoffset-54, "U<sub>set</sub> = ".sprintf('%.3F', $value ) ." V" , 270, 4, $color, $text, $link);
	  }
     
  }  // end of PCS7 mode switch

    
  
    
    //placeText(180, 845, "MS WEST IE", 70, 2,"#808080"); // west IE being displayed in loop below
    //placeText(450, 845, "MS EAST IE", 70, 2,"#808080"); // east IE
    placeText(265, 815, "MS IE COMMON", 130, 2, "#000000"); // mainspec IE Common
    
    // MS Tank from Precision HCP Supply or Standard HCN
    $text = "MS TANK";
    $ms_hcp_soll = $adeiValue[10][1];  //flipped 2021-02-16 for new HCP device
    $ms_hcn_soll = $adeiValue[10][25];

    if ($ms_hcn_soll > 1) {
      // next two lines are only for the HNC 40 kV power supply operation
      $adeiValue[10][0] = $adeiValue[10][24];
      $adeiValue[10][1] = $adeiValue[10][25];
    }
    
    $HCP = true;
    if  ($ms_hcn_soll == 0) {
      if ($ms_hcp_soll == 0) { $text = $text . " OFF";}
      else { $text = $text . " HCP"; $HCP = true; }
    } else { $text = $text . " HCN"; $HCP = false; }
    placeText(70, 830, $text, 100, 2, "#000000"); // mainspec tank
    // switch values here between HCN and HCP in Value and Channel Array !!!
    //if ($HCP) { $adeiValue[10][0] = -$adeiValue[10][24]; $adeiValue[10][1] = $adeiValue[10][25]; $adeiChannel[10][0] = $adeiChannel[10][24]; $adeiChannel[10][1] = $adeiChannel[10][25]; }

    if ($HCP) { $adeiValue[10][0] = -$adeiValue[10][0];}
      
    placeText(110-$posY, 845, "W7-11", 70, 2, "#000000"); // w7-11
    placeText(503+$posY+$posX, 845, "E7-11", 70, 2, "#000000"); // e7-11
    
    placeText(126-$posY, 600, "W6", 70, 2, "#000000"); // w6
    placeText(487+$posY+$posX, 600, "E6", 70, 2, "#000000"); // e6
    placeText(126-$posY, 1090, "W12", 70, 2, "#000000"); // w12
    placeText(487+$posY+$posX, 1090, "E12", 70, 2, "#000000"); // e12
    
    placeText(161-$posY, 516, "W5", 70, 2, "#000000"); // w5
    placeText(452+$posY+$posX, 516, "E5", 70, 2, "#000000"); // e5
    placeText(161-$posY, 1174, "W13", 70, 2, "#000000"); // w13
    placeText(452+$posY+$posX, 1174, "E13", 70, 2, "#000000"); // e13
    
    placeText(194-$posY, 434, "W4", 70, 2, "#000000"); // w4
    placeText(419+$posY+$posX, 434, "E4", 70, 2, "#000000"); // e4
    placeText(194-$posY, 1256, "W14", 70, 2, "#000000"); // w14
    placeText(419+$posY+$posX, 1256, "E14", 70, 2, "#000000"); // e14
    
    placeText(225-$posY, 385, "W3", 70, 2, "#000000"); // w3
    placeText(388+$posY+$posX, 385, "E3", 70, 2, "#000000"); // e3
    placeText(225-$posY, 1305, "W15", 70, 2, "#000000"); // w15
    placeText(388+$posY+$posX, 1305, "E15", 70, 2, "#000000"); // e15
    
    placeText(273-$posY, 352, "W2", 70, 2, "#000000"); // w2
    placeText(340+$posY+$posX, 352, "E2", 70, 2, "#000000"); // e2
    placeText(273-$posY, 1338, "W16", 70, 2, "#000000"); // w16
    placeText(340+$posY+$posX, 1338, "E16", 70, 2, "#000000"); // e16
    
    if ($adeiValue[10][8] > 10.0) placeText(309, 359, "APE", 70, 2, "#000000"); // ape south
    if ($adeiValue[10][10] > 10.0) placeText(309, 1331, "APE", 70, 2, "#000000"); // ape north
    
    // offset voltages
    
    $posY = 16; // offset between outer and inner voltages
    $ringsPosY = array( 275, 275+$posY, 227, 227+$posY, 196, 196+$posY, 163, 163+$posY, 128, 128+$posY, 112, 112+$posY, 128, 128+$posY, 163, 163+$posY, 196, 196+$posY, 227, 227+$posY, 275, 275+$posY, 342, 342-$posY, 390, 390-$posY, 421, 421-$posY, 454, 454-$posY, 489, 489-$posY, 505, 505-$posY, 489, 489-$posY, 454, 454-$posY, 421, 421-$posY, 390, 390-$posY, 342, 342-$posY );
    $ringsPosX = array( 352, 352, 385, 385, 434, 434, 516, 516, 600, 600, 845, 845, 1090, 1090, 1174, 1174, 1256, 1256, 1305, 1305, 1338, 1338, 352, 352, 385, 385, 434, 434, 516, 516, 600, 600, 845, 845, 1090, 1090, 1174, 1174, 1256, 1256, 1305, 1305, 1338, 1338 );
    $tol = 0.2;

    $ringNames = array( "W2", "W2i", "W3", "W3i",  "W4", "W4i", "W5", "W5i", "W6", "W6i", "W7-11", "W7-11i", "W12", "W12i", "W13", "W13i", "W14", "W14i", "W15", "W15i", "W16", "W16i", "E2", "E2i", "E3", "E3i",  "E4", "E4i", "E5", "E5i", "E6", "E6i", "E7-11", "E7-11i", "E12", "E12i", "E13", "E13i", "E14", "E14i", "E15", "E15i", "E16", "E16i");
    
    for ($pp = 0; $pp < 2; $pp++) // west (0), east (1)
      {
	for ($id = 0; $id < 22; $id++) // rings: o, i, o, i, ...
	  {
	    // show voltage if not shorted to IE
	    if ($ringsToAdei[$id + 22*$pp] != "IE" && $ringsToAdei[$id + 22*$pp] != "")
	      {
		// color
		if ( ($adeiValue[11 + 2*$pp][$ringsToAdei[$id + 22*$pp]] > $adeiValue[12 + 2*$pp][$ringsToAdei[$id + 22*$pp]] - $tol) && ($adeiValue[11 + 2*$pp][$ringsToAdei[$id + 22*$pp]] < $adeiValue[12 + 2*$pp][$ringsToAdei[$id + 22*$pp]] + $tol) )
		  $color = "#000000";
		else
		  $color = "#FF0000";

			
		// show voltage
		if ( ($id % 2 == 0) || ($id % 2 == 1 && $ringsToAdei[$id + 22*$pp] != $ringsToAdei[$id + 22*$pp - 1]) )
		  {
		    $value = $adeiValue[11 + 2*$pp][$ringsToAdei[$id + 22*$pp]];
	            $mace_setting[$ringNames[$id + 22*$pp]]=$value; 
		    placeTextWithLink($ringsPosY[$id + 22*$pp], $ringsPosX[$id + 22*$pp], "+" . sprintf('%.1F', $value), 70, 4, $color, "relative voltage offset", $adeiChannel[11 + 2*$pp][$ringsToAdei[$id + 22*$pp]]);
		  }
	      }
	  }
      }
    
    // tank, ie, dipole, ape
    
    $ringsPosY = array( 52, 247, 155, 425, 306, 306, 0, 240, 300, 285, 300, 315 );
    $ringsPosX = array( 805, 805, 805, 805, 319, 1371, 0, 150, 160, 190, 220, 190 );
    $tolA = array ( 15, 2, 1, 1, 1, 1, 0, 250, 2, 2, 2, 2);
    
    // MS voltages
    
    for ($pp = 0; $pp < 6; $pp++) // tank (0), ie (1), ie west (2), ie east (3), ape south (4), ape north (5)
      {
	// color
	if ( ($adeiValue[10][2*$pp] > $adeiValue[10][2*$pp + 1] - $tolA[$pp]) && ($adeiValue[10][2*$pp] < $adeiValue[10][2*$pp + 1] + $tolA[$pp]) )
	  $color = "#000000";
	else
	  $color = "#FF0000";
	
	// show voltage
	
	$value = $adeiValue[10][2*$pp];
	$link = $adeiChannel[10][2*$pp];
	
	$dipolestatus = $adeiValue[2][16];
	$dipolelink = $adeiChannel[2][16];
	
	if ($pp == 0) { $text = "absolute tank potential HCN:436-EHV-0-1001-0002 HCP:436-EHV-0-1002-0002"; }
	else if ($pp == 1) { $text = "IE common offset potential, 436-EHV-0-1003-0002"; }
	else if ($pp == 2) { $text = "relative voltage potential west IE"; }
	else if ($pp == 3) { $text = "relative voltage potential east IE"; }
	else if ($pp == 4) { $text = "relative voltage potential south APE"; }
	else if ($pp == 5) { $text = "relative voltage potential north APE"; }
	
	if ($pp == 2 || $pp == 3)
	  {
	    if ($dipolestatus == 1) // dipole enabled
	      {
		$color = "#990000";
		$value = $adeiValue[10][2*$pp];
		if ($pp == 2)
		  {
		    placeText($ringsPosY[$pp] + 40, $ringsPosX[$pp], "DIPOLE", 150, 4, "#CC0000" );
                    
		  }
		else if ($pp == 3)
		  {
		    placeText($ringsPosY[$pp] + 40, $ringsPosX[$pp], "DIPOLE", 150, 4, "#CC0000");
                    
		  }
	      }
	    else
	      {
		$value = $adeiValue[10][2*$pp]; // dipole disabled
		$color = "#909090";
	      }
	    
	    if ($pp == 2) placeText(180, 825, "MS WEST IE", 110, 2, $color); // west IE
	    else if ($pp == 3) placeText(450, 825, "MS EAST IE", 110, 2, $color); // east IE
	    
	    $link = $adeiChannel[10][2*$pp+1] . "," . $adeiChannel[10][2*$pp] . "," . $dipolelink;
	  }
	
	// tank potential
	if ($pp == 0) placeTextWithLink($ringsPosY[$pp], $ringsPosX[$pp], sprintf('%.1F V', -$value), 150, 4, $color, $text, $link);
	
	// IE common
	else if ($pp == 1)
	  {
	    if ($Kal1_RunFlag == 0) $digits = '%.2F V'; else $digits = '%.1F V';
	    placeTextWithLink($ringsPosY[$pp], $ringsPosX[$pp], sprintf($digits, -$value), 150, 4, $color, $text, $link);
	    $mace_setting["IECommon"]=-$value;
	    $digits = '';
	  }
	
	// IE dipoles
	else if ($pp == 2 || $pp == 3) placeTextWithLink($ringsPosY[$pp], $ringsPosX[$pp], sprintf('%.2F V', $value), 150, 5, $color, $text, $link);
	
	
	// APE
	else if ($pp == 4 || $pp == 5)
	  {
	    if ($adeiValue[10][2*$pp] > 10.0) { placeTextWithLink($ringsPosY[$pp], $ringsPosX[$pp] , sprintf('%.1F', $value), 70, 4, $color, $text, $link); }
	  }
      }
  }


// PS voltages (add $pp < 10 for PS IE )
if ($PSmode == 5)
  { // only display in PS operation mode High-Voltage

    // only indices 7++ are needed for PS (copy from MS definition)
    $ringsPosY = array( 52, 247, 155, 425, 306, 306, 0, 240, 300, 285, 300, 315 );
    $ringsPosX = array( 805, 805, 805, 805, 319, 1371, 0, 150, 160, 190, 220, 190 );
    $tolA = array ( 15, 2, 1, 1, 1, 1, 0, 250, 2, 2, 2, 2);

    placeText(265, 190, "PS TANK", 70, 2, "#000000"); // prespec tank
    placeText(330, 160, "PS IE", 120, 2, "#505050"); // prespec IE
    
    
    for ($pp = 7; $pp < 12; $pp++) // PS tank (channel 7 = array entry 14 + 15), IE west (8), IE east (9)
      {
	// color and text
	if ($pp == 7) { $text = "Primary PS tank potential of 416EHV1001"; $color = "#000000";}
	else if ($pp == 8) { $text = "relative voltage potential PS IE1 Ch1A of 416EHV1002"; $color = "#505050";}
	else if ($pp == 9) { $text = "relative voltage potential PS IE2 Ch1B of 416EHV1002"; $color = "#505050";}
	else if ($pp == 10) { $text = "relative voltage potential PS IE3 Ch2A of 416EHV1003"; $color = "#505050";}
	else if ($pp == 11) { $text = "relative voltage potential PS IE4 Ch2B of 416EHV1003"; $color = "#A0A0A0";}
	
	// setpoint mismatch color
	if ( ($adeiValue[10][2*$pp] > $adeiValue[10][2*$pp + 1] - $tolA[$pp]) && ($adeiValue[10][2*$pp] < $adeiValue[10][2*$pp + 1] + $tolA[$pp]) )
	  $color = $color;
	else
	  $color = "#FF0000";
	
	// show voltage

	$value = $adeiValue[10][2*$pp];
	$link = $adeiChannel[10][2*$pp];
	
	if ($pp == 7) placeTextWithLink($ringsPosY[$pp], $ringsPosX[$pp], sprintf('%.1F V', -$value), 150, 5, $color, $text, $link);
	else placeTextWithLink($ringsPosY[$pp], $ringsPosX[$pp], sprintf('%.0F V', -$value), 60, 2, $color, $text, $link);
      }
  }


       // ########## Split Ring Electrodes ##########

        $srPosX = array( 59, 284, 1420 );
        $srPosY = array( 402, 402, 377 );
        $srKATRINNumber = array( "418-EEL-3-2150", "418-EEL-3-4150", "438-EEL-3-5150" );

	// CPS-PS electrode 418-EEL-2150

        // $sr: 0 = cps-ps ; 1 = PS-MS ; 2 = MS-FPD
        for ($sr = 0; $sr < 3; $sr++)
	{ 
        $splitringON = $adeiValue[36][4*$sr + 3];
	    $pic = "splitring";
        if ($splitringON = 1)
	  {
	    $color = "#000000";
	    $splitringVal = $adeiValue[36][4*$sr + 4];
	    $splitringPOL = $adeiValue[36][4*$sr + 5];
	    $splitringSet = $adeiValue[36][4*$sr + 6];
	    $link = $adeiChannel[36][$sr*4 + 4];

	    if (abs($splitringVal) < 25) { $color="#FF0000"; $pic = $pic."Alarm"; $sign = "";}
	    else {
	      if ($splitringPOL == 0) {$sign = "+"; $pic = $pic."On";}
	      if ($splitringPOL == 1) {$sign = ""; $pic = $pic."Warn";}
	    }
	    
	    placePicWithLink($srPosY[$sr]-32,$srPosX[$sr]+16, $pic.".png", 30, "status of split ring electrode (green = polarity pos and OK, gray = off, red = low voltage alarm, orange = polarity neg warning", $link);
	    placeTextWithLink($srPosY[$sr],$srPosX[$sr], $sign.sprintf('%.0F V', $splitringVal), 60, 2, $color, "Voltage on split ring electrode ".$srKATRINNumber[$sr], $link);
	  }
	    else placePicWithLink($srPosY[$sr]-32,$srPosX[$sr]+16, $pic."Off.png", 30, "status of split ring electrode", $link);
	}


	// ########## DETECTOR ##########

	// detector powered

	$lowVoltage = array( 12, 8, 6, 6, 120 );
	$lowVoltageTol = array( 0.2, 0.2, 0.2, 0.2, 0.5);
	$link = "";
	$pic = "fpdOn";
	$text = "ON";
	for ($id = 0; $id < 5; $id++)
	{
	  if ($id = 4) // 120V channel is in FAST group, need exception here
		  {
		    $value = $adeiValue[5][0];
		    $link = $link . $adeiChannel[5][0] . ",";
		  }
		else
		  {
		    $value = $adeiValue[6][4 + $id];
		    $link = $link . $adeiChannel[6][4 + $id] . ",";
		  }
		if (!($value < $lowVoltage[$id] + $lowVoltageTol[$id] && $value > $lowVoltage[$id] - + $lowVoltageTol[$id]))
		{
			$pic = "fpdOff";
			$text = "OFF";
		}
	}
	$link = substr($link, 0, strlen($link) - 1);
	placePicWithLink(345, 1570, $pic . ".png", 30, "status FPD power&#10;green: on, red: off, grey: undefined", $link);
	placeTextWithLink(374, 1550, $text, 70, 4, "#000000", "status FPD power", $link);

	// carousel

	$value = $adeiValue[6][11];
	$color = "#000000";

	if ($value < -95) $value = "---";
	else $value = sprintf('%.0F', $adeiValue[6][11]) . " &#176;C";

	placeTextWithLink(255, 1565, $value, 100, 4, $color, "temperature FPD carousel/electronics", $adeiChannel[6][11]);
	placeText(275, 1565, "carousel", 100, 2, "#000000");


       // ORCA run number

        $value = $adeiValue[6][13];
	    $link = $adeiChannel[6][13];
	    $color = "#EEEEEE";

        $run_number = floor($value);
        $subrun_number = floor(($value-$run_number)*1000);

        placePicWithLink(189, 1534, "orca_icon.png", 45, "ORCA run.subrun number [530-CHN-0-0001-0001]", $link);
        placeBox(188, 1580, "   Run: ".$run_number."  ", 85, 2, $color);
        placeBox(203, 1580, "Subrun: ".$subrun_number."  ", 85, 2, $color);



	// ########## MAGNETOMETERS ##########

	$mag = array(4, 6, 3);  // removed 4th entry of south ring, due to disconnection
 
	for ($pp = 0; $pp < 3; $pp++)
	{
		$bx = 0;
		$by = 0;
		$bz = 0;
		$link = "";

		for ($id = 0; $id < $mag[$pp]; $id++)
		{
			$bx = $bx + $adeiValue[16 + $pp][3 * $id];
			$by = $by + $adeiValue[16 + $pp][3 * $id + 1];
			$bz = $bz + $adeiValue[16 + $pp][3 * $id + 2];
                        $link = $link . $adeiChannel[16 + $pp][3 * $id + 2] . ",";
//echo $bx . "  " . $by . "  " . $bz . "<br>";
		}

		$bx = $bx / $mag[$pp];
		$by = $by / $mag[$pp];
		$bz = $bz / $mag[$pp];
		$link = substr($link, 0, strlen($link) - 1);

		$value = sqrt($bx * $bx + $by * $by + $bz * $bz);
		
		$text = "averaged field precise magnetometers ";
		if ($pp == 0) $text = $text . "north ";
		else if ($pp == 1) $text = $text . "middle ";
		else if ($pp == 2) $text = $text . "south ";
		$text = $text . "ring";

		placeTextWithLink(553, 1015 - 170 * $pp, sprintf('%.1F G', $value), 80, 5, "#000000", $text, $link);
	}


	// ########## SAP MAGNETOMETERS ##########

	$mag = array(5, 4,); // 5 SAP North Ring, 4 SAP South Ring magnetometers

	for ($pp = 0; $pp < 2; $pp++)
	{
		$bx = 0;
		$by = 0;
		$bz = 0;
		$link = "";

		for ($id = 0; $id < $mag[$pp]; $id++)
		{
			$bx = $bx + $adeiValue[37 + $pp][3 * $id];
			$by = $by + $adeiValue[37 + $pp][3 * $id + 1];
			$bz = $bz + $adeiValue[37 + $pp][3 * $id + 2];
                        $link = $link . $adeiChannel[37 + $pp][37 * $id + 2] . ",";
			//echo $bx . "  " . $by . "  " . $bz . "<br>";
		}

		$bx = $bx / $mag[$pp];
		$by = $by / $mag[$pp];
		$bz = $bz / $mag[$pp];
		$link = substr($link, 0, strlen($link) - 1);

		// radings in muT, therfore factor 100 for Gauss display
		$value = 0.01*sqrt($bx * $bx + $by * $by + $bz * $bz);
		
		$text = "averaged field precise magnetometers SAP ";
		if ($pp == 0) $text = $text . "north ";
		else if ($pp == 1) $text = $text . "south ";
		$text = $text . "ring";

		placeTextWithLink(553, 1240 - 110 * $pp, sprintf('%.1F G', $value), 80, 5, "#000000", $text, $link);
	}



	// dipole

//	$pic = "status";
//	if ($pulserId[0] == "dipole" && $daqElapsed[0] > 30)
//	{
//		if ($pulserCounts[0] > 0) $pic = $pic . "On";
//		else if ($pulserCounts[0] == 0) $pic = $pic . "Off";
//	}
	//placePic($posY + 34 + 25, $posX + 80, $pic . ".png", 17, "status dipole sync pulser&#10;green: on, red: off, grey: undefined");

	// egun

//	$pic = "status";
//	if ($pulserId[1] == "egun" && $daqElapsed[0] > 30)
//	{
//		if ($pulserCounts[1] > 0) $pic = $pic . "On";
//		else if ($pulserCounts[1] == 0) $pic = $pic . "Off";
//	}
	//placePic($posY + 34 + 50, $posX + 80, $pic . ".png", 17, "status egun sync pulser&#10;green: on, red: off, grey: undefined");

	// muon

//	$pic = "status";
//	if ($pulserId[3] == "muon" && $daqElapsed[0] > 30)
//	{
//		if ($pulserCounts[3] > 0) $pic = $pic . "On";
//		else if ($pulserCounts[3] == 0) $pic = $pic . "Off";
//	}
//	placePic($posY + 34 + 75, $posX + 80, $pic . ".png", 17, "status muon sync pulser&#10;green: on, red: off, grey: undefined");



	// ########## HIGH PRESSURE MS ##########

        $value = $adeiValue[9][3];
        if ($value > 1.0)
	{
	  if ($value < 20.0) $pic = "bottleBlinking.gif";
	  else $pic = "bottleOn.png";
	  $text = "ON";
	  $color = "#000000";
	  if ($adeiValue[9][4] != 64) $color = "#FF0000";
	  placeTextWithLink(135, 1387, sprintf('%.1F &#037;', $adeiValue[9][3]), 70, 4, $color, "gas flow leak valve", $adeiChannel[9][5]);
	  placeTextWithLink(160, 1387, sprintf('%.1E', $adeiValue[9][0]), 70, 4, $color, "pressure [mbar] MKS Baratron", $adeiChannel[9][3]);
	}
	else
	{
	  $pic = "bottle.png";
	  $text = "OFF";
	}
       
	$link = $adeiChannel[9][3] . "," . $adeiChannel[9][0];
	placePicWithLink(135, 1358, $pic, 48, "status gas injection system&#10;gray: off, blinking: low, green: on&#10Should be off for nominal pressure measurements!!!", $link);
	placeTextWithLink(180, 1347, $text, 70, 4, "#000000", "status gas injection system", $link);


	// ########## HIGH PRESSURE PS ##########

        $value = $adeiValue[27][7];
        $posOK = $adeiValue[27][6];
        $link = $adeiChannel[27][6].",".$adeiChannel[27][7];
        if ($value < 1) 
	{
	  $pic = "bottle.png";
	  $text = "OFF";
	  $color = "#909090";
	}
	else if (($value >= 1) && ($value < 15))
	{
          $pic = "bottleBlinking.gif";
	  $text = "ON";
	  $color = "#000000";
	}
	else if ($value >= 15)
	{
	  $pic = "bottleOn.png";
	  $text = sprintf('%.1F', $value)." %";
	  $color = "#000000";
          if ($posOK == 1) placeBox(418, 107, "Pos OK", 40, 2, "#00FF00");
	  else placeBox(418, 107, "PosErr", 40, 2, "#FF0000");
	}
	placePicWithLink(370, 113 , $pic, 30, "status PS gas injection system&#10;gray: off, blinking: low, green: on&#10Should be off for nominal pressure measurements!!!", $link);
	placeTextWithLink(402, 99, $text, 60, 2, $color, "status gas injection system", $link);



	// ########## TLK Wall and LAUDA TEMPERATURE ##########

if ($PSmode == 5) 
    { // only display if PS operation mode is HV

        // mean of 4023, 4033, 4043
        $link = $adeiChannel[29][0] . "," . $adeiChannel[29][1] . "," . $adeiChannel[29][2];
        $value = ($adeiValue[29][0] + $adeiValue[29][1] + $adeiValue[29][2])/3.0;
        $color = "#CCCCCC";
        if ($value < 800)
            {
                $draw_x = 375;
                $draw_y = 145;
                placeBoxRight($draw_y, $draw_x,sprintf('%.1F &#176;C', $value), 65, 2, $color);
                placePicWithLink($draw_y+2, $draw_x+5, "newTemperature.png", 15, "Average temperature of pre spectrometer vessel sensors 4023..33..43.", $link);
            }
    }

if ($PSmode != 5) 
    { // only display if PS operation mode is Baking

	$min = 18;
	$max = 30;

	// sensor 4100 ID [29][3]
        $link = $adeiChannel[29][3];
	$value = $adeiValue[29][3];
	$color = "#000000";
	if ($value < $min) $color = "#0026FF";
	else if ($value > $max) $color = "#FF0000";
	if ($value < 400) placeTextLeftWithLink(445, 5, "T<sub>wall</sub> = " . sprintf('%.1F &#176;C', $value), 180, 4, $color, "TLK separation wall temperature of RTP4100", $link);

	$min = 15;
	// LAUDA System 5401 [34][0..1]
        $link = $adeiChannel[34][0].",".$adeiChannel[34][1];
	$value = $adeiValue[34][0];
	$max = $adeiValue[34][1]+1;
	$color = "#000000";
	if ($value < $min) $color = "#0026FF";
	else if ($value > $max) $color = "#FF0000";
	if ($value < 400) placeTextLeftWithLink(475, 5, "T<sub>LAUDA</sub> = " . sprintf('%.1F &#176;C', $value), 180, 4, $color, "LAUDA System actual temperature value", $link);



	// ########## PS VESSEL TEMPERATURES ##########

	$min = 18;
	$max = 65;

	// mean of 4023, 4033, 4043
        $link = $adeiChannel[29][0] . "," . $adeiChannel[29][1] . "," . $adeiChannel[29][2];
	$value = ($adeiValue[29][0] + $adeiValue[29][1] + $adeiValue[29][2])/3.0;
	$color = "#000000";
	if ($value < $min) $color = "#0026FF";
	else if ($value > $max) $color = "#FF0000";
	if ($value < 4000) placeTextWithLink(305, 185, sprintf('%.1F &#176;C', $value), 90, 4, $color, "PS mean temperature of 4023..33..43", $link);

	// mean of 3901, 3902, 3903, 3904
        $link = $adeiChannel[29][4] . "," . $adeiChannel[29][5] . "," . $adeiChannel[29][6] . "," . $adeiChannel[29][7];
	$value = ($adeiValue[29][4] + $adeiValue[29][5] + $adeiValue[29][6] + $adeiValue[29][7])/4.0;
	$color = "#000000";
	if ($value < $min) $color = "#0026FF";
	else if ($value > $max) $color = "#FF0000";
	if ($value < 4000) placeTextWithLink(295, 110, sprintf('%.1F &#176;C', $value), 90, 4, $color, "PS mean temperature of 3902..03..04 upper NEG port", $link);

	// mean of 3912, 3913, (3914 failed)
        $link = $adeiChannel[29][8] . "," . $adeiChannel[29][9] . "," . $adeiChannel[29][10] . "," . $adeiChannel[29][11];
	//	$value = ($adeiValue[29][8] + $adeiValue[29][9] + $adeiValue[29][10] + $adeiValue[29][11])/4.0;
	$value = ($adeiValue[29][8] + $adeiValue[29][9] + $adeiValue[29][10])/3.0;
	$color = "#000000";
	if ($value < $min) $color = "#0026FF";
	else if ($value > $max) $color = "#FF0000";
	if ($value < 4000) placeTextWithLink(315, 110, sprintf('%.1F &#176;C', $value), 90, 4, $color, "PS mean temperature of 3912..13..14 side NEG port", $link);
    }

	// ########## MS VESSEL TEMPERATURES ##########

	$min = 14;
	$max = 24;

	// 0066
	$value = $adeiValue[20][0];
	$color = "#000000";
	if ($value < $min) $color = "#0026FF";
	else if ($value > $max) $color = "#FF0000";
	if (($value < 400) & ($value > 0)) placeTextWithLink(110, 933, "T<sub>IE0066</sub> = " . sprintf('%.1F &#176;C', $value), 170, 4, $color, "IE temperature 0066", $adeiChannel[20][0]);

	// 0076
	$value = $adeiValue[20][1];
	$color = "#000000";
	if ($value < $min) $color = "#0026FF";
	else if ($value > $max) $color = "#FF0000";
	if (($value < 400) & ($value > 0)) placeTextWithLink(110+20, 933, "T<sub>IE0076</sub> = " . sprintf('%.1F &#176;C', $value), 170, 4, $color, "IE temperature 0076", $adeiChannel[20][1]);

	// 0270
	$value = $adeiValue[20][2];
	$color = "#000000";
	if ($value < $min) $color = "#0026FF";
	else if ($value > $max) $color = "#FF0000";
    if (($MSmode != 5) & ($value < 400) & ($value > 0)) placeTextWithLink(307, 805, "T<sub>0270</sub> = " . sprintf('%.1F &#176;C', $value), 160, 4, $color, "tank temperature 0270", $adeiChannel[20][2]);
    if (($MSmode == 5) & ($value < 400) & ($value > 0)) placeTextWithLink(110, 677, "T<sub>0270</sub> = " . sprintf('%.1F &#176;C', $value), 160, 4, $color, "tank temperature 0270", $adeiChannel[20][2]);

        // define global tank temperature
        $global_MS_temperature = $adeiValue[20][2];

	// 0283
	$value = $adeiValue[20][3];
	$color = "#000000";
	if ($value < $min) $color = "#0026FF";
	else if ($value > $max) $color = "#FF0000";
	if (($MSmode != 5) & ($value < 400) & ($value > 0)) placeTextWithLink(307, 963, "T<sub>0283</sub> = " . sprintf('%.1F &#176;C', $value), 160, 4, $color, "tank temperature 0283", $adeiChannel[20][3]);
	if (($MSmode == 5) & ($value < 400) & ($value > 0)) placeTextWithLink(130, 677, "T<sub>0283</sub> = " . sprintf('%.1F &#176;C', $value), 160, 4, $color, "tank temperature 0283", $adeiChannel[20][3]);

    // port 0100 saphire window
	$value = $adeiValue[19][3];
	$color = "#000000";
    if ($value > 30) placeTextLeftWithLink(105, 1275, "T<sub>saphire</sub> = " . sprintf('%.1F &#176;C', $value), 160, 4, $color, "port 0100 saphire window temperature", $adeiChannel[19][3]);


	$color = "#000000";
	// ########## STS ##########
	placeTextLeftWithWebsiteLink(370, 1, "&larr;STS", 60, 5, $color, "Link to STS Status Overview", "https://katrin.kit.edu/status-sts/");

    // ########## WebTrium Link ##########
	placeTextLeftWithWebsiteLink(20, 1450, "&rarr; WebTrium", 155, 4, $color, "Link to WebTrium Overview", "https://webtrium.mpp.mpg.de");

	// ########## FPD Status ##########
	placeTextLeftWithWebsiteLink(50, 1450, "&rarr; FPD Status", 155, 4, $color, "Link to FPD Status Overview", "https://iap-katrin-fpd.iap.kit.edu/fpdstatus/");
	// ########## Sanshiro Katana Page ##########
	placeTextLeftWithWebsiteLink(80, 1450, "&rarr; Brew Kaffee Beans and Idle", 275, 4, $color, "Link to Brew Kaffee Beans and Idle page at UW/Seattle", "http://katana.npl.washington.edu/~sanshiro/");

	// ########## MoS und HV Status ##########
	placeTextLeftWithWebsiteLink(110, 1450, "&rarr; MoS and HV Status", 240, 4, $color, "Link to Monitor Spectrometer and High Voltage Status Overview", "https://katrin.kit.edu/bora-mos");

	// ########## Magnet Overview ##########
	placeTextLeftWithWebsiteLink(140, 1450, "&rarr; Magnet Control System", 270, 4, $color, "Link to Magnet Control System Status Page", "https://katrin.kit.edu/bora-mcs");
        // ########## PS ##########
//	placeText(100, 170, "PS", 60, 30, $color);



// ########## MAC-E filter configuration display ##########
$tol = 0.2;
$tol = abs($tol);
$color = "#FFD800";  //base color: US school bus yellow 

for ($pp = 0; $pp < sizeof($mace_configurations); $pp++)  // loop over all predefined configurations
  {
    for ($id = 1; $id < sizeof($mace_configurations[$pp]); $id++) // loop thru all parameters, but not name in $id=0
      {
	if (($id < 3) & (array_values($mace_configurations[$pp])[$id] != array_values($mace_setting)[$id])) break; 
	if (abs(array_values($mace_configurations[$pp])[$id] - array_values($mace_setting)[$id]) < $tol)
	  {
	    if ($id == 25) {
	      $mace_setting["Config"] = $mace_configurations[$pp]["Config"];
	      $color = "#4CFF00"; // success color: harlequin green
	    }
	    else 
        { 
          $color = "#FF9300"; // failure color: dark orange
        }  	
      }
	else break; 
      }
    if ($color == "#4CFF00") break;
  }
if (($mace_setting["Config"] == "unkn") or ($mace_setting["Config"] == "other")) 
	{
      $color = "#FFD800"; //unknown config color: US school bus yellow 
    }

placeText(115, 232, "MAC-E", 85, 5, "#000000");
placeBox(140, 230, $mace_setting["Config"] , 85, 3, $color);


if ($V4_open) {
	
  // ########## PS Ion Monitor status display ##########
  if ($adeiValue[39][1] < 0.5)
    {
      $ion_mon_stat = "active";
      $color = "#4CFF00";
    }
  else
    {
      $ion_mon_stat = "bypassed";
      $color = "#FF0000";
      placePicWithLink(130, 33, "alarm_flash.gif", 50, "Ion alarm not armed!", $adeiChannel[39][1]);
    }

  placeText(115+65, 4, "Ion Mon", 105, 5, "#000000");
  placeBox(140+65, 2, $ion_mon_stat , 105, 3, $color);
  
}


// ########## HIGH VOLTAGE SWITCH ##########
$value = $adeiValue[31][1];
$pic = "switch";
if ($value == 1) $pic = $pic . "Open";
else if ($value	== 0) $pic = $pic . "Closed";
placePicWithLink(498, 501, $pic . ".png", 80, "status high-voltage grounding switch", $adeiChannel[31][1]);


// ########## EGUN COUPLING SWITCH ##########
if ($MSmode == 5) // only display in MS operation mode High-Voltage
  {
    $switch_status = $adeiValue[46][0];
	$laser_status = $adeiValue[47][0];
	$switch_name = "egunSwitch";
	$egun_name = "egun";

	if ($switch_status == 1) $switch_name = $switch_name . "HV";
	else $switch_name = $switch_name . "GND";
	placePicWithLink(415, 325, $switch_name . ".png", 90, "status egun coupling switch", $adeiChannel[46][0]);

	if ($laser_status > 2 ) $egun_name = $egun_name . "On";
	else $egun_name = $egun_name . "Off";
	placePicWithLink(431, 300, $egun_name . ".png", 30, "status egun operation", $adeiChannel[47][0]);
  }


// ########## MONITOR SPECTROMETR COUPLING STATUS ##########
$hv_switch1101_mos = $adeiValue[35][0];
$mos = "beamline_mos.png";
placePicXY(525, 120, $mos, 190, 60, "status monitor spectrometer connection");
if ($hv_switch1101_mos == 1)
  {
    $color = "#4CFF00"; // green
    placeBox(586, 120, "MoS coupled", 190, 2, $color);
  }
else
  {
    $color = "#CFCFCF"; // light gray
    placeBox(586, 120, "MoS separated", 190, 2, $color);
  }


// ########## define global dewpoint max value ###########
$global_max_dewpoint = -273.0;

// ########## PS Opus weather station ##########
$data_index = 40;
$Opus_tempC = $adeiValue[$data_index][0];
$Opus_tempF = $adeiValue[$data_index][1];
$Opus_dewpointC = $adeiValue[$data_index][2];
$Opus_dewpointF = $adeiValue[$data_index][3];
$Opus_relH_percent = $adeiValue[$data_index][4];
$Opus_relH_gramm = $adeiValue[$data_index][5];
$Opus_absPressure_hPa = $adeiValue[$data_index][6];
$Opus_relPressure_hPa = $adeiValue[$data_index][7];
$Opus_voltage = $adeiValue[$data_index][8];

$Opus_tempC_channel = $adeiChannel[$data_index][0];
$Opus_tempF_channel = $adeiChannel[$data_index][1];
$Opus_dewpointC_channel = $adeiChannel[$data_index][2];
$Opus_dewpointF_channel = $adeiChannel[$data_index][3];
$Opus_relH_percent_channel = $adeiChannel[$data_index][4];
$Opus_relH_gramm_channel = $adeiChannel[$data_index][5];
$Opus_absPressure_hPa_channel = $adeiChannel[$data_index][6];
$Opus_relPressure_hPa_channel = $adeiChannel[$data_index][7];
$Opus_voltage_channel = $adeiChannel[$data_index][8];

// update dewpoint max value
if ($Opus_dewpointC > $global_max_dewpoint) $global_max_dewpoint = $Opus_dewpointC;

$location_text = "pre spectrometer";
$draw_x = 0;
$draw_y = -15;

placePicWithLink($draw_y, $draw_x+5, "newTemperature.png", 23, "temperature at ".$location_text, $Opus_tempC_channel);
placeTextWithLink($draw_y, $draw_x+30, sprintf('%.1F &#176;C', $Opus_tempC), 90, 4, "#000000", "temperature at ".$location_text, $Opus_tempC_channel);

placePicWithLink($draw_y+25, $draw_x+5, "newPressure.png", 23, "atmospheric pressure at ".$location_text, $Opus_absPressure_hPa_channel);
placeTextWithLink($draw_y+25, $draw_x+30, sprintf('%.0F hPa', $Opus_absPressure_hPa), 90, 4, "#000000", "atmospheric pressure at ".$location_text, $Opus_absPressure_hPa_channel);

placePicWithLink($draw_y+50, $draw_x+5, "newHumidity.png", 23, "relative humidity at ".$location_text, $Opus_relH_percent_channel);
placeTextWithLink($draw_y+50, $draw_x+30, sprintf('%.1F &#037;', $Opus_relH_percent), 90, 4, "#000000", "relative humidity at ".$location_text , $Opus_relH_percent_channel);

placePicWithLink($draw_y+75, $draw_x+5, "newDewpoint.png", 23, "dewpoint at ".$location_text, $Opus_dewpointC_channel);
placeTextWithLink($draw_y+75, $draw_x+30, sprintf('%.1F &#176;C', $Opus_dewpointC), 90, 4, "#000000", "dewpoint at ".$location_text , $Opus_dewpointC_channel);


// ########## DET Opus weather station ##########
$data_index = 41;
$Opus_tempC = $adeiValue[$data_index][0];
$Opus_tempF = $adeiValue[$data_index][1];
$Opus_dewpointC = $adeiValue[$data_index][2];
$Opus_dewpointF = $adeiValue[$data_index][3];
$Opus_relH_percent = $adeiValue[$data_index][4];
$Opus_relH_gramm = $adeiValue[$data_index][5];
$Opus_absPressure_hPa = $adeiValue[$data_index][6];
$Opus_relPressure_hPa = $adeiValue[$data_index][7];
$Opus_voltage = $adeiValue[$data_index][8];

$Opus_tempC_channel = $adeiChannel[$data_index][0];
$Opus_tempF_channel = $adeiChannel[$data_index][1];
$Opus_dewpointC_channel = $adeiChannel[$data_index][2];
$Opus_dewpointF_channel = $adeiChannel[$data_index][3];
$Opus_relH_percent_channel = $adeiChannel[$data_index][4];
$Opus_relH_gramm_channel = $adeiChannel[$data_index][5];
$Opus_absPressure_hPa_channel = $adeiChannel[$data_index][6];
$Opus_relPressure_hPa_channel = $adeiChannel[$data_index][7];
$Opus_voltage_channel = $adeiChannel[$data_index][8];

// update dewpoint max value
if ($Opus_dewpointC > $global_max_dewpoint) $global_max_dewpoint = $Opus_dewpointC;

$location_text = "detector platform";
$draw_x = 1600;
$draw_y = -15;

placePicWithLink($draw_y, $draw_x+5, "newTemperature.png", 23, "temperature at ".$location_text, $Opus_tempC_channel);
placeTextWithLink($draw_y, $draw_x+30, sprintf('%.1F &#176;C', $Opus_tempC), 90, 4, "#000000", "temperature at ".$location_text, $Opus_tempC_channel);

placePicWithLink($draw_y+25, $draw_x+5, "newPressure.png", 23, "atmospheric pressure at ".$location_text, $Opus_absPressure_hPa_channel);
placeTextWithLink($draw_y+25, $draw_x+30, sprintf('%.0F hPa', $Opus_absPressure_hPa), 90, 4, "#000000", "atmospheric pressure at ".$location_text, $Opus_absPressure_hPa_channel);

placePicWithLink($draw_y+50, $draw_x+5, "newHumidity.png", 23, "relative humidity at ".$location_text, $Opus_relH_percent_channel);
placeTextWithLink($draw_y+50, $draw_x+30, sprintf('%.1F &#037;', $Opus_relH_percent), 90, 4, "#000000", "relative humidity at ".$location_text , $Opus_relH_percent_channel);


// ########## Detector Platform OLD ##########

//placePicWithLink(-135, 1605, "newTemperature.png", 23, "temperature in KATRIN hall", $adeiChannel[19][1]);
//placeTextWithLink(-135, 1630, sprintf('%.1F &#176;C', $adeiValue[19][1]), 90, 4, "#000000", "temperature in KATRIN hall", $adeiChannel[19][1]);

//placePicWithLink(-110, 1605, "newPressure.png", 23, "atmospheric pressure in KATRIN hall", $adeiChannel[19][0]);
//placeTextWithLink(-110, 1630, sprintf('%.0F hPa', $adeiValue[19][0] * 0.0689475729 * 1000.0), 90, 4, "#000000", "atmospheric pressure in KATRIN hall", $adeiChannel[19][0]);

//placePicWithLink(-85, 1605, "newHumidity.png", 23, "relative humidity in KATRIN hall", $adeiChannel[19][2]);
//placeTextWithLink(-85, 1630, sprintf('%.1F &#037;', $adeiValue[19][2]), 90, 4, "#000000", "relative humidity in KATRIN hall", $adeiChannel[19][2]);



// ########## HV Opus weather station ##########
$data_index = 42;
$Opus_tempC = $adeiValue[$data_index][0];
$Opus_tempF = $adeiValue[$data_index][1];
$Opus_dewpointC = $adeiValue[$data_index][2];
$Opus_dewpointF = $adeiValue[$data_index][3];
$Opus_relH_percent = $adeiValue[$data_index][4];
$Opus_relH_gramm = $adeiValue[$data_index][5];
$Opus_absPressure_hPa = $adeiValue[$data_index][6];
$Opus_relPressure_hPa = $adeiValue[$data_index][7];
$Opus_voltage = $adeiValue[$data_index][8];

$Opus_tempC_channel = $adeiChannel[$data_index][0];
$Opus_tempF_channel = $adeiChannel[$data_index][1];
$Opus_dewpointC_channel = $adeiChannel[$data_index][2];
$Opus_dewpointF_channel = $adeiChannel[$data_index][3];
$Opus_relH_percent_channel = $adeiChannel[$data_index][4];
$Opus_relH_gramm_channel = $adeiChannel[$data_index][5];
$Opus_absPressure_hPa_channel = $adeiChannel[$data_index][6];
$Opus_relPressure_hPa_channel = $adeiChannel[$data_index][7];
$Opus_voltage_channel = $adeiChannel[$data_index][8];

// update dewpoint max value
if ($Opus_dewpointC > $global_max_dewpoint) $global_max_dewpoint = $Opus_dewpointC;

$location_text = "high-voltage cage";
$draw_x = 434;
$draw_y = 586;

if (($Opus_tempC > 0) && (($Opus_tempC < 99)) && ($Opus_absPressure_hPa > 0))
  {
    placeBoxRight($draw_y, $draw_x,sprintf('%.1F &#176;C', $Opus_tempC), 65, 2, $color);
    placePicWithLink($draw_y+2, $draw_x+5, "newTemperature.png", 15, "temperature at ".$location_text.", and &#010rel. humidity is H = ".sprintf('%.1F &#037;', $Opus_relH_percent).",&#010dewpoint Td = ".sprintf('%.1F &#176;C', $Opus_dewpointC).",&#010atm. pressure is p = ".sprintf('%.0F hPa', $Opus_absPressure_hPa).".", $Opus_tempC_channel);
  }

// ########## MS bottom Opus weather station ##########
$data_index = 43;
$Opus_tempC = $adeiValue[$data_index][0];
$Opus_tempF = $adeiValue[$data_index][1];
$Opus_dewpointC = $adeiValue[$data_index][2];
$Opus_dewpointF = $adeiValue[$data_index][3];
$Opus_relH_percent = $adeiValue[$data_index][4];
$Opus_relH_gramm = $adeiValue[$data_index][5];
$Opus_absPressure_hPa = $adeiValue[$data_index][6];
$Opus_relPressure_hPa = $adeiValue[$data_index][7];
$Opus_voltage = $adeiValue[$data_index][8];

$Opus_tempC_channel = $adeiChannel[$data_index][0];
$Opus_tempF_channel = $adeiChannel[$data_index][1];
$Opus_dewpointC_channel = $adeiChannel[$data_index][2];
$Opus_dewpointF_channel = $adeiChannel[$data_index][3];
$Opus_relH_percent_channel = $adeiChannel[$data_index][4];
$Opus_relH_gramm_channel = $adeiChannel[$data_index][5];
$Opus_absPressure_hPa_channel = $adeiChannel[$data_index][6];
$Opus_relPressure_hPa_channel = $adeiChannel[$data_index][7];
$Opus_voltage_channel = $adeiChannel[$data_index][8];

// update dewpoint max value
if ($Opus_dewpointC > $global_max_dewpoint) $global_max_dewpoint = $Opus_dewpointC;

$location_text = "main spectrometer basement";
$draw_x = 845;
$draw_y = 586;

$color = "#CCCCCC";

if (($Opus_tempC > 0) && (($Opus_tempC < 99)) && ($Opus_absPressure_hPa > 0))
  {
    placeBoxRight($draw_y, $draw_x,sprintf('%.1F &#176;C', $Opus_tempC), 65, 2, $color);
    placePicWithLink($draw_y+2, $draw_x+5, "newTemperature.png", 15, "temperature at ".$location_text.", and &#010rel. humidity is H = ".sprintf('%.1F &#037;', $Opus_relH_percent).",&#010dewpoint Td = ".sprintf('%.1F &#176;C', $Opus_dewpointC).",&#010atm. pressure is p = ".sprintf('%.0F hPa', $Opus_absPressure_hPa).".", $Opus_tempC_channel);

  }

// ########## MS top Opus weather station ##########
$data_index = 44;
$Opus_tempC = $adeiValue[$data_index][0];
$Opus_tempF = $adeiValue[$data_index][1];
$Opus_dewpointC = $adeiValue[$data_index][2];
$Opus_dewpointF = $adeiValue[$data_index][3];
$Opus_relH_percent = $adeiValue[$data_index][4];
$Opus_relH_gramm = $adeiValue[$data_index][5];
$Opus_absPressure_hPa = $adeiValue[$data_index][6];
$Opus_relPressure_hPa = $adeiValue[$data_index][7];
$Opus_voltage = $adeiValue[$data_index][8];

$Opus_tempC_channel = $adeiChannel[$data_index][0];
$Opus_tempF_channel = $adeiChannel[$data_index][1];
$Opus_dewpointC_channel = $adeiChannel[$data_index][2];
$Opus_dewpointF_channel = $adeiChannel[$data_index][3];
$Opus_relH_percent_channel = $adeiChannel[$data_index][4];
$Opus_relH_gramm_channel = $adeiChannel[$data_index][5];
$Opus_absPressure_hPa_channel = $adeiChannel[$data_index][6];
$Opus_relPressure_hPa_channel = $adeiChannel[$data_index][7];
$Opus_voltage_channel = $adeiChannel[$data_index][8];

// update dewpoint max value
if ($Opus_dewpointC > $global_max_dewpoint) $global_max_dewpoint = $Opus_dewpointC;

$location_text = "main spectrometer under the roof";
$draw_x = 845;
$draw_y = 31;


if (($Opus_tempC > 0) && (($Opus_tempC < 99)) && ($Opus_absPressure_hPa > 0))
  {
    placeBoxRight($draw_y, $draw_x,sprintf('%.1F &#176;C', $Opus_tempC), 65, 2, $color);
    placePicWithLink($draw_y+2, $draw_x+5, "newTemperature.png", 15, "temperature at ".$location_text.", and &#010rel. humidity is H = ".sprintf('%.1F &#037;', $Opus_relH_percent).",&#010dewpoint Td = ".sprintf('%.1F &#176;C', $Opus_dewpointC).",&#010atm. pressure is p = ".sprintf('%.0F hPa', $Opus_absPressure_hPa).".", $Opus_tempC_channel);
  }

// ########## MoS general Opus weather station ##########
$data_index = 45;
$Opus_tempC = $adeiValue[$data_index][0];
$Opus_tempF = $adeiValue[$data_index][1];
$Opus_dewpointC = $adeiValue[$data_index][2];
$Opus_dewpointF = $adeiValue[$data_index][3];
$Opus_relH_percent = $adeiValue[$data_index][4];
$Opus_relH_gramm = $adeiValue[$data_index][5];
$Opus_absPressure_hPa = $adeiValue[$data_index][6];
$Opus_relPressure_hPa = $adeiValue[$data_index][7];
$Opus_voltage = $adeiValue[$data_index][8];

$Opus_tempC_channel = $adeiChannel[$data_index][0];
$Opus_tempF_channel = $adeiChannel[$data_index][1];
$Opus_dewpointC_channel = $adeiChannel[$data_index][2];
$Opus_dewpointF_channel = $adeiChannel[$data_index][3];
$Opus_relH_percent_channel = $adeiChannel[$data_index][4];
$Opus_relH_gramm_channel = $adeiChannel[$data_index][5];
$Opus_absPressure_hPa_channel = $adeiChannel[$data_index][6];
$Opus_relPressure_hPa_channel = $adeiChannel[$data_index][7];
$Opus_voltage_channel = $adeiChannel[$data_index][8];

$location_text = "monitor spectrometer building";
$draw_x = 0;
$draw_y = 536;

placePicWithLink($draw_y, $draw_x+5, "newTemperature.png", 23, "temperature at ".$location_text, $Opus_tempC_channel);
placeTextWithLink($draw_y, $draw_x+30, sprintf('%.1F &#176;C', $Opus_tempC), 90, 4, "#000000", "temperature at ".$location_text, $Opus_tempC_channel);

placePicWithLink($draw_y+25, $draw_x+5, "newPressure.png", 23, "atmospheric pressure at ".$location_text, $Opus_absPressure_hPa_channel);
placeTextWithLink($draw_y+25, $draw_x+30, sprintf('%.0F hPa', $Opus_absPressure_hPa), 90, 4, "#000000", "atmospheric pressure at ".$location_text, $Opus_absPressure_hPa_channel);

placePicWithLink($draw_y+50, $draw_x+5, "newHumidity.png", 23, "relative humidity at ".$location_text, $Opus_relH_percent_channel);
placeTextWithLink($draw_y+50, $draw_x+30, sprintf('%.1F &#037;', $Opus_relH_percent), 90, 4, "#000000", "relative humidity at ".$location_text , $Opus_relH_percent_channel);



// ########## MS condensation alert during HV operation ##########

if ($MSmode == 5)
  {
  if ($global_max_dewpoint - $global_MS_temperature > -1)  // check dewpoint 1 °C below tank temperature
    {
      placePic(-130+96, 425, "alarm_flash.gif", 25, "Condensation alert, don't operate high voltage!");
      $color = "#FFD800"; // yellow 
      placeBox(-130+120, 363, "CONDENSATION ALERT" , 150, 3, $color);
    }  
  }


?>
