Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2026-04-04 08:16:13

0001 #include "SepdMonDraw.h"
0002 
0003 #include <onlmon/OnlMonClient.h>
0004 
0005 #include <TAxis.h>  // for TAxis
0006 #include <TCanvas.h>
0007 #include <TFrame.h>
0008 #include <TGraphErrors.h>
0009 #include <TH1.h>
0010 #include <TLegend.h>
0011 #include <TLine.h>
0012 #include <TPad.h>
0013 #include <TProfile.h>
0014 #include <TROOT.h>
0015 #include <TSystem.h>
0016 #include <TText.h>
0017 #include <THStack.h>
0018 
0019 #include <cstring>  // for memset
0020 #include <ctime>
0021 #include <fstream>
0022 #include <iostream>  // for operator<<, basic_ostream, basic_os...
0023 #include <sstream>
0024 #include <vector>    // for vector
0025 
0026 SepdMonDraw::SepdMonDraw(const std::string &name)
0027   : OnlMonDraw(name)
0028 {
0029   return;
0030 }
0031 
0032 int SepdMonDraw::Init()
0033 {
0034   return 0;
0035 }
0036 
0037 int SepdMonDraw::MakeCanvas(const std::string &name)
0038 {
0039   OnlMonClient *cl = OnlMonClient::instance();
0040   int xsize = cl->GetDisplaySizeX();
0041   int ysize = cl->GetDisplaySizeY();
0042   if (name == "SepdMon0")
0043   {
0044     int canvasindex = 0;
0045 
0046     // --- this is called by int DrawFirst(string&)
0047     // xpos (-1) negative: do not draw menu bar
0048     //TC[canvasindex] = new TCanvas(name.c_str(), "sEPD Monitor 1 - UNDER CONSTRUCTION - Hits/Event vs Tile", -1, 0, 1200, 600);
0049     TC[canvasindex] = new TCanvas(name.c_str(), "sEPD Monitor 1 - Hits/Event vs Tile", -1, 0, 1200, 600);
0050     // root is pathetic, whenever a new TCanvas is created root piles up
0051     // 6kb worth of X11 events which need to be cleared with
0052     // gSystem->ProcessEvents(), otherwise your process will grow and
0053     // grow and grow but will not show a definitely lost memory leak
0054     gSystem->ProcessEvents();
0055     Pad[0] = new TPad("sepdpad0", "Left", 0., 0., 0.5, 1);
0056     Pad[1] = new TPad("sepdpad1", "Right", 0.5, 0., 1, 1);
0057     Pad[0]->Draw();
0058     Pad[1]->Draw();
0059     // this one is used to plot the run number on the canvas
0060     transparent[canvasindex] = new TPad("transparent0", "this does not show", 0, 0, 1, 1);
0061     transparent[canvasindex]->SetFillStyle(4000);
0062     transparent[canvasindex]->Draw();
0063     TC[canvasindex]->SetEditable(false);
0064   }
0065   else if (name == "SepdMon1")
0066   {
0067     int canvasindex = 1;
0068     // xpos negative: do not draw menu bar
0069     //TC[canvasindex] = new TCanvas(name.c_str(), "sEPD Monitor 2 - ADC Distributions", 1200, 600);
0070     TC[canvasindex] = new TCanvas(name.c_str(), "sEPD Monitor 2 - EXPERT - ADC Distributions", -1, 0, 1600, 800);
0071     gSystem->ProcessEvents();
0072     for ( int i = 0; i < 32; ++i )
0073       {
0074         // left 4x4 is for the 16 rings in the north, the right 4x4 is for the 16 rings in the south
0075         //if ( i == 16 ) std::cout << "Initializing 32 pads " << std::endl;
0076         double xlo = (i%4)*0.125 + (i/16)*0.5;
0077         double xhi = xlo + 0.125;
0078         double ylo = 0.75 - (i/4)*0.25 + (i/16);
0079         double yhi = ylo + 0.25;
0080         //std::cout << xlo << "\t" << ylo << "\t" << xhi << "\t" << yhi << std::endl;
0081         adc_dist_pad[i] = new TPad(Form("adc_dist_pad_%d",i),"",xlo,ylo,xhi,yhi);
0082         adc_dist_pad[i]->Draw();
0083         adc_dist_pad[i]->SetTopMargin(0.2);
0084         adc_dist_pad[i]->SetLeftMargin(0.2);
0085       }
0086     // this one is used to plot the run number on the canvas
0087     transparent[canvasindex] = new TPad("transparent1", "this does not show", 0, 0, 1, 1);
0088     transparent[canvasindex]->SetFillStyle(4000);
0089     transparent[canvasindex]->Draw();
0090     TC[canvasindex]->SetEditable(false);
0091   }
0092   else if (name == "SepdMon2_EXP")
0093   {
0094     int canvasindex = 2;
0095     // xpos negative: do not draw menu bar
0096     TC[canvasindex] = new TCanvas(name.c_str(), "sEPD Monitor 3exp - EXPERT - North vs South Correlations", -1, 0, 1200, 600);
0097     gSystem->ProcessEvents();
0098     Pad[4] = new TPad("sepdpad4", "Left", 0., 0., 0.5, 1);
0099     Pad[5] = new TPad("sepdpad5", "Right", 0.5, 0., 1, 1);
0100     Pad[4]->Draw();
0101     Pad[5]->Draw();
0102     // this one is used to plot the run number on the canvas
0103     transparent[canvasindex] = new TPad("transparent1", "this does not show", 0, 0, 1, 1);
0104     transparent[canvasindex]->SetFillStyle(4000);
0105     transparent[canvasindex]->Draw();
0106     TC[canvasindex]->SetEditable(false);
0107   }
0108   else if (name == "SepdMon2")
0109   {
0110     int canvasindex = 3;
0111     // xpos negative: do not draw menu bar
0112     TC[canvasindex] = new TCanvas(name.c_str(), "sEPD Monitor 3sc - Under Development - North vs South Correlations", -1, 0, 1200, 600);
0113     gSystem->ProcessEvents();
0114     Pad[4] = new TPad("sepdpad4", "Left", 0., 0., 0.5, 1);
0115     Pad[5] = new TPad("sepdpad5", "Right", 0.5, 0., 1, 1);
0116     Pad[4]->Draw();
0117     Pad[5]->Draw();
0118     // this one is used to plot the run number on the canvas
0119     transparent[canvasindex] = new TPad("transparent1", "this does not show", 0, 0, 1, 1);
0120     transparent[canvasindex]->SetFillStyle(4000);
0121     transparent[canvasindex]->Draw();
0122     TC[canvasindex]->SetEditable(false);
0123   }
0124   else if (name == "SepdMon3")
0125   {
0126     int canvasindex = 4;
0127     //TC[canvasindex] = new TCanvas(name.c_str(), "sEPD Monitor 4 - Waveform Info", -1, 0, xsize / 3, ysize);
0128     TC[canvasindex] = new TCanvas(name.c_str(), "sEPD Monitor 4 - Waveform Info", -1, 0, 650, 850);
0129     gSystem->ProcessEvents();
0130     Pad[6] = new TPad("sepdpad6", "ADC vs sample #", 0.0, 0.6, 1.0, 0.95, 0);
0131     Pad[7] = new TPad("sepdpad7", "counts vs sample #", 0.0, 0.3, 1.0, 0.6, 0);
0132     Pad[8] = new TPad("sepdpad8", "pedestals", 0.0, 0.0, 1.0, 0.3, 0);
0133     Pad[6]->Draw();
0134     Pad[7]->Draw();
0135     Pad[8]->Draw();
0136     // this one is used to plot the run number on the canvas
0137     transparent[canvasindex] = new TPad("transparent3", "this does not show", 0, 0, 1, 1);
0138     transparent[canvasindex]->SetFillStyle(4000);
0139     transparent[canvasindex]->Draw();
0140     TC[canvasindex]->SetEditable(0);
0141   }
0142   else if (name == "SepdMon4")
0143   {
0144     int canvasindex = 5;
0145     // xpos negative: do not draw menu bar
0146     //TC[canvasindex] = new TCanvas(name.c_str(), "sEPD Monitor 5 - Packet Information", -1, 0, xsize / 3, ysize);
0147     //TC[canvasindex] = new TCanvas(name.c_str(), "sEPD Monitor 5 - Packet Information", -1, 0, 1200, 850);
0148     TC[canvasindex] = new TCanvas(name.c_str(), "sEPD Monitor 5 - EXPERT - Packet Information", -1, 0, 1200, 850);
0149     gSystem->ProcessEvents();
0150     Pad[10] = new TPad("sepdpad10", "packet event check", 0.0, 0.6, 1.0 / 2, 0.95, 0);
0151     Pad[11] = new TPad("sepdpad11", "packet size", 0.0, 0.3, 1.0 / 2, 0.6, 0);
0152     Pad[12] = new TPad("sepdpad12", "packet channels", 0.0, 0.0, 1.0 / 2, 0.3, 0);
0153     Pad[13] = new TPad("sepdpad13", "event number offset", 0.5, 0.6, 1.0, 0.95, 0);
0154 
0155     Pad[10]->Draw();
0156     Pad[11]->Draw();
0157     Pad[12]->Draw();
0158     Pad[13]->Draw();
0159     //  this one is used to plot the run number on the canvas
0160     transparent[canvasindex] = new TPad("transparent1", "this does not show", 0, 0, 1., 1);
0161     transparent[canvasindex]->SetFillStyle(4000);
0162     transparent[canvasindex]->Draw();
0163 
0164     // packet warnings
0165     // xlow, ylow, xup, yup
0166     warning[1] = new TPad("warning1", "sEPD Packet Warnings", 0.5, 0, 1, 0.65);
0167     warning[1]->SetFillStyle(4000);
0168     warning[1]->Draw();
0169     TC[canvasindex]->SetEditable(0);
0170   }
0171   else if (name == "SepdMon5")
0172   {
0173     int canvasindex = 6;
0174     TC[canvasindex] = new TCanvas(name.c_str(), "sEPD Monitor 6 - Noise RMS", -1, 0, 1200, 600);
0175     gSystem->ProcessEvents();
0176     Pad[14] = new TPad("sepdpad14", "Left", 0., 0., 0.5, 1);
0177     Pad[15] = new TPad("sepdpad15", "Right", 0.5, 0., 1, 1);
0178     Pad[14]->Draw();
0179     Pad[15]->Draw();
0180     // this one is used to plot the run number on the canvas
0181     transparent[canvasindex] = new TPad("transparent0", "this does not show", 0, 0, 1, 1);
0182     transparent[canvasindex]->SetFillStyle(4000);
0183     transparent[canvasindex]->Draw();
0184     TC[canvasindex]->SetEditable(false);
0185   }
0186     else if (name == "SepdMon6")
0187   {
0188     int canvasindex=8;
0189   if (gROOT->FindObject("SepdMon6"))
0190   {
0191     return canvasindex;
0192   }
0193     // xpos negative: do not draw menu bar
0194     TC[canvasindex] = new TCanvas(name.c_str(), "SepdMon Packet Decoder Status", -1, ysize, xsize , ysize);
0195     TC[canvasindex] -> Draw();
0196     gSystem->ProcessEvents();
0197     Pad[16] = new TPad("sepdpad16", "packet event check", 0.0, 0.0, 0.78, 0.95, 0);
0198     Pad[16]->SetLeftMargin(0.07);
0199     Pad[16]->SetRightMargin(0.05);
0200     Pad[16]->Draw();
0201     Pad[17] = new TPad("sepdpad17", "packet event check legend", 0.75, 0.3, 0.95, 0.95, 0);
0202     //Pad[2]->SetLeftMargin(0.05);
0203     Pad[17]->SetRightMargin(0);
0204     Pad[17] -> Draw();
0205     //this one is used to plot the run number on the canvas
0206     transparent[canvasindex] = new TPad("transparent1", "this does not show", 0, 0, 1., 1);
0207     transparent[canvasindex]->SetFillStyle(4000);
0208     transparent[canvasindex]->Draw();
0209 
0210     // packet warnings
0211     warning[2] = new TPad("warning1", "packet warnings", 0.75, 0.1, 1, 0.3);
0212     warning[2] -> SetRightMargin(0);
0213     warning[2]->SetFillStyle(4000);
0214     warning[2]->Draw();
0215     return canvasindex;
0216   }
0217   else if (name == "SepdServerStats")
0218   {
0219     int canvasindex = 7;
0220     TC[canvasindex] = new TCanvas(name.c_str(), "SepdMon Server Stats", -1, 0, xsize, ysize);
0221     gSystem->ProcessEvents();
0222     // this one is used to plot the run number on the canvas
0223     transparent[canvasindex] = new TPad("transparent5", "this does not show", 0, 0, 1, 1);
0224     transparent[canvasindex]->Draw();
0225     transparent[canvasindex]->SetFillColor(kGray);
0226     TC[canvasindex]->SetEditable(false);
0227   }
0228 
0229   return 0;
0230 }
0231 
0232 int SepdMonDraw::Draw(const std::string &what)
0233 {
0234   int iret = 0;
0235   int idraw = 0;
0236   if (what == "ALL" || what == "FIRST")
0237   {
0238     iret += DrawFirst(what);
0239     idraw++;
0240   }
0241   if (what == "ALL" || what == "SECOND")
0242   {
0243     iret += DrawSecond(what);
0244     idraw++;
0245   }
0246   if (what == "ALL" || what == "THIRD")
0247   {
0248     iret += DrawThird(what);
0249     idraw++;
0250   }
0251   if (what == "ALL" || what == "THIRD_EXP")
0252   {
0253     iret += DrawThird_Expert(what);
0254     idraw++;
0255   }
0256   if (what == "ALL" || what == "FOURTH")
0257   {
0258     iret += DrawFourth(what);
0259     idraw++;
0260   }
0261   if (what == "ALL" || what == "FIFTH")
0262   {
0263     iret += DrawFifth(what);
0264     idraw++;
0265   }
0266   if (what == "ALL" || what == "SIXTH")
0267   {
0268     iret += DrawSixth(what);
0269     idraw++;
0270   }
0271   if (what == "ALL" || what == "SEVENTH")
0272   {
0273     iret += DrawSeventh(what);
0274     idraw++;
0275   }
0276   if (what == "ALL" || what == "SERVERSTATS")
0277   {
0278     iret += DrawServerStats();
0279     idraw++;
0280   }
0281 
0282   /*
0283     if (what == "ALL" || what == "HISTORY")
0284     {
0285       iret += DrawHistory(what);
0286       idraw++;
0287     }
0288     */
0289   if (!idraw)
0290   {
0291     std::cout << __PRETTY_FUNCTION__ << " Unimplemented Drawing option: " << what << std::endl;
0292     iret = -1;
0293   }
0294   return iret;
0295 }
0296 
0297 
0298 
0299 int SepdMonDraw::DrawFirst(const std::string & /* what */)
0300 {
0301   int canvasindex = 0;
0302   if (!gROOT->FindObject("SepdMon0"))
0303   {
0304     MakeCanvas("SepdMon0");
0305   }
0306   OnlMonClient *cl = OnlMonClient::instance();
0307   //TH1D *h_ADC_all_channel = cl->getHisto("SEPDMON_0", "h_ADC_all_channel");
0308   TH1 *h_hits_all_channel = cl->getHisto("SEPDMON_0", "h_hits_all_channel");
0309   TH1 *h_event = cl->getHisto("SEPDMON_0", "h_event");
0310   std::pair<time_t, int> evttime = cl->EventTime("CURRENT");
0311   TC[canvasindex]->SetEditable(true);
0312   TC[canvasindex]->Clear("D");
0313 
0314   //if (!h_ADC_all_channel)
0315   if (!h_hits_all_channel || !h_event)
0316   {
0317     //cout which one is not found
0318     if (!h_hits_all_channel) std::cout << "h_hits_all_channel not found" << std::endl;
0319     if (!h_event) std::cout << "h_event not found" << std::endl;
0320     DrawDeadServer(transparent[canvasindex]);
0321     TC[canvasindex]->SetEditable(false);
0322     return -1;
0323   }
0324 
0325   // ----------------------------
0326   // --- begin Rosi (mostly ) ---
0327   // ----------------------------
0328 
0329   TH2* polar_histS = new TH2F("polar_histS","polar_hist",
0330                                24, 0, 2*M_PI,
0331                                16, 0.15, 3.5);
0332   TH2* polar_histN = new TH2F("polar_histN","polar_hist",
0333                                24, 0, 2*M_PI,
0334                                16, 0.15, 3.5);
0335 
0336   //tile 0 is 2x the angular size of the rest of the tiles and needs a separate histogram
0337   TH2* polar_histS01 = new TH2F("polar_histS01","polar_hist",
0338                                  12, 0, 2*M_PI,
0339                                  16, 0.15, 3.5);
0340   TH2* polar_histN01 = new TH2F("polar_histN01","polar_hist",
0341                                  12, 0, 2*M_PI,
0342                                  16, 0.15, 3.5);
0343 
0344   // --- normalize
0345   //h_ADC_all_channel->Divide(h_hits_all_channel);
0346   int nevt = h_event->GetEntries();
0347   //h_ADC_all_channel->Scale(1.0/nevt);
0348   h_hits_all_channel->Scale(1.0/nevt);
0349   for ( int i = 0; i < 768; ++i )
0350     {
0351       int adc_channel = i;
0352       float adc_signal = h_hits_all_channel->GetBinContent(i+1);
0353       if ( adc_signal <= 0.0001 ) adc_signal = 0.0001;
0354       int tile = returnTile(i);
0355       int odd = (tile+1)%2;
0356       //int ring = returnRing(adc_channel);
0357       int sector = returnSector(adc_channel);
0358       int arm = returnArm(adc_channel);
0359       if ( arm == 0 )
0360         {
0361           if ( tile == 0 ) polar_histS01->SetBinContent(sector+1,1,adc_signal);
0362           else polar_histS->SetBinContent(sector*2+1+odd,(tile+1)/2+1,adc_signal);
0363         }
0364       if ( arm == 1 )
0365         {
0366           if ( tile == 0 ) polar_histN01->SetBinContent(sector+1,1,adc_signal);
0367           else polar_histN->SetBinContent(sector*2+1+odd,(tile+1)/2+1,adc_signal);
0368         }
0369     }
0370 
0371   // -------------------------
0372   // --- end Rosi (mostly) ---
0373   // -------------------------
0374 
0375   // --- may need to update these depending on whether there are "hot" tiles
0376   double zmin = 0.0;
0377   //double zmax = 0.1; // pp
0378   //double zmax = 1.0; // AuAu
0379   double zmax = 0.7; // OO first look
0380   //double zmax = 300;
0381   //double zmax = 1.1*h_ADC_all_channel->GetMaximum();
0382 
0383   TText tarm;
0384   tarm.SetNDC();
0385   tarm.SetTextFont(42);
0386   tarm.SetTextSize(0.05);
0387 
0388   gStyle->SetOptStat(0);
0389   // ---
0390   Pad[0]->cd();
0391   polar_histS->GetZaxis()->SetRangeUser(zmin,zmax);
0392   polar_histS01->GetZaxis()->SetRangeUser(zmin,zmax);
0393   // gPad->SetLeftMargin(0.2);
0394   // gPad->SetRightMargin(0.0);
0395   gPad->SetTicks(1,1);
0396   gPad->DrawFrame(-3.8, -3.8,3.8, 3.8);
0397   polar_histS->Draw("same col pol AH");
0398   polar_histS01->Draw("same col pol AH");
0399   tarm.DrawText(0.45,0.91,"South");
0400   gStyle->SetPalette(57);
0401   // ---
0402   Pad[1]->cd();
0403   polar_histN->GetZaxis()->SetRangeUser(zmin,zmax);
0404   polar_histN01->GetZaxis()->SetRangeUser(zmin,zmax);
0405   gPad->SetLeftMargin(0.05);
0406   gPad->SetRightMargin(0.15);
0407   gPad->SetTicks(1,1);
0408   gPad->DrawFrame(-3.8, -3.8,3.8, 3.8);
0409   polar_histN->Draw("same colz pol AH");
0410   polar_histN01->Draw("same col pol AH");
0411   tarm.DrawText(0.40,0.91,"North");
0412   gStyle->SetPalette(57);
0413 
0414   TText PrintRun;
0415   PrintRun.SetTextFont(62);
0416   PrintRun.SetTextSize(0.04);
0417   PrintRun.SetNDC();          // set to normalized coordinates
0418   PrintRun.SetTextAlign(23);  // center/top alignment
0419   std::ostringstream runnostream;
0420   std::string runstring;
0421   // fill run number and event time into string
0422   runnostream << ThisName << "_1 Run " << cl->RunNumber()
0423               << ", Time: " << ctime(&evttime.first);
0424   runstring = runnostream.str();
0425   transparent[canvasindex]->cd();
0426   PrintRun.SetTextColor(evttime.second);
0427   PrintRun.DrawText(0.5, 1., runstring.c_str());
0428   TC[canvasindex]->Update();
0429   TC[canvasindex]->Show();
0430   TC[canvasindex]->SetEditable(false);
0431   return 0;
0432 }
0433 
0434 
0435 
0436 int SepdMonDraw::DrawSecond(const std::string & /* what */)
0437 {
0438   int canvasindex = 1;
0439   if (!gROOT->FindObject("SepdMon1"))
0440   {
0441     MakeCanvas("SepdMon1");
0442   }
0443 
0444   OnlMonClient *cl = OnlMonClient::instance();
0445 
0446   TH1 *h_ADC_channel[768];
0447   for ( int i = 0; i < 768; ++i )
0448   {
0449     h_ADC_channel[i] = cl->getHisto("SEPDMON_0",Form("h_ADC_channel_%d",i));
0450     if (!h_ADC_channel[i])
0451     {
0452       DrawDeadServer(transparent[canvasindex]);
0453       TC[canvasindex]->SetEditable(0);
0454       return -1;
0455     }
0456   }
0457 
0458   TH1 *h_event = cl->getHisto("SEPDMON_0", "h_event");
0459   if (!h_event)
0460   {
0461     DrawDeadServer(transparent[canvasindex]);
0462     TC[canvasindex]->SetEditable(0);
0463     return -1;
0464   }
0465   int nevt = h_event->GetEntries();
0466   std::pair<time_t,int> evttime = cl->EventTime("CURRENT");
0467 
0468   TC[canvasindex]->SetEditable(true);
0469   TC[canvasindex]->Clear("D");
0470 
0471   gStyle->SetPalette(kRainBow);
0472   TText tring;
0473   tring.SetNDC();
0474   tring.SetTextFont(42);
0475   tring.SetTextSize(0.1);
0476   TText tside;
0477   tside.SetNDC();
0478   tside.SetTextFont(42);
0479   tside.SetTextSize(0.1);
0480   for ( int i = 0; i < 768; ++i )
0481     {
0482       h_ADC_channel[i] = cl->getHisto("SEPDMON_0",Form("h_ADC_channel_%d",i));
0483       int tile = returnTile(i);
0484       if ( tile < 0 || tile > 31 ) continue;
0485       int odd = (tile+1)%2;
0486       int sector = returnSector(i);
0487       if ( sector < 0 || sector > 11 ) continue;
0488       int ring = returnRing(i);
0489       if ( ring < 0 || ring > 15 ) continue;
0490       int arm = returnArm(i);
0491       if ( arm < 0 || arm > 1 ) continue;
0492       int pad_index = ring + arm*16;
0493       if ( pad_index < 0 || pad_index > 31 ) continue;
0494       if ( adc_dist_pad[pad_index] ) adc_dist_pad[pad_index]->cd();
0495       // ---
0496       //int color = colors[tile];
0497       int color_index = sector;
0498       int skip = 255/12;
0499       if ( ring > 0 )
0500         {
0501           color_index = sector*2+odd;
0502           skip = 255/24;
0503         }
0504       int color = gStyle->GetColorPalette(color_index*skip);
0505       // ---
0506       if ( h_ADC_channel[i] )
0507         {
0508           h_ADC_channel[i]->Scale(1.0/nevt);
0509           h_ADC_channel[i]->GetXaxis()->SetNdivisions(505);
0510           h_ADC_channel[i]->GetXaxis()->SetRangeUser(0,500); // okay for AuAu and pp and OO
0511           h_ADC_channel[i]->SetMinimum(0.0);
0512           h_ADC_channel[i]->SetMaximum(0.003);
0513           h_ADC_channel[i]->SetLineColor(color);
0514           //h_ADC_channel[i]->SetFillColor(color);
0515           h_ADC_channel[i]->Draw("same hist");
0516         }
0517       else std::cout << "Missing histogram for ADC channel " << i << std::endl;
0518       tring.DrawText(0.55,0.7,Form("Ring %d",ring));
0519       if ( arm == 0 ) tring.DrawText(0.55,0.6,"South");
0520       if ( arm == 1 ) tring.DrawText(0.55,0.6,"North");
0521       gPad->SetTicky();
0522       gPad->SetTickx();
0523     }
0524   //std::cout << "Done drawing 768 ADC channel histograms... " << std::endl;
0525 
0526   TText PrintRun;
0527   PrintRun.SetTextFont(62);
0528   PrintRun.SetTextSize(0.04);
0529   PrintRun.SetNDC();          // set to normalized coordinates
0530   PrintRun.SetTextAlign(23);  // center/top alignment
0531   std::ostringstream runnostream;
0532   std::string runstring;
0533   // fill run number and event time into string
0534   runnostream << "EXPERT ONLY " << ThisName << "_2 Run " << cl->RunNumber()
0535               << ", Time: " << ctime(&evttime.first);
0536   runstring = runnostream.str();
0537   transparent[canvasindex]->cd();
0538   PrintRun.SetTextColor(evttime.second);
0539   PrintRun.DrawText(0.5, 1., runstring.c_str());
0540   TC[canvasindex]->Update();
0541   TC[canvasindex]->Show();
0542   TC[canvasindex]->SetEditable(false);
0543 
0544   return 0;
0545 
0546 }
0547 
0548 
0549 
0550 int SepdMonDraw::DrawThird_Expert(const std::string & /* what */)
0551 {
0552   int canvasindex = 2;
0553   if (!gROOT->FindObject("SepdMon2_EXP"))
0554   {
0555     MakeCanvas("SepdMon2_EXP");
0556   }
0557   OnlMonClient *cl = OnlMonClient::instance();
0558 
0559   TH2 *h_ADC_corr = (TH2 *) cl->getHisto("SEPDMON_0", "h_ADC_corr");
0560   TH2 *h_hits_corr = (TH2 *) cl->getHisto("SEPDMON_0", "h_hits_corr");
0561   std::pair<time_t,int> evttime = cl->EventTime("CURRENT");
0562   if (!h_ADC_corr || !h_hits_corr)
0563   {
0564     DrawDeadServer(transparent[canvasindex]);
0565     TC[canvasindex]->SetEditable(false);
0566     return -1;
0567   }
0568   // --- rebin histograms
0569   h_ADC_corr->Rebin2D(5,5);//bringing this back for pp
0570   //h_hits_corr->Rebin2D(5,5);
0571   // ---
0572   TC[canvasindex]->SetEditable(true);
0573   TC[canvasindex]->Clear("D");
0574   Pad[4]->cd();
0575   h_ADC_corr->GetYaxis()->SetNdivisions(505);
0576   h_ADC_corr->GetXaxis()->SetNdivisions(505);
0577   // h_ADC_corr->GetYaxis()->SetRangeUser(0,1.5e6); // AuAu
0578   // h_ADC_corr->GetXaxis()->SetRangeUser(0,1.5e6); // AuAu
0579   // h_ADC_corr->GetYaxis()->SetRangeUser(0,2e4); // pp
0580   // h_ADC_corr->GetXaxis()->SetRangeUser(0,2e4); // pp
0581   h_ADC_corr->GetYaxis()->SetRangeUser(0,2.5e5); // OO lower ADC than AuAu
0582   h_ADC_corr->GetXaxis()->SetRangeUser(0,2.5e5); // OO
0583   h_ADC_corr->Draw("COLZ");
0584   // ---
0585   gPad->SetLogz();
0586   gPad->SetBottomMargin(0.16);
0587   gPad->SetRightMargin(0.05);
0588   gPad->SetLeftMargin(0.2);
0589   gStyle->SetOptStat(0);
0590   gStyle->SetPalette(57);
0591   gPad->SetTicky();
0592   gPad->SetTickx();
0593   // ---
0594   Pad[5]->cd();
0595   h_hits_corr->GetYaxis()->SetNdivisions(505);
0596   h_hits_corr->GetXaxis()->SetNdivisions(505);
0597   // h_hits_corr->GetYaxis()->SetRangeUser(0,380); // AuAu shoulda been 384 lol
0598   // h_hits_corr->GetXaxis()->SetRangeUser(0,380); // AuAu
0599   // h_hits_corr->GetYaxis()->SetRangeUser(0,200); // pp
0600   // h_hits_corr->GetXaxis()->SetRangeUser(0,200); // pp
0601   h_hits_corr->GetYaxis()->SetRangeUser(0,380); // OO similar occupancy as AuAu
0602   h_hits_corr->GetXaxis()->SetRangeUser(0,380); // OO
0603   h_hits_corr->Draw("COLZ");
0604   // ---
0605   gPad->SetLogz();
0606   gPad->SetBottomMargin(0.16);
0607   gPad->SetRightMargin(0.05);
0608   gPad->SetLeftMargin(0.2);
0609   gStyle->SetOptStat(0);
0610   gStyle->SetPalette(57);
0611   gPad->SetTicky();
0612   gPad->SetTickx();
0613   // ---
0614   TText PrintRun;
0615   PrintRun.SetTextFont(62);
0616   PrintRun.SetTextSize(0.04);
0617   PrintRun.SetNDC();          // set to normalized coordinates
0618   PrintRun.SetTextAlign(23);  // center/top alignment
0619   std::ostringstream runnostream;
0620   std::string runstring;
0621   // fill run number and event time into string
0622   runnostream << "EXPERT ONLY " << ThisName << "_3 Run " << cl->RunNumber()
0623               << ", Time: " << ctime(&evttime.first);
0624   runstring = runnostream.str();
0625   transparent[canvasindex]->cd();
0626   PrintRun.SetTextColor(evttime.second);
0627   PrintRun.DrawText(0.5, 1., runstring.c_str());
0628   TC[canvasindex]->Update();
0629   TC[canvasindex]->Show();
0630   TC[canvasindex]->SetEditable(false);
0631   return 0;
0632 }
0633 
0634 int SepdMonDraw::DrawThird(const std::string & /* what */)
0635 {
0636   int canvasindex = 3;
0637   if (!gROOT->FindObject("SepdMon2"))
0638   {
0639     MakeCanvas("SepdMon2");
0640   }
0641   OnlMonClient *cl = OnlMonClient::instance();
0642 
0643   TH2 *h_ADC_corr = (TH2 *) cl->getHisto("SEPDMON_0", "h_ADC_corr");
0644   //TH2 *h_hits_corr = (TH2 *) cl->getHisto("SEPDMON_0", "h_hits_corr");
0645   std::pair<time_t,int> evttime = cl->EventTime("CURRENT");
0646   if (!h_ADC_corr)
0647   {
0648     DrawDeadServer(transparent[canvasindex]);
0649     TC[canvasindex]->SetEditable(false);
0650     return -1;
0651   }
0652   // ---
0653   TH1* h_adc_south = h_ADC_corr->ProjectionX();
0654   TH1* h_adc_north = h_ADC_corr->ProjectionY();
0655   h_adc_south->SetLineColor(kBlue);
0656   h_adc_north->SetLineColor(kRed);
0657   h_adc_south->SetLineWidth(2);
0658   h_adc_north->SetLineWidth(2);
0659   // --- rebin histograms
0660   h_ADC_corr->Rebin2D(5,5);
0661   //h_hits_corr->Rebin2D(5,5);
0662   // ---
0663   TC[canvasindex]->SetEditable(true);
0664   TC[canvasindex]->Clear("D");
0665   Pad[4]->cd();
0666   h_ADC_corr->GetYaxis()->SetNdivisions(505);
0667   h_ADC_corr->GetXaxis()->SetNdivisions(505);
0668   // h_ADC_corr->GetYaxis()->SetRangeUser(0,1.5e6); // AuAu
0669   // h_ADC_corr->GetXaxis()->SetRangeUser(0,1.5e6); // AuAu
0670   // h_ADC_corr->GetYaxis()->SetRangeUser(0,2e4); // pp
0671   // h_ADC_corr->GetXaxis()->SetRangeUser(0,2e4); // pp
0672   h_ADC_corr->GetYaxis()->SetRangeUser(0,2.5e5); // OO lower ADC than AuAu
0673   h_ADC_corr->GetXaxis()->SetRangeUser(0,2.5e5); // OO
0674   h_ADC_corr->Draw("COLZ");
0675   // ---
0676   gPad->SetLogz();
0677   gPad->SetBottomMargin(0.16);
0678   gPad->SetRightMargin(0.05);
0679   gPad->SetLeftMargin(0.2);
0680   gStyle->SetOptStat(0);
0681   gStyle->SetPalette(57);
0682   gPad->SetTicky();
0683   gPad->SetTickx();
0684   // ---
0685   Pad[5]->cd();
0686   // h_hits_corr->GetYaxis()->SetNdivisions(505);
0687   // h_hits_corr->GetXaxis()->SetNdivisions(505);
0688   // h_hits_corr->GetYaxis()->SetRangeUser(0,380);
0689   // h_hits_corr->GetXaxis()->SetRangeUser(0,380);
0690   // h_hits_corr->Draw("COLZ");
0691   h_adc_south->GetXaxis()->SetNdivisions(505);
0692   //h_adc_south->GetXaxis()->SetRangeUser(0,1.5e6); // AuAu
0693   // h_adc_south->GetXaxis()->SetRangeUser(0,2e4); // pp
0694   h_adc_south->GetXaxis()->SetRangeUser(0,2.5e5); // OO
0695   h_adc_south->GetXaxis()->SetTitle("ADC sum");
0696   h_adc_south->GetYaxis()->SetTitle("Counts");
0697   h_adc_south->Draw();
0698   h_adc_north->Draw("same");
0699   TLegend* leg = new TLegend(0.68,0.68,0.88,0.88);
0700   leg->AddEntry(h_adc_south,"South","l");
0701   leg->AddEntry(h_adc_north,"North","l");
0702   leg->SetFillStyle(0);
0703   leg->Draw();
0704   // ---
0705   gPad->SetLogz();
0706   gPad->SetBottomMargin(0.16);
0707   gPad->SetRightMargin(0.05);
0708   gPad->SetLeftMargin(0.2);
0709   gStyle->SetOptStat(0);
0710   gStyle->SetPalette(57);
0711   gPad->SetTicky();
0712   gPad->SetTickx();
0713   // ---
0714   TText PrintRun;
0715   PrintRun.SetTextFont(62);
0716   PrintRun.SetTextSize(0.04);
0717   PrintRun.SetNDC();          // set to normalized coordinates
0718   PrintRun.SetTextAlign(23);  // center/top alignment
0719   std::ostringstream runnostream;
0720   std::string runstring;
0721   // fill run number and event time into string
0722   runnostream << " Under Development " << ThisName << "_3 Run " << cl->RunNumber()
0723               << ", Time: " << ctime(&evttime.first);
0724   runstring = runnostream.str();
0725   transparent[canvasindex]->cd();
0726   PrintRun.SetTextColor(evttime.second);
0727   PrintRun.DrawText(0.5, 1., runstring.c_str());
0728   TC[canvasindex]->Update();
0729   TC[canvasindex]->Show();
0730   TC[canvasindex]->SetEditable(false);
0731   return 0;
0732 }
0733 
0734 int SepdMonDraw::DrawFourth(const std::string & /* what */)
0735 {
0736   int canvasindex = 4;
0737   if (!gROOT->FindObject("SepdMon3"))
0738   {
0739     MakeCanvas("SepdMon3");
0740   }
0741 
0742   OnlMonClient *cl = OnlMonClient::instance();
0743 
0744   TH1 *h_waveform_time = cl->getHisto("SEPDMON_0", "h1_waveform_time");
0745   TH1 *h_waveform_pedestal = cl->getHisto("SEPDMON_0", "h1_waveform_pedestal");
0746   TH2 *h2_sepd_waveform = (TH2 *) cl->getHisto("SEPDMON_0", "h2_sepd_waveform");
0747 
0748   //TH1 *h_event = cl->getHisto("SEPDMON_0", "h_event");
0749   //int nevt = h_event->GetEntries();
0750 
0751 
0752   TC[canvasindex]->SetEditable(1);
0753   TC[canvasindex]->Clear("D");
0754   Pad[6]->cd();
0755   if (!h2_sepd_waveform || !h_waveform_time || !h_waveform_pedestal)
0756   {
0757     //cout which one is not found
0758     if (!h2_sepd_waveform) std::cout << "h2_sepd_waveform not found" << std::endl;
0759     if (!h_waveform_time) std::cout << "h_waveform_time not found" << std::endl;
0760     if (!h_waveform_pedestal) std::cout << "h_waveform_pedestal not found" << std::endl;
0761     DrawDeadServer(transparent[canvasindex]);
0762     TC[canvasindex]->SetEditable(0);
0763     return -1;
0764   }
0765 
0766   Pad[6]->cd();
0767   gStyle->SetTitleFontSize(0.03);
0768   float ymaxp = h2_sepd_waveform->ProfileX()->GetMaximum();
0769   float ymaxdraw = ymaxp * 15; // was originally 20, but that was too much, but then 10 was too little...
0770   h2_sepd_waveform->GetYaxis()->SetRangeUser(0,ymaxdraw); // should work for AuAu and pp and OO
0771   h2_sepd_waveform->GetXaxis()->SetRangeUser(0, 11);
0772   h2_sepd_waveform->Draw("colz");
0773   // --- add a profile on top
0774   TProfile* tp1f_sepd_waveform = h2_sepd_waveform->ProfileX();
0775   tp1f_sepd_waveform->SetLineColor(kBlack);
0776   tp1f_sepd_waveform->SetLineWidth(2);
0777   tp1f_sepd_waveform->Draw("same");
0778   // --- draw vertical lines where the waveform should be
0779   // x1 y1 x2 y2
0780   TLine* lineleft = new TLine(4.5,0,4.5,ymaxdraw);
0781   TLine* lineright = new TLine(7.5,0,7.5,ymaxdraw);
0782   lineleft->SetLineColor(kBlack);
0783   lineleft->SetLineWidth(2);
0784   lineleft->SetLineStyle(2);
0785   lineleft->Draw();
0786   lineright->SetLineColor(kBlack);
0787   lineright->SetLineWidth(2);
0788   lineright->SetLineStyle(2);
0789   lineright->Draw();
0790 
0791   float tsize = 0.09;
0792   //h2_sepd_waveform->GetXaxis()->SetNdivisions(510, kTRUE);
0793   h2_sepd_waveform->GetXaxis()->SetNdivisions(12);
0794   h2_sepd_waveform->GetXaxis()->SetTitle("Sample #");
0795   h2_sepd_waveform->GetYaxis()->SetTitle("Waveform [ADC]");
0796   h2_sepd_waveform->GetXaxis()->SetLabelSize(tsize/1.15);
0797   h2_sepd_waveform->GetYaxis()->SetLabelSize(tsize/1.15);
0798   h2_sepd_waveform->GetXaxis()->SetTitleSize(tsize/1.15);
0799   h2_sepd_waveform->GetYaxis()->SetTitleSize(tsize/1.15);
0800   h2_sepd_waveform->GetXaxis()->SetTitleOffset(1.0);
0801   h2_sepd_waveform->GetYaxis()->SetTitleOffset(1.3);
0802   gPad->SetLogz();
0803   gPad->SetBottomMargin(0.16);
0804   gPad->SetRightMargin(0.05);
0805   gPad->SetLeftMargin(0.2);
0806   gStyle->SetOptStat(0);
0807   gStyle->SetPalette(57);
0808   gPad->SetTicky();
0809   gPad->SetTickx();
0810 
0811   TText PrintRun;
0812   PrintRun.SetTextFont(62);
0813   PrintRun.SetTextSize(0.03);
0814   PrintRun.SetNDC();          // set to normalized coordinates
0815   PrintRun.SetTextAlign(23);  // center/top alignment
0816   std::ostringstream runnostream;
0817   std::string runstring;
0818   std::pair<time_t,int> evttime = cl->EventTime("CURRENT");
0819   // fill run number and event time into string
0820   runnostream << ThisName << ": Pulse fitting, Run " << cl->RunNumber()
0821               << ", Time: " << ctime(&evttime.first);
0822   runstring = runnostream.str();
0823   transparent[canvasindex]->cd();
0824   PrintRun.SetTextColor(evttime.second);
0825   PrintRun.DrawText(0.5, 0.99, runstring.c_str());
0826 
0827   Pad[7]->cd();
0828 
0829   gStyle->SetTitleFontSize(0.06);
0830 
0831   h_waveform_time->GetXaxis()->SetRangeUser(0,11);
0832   //h_waveform_time->Scale(1.0/nevt);
0833   h_waveform_time->Draw("hist");
0834   // ---
0835   //h_waveform_time->GetXaxis()->SetNdivisions(510, kTRUE);
0836   h_waveform_time->GetXaxis()->SetNdivisions(12);
0837   h_waveform_time->GetXaxis()->SetTitle("Sample #");
0838   h_waveform_time->GetYaxis()->SetTitle("Normalized Counts");
0839   h_waveform_time->GetXaxis()->SetLabelSize(tsize);
0840   h_waveform_time->GetYaxis()->SetLabelSize(tsize);
0841   h_waveform_time->GetXaxis()->SetTitleSize(tsize);
0842   h_waveform_time->GetYaxis()->SetTitleSize(tsize);
0843   h_waveform_time->GetXaxis()->SetTitleOffset(1.0);
0844   h_waveform_time->GetYaxis()->SetTitleOffset(1.25);
0845   h_waveform_time->SetFillColorAlpha(kBlue, 0.1);
0846   if ( h_waveform_time->GetEntries() )
0847     {
0848       h_waveform_time->Scale(1.0/h_waveform_time->GetEntries());
0849     }
0850   gPad->Update();
0851   // draw two black lines for the okay timing range
0852   TLine line3(4.5, 0, 4.5, gPad->GetFrame()->GetY2());
0853   line3.SetLineColor(1);
0854   line3.SetLineWidth(3);
0855   line3.SetLineStyle(1);
0856   line3.DrawLine(4.5, 0, 4.5, gPad->GetFrame()->GetY2());
0857   // high line
0858   TLine line4(7.5, 0, 7.5, gPad->GetFrame()->GetY2());
0859   line4.SetLineColor(1);
0860   line4.SetLineWidth(3);
0861   line4.SetLineStyle(1);
0862   line4.DrawLine(7.5, 0, 7.5, gPad->GetFrame()->GetY2());
0863   // Draw a red line at mean x
0864   TLine line5(h_waveform_time->GetMean(), 0, h_waveform_time->GetMean(), gPad->GetFrame()->GetY2());
0865   line5.SetLineColor(2);
0866   line5.SetLineWidth(3);
0867   line5.SetLineStyle(1);
0868   line5.DrawLine(h_waveform_time->GetMean(), 0, h_waveform_time->GetMean(), gPad->GetFrame()->GetY2());
0869   // ---
0870   gPad->SetTopMargin(0.06);
0871   gPad->SetBottomMargin(0.18);
0872   gPad->SetRightMargin(0.05);
0873   gPad->SetLeftMargin(0.2);
0874   gStyle->SetOptStat(0);
0875   gPad->SetTicky();
0876   gPad->SetTickx();
0877 
0878   Pad[8]->cd();
0879 
0880   gStyle->SetTitleFontSize(0.06);
0881 
0882   // x-axis range is set in SepdMon.cc, need to change there if want a wider range
0883   //h_waveform_pedestal->Scale(1.0/nevt);
0884   h_waveform_pedestal->Draw("hist");
0885   h_waveform_pedestal->GetXaxis()->SetNdivisions(505);
0886   h_waveform_pedestal->GetXaxis()->SetTitle("ADC Pedestal");
0887   h_waveform_pedestal->GetYaxis()->SetTitle("Normalized Counts");
0888   h_waveform_pedestal->GetXaxis()->SetLabelSize(tsize);
0889   h_waveform_pedestal->GetYaxis()->SetLabelSize(tsize);
0890   h_waveform_pedestal->GetXaxis()->SetTitleSize(tsize);
0891   h_waveform_pedestal->GetYaxis()->SetTitleSize(tsize);
0892   h_waveform_pedestal->GetXaxis()->SetTitleOffset(0.9);
0893   h_waveform_pedestal->GetYaxis()->SetTitleOffset(1.25);
0894   h_waveform_pedestal->SetFillColorAlpha(kBlue, 0.1);
0895   if ( h_waveform_pedestal->GetEntries() )
0896     {
0897       h_waveform_pedestal->Scale(1.0/h_waveform_pedestal->GetEntries());
0898     }
0899   gPad->Update();
0900   TLine line6(1000, 0, 1000, gPad->GetFrame()->GetY2());
0901   line6.SetLineColor(1);
0902   line6.SetLineWidth(3);
0903   line6.SetLineStyle(1);
0904   line6.DrawLine(1000, 0, 1000, gPad->GetFrame()->GetY2());
0905   TLine line7(2000, 0, 2000, gPad->GetFrame()->GetY2());
0906   line7.SetLineColor(1);
0907   line7.SetLineWidth(3);
0908   line7.SetLineStyle(1);
0909   line7.DrawLine(2000, 0, 2000, gPad->GetFrame()->GetY2());
0910   gPad->SetTopMargin(0.06);
0911   gPad->SetBottomMargin(0.18);
0912   gPad->SetRightMargin(0.05);
0913   gPad->SetLeftMargin(0.2);
0914   gPad->SetLogy();
0915   gStyle->SetOptStat(0);
0916   gPad->SetTicky();
0917   gPad->SetTickx();
0918 
0919   TC[canvasindex]->Update();
0920   TC[canvasindex]->Show();
0921   TC[canvasindex]->SetEditable(0);
0922 
0923   return 0;
0924 }
0925 
0926 
0927 
0928 int SepdMonDraw::DrawFifth(const std::string & /* what */)
0929 {
0930   int canvasindex = 5;
0931   if (!gROOT->FindObject("SepdMon4"))
0932   {
0933     MakeCanvas("SepdMon4");
0934   }
0935   OnlMonClient *cl = OnlMonClient::instance();
0936 
0937   TH1 *h1_packet_number = cl->getHisto("SEPDMON_0", "h1_packet_number");
0938   TH1 *h1_packet_length = cl->getHisto("SEPDMON_0", "h1_packet_length");
0939   TH1 *h1_packet_chans = cl->getHisto("SEPDMON_0", "h1_packet_chans");
0940   TH1 *h1_packet_event = cl->getHisto("SEPDMON_0", "h1_packet_event");
0941 
0942   TC[canvasindex]->SetEditable(1);
0943   TC[canvasindex]->Clear("D");
0944 
0945   if (!h1_packet_number || !h1_packet_length || !h1_packet_chans || !h1_packet_event)
0946   {
0947     // print out which is not found
0948     if (!h1_packet_number) std::cout << "h1_packet_number not found" << std::endl;
0949     if (!h1_packet_length) std::cout << "h1_packet_length not found" << std::endl;
0950     if (!h1_packet_chans) std::cout << "h1_packet_chans not found" << std::endl;
0951     if (!h1_packet_event) std::cout << "h1_packet_event not found" << std::endl;
0952 
0953     DrawDeadServer(transparent[canvasindex]);
0954     TC[canvasindex]->SetEditable(0);
0955     return -1;
0956   }
0957 
0958 
0959 
0960   // find the x range for h1_packet_number
0961   double xmin = h1_packet_number->GetXaxis()->GetXmin();
0962   double xmax = h1_packet_number->GetXaxis()->GetXmax();
0963 
0964   TLine *one = new TLine(xmin, 1, xmax, 1);
0965   one->SetLineStyle(7);
0966 
0967   // --- Martin says 1047 for NZS
0968   int PACKET_SIZE = 1047;
0969   TLine *goodSize = new TLine(xmin, PACKET_SIZE, xmax, PACKET_SIZE);
0970   goodSize->SetLineStyle(7);
0971 
0972   // --- 128 channels per packet
0973   int N_CHANNELS = 128;
0974   TLine *goodChans = new TLine(xmin, N_CHANNELS, xmax, N_CHANNELS);
0975   goodChans->SetLineStyle(7);
0976 
0977   float param = 0.95;
0978 
0979   float tsize = 0.08;
0980   TLegend *leg = new TLegend(0.3, 0.16, 0.95, 0.4);
0981   leg->SetTextFont(42);
0982   leg->SetTextSize(tsize);
0983   leg->SetFillStyle(0);
0984   leg->SetBorderSize(0);
0985 
0986   TLine *warnLineOne = new TLine(xmin, param * 1, xmax, param * 1);
0987   warnLineOne->SetLineStyle(7);
0988   warnLineOne->SetLineColor(2);
0989   leg->AddEntry(warnLineOne, "95% Threshold", "l");
0990 
0991   // --- packet size is 1047 NZS
0992   TLine *warnLineSize = new TLine(xmin, param * PACKET_SIZE, xmax, param * PACKET_SIZE);
0993   warnLineSize->SetLineStyle(7);
0994   warnLineSize->SetLineColor(2);
0995 
0996   // --- 128 channels per packet
0997   TLine *warnLineChans = new TLine(xmin, param * N_CHANNELS, xmax, param * N_CHANNELS);
0998   warnLineChans->SetLineStyle(7);
0999   warnLineChans->SetLineColor(2);
1000 
1001 
1002   // --- this one is okay
1003   Pad[10]->cd();
1004   //float tsize = 0.08;
1005   h1_packet_number->GetYaxis()->SetRangeUser(0.0, 1.3);
1006   h1_packet_number->Draw("hist");
1007   one->Draw("same");
1008   warnLineOne->Draw("same");
1009   leg->Draw("same");
1010   h1_packet_number->GetXaxis()->SetNdivisions(6);
1011   h1_packet_number->GetXaxis()->SetTitle("Packet #");
1012   h1_packet_number->GetYaxis()->SetTitle("% Of Events Present");
1013   // the sizing is funny on this pad...
1014   h1_packet_number->GetXaxis()->SetLabelSize(tsize/1.15);
1015   h1_packet_number->GetYaxis()->SetLabelSize(tsize/1.15);
1016   h1_packet_number->GetXaxis()->SetTitleSize(tsize/1.15);
1017   h1_packet_number->GetYaxis()->SetTitleSize(tsize/1.15);
1018   h1_packet_number->GetXaxis()->SetTitleOffset(1);
1019   gPad->SetBottomMargin(0.16);
1020   gPad->SetRightMargin(0.05);
1021   gPad->SetLeftMargin(0.15);
1022   gStyle->SetOptStat(0);
1023   gPad->SetTicky();
1024   gPad->SetTickx();
1025 
1026   // --- this one is okay (1047 for NZS, variable for ZS)
1027   Pad[11]->cd();
1028   h1_packet_length->Draw("hist");
1029   h1_packet_length->GetYaxis()->SetRangeUser(0, 1200);
1030   goodSize->Draw("same");
1031   warnLineSize->Draw("same");
1032   h1_packet_length->GetXaxis()->SetNdivisions(6);
1033   h1_packet_length->GetXaxis()->SetTitle("Packet #");
1034   h1_packet_length->GetYaxis()->SetTitle("Average Packet Size");
1035   h1_packet_length->GetXaxis()->SetLabelSize(tsize);
1036   h1_packet_length->GetYaxis()->SetLabelSize(tsize);
1037   h1_packet_length->GetXaxis()->SetTitleSize(tsize);
1038   h1_packet_length->GetYaxis()->SetTitleSize(tsize);
1039   h1_packet_length->GetXaxis()->SetTitleOffset(1);
1040   h1_packet_length->GetYaxis()->SetTitleOffset(0.8);
1041   gPad->SetBottomMargin(0.16);
1042   gPad->SetRightMargin(0.05);
1043   gPad->SetLeftMargin(0.15);
1044   gStyle->SetOptStat(0);
1045   gPad->SetTicky();
1046   gPad->SetTickx();
1047 
1048   // --- this one is okay
1049   Pad[12]->cd();
1050   h1_packet_chans->Draw("hist");
1051   h1_packet_chans->GetYaxis()->SetRangeUser(0, 150);
1052   goodChans->Draw("same");
1053   warnLineChans->Draw("same");
1054   h1_packet_chans->GetXaxis()->SetNdivisions(6);
1055   h1_packet_chans->GetXaxis()->SetTitle("Packet #");
1056   h1_packet_chans->GetYaxis()->SetTitle("Average # of Channels");
1057   h1_packet_chans->GetXaxis()->SetLabelSize(tsize);
1058   h1_packet_chans->GetYaxis()->SetLabelSize(tsize);
1059   h1_packet_chans->GetXaxis()->SetTitleSize(tsize);
1060   h1_packet_chans->GetYaxis()->SetTitleSize(tsize);
1061   h1_packet_chans->GetXaxis()->SetTitleOffset(0.8);
1062   h1_packet_chans->GetYaxis()->SetTitleOffset(0.8);
1063   gPad->SetBottomMargin(0.16);
1064   gPad->SetRightMargin(0.05);
1065   gPad->SetLeftMargin(0.15);
1066   gStyle->SetOptStat(0);
1067   gPad->SetTicky();
1068   gPad->SetTickx();
1069 
1070   Pad[13]->cd();
1071   h1_packet_event->Draw("hist");
1072   // h1_packet_event->SetLineColor(kWhite);;
1073   // h1_packet_event->Draw("AH");
1074   double ymax = h1_packet_event->GetMaximum();
1075   double ymin = h1_packet_event->GetMinimum();
1076 
1077   // --- this one seems okay
1078   h1_packet_event->GetXaxis()->SetNdivisions(6);
1079   h1_packet_event->GetYaxis()->SetRangeUser(ymin - 0.3 * (ymax - ymin + 30), ymax + 0.3 * (ymax - ymin + 30));
1080   h1_packet_event->GetXaxis()->SetTitle("Packet #");
1081   h1_packet_event->GetYaxis()->SetTitle("Clock offset");
1082   h1_packet_event->GetXaxis()->SetLabelSize(tsize/1.15);
1083   h1_packet_event->GetYaxis()->SetLabelSize(tsize/1.15);
1084   h1_packet_event->GetXaxis()->SetTitleSize(tsize/1.15);
1085   h1_packet_event->GetYaxis()->SetTitleSize(tsize/1.15);
1086   h1_packet_event->GetXaxis()->SetTitleOffset(0.8);
1087   h1_packet_event->GetYaxis()->SetTitleOffset(0.8);
1088   gPad->SetBottomMargin(0.16);
1089   gPad->SetRightMargin(0.05);
1090   gPad->SetLeftMargin(0.15);
1091   gStyle->SetOptStat(0);
1092   gPad->SetTicky();
1093   gPad->SetTickx();
1094 
1095 
1096   // draw the warning here:
1097 
1098   warning[1]->cd();
1099 
1100 
1101   std::vector<int> badPackets;
1102   std::string list_of_bad_packets;
1103   bool packet_is_bad[7];
1104   for (int i = 1; i <= 6; i++)
1105   {
1106     packet_is_bad[i] = false;
1107     bool missing = false;
1108     bool badnumber = false;
1109     //bool badlength = false;
1110     bool badchans = false;
1111     if (h1_packet_number->GetBinContent(i) == 0)
1112     {
1113       missing = true;
1114     }
1115     if (h1_packet_number->GetBinContent(i) < param)
1116     {
1117       badnumber = true;
1118     }
1119     // no such thing as a bad length when zero suppression is on
1120     // if (h1_packet_length->GetBinContent(i) < param * PACKET_SIZE)
1121     // {
1122     //   badlength = true;
1123     // }
1124     if (h1_packet_chans->GetBinContent(i) < param * N_CHANNELS)
1125     {
1126       badchans = true;
1127     }
1128     //if (badnumber || badlength || badchans || missing)
1129     if (badnumber || badchans || missing)
1130     {
1131       int the_bad_packet = (int)h1_packet_number->GetBinCenter(i);
1132       packet_is_bad[i] = true;
1133       badPackets.push_back(the_bad_packet);
1134       list_of_bad_packets += std::to_string(the_bad_packet);
1135       list_of_bad_packets += ", ";
1136     }
1137   }
1138   // remove the final comma and space
1139   if (! list_of_bad_packets.empty())
1140     {
1141       list_of_bad_packets.resize(list_of_bad_packets.size() - 2);
1142     }
1143   // --- draw the packet information
1144   TText PacketWarn;
1145   PacketWarn.SetTextFont(42);
1146   //PacketWarn.SetTextSize(0.04);
1147   PacketWarn.SetTextSize(0.05);
1148   PacketWarn.SetTextColor(kBlack);
1149   PacketWarn.SetNDC();
1150   //PacketWarn.SetTextAlign(23);
1151   PacketWarn.DrawText(0.01, 0.75, "Packet Status:");
1152   for (int i = 1; i <= 6; i++)
1153     {
1154       if ( packet_is_bad[i] ) PacketWarn.SetTextColor(kRed);
1155       // PacketWarn.DrawText(0.01, 0.7 - 0.05 * i, Form("%d: %d%% events, %d size, %d channels, %d offset", i+9000,
1156       //                                               int(100*h1_packet_number->GetBinContent(i)+0.5),
1157       //                                               (int)h1_packet_length->GetBinContent(i),
1158       //                                               (int)h1_packet_chans->GetBinContent(i),
1159       //                                               (int)h1_packet_event->GetBinContent(i)) );
1160       PacketWarn.DrawText(0.01, 0.7 - 0.05 * i, Form("%d: %d%% events, %d size, %d channels", i+9000,
1161                                                      int(100*h1_packet_number->GetBinContent(i)+0.5),
1162                                                      (int)h1_packet_length->GetBinContent(i),
1163                                                      (int)h1_packet_chans->GetBinContent(i)) );
1164       PacketWarn.SetTextColor(kBlack);
1165     }
1166   if ( badPackets.size() == 0 )
1167     {
1168       PacketWarn.DrawText(0.01, 0.30, Form("No bad packets, everything okay"));
1169     }
1170   if ( badPackets.size() == 1 )
1171     {
1172       PacketWarn.SetTextColor(kRed);
1173       PacketWarn.DrawText(0.01, 0.30, Form("%d bad packet: %s",(int)badPackets.size(),list_of_bad_packets.c_str()));
1174     }
1175   if ( badPackets.size() > 1 )
1176     {
1177       PacketWarn.SetTextColor(kRed);
1178       PacketWarn.DrawText(0.01, 0.30, Form("%d bad packets: %s",(int)badPackets.size(),list_of_bad_packets.c_str()));
1179     }
1180 
1181 
1182   TText PrintRun;
1183   PrintRun.SetTextFont(62);
1184   PrintRun.SetTextSize(0.02);
1185   PrintRun.SetNDC();          // set to normalized coordinates
1186   PrintRun.SetTextAlign(23);  // center/top alignment
1187   std::ostringstream runnostream;
1188   std::string runstring;
1189   std::ostringstream runnostream2;
1190   std::pair<time_t,int> evttime = cl->EventTime("CURRENT");
1191   // fill run number and event time into string
1192 
1193   // runnostream << "EXPERT ONLY " << ThisName << "_2 Run " << cl->RunNumber()
1194   //             << ", Time: " << ctime(&evttime.first);
1195   // runnostream << "Packet Information";
1196   // runnostream2 << " Run " << cl->RunNumber() << ", Time: " << ctime(&evttime.first);
1197   runnostream << "EXPERT ONLY Packet Information";
1198   runnostream2 << " Run " << cl->RunNumber() << ", Time: " << ctime(&evttime.first);
1199   transparent[canvasindex]->cd();
1200 
1201   runstring = runnostream.str();
1202   PrintRun.SetTextColor(evttime.second);
1203   PrintRun.DrawText(0.5, .99, runstring.c_str());
1204 
1205   runstring = runnostream2.str();
1206   PrintRun.DrawText(0.5, .966, runstring.c_str());
1207   TC[canvasindex]->Update();
1208   TC[canvasindex]->Show();
1209   TC[canvasindex]->SetEditable(0);
1210   // if (save) TC[canvasindex]->SaveAs("plots/packets.pdf");
1211   return 0;
1212 }
1213 
1214 int SepdMonDraw::DrawSixth(const std::string & /* what */)
1215 {
1216   int canvasindex = 6;
1217   if (!gROOT->FindObject("SepdMon5"))
1218   {
1219     MakeCanvas("SepdMon5");
1220   }
1221   OnlMonClient *cl = OnlMonClient::instance();
1222   TProfile *profile_rms = (TProfile*) cl->getHisto("SEPDMON_0", "p_noiserms_all_channel");
1223   TC[canvasindex]->SetEditable(true);
1224   TC[canvasindex]->Clear("D");
1225   if (!profile_rms)
1226   {
1227     std::cout << "p_noiserms_all_channel not found" << std::endl;
1228     DrawDeadServer(transparent[canvasindex]);
1229     TC[canvasindex]->SetEditable(false);
1230     return -1;
1231   }
1232 
1233   std::pair<time_t, int> evttime = cl->EventTime("CURRENT");
1234 
1235   TH2* polar_histS_rms = new TH2F("polar_histS_rms","polar_hist_rms",
1236                                24, 0, 2*M_PI,
1237                                16, 0.15, 3.5);
1238   TH2* polar_histN_rms = new TH2F("polar_histN_rms","polar_hist_rms",
1239                                24, 0, 2*M_PI,
1240                                16, 0.15, 3.5);
1241 
1242   TH2* polar_histS01_rms = new TH2F("polar_histS01_rms","polar_hist_rms",
1243                                  12, 0, 2*M_PI,
1244                                  16, 0.15, 3.5);
1245   TH2* polar_histN01_rms = new TH2F("polar_histN01_rms","polar_hist_rms",
1246                                  12, 0, 2*M_PI,
1247                                  16, 0.15, 3.5);
1248 
1249   // --- fill polar
1250   for ( int i = 0; i < 768; ++i )
1251     {
1252       int adc_channel = i;
1253       float noiserms = profile_rms->GetBinError(i+1);
1254       int tile = returnTile(i);
1255       int odd = (tile+1)%2;
1256       //int ring = returnRing(adc_channel);
1257       int sector = returnSector(adc_channel);
1258       int arm = returnArm(adc_channel);
1259       if ( arm == 0 )
1260         {
1261           if ( tile == 0 ) polar_histS01_rms->SetBinContent(sector+1,1,noiserms);
1262           else polar_histS_rms->SetBinContent(sector*2+1+odd,(tile+1)/2+1,noiserms);
1263         }
1264       if ( arm == 1 )
1265         {
1266           if ( tile == 0 ) polar_histN01_rms->SetBinContent(sector+1,1,noiserms);
1267           else polar_histN_rms->SetBinContent(sector*2+1+odd,(tile+1)/2+1,noiserms);
1268         }
1269     }
1270 
1271   // -------------------------
1272   // --- end Rosi (mostly) ---
1273   // -------------------------
1274 
1275   // --- may need to update these depending on whether there are "hot" tiles
1276   double zmin = 0.0;
1277   //double zmax = 0.1;
1278   double zmax = 100.0; // AuAu RMS, pp and OO RMS similar
1279   //double zmax = 300;
1280   //double zmax = 1.1*h_ADC_all_channel->GetMaximum();
1281 
1282   TText tarm;
1283   tarm.SetNDC();
1284   tarm.SetTextFont(42);
1285   tarm.SetTextSize(0.05);
1286 
1287   gStyle->SetOptStat(0);
1288   // ---
1289   Pad[14]->cd();
1290   polar_histS_rms->GetZaxis()->SetRangeUser(zmin,zmax);
1291   polar_histS01_rms->GetZaxis()->SetRangeUser(zmin,zmax);
1292   // gPad->SetLeftMargin(0.2);
1293   // gPad->SetRightMargin(0.0);
1294   gPad->SetTicks(1,1);
1295   gPad->DrawFrame(-3.8, -3.8,3.8, 3.8);
1296   polar_histS_rms->Draw("same col pol AH");
1297   polar_histS01_rms->Draw("same col pol AH");
1298   tarm.DrawText(0.45,0.91,"South");
1299   gStyle->SetPalette(57);
1300   // ---
1301   Pad[15]->cd();
1302   polar_histN_rms->GetZaxis()->SetRangeUser(zmin,zmax);
1303   polar_histN01_rms->GetZaxis()->SetRangeUser(zmin,zmax);
1304   gPad->SetLeftMargin(0.05);
1305   gPad->SetRightMargin(0.15);
1306   gPad->SetTicks(1,1);
1307   gPad->DrawFrame(-3.8, -3.8,3.8, 3.8);
1308   polar_histN_rms->Draw("same colz pol AH");
1309   polar_histN01_rms->Draw("same col pol AH");
1310   tarm.DrawText(0.40,0.91,"North");
1311   gStyle->SetPalette(57);
1312 
1313   TText PrintRun;
1314   PrintRun.SetTextFont(62);
1315   PrintRun.SetTextSize(0.04);
1316   PrintRun.SetNDC();          // set to normalized coordinates
1317   PrintRun.SetTextAlign(23);  // center/top alignment
1318   std::ostringstream runnostream;
1319   std::string runstring;
1320   // fill run number and event time into string
1321   runnostream << ThisName << "_6 Run " << cl->RunNumber()
1322               << ", Time: " << ctime(&evttime.first);
1323   runstring = runnostream.str();
1324   transparent[canvasindex]->cd();
1325   PrintRun.SetTextColor(evttime.second);
1326   PrintRun.DrawText(0.5, 1., runstring.c_str());
1327   TC[canvasindex]->Update();
1328   TC[canvasindex]->Show();
1329   TC[canvasindex]->SetEditable(false);
1330   return 0;
1331 }
1332 
1333 int SepdMonDraw::DrawSeventh(const std::string &/*hwat*/)
1334 {
1335   OnlMonClient *cl = OnlMonClient::instance();
1336   gStyle->SetOptStat(0);
1337     int canvasindex = MakeCanvas("SepdMon6");
1338   
1339   TH1 *packetStatusFull[nPacketStatus] = {nullptr};
1340   int nServer = 0;
1341   int colorsThatDontSuck[] = {kGreen+2,1,2,4, kViolet,kCyan,kOrange+2,kMagenta+2,kAzure-2};
1342   int isAlert = false;
1343   for (auto server = ServerBegin(); server != ServerEnd(); ++server)
1344   {   
1345     TH1 *packetStatus[nPacketStatus] = {nullptr};
1346     for(int i = 0; i < nPacketStatus; i++) packetStatus[i] = cl->getHisto(*server, Form("h1_packet_status_%d",i));
1347     
1348     if(!packetStatus[0])continue;
1349     for(int i = 0; i < nPacketStatus; i++)
1350     {
1351       if(((packetStatus[i] -> Integral()) && (i != 0)) || (isAlert == true))isAlert = true;
1352       packetStatus[i] -> SetFillColor(colorsThatDontSuck[i]);
1353       packetStatus[i]->SetLineColor(kBlack);
1354       packetStatus[i]->SetLineWidth(1); // Optional: make lines thicker if needed
1355     }
1356 
1357     //Normalize
1358     const int nBins = packetStatus[0] -> GetNbinsX();
1359     float norm[nBins] = {0};
1360     for(int i = 0; i < nBins; i++)
1361     {
1362       for(int j = 0; j < nPacketStatus; j++)
1363       {
1364         norm[i]+=packetStatus[j]->GetBinContent(i+1);
1365       }
1366     }
1367     for(int i = 0; i < nPacketStatus; i++)
1368     {
1369       for(int j = 0; j < nBins; j++)
1370       {
1371         if(norm[j]>0)packetStatus[i]->SetBinContent(j+1, packetStatus[i]->GetBinContent(j+1)/norm[j]);
1372         else packetStatus[i]->SetBinContent(j+1,0); 
1373       }
1374       nServer > 0 ? (TH1*)(packetStatusFull[i] -> Add(packetStatus[i])) : packetStatusFull[i] = packetStatus[i];
1375     }
1376     nServer++;
1377   }
1378 
1379   THStack *hs = new THStack("hs", "Event-Averaged Packet Status");
1380    
1381   TLegend *leg = new TLegend(0.05,0.1,0.95,1);
1382   leg -> SetFillStyle(0);
1383   leg -> SetTextSize(0.06);
1384   //leg -> SetBorderSize(0);
1385   std::string stati[nPacketStatus] = {"Good", "Malformed Packet Header", "Unknown Word Classifier", "Too Many FEMs in Packet", "Malformed FEM Header", "Wrong Number of FEMs"};
1386 
1387   TC[canvasindex]->SetEditable(true);
1388   TC[canvasindex]->Clear("D");
1389   if(packetStatusFull[0])
1390   {
1391     for(int i = 0; i < nPacketStatus; i++)
1392     {
1393       hs->Add(packetStatusFull[i]);
1394       leg->AddEntry(packetStatusFull[i],stati[i].c_str(),"f");
1395     } 
1396   }
1397   else{
1398     DrawDeadServer(transparent[canvasindex]);
1399     return -1;
1400   }
1401 
1402   Pad[16]->cd(); 
1403   if(hs)
1404   {
1405     hs->Draw("BAR");
1406     hs->GetXaxis()->SetTitle("Packet Number");
1407     hs->GetYaxis()->SetTitle("Event Fraction");
1408     hs->GetYaxis()->SetTitleOffset(0.9);
1409   }
1410   Pad[17] -> cd();
1411   leg->Draw();
1412   TC[canvasindex]->Update();
1413   TC[canvasindex]->Show();
1414   warning[2]->cd();
1415   TText warn;
1416   warn.SetTextFont(62);
1417   if(isAlert)
1418   {
1419     warn.SetTextSize(.15);
1420     warn.SetTextColor(kRed);
1421     warn.DrawText(0.05,0.5,"!WARNING!");
1422     warn.DrawText(0.05,0.35,"POSSIBLE DATA CORRUPTION");
1423     warn.DrawText(0.05,0.2,"CONTACT DAQ EXPERT");
1424   }
1425   else
1426   {
1427     warn.SetTextSize(0.3);
1428     warn.DrawText(0.1,0.5,"All good!");
1429   }
1430   
1431   TC[canvasindex]->SetEditable(false);
1432 
1433   return 0;
1434 
1435 }
1436 
1437 
1438 int SepdMonDraw::SavePlot(const std::string &what, const std::string &type)
1439 {
1440   OnlMonClient *cl = OnlMonClient::instance();
1441   int iret = Draw(what);
1442   if (iret)  // on error no png files please
1443   {
1444     return iret;
1445   }
1446   int icnt = 0;
1447   for (TCanvas *canvas : TC)
1448   {
1449     if (canvas == nullptr)
1450     {
1451       continue;
1452     }
1453     icnt++;
1454     std::string filename = ThisName + "_" + std::to_string(icnt) + "_" +
1455                            std::to_string(cl->RunNumber()) + "." + type;
1456     cl->CanvasToPng(canvas, filename);
1457   }
1458   return 0;
1459 }
1460 
1461 
1462 
1463 int SepdMonDraw::MakeHtml(const std::string &what)
1464 {
1465   int iret = Draw(what);
1466   if (iret)  // on error no html output please
1467   {
1468     return iret;
1469   }
1470 
1471   OnlMonClient *cl = OnlMonClient::instance();
1472   int icnt = 0;
1473   for (TCanvas *canvas : TC)
1474   {
1475     if (canvas == nullptr)
1476     {
1477       continue;
1478     }
1479     icnt++;
1480     // Register the canvas png file to the menu and produces the png file.
1481     std::string pngfile = cl->htmlRegisterPage(*this, canvas->GetTitle(), std::to_string(icnt), "png");
1482     cl->CanvasToPng(canvas, pngfile);
1483   }
1484 
1485   return 0;
1486 }
1487 
1488 int SepdMonDraw::returnRing(int ch)
1489 {
1490   // 16 rings total, 0 is innermost, 15 is outermost
1491   // ring 0 is tile 0
1492   // ring 1 is tiles 1 and 2
1493   // ring 2 is tiles 3 and 4
1494   // etc
1495   int tile = returnTile(ch);
1496   int ring = (tile+1)/2;
1497   return ring;
1498 }
1499 
1500 int SepdMonDraw::returnArm(int ch)
1501 {
1502   // 0 is south, 1 is north
1503   if ( ch >= 384 && ch <= 767 ) return 0;
1504   else if ( ch <= 383 && ch >= 0 ) return 1;
1505   else return -1;
1506 }
1507 
1508 int SepdMonDraw::returnSector(int ch){
1509     int sEPD_adctosector[768];
1510     sEPD_adctosector[0] = 7;
1511     sEPD_adctosector[1] = 7;
1512     sEPD_adctosector[2] = 7;
1513     sEPD_adctosector[3] = 7;
1514     sEPD_adctosector[4] = 7;
1515     sEPD_adctosector[5] = 7;
1516     sEPD_adctosector[6] = 7;
1517     sEPD_adctosector[7] = 7;
1518     sEPD_adctosector[8] = 7;
1519     sEPD_adctosector[9] = 7;
1520     sEPD_adctosector[10] = 7;
1521     sEPD_adctosector[11] = 7;
1522     sEPD_adctosector[12] = 7;
1523     sEPD_adctosector[13] = 7;
1524     sEPD_adctosector[14] = 7;
1525     sEPD_adctosector[15] = 7;
1526     sEPD_adctosector[16] = 7;
1527     sEPD_adctosector[17] = 7;
1528     sEPD_adctosector[18] = 7;
1529     sEPD_adctosector[19] = 7;
1530     sEPD_adctosector[20] = 7;
1531     sEPD_adctosector[21] = 7;
1532     sEPD_adctosector[22] = 7;
1533     sEPD_adctosector[23] = 7;
1534     sEPD_adctosector[24] = 7;
1535     sEPD_adctosector[25] = 7;
1536     sEPD_adctosector[26] = 7;
1537     sEPD_adctosector[27] = 7;
1538     sEPD_adctosector[28] = 7;
1539     sEPD_adctosector[29] = 7;
1540     sEPD_adctosector[30] = 7;
1541     sEPD_adctosector[31] = 7;
1542     sEPD_adctosector[32] = 6;
1543     sEPD_adctosector[33] = 6;
1544     sEPD_adctosector[34] = 6;
1545     sEPD_adctosector[35] = 6;
1546     sEPD_adctosector[36] = 6;
1547     sEPD_adctosector[37] = 6;
1548     sEPD_adctosector[38] = 6;
1549     sEPD_adctosector[39] = 6;
1550     sEPD_adctosector[40] = 6;
1551     sEPD_adctosector[41] = 6;
1552     sEPD_adctosector[42] = 6;
1553     sEPD_adctosector[43] = 6;
1554     sEPD_adctosector[44] = 6;
1555     sEPD_adctosector[45] = 6;
1556     sEPD_adctosector[46] = 6;
1557     sEPD_adctosector[47] = 6;
1558     sEPD_adctosector[48] = 6;
1559     sEPD_adctosector[49] = 6;
1560     sEPD_adctosector[50] = 6;
1561     sEPD_adctosector[51] = 6;
1562     sEPD_adctosector[52] = 6;
1563     sEPD_adctosector[53] = 6;
1564     sEPD_adctosector[54] = 6;
1565     sEPD_adctosector[55] = 6;
1566     sEPD_adctosector[56] = 6;
1567     sEPD_adctosector[57] = 6;
1568     sEPD_adctosector[58] = 6;
1569     sEPD_adctosector[59] = 6;
1570     sEPD_adctosector[60] = 6;
1571     sEPD_adctosector[61] = 6;
1572     sEPD_adctosector[62] = 6;
1573     sEPD_adctosector[63] = 6;
1574     sEPD_adctosector[64] = 8;
1575     sEPD_adctosector[65] = 8;
1576     sEPD_adctosector[66] = 8;
1577     sEPD_adctosector[67] = 8;
1578     sEPD_adctosector[68] = 8;
1579     sEPD_adctosector[69] = 8;
1580     sEPD_adctosector[70] = 8;
1581     sEPD_adctosector[71] = 8;
1582     sEPD_adctosector[72] = 8;
1583     sEPD_adctosector[73] = 8;
1584     sEPD_adctosector[74] = 8;
1585     sEPD_adctosector[75] = 8;
1586     sEPD_adctosector[76] = 8;
1587     sEPD_adctosector[77] = 8;
1588     sEPD_adctosector[78] = 8;
1589     sEPD_adctosector[79] = 8;
1590     sEPD_adctosector[80] = 8;
1591     sEPD_adctosector[81] = 8;
1592     sEPD_adctosector[82] = 8;
1593     sEPD_adctosector[83] = 8;
1594     sEPD_adctosector[84] = 8;
1595     sEPD_adctosector[85] = 8;
1596     sEPD_adctosector[86] = 8;
1597     sEPD_adctosector[87] = 8;
1598     sEPD_adctosector[88] = 8;
1599     sEPD_adctosector[89] = 8;
1600     sEPD_adctosector[90] = 8;
1601     sEPD_adctosector[91] = 8;
1602     sEPD_adctosector[92] = 8;
1603     sEPD_adctosector[93] = 8;
1604     sEPD_adctosector[94] = 8;
1605     sEPD_adctosector[95] = 8;
1606     sEPD_adctosector[96] = 5;
1607     sEPD_adctosector[97] = 5;
1608     sEPD_adctosector[98] = 5;
1609     sEPD_adctosector[99] = 5;
1610     sEPD_adctosector[100] = 5;
1611     sEPD_adctosector[101] = 5;
1612     sEPD_adctosector[102] = 5;
1613     sEPD_adctosector[103] = 5;
1614     sEPD_adctosector[104] = 5;
1615     sEPD_adctosector[105] = 5;
1616     sEPD_adctosector[106] = 5;
1617     sEPD_adctosector[107] = 5;
1618     sEPD_adctosector[108] = 5;
1619     sEPD_adctosector[109] = 5;
1620     sEPD_adctosector[110] = 5;
1621     sEPD_adctosector[111] = 5;
1622     sEPD_adctosector[112] = 5;
1623     sEPD_adctosector[113] = 5;
1624     sEPD_adctosector[114] = 5;
1625     sEPD_adctosector[115] = 5;
1626     sEPD_adctosector[116] = 5;
1627     sEPD_adctosector[117] = 5;
1628     sEPD_adctosector[118] = 5;
1629     sEPD_adctosector[119] = 5;
1630     sEPD_adctosector[120] = 5;
1631     sEPD_adctosector[121] = 5;
1632     sEPD_adctosector[122] = 5;
1633     sEPD_adctosector[123] = 5;
1634     sEPD_adctosector[124] = 5;
1635     sEPD_adctosector[125] = 5;
1636     sEPD_adctosector[126] = 5;
1637     sEPD_adctosector[127] = 5;
1638     sEPD_adctosector[128] = 9;
1639     sEPD_adctosector[129] = 9;
1640     sEPD_adctosector[130] = 9;
1641     sEPD_adctosector[131] = 9;
1642     sEPD_adctosector[132] = 9;
1643     sEPD_adctosector[133] = 9;
1644     sEPD_adctosector[134] = 9;
1645     sEPD_adctosector[135] = 9;
1646     sEPD_adctosector[136] = 9;
1647     sEPD_adctosector[137] = 9;
1648     sEPD_adctosector[138] = 9;
1649     sEPD_adctosector[139] = 9;
1650     sEPD_adctosector[140] = 9;
1651     sEPD_adctosector[141] = 9;
1652     sEPD_adctosector[142] = 9;
1653     sEPD_adctosector[143] = 9;
1654     sEPD_adctosector[144] = 9;
1655     sEPD_adctosector[145] = 9;
1656     sEPD_adctosector[146] = 9;
1657     sEPD_adctosector[147] = 9;
1658     sEPD_adctosector[148] = 9;
1659     sEPD_adctosector[149] = 9;
1660     sEPD_adctosector[150] = 9;
1661     sEPD_adctosector[151] = 9;
1662     sEPD_adctosector[152] = 9;
1663     sEPD_adctosector[153] = 9;
1664     sEPD_adctosector[154] = 9;
1665     sEPD_adctosector[155] = 9;
1666     sEPD_adctosector[156] = 9;
1667     sEPD_adctosector[157] = 9;
1668     sEPD_adctosector[158] = 9;
1669     sEPD_adctosector[159] = 9;
1670     sEPD_adctosector[160] = 10;
1671     sEPD_adctosector[161] = 10;
1672     sEPD_adctosector[162] = 10;
1673     sEPD_adctosector[163] = 10;
1674     sEPD_adctosector[164] = 10;
1675     sEPD_adctosector[165] = 10;
1676     sEPD_adctosector[166] = 10;
1677     sEPD_adctosector[167] = 10;
1678     sEPD_adctosector[168] = 10;
1679     sEPD_adctosector[169] = 10;
1680     sEPD_adctosector[170] = 10;
1681     sEPD_adctosector[171] = 10;
1682     sEPD_adctosector[172] = 10;
1683     sEPD_adctosector[173] = 10;
1684     sEPD_adctosector[174] = 10;
1685     sEPD_adctosector[175] = 10;
1686     sEPD_adctosector[176] = 10;
1687     sEPD_adctosector[177] = 10;
1688     sEPD_adctosector[178] = 10;
1689     sEPD_adctosector[179] = 10;
1690     sEPD_adctosector[180] = 10;
1691     sEPD_adctosector[181] = 10;
1692     sEPD_adctosector[182] = 10;
1693     sEPD_adctosector[183] = 10;
1694     sEPD_adctosector[184] = 10;
1695     sEPD_adctosector[185] = 10;
1696     sEPD_adctosector[186] = 10;
1697     sEPD_adctosector[187] = 10;
1698     sEPD_adctosector[188] = 10;
1699     sEPD_adctosector[189] = 10;
1700     sEPD_adctosector[190] = 10;
1701     sEPD_adctosector[191] = 10;
1702     sEPD_adctosector[192] = 4;
1703     sEPD_adctosector[193] = 4;
1704     sEPD_adctosector[194] = 4;
1705     sEPD_adctosector[195] = 4;
1706     sEPD_adctosector[196] = 4;
1707     sEPD_adctosector[197] = 4;
1708     sEPD_adctosector[198] = 4;
1709     sEPD_adctosector[199] = 4;
1710     sEPD_adctosector[200] = 4;
1711     sEPD_adctosector[201] = 4;
1712     sEPD_adctosector[202] = 4;
1713     sEPD_adctosector[203] = 4;
1714     sEPD_adctosector[204] = 4;
1715     sEPD_adctosector[205] = 4;
1716     sEPD_adctosector[206] = 4;
1717     sEPD_adctosector[207] = 4;
1718     sEPD_adctosector[208] = 4;
1719     sEPD_adctosector[209] = 4;
1720     sEPD_adctosector[210] = 4;
1721     sEPD_adctosector[211] = 4;
1722     sEPD_adctosector[212] = 4;
1723     sEPD_adctosector[213] = 4;
1724     sEPD_adctosector[214] = 4;
1725     sEPD_adctosector[215] = 4;
1726     sEPD_adctosector[216] = 4;
1727     sEPD_adctosector[217] = 4;
1728     sEPD_adctosector[218] = 4;
1729     sEPD_adctosector[219] = 4;
1730     sEPD_adctosector[220] = 4;
1731     sEPD_adctosector[221] = 4;
1732     sEPD_adctosector[222] = 4;
1733     sEPD_adctosector[223] = 4;
1734     sEPD_adctosector[224] = 3;
1735     sEPD_adctosector[225] = 3;
1736     sEPD_adctosector[226] = 3;
1737     sEPD_adctosector[227] = 3;
1738     sEPD_adctosector[228] = 3;
1739     sEPD_adctosector[229] = 3;
1740     sEPD_adctosector[230] = 3;
1741     sEPD_adctosector[231] = 3;
1742     sEPD_adctosector[232] = 3;
1743     sEPD_adctosector[233] = 3;
1744     sEPD_adctosector[234] = 3;
1745     sEPD_adctosector[235] = 3;
1746     sEPD_adctosector[236] = 3;
1747     sEPD_adctosector[237] = 3;
1748     sEPD_adctosector[238] = 3;
1749     sEPD_adctosector[239] = 3;
1750     sEPD_adctosector[240] = 3;
1751     sEPD_adctosector[241] = 3;
1752     sEPD_adctosector[242] = 3;
1753     sEPD_adctosector[243] = 3;
1754     sEPD_adctosector[244] = 3;
1755     sEPD_adctosector[245] = 3;
1756     sEPD_adctosector[246] = 3;
1757     sEPD_adctosector[247] = 3;
1758     sEPD_adctosector[248] = 3;
1759     sEPD_adctosector[249] = 3;
1760     sEPD_adctosector[250] = 3;
1761     sEPD_adctosector[251] = 3;
1762     sEPD_adctosector[252] = 3;
1763     sEPD_adctosector[253] = 3;
1764     sEPD_adctosector[254] = 3;
1765     sEPD_adctosector[255] = 3;
1766     sEPD_adctosector[256] = 0;
1767     sEPD_adctosector[257] = 0;
1768     sEPD_adctosector[258] = 0;
1769     sEPD_adctosector[259] = 0;
1770     sEPD_adctosector[260] = 0;
1771     sEPD_adctosector[261] = 0;
1772     sEPD_adctosector[262] = 0;
1773     sEPD_adctosector[263] = 0;
1774     sEPD_adctosector[264] = 0;
1775     sEPD_adctosector[265] = 0;
1776     sEPD_adctosector[266] = 0;
1777     sEPD_adctosector[267] = 0;
1778     sEPD_adctosector[268] = 0;
1779     sEPD_adctosector[269] = 0;
1780     sEPD_adctosector[270] = 0;
1781     sEPD_adctosector[271] = 0;
1782     sEPD_adctosector[272] = 0;
1783     sEPD_adctosector[273] = 0;
1784     sEPD_adctosector[274] = 0;
1785     sEPD_adctosector[275] = 0;
1786     sEPD_adctosector[276] = 0;
1787     sEPD_adctosector[277] = 0;
1788     sEPD_adctosector[278] = 0;
1789     sEPD_adctosector[279] = 0;
1790     sEPD_adctosector[280] = 0;
1791     sEPD_adctosector[281] = 0;
1792     sEPD_adctosector[282] = 0;
1793     sEPD_adctosector[283] = 0;
1794     sEPD_adctosector[284] = 0;
1795     sEPD_adctosector[285] = 0;
1796     sEPD_adctosector[286] = 0;
1797     sEPD_adctosector[287] = 0;
1798     sEPD_adctosector[288] = 11;
1799     sEPD_adctosector[289] = 11;
1800     sEPD_adctosector[290] = 11;
1801     sEPD_adctosector[291] = 11;
1802     sEPD_adctosector[292] = 11;
1803     sEPD_adctosector[293] = 11;
1804     sEPD_adctosector[294] = 11;
1805     sEPD_adctosector[295] = 11;
1806     sEPD_adctosector[296] = 11;
1807     sEPD_adctosector[297] = 11;
1808     sEPD_adctosector[298] = 11;
1809     sEPD_adctosector[299] = 11;
1810     sEPD_adctosector[300] = 11;
1811     sEPD_adctosector[301] = 11;
1812     sEPD_adctosector[302] = 11;
1813     sEPD_adctosector[303] = 11;
1814     sEPD_adctosector[304] = 11;
1815     sEPD_adctosector[305] = 11;
1816     sEPD_adctosector[306] = 11;
1817     sEPD_adctosector[307] = 11;
1818     sEPD_adctosector[308] = 11;
1819     sEPD_adctosector[309] = 11;
1820     sEPD_adctosector[310] = 11;
1821     sEPD_adctosector[311] = 11;
1822     sEPD_adctosector[312] = 11;
1823     sEPD_adctosector[313] = 11;
1824     sEPD_adctosector[314] = 11;
1825     sEPD_adctosector[315] = 11;
1826     sEPD_adctosector[316] = 11;
1827     sEPD_adctosector[317] = 11;
1828     sEPD_adctosector[318] = 11;
1829     sEPD_adctosector[319] = 11;
1830     sEPD_adctosector[320] = 2;
1831     sEPD_adctosector[321] = 2;
1832     sEPD_adctosector[322] = 2;
1833     sEPD_adctosector[323] = 2;
1834     sEPD_adctosector[324] = 2;
1835     sEPD_adctosector[325] = 2;
1836     sEPD_adctosector[326] = 2;
1837     sEPD_adctosector[327] = 2;
1838     sEPD_adctosector[328] = 2;
1839     sEPD_adctosector[329] = 2;
1840     sEPD_adctosector[330] = 2;
1841     sEPD_adctosector[331] = 2;
1842     sEPD_adctosector[332] = 2;
1843     sEPD_adctosector[333] = 2;
1844     sEPD_adctosector[334] = 2;
1845     sEPD_adctosector[335] = 2;
1846     sEPD_adctosector[336] = 2;
1847     sEPD_adctosector[337] = 2;
1848     sEPD_adctosector[338] = 2;
1849     sEPD_adctosector[339] = 2;
1850     sEPD_adctosector[340] = 2;
1851     sEPD_adctosector[341] = 2;
1852     sEPD_adctosector[342] = 2;
1853     sEPD_adctosector[343] = 2;
1854     sEPD_adctosector[344] = 2;
1855     sEPD_adctosector[345] = 2;
1856     sEPD_adctosector[346] = 2;
1857     sEPD_adctosector[347] = 2;
1858     sEPD_adctosector[348] = 2;
1859     sEPD_adctosector[349] = 2;
1860     sEPD_adctosector[350] = 2;
1861     sEPD_adctosector[351] = 2;
1862     sEPD_adctosector[352] = 1;
1863     sEPD_adctosector[353] = 1;
1864     sEPD_adctosector[354] = 1;
1865     sEPD_adctosector[355] = 1;
1866     sEPD_adctosector[356] = 1;
1867     sEPD_adctosector[357] = 1;
1868     sEPD_adctosector[358] = 1;
1869     sEPD_adctosector[359] = 1;
1870     sEPD_adctosector[360] = 1;
1871     sEPD_adctosector[361] = 1;
1872     sEPD_adctosector[362] = 1;
1873     sEPD_adctosector[363] = 1;
1874     sEPD_adctosector[364] = 1;
1875     sEPD_adctosector[365] = 1;
1876     sEPD_adctosector[366] = 1;
1877     sEPD_adctosector[367] = 1;
1878     sEPD_adctosector[368] = 1;
1879     sEPD_adctosector[369] = 1;
1880     sEPD_adctosector[370] = 1;
1881     sEPD_adctosector[371] = 1;
1882     sEPD_adctosector[372] = 1;
1883     sEPD_adctosector[373] = 1;
1884     sEPD_adctosector[374] = 1;
1885     sEPD_adctosector[375] = 1;
1886     sEPD_adctosector[376] = 1;
1887     sEPD_adctosector[377] = 1;
1888     sEPD_adctosector[378] = 1;
1889     sEPD_adctosector[379] = 1;
1890     sEPD_adctosector[380] = 1;
1891     sEPD_adctosector[381] = 1;
1892     sEPD_adctosector[382] = 1;
1893     sEPD_adctosector[383] = 1;
1894     sEPD_adctosector[384] = 2;
1895     sEPD_adctosector[385] = 2;
1896     sEPD_adctosector[386] = 2;
1897     sEPD_adctosector[387] = 2;
1898     sEPD_adctosector[388] = 2;
1899     sEPD_adctosector[389] = 2;
1900     sEPD_adctosector[390] = 2;
1901     sEPD_adctosector[391] = 2;
1902     sEPD_adctosector[392] = 2;
1903     sEPD_adctosector[393] = 2;
1904     sEPD_adctosector[394] = 2;
1905     sEPD_adctosector[395] = 2;
1906     sEPD_adctosector[396] = 2;
1907     sEPD_adctosector[397] = 2;
1908     sEPD_adctosector[398] = 2;
1909     sEPD_adctosector[399] = 2;
1910     sEPD_adctosector[400] = 2;
1911     sEPD_adctosector[401] = 2;
1912     sEPD_adctosector[402] = 2;
1913     sEPD_adctosector[403] = 2;
1914     sEPD_adctosector[404] = 2;
1915     sEPD_adctosector[405] = 2;
1916     sEPD_adctosector[406] = 2;
1917     sEPD_adctosector[407] = 2;
1918     sEPD_adctosector[408] = 2;
1919     sEPD_adctosector[409] = 2;
1920     sEPD_adctosector[410] = 2;
1921     sEPD_adctosector[411] = 2;
1922     sEPD_adctosector[412] = 2;
1923     sEPD_adctosector[413] = 2;
1924     sEPD_adctosector[414] = 2;
1925     sEPD_adctosector[415] = 2;
1926     sEPD_adctosector[416] = 1;
1927     sEPD_adctosector[417] = 1;
1928     sEPD_adctosector[418] = 1;
1929     sEPD_adctosector[419] = 1;
1930     sEPD_adctosector[420] = 1;
1931     sEPD_adctosector[421] = 1;
1932     sEPD_adctosector[422] = 1;
1933     sEPD_adctosector[423] = 1;
1934     sEPD_adctosector[424] = 1;
1935     sEPD_adctosector[425] = 1;
1936     sEPD_adctosector[426] = 1;
1937     sEPD_adctosector[427] = 1;
1938     sEPD_adctosector[428] = 1;
1939     sEPD_adctosector[429] = 1;
1940     sEPD_adctosector[430] = 1;
1941     sEPD_adctosector[431] = 1;
1942     sEPD_adctosector[432] = 1;
1943     sEPD_adctosector[433] = 1;
1944     sEPD_adctosector[434] = 1;
1945     sEPD_adctosector[435] = 1;
1946     sEPD_adctosector[436] = 1;
1947     sEPD_adctosector[437] = 1;
1948     sEPD_adctosector[438] = 1;
1949     sEPD_adctosector[439] = 1;
1950     sEPD_adctosector[440] = 1;
1951     sEPD_adctosector[441] = 1;
1952     sEPD_adctosector[442] = 1;
1953     sEPD_adctosector[443] = 1;
1954     sEPD_adctosector[444] = 1;
1955     sEPD_adctosector[445] = 1;
1956     sEPD_adctosector[446] = 1;
1957     sEPD_adctosector[447] = 1;
1958     sEPD_adctosector[448] = 6;
1959     sEPD_adctosector[449] = 6;
1960     sEPD_adctosector[450] = 6;
1961     sEPD_adctosector[451] = 6;
1962     sEPD_adctosector[452] = 6;
1963     sEPD_adctosector[453] = 6;
1964     sEPD_adctosector[454] = 6;
1965     sEPD_adctosector[455] = 6;
1966     sEPD_adctosector[456] = 6;
1967     sEPD_adctosector[457] = 6;
1968     sEPD_adctosector[458] = 6;
1969     sEPD_adctosector[459] = 6;
1970     sEPD_adctosector[460] = 6;
1971     sEPD_adctosector[461] = 6;
1972     sEPD_adctosector[462] = 6;
1973     sEPD_adctosector[463] = 6;
1974     sEPD_adctosector[464] = 6;
1975     sEPD_adctosector[465] = 6;
1976     sEPD_adctosector[466] = 6;
1977     sEPD_adctosector[467] = 6;
1978     sEPD_adctosector[468] = 6;
1979     sEPD_adctosector[469] = 6;
1980     sEPD_adctosector[470] = 6;
1981     sEPD_adctosector[471] = 6;
1982     sEPD_adctosector[472] = 6;
1983     sEPD_adctosector[473] = 6;
1984     sEPD_adctosector[474] = 6;
1985     sEPD_adctosector[475] = 6;
1986     sEPD_adctosector[476] = 6;
1987     sEPD_adctosector[477] = 6;
1988     sEPD_adctosector[478] = 6;
1989     sEPD_adctosector[479] = 6;
1990     sEPD_adctosector[480] = 7;
1991     sEPD_adctosector[481] = 7;
1992     sEPD_adctosector[482] = 7;
1993     sEPD_adctosector[483] = 7;
1994     sEPD_adctosector[484] = 7;
1995     sEPD_adctosector[485] = 7;
1996     sEPD_adctosector[486] = 7;
1997     sEPD_adctosector[487] = 7;
1998     sEPD_adctosector[488] = 7;
1999     sEPD_adctosector[489] = 7;
2000     sEPD_adctosector[490] = 7;
2001     sEPD_adctosector[491] = 7;
2002     sEPD_adctosector[492] = 7;
2003     sEPD_adctosector[493] = 7;
2004     sEPD_adctosector[494] = 7;
2005     sEPD_adctosector[495] = 7;
2006     sEPD_adctosector[496] = 7;
2007     sEPD_adctosector[497] = 7;
2008     sEPD_adctosector[498] = 7;
2009     sEPD_adctosector[499] = 7;
2010     sEPD_adctosector[500] = 7;
2011     sEPD_adctosector[501] = 7;
2012     sEPD_adctosector[502] = 7;
2013     sEPD_adctosector[503] = 7;
2014     sEPD_adctosector[504] = 7;
2015     sEPD_adctosector[505] = 7;
2016     sEPD_adctosector[506] = 7;
2017     sEPD_adctosector[507] = 7;
2018     sEPD_adctosector[508] = 7;
2019     sEPD_adctosector[509] = 7;
2020     sEPD_adctosector[510] = 7;
2021     sEPD_adctosector[511] = 7;
2022     sEPD_adctosector[512] = 4;
2023     sEPD_adctosector[513] = 4;
2024     sEPD_adctosector[514] = 4;
2025     sEPD_adctosector[515] = 4;
2026     sEPD_adctosector[516] = 4;
2027     sEPD_adctosector[517] = 4;
2028     sEPD_adctosector[518] = 4;
2029     sEPD_adctosector[519] = 4;
2030     sEPD_adctosector[520] = 4;
2031     sEPD_adctosector[521] = 4;
2032     sEPD_adctosector[522] = 4;
2033     sEPD_adctosector[523] = 4;
2034     sEPD_adctosector[524] = 4;
2035     sEPD_adctosector[525] = 4;
2036     sEPD_adctosector[526] = 4;
2037     sEPD_adctosector[527] = 4;
2038     sEPD_adctosector[528] = 4;
2039     sEPD_adctosector[529] = 4;
2040     sEPD_adctosector[530] = 4;
2041     sEPD_adctosector[531] = 4;
2042     sEPD_adctosector[532] = 4;
2043     sEPD_adctosector[533] = 4;
2044     sEPD_adctosector[534] = 4;
2045     sEPD_adctosector[535] = 4;
2046     sEPD_adctosector[536] = 4;
2047     sEPD_adctosector[537] = 4;
2048     sEPD_adctosector[538] = 4;
2049     sEPD_adctosector[539] = 4;
2050     sEPD_adctosector[540] = 4;
2051     sEPD_adctosector[541] = 4;
2052     sEPD_adctosector[542] = 4;
2053     sEPD_adctosector[543] = 4;
2054     sEPD_adctosector[544] = 3;
2055     sEPD_adctosector[545] = 3;
2056     sEPD_adctosector[546] = 3;
2057     sEPD_adctosector[547] = 3;
2058     sEPD_adctosector[548] = 3;
2059     sEPD_adctosector[549] = 3;
2060     sEPD_adctosector[550] = 3;
2061     sEPD_adctosector[551] = 3;
2062     sEPD_adctosector[552] = 3;
2063     sEPD_adctosector[553] = 3;
2064     sEPD_adctosector[554] = 3;
2065     sEPD_adctosector[555] = 3;
2066     sEPD_adctosector[556] = 3;
2067     sEPD_adctosector[557] = 3;
2068     sEPD_adctosector[558] = 3;
2069     sEPD_adctosector[559] = 3;
2070     sEPD_adctosector[560] = 3;
2071     sEPD_adctosector[561] = 3;
2072     sEPD_adctosector[562] = 3;
2073     sEPD_adctosector[563] = 3;
2074     sEPD_adctosector[564] = 3;
2075     sEPD_adctosector[565] = 3;
2076     sEPD_adctosector[566] = 3;
2077     sEPD_adctosector[567] = 3;
2078     sEPD_adctosector[568] = 3;
2079     sEPD_adctosector[569] = 3;
2080     sEPD_adctosector[570] = 3;
2081     sEPD_adctosector[571] = 3;
2082     sEPD_adctosector[572] = 3;
2083     sEPD_adctosector[573] = 3;
2084     sEPD_adctosector[574] = 3;
2085     sEPD_adctosector[575] = 3;
2086     sEPD_adctosector[576] = 11;
2087     sEPD_adctosector[577] = 11;
2088     sEPD_adctosector[578] = 11;
2089     sEPD_adctosector[579] = 11;
2090     sEPD_adctosector[580] = 11;
2091     sEPD_adctosector[581] = 11;
2092     sEPD_adctosector[582] = 11;
2093     sEPD_adctosector[583] = 11;
2094     sEPD_adctosector[584] = 11;
2095     sEPD_adctosector[585] = 11;
2096     sEPD_adctosector[586] = 11;
2097     sEPD_adctosector[587] = 11;
2098     sEPD_adctosector[588] = 11;
2099     sEPD_adctosector[589] = 11;
2100     sEPD_adctosector[590] = 11;
2101     sEPD_adctosector[591] = 11;
2102     sEPD_adctosector[592] = 11;
2103     sEPD_adctosector[593] = 11;
2104     sEPD_adctosector[594] = 11;
2105     sEPD_adctosector[595] = 11;
2106     sEPD_adctosector[596] = 11;
2107     sEPD_adctosector[597] = 11;
2108     sEPD_adctosector[598] = 11;
2109     sEPD_adctosector[599] = 11;
2110     sEPD_adctosector[600] = 11;
2111     sEPD_adctosector[601] = 11;
2112     sEPD_adctosector[602] = 11;
2113     sEPD_adctosector[603] = 11;
2114     sEPD_adctosector[604] = 11;
2115     sEPD_adctosector[605] = 11;
2116     sEPD_adctosector[606] = 11;
2117     sEPD_adctosector[607] = 11;
2118     sEPD_adctosector[608] = 0;
2119     sEPD_adctosector[609] = 0;
2120     sEPD_adctosector[610] = 0;
2121     sEPD_adctosector[611] = 0;
2122     sEPD_adctosector[612] = 0;
2123     sEPD_adctosector[613] = 0;
2124     sEPD_adctosector[614] = 0;
2125     sEPD_adctosector[615] = 0;
2126     sEPD_adctosector[616] = 0;
2127     sEPD_adctosector[617] = 0;
2128     sEPD_adctosector[618] = 0;
2129     sEPD_adctosector[619] = 0;
2130     sEPD_adctosector[620] = 0;
2131     sEPD_adctosector[621] = 0;
2132     sEPD_adctosector[622] = 0;
2133     sEPD_adctosector[623] = 0;
2134     sEPD_adctosector[624] = 0;
2135     sEPD_adctosector[625] = 0;
2136     sEPD_adctosector[626] = 0;
2137     sEPD_adctosector[627] = 0;
2138     sEPD_adctosector[628] = 0;
2139     sEPD_adctosector[629] = 0;
2140     sEPD_adctosector[630] = 0;
2141     sEPD_adctosector[631] = 0;
2142     sEPD_adctosector[632] = 0;
2143     sEPD_adctosector[633] = 0;
2144     sEPD_adctosector[634] = 0;
2145     sEPD_adctosector[635] = 0;
2146     sEPD_adctosector[636] = 0;
2147     sEPD_adctosector[637] = 0;
2148     sEPD_adctosector[638] = 0;
2149     sEPD_adctosector[639] = 0;
2150     sEPD_adctosector[640] = 8;
2151     sEPD_adctosector[641] = 8;
2152     sEPD_adctosector[642] = 8;
2153     sEPD_adctosector[643] = 8;
2154     sEPD_adctosector[644] = 8;
2155     sEPD_adctosector[645] = 8;
2156     sEPD_adctosector[646] = 8;
2157     sEPD_adctosector[647] = 8;
2158     sEPD_adctosector[648] = 8;
2159     sEPD_adctosector[649] = 8;
2160     sEPD_adctosector[650] = 8;
2161     sEPD_adctosector[651] = 8;
2162     sEPD_adctosector[652] = 8;
2163     sEPD_adctosector[653] = 8;
2164     sEPD_adctosector[654] = 8;
2165     sEPD_adctosector[655] = 8;
2166     sEPD_adctosector[656] = 8;
2167     sEPD_adctosector[657] = 8;
2168     sEPD_adctosector[658] = 8;
2169     sEPD_adctosector[659] = 8;
2170     sEPD_adctosector[660] = 8;
2171     sEPD_adctosector[661] = 8;
2172     sEPD_adctosector[662] = 8;
2173     sEPD_adctosector[663] = 8;
2174     sEPD_adctosector[664] = 8;
2175     sEPD_adctosector[665] = 8;
2176     sEPD_adctosector[666] = 8;
2177     sEPD_adctosector[667] = 8;
2178     sEPD_adctosector[668] = 8;
2179     sEPD_adctosector[669] = 8;
2180     sEPD_adctosector[670] = 8;
2181     sEPD_adctosector[671] = 8;
2182     sEPD_adctosector[672] = 9;
2183     sEPD_adctosector[673] = 9;
2184     sEPD_adctosector[674] = 9;
2185     sEPD_adctosector[675] = 9;
2186     sEPD_adctosector[676] = 9;
2187     sEPD_adctosector[677] = 9;
2188     sEPD_adctosector[678] = 9;
2189     sEPD_adctosector[679] = 9;
2190     sEPD_adctosector[680] = 9;
2191     sEPD_adctosector[681] = 9;
2192     sEPD_adctosector[682] = 9;
2193     sEPD_adctosector[683] = 9;
2194     sEPD_adctosector[684] = 9;
2195     sEPD_adctosector[685] = 9;
2196     sEPD_adctosector[686] = 9;
2197     sEPD_adctosector[687] = 9;
2198     sEPD_adctosector[688] = 9;
2199     sEPD_adctosector[689] = 9;
2200     sEPD_adctosector[690] = 9;
2201     sEPD_adctosector[691] = 9;
2202     sEPD_adctosector[692] = 9;
2203     sEPD_adctosector[693] = 9;
2204     sEPD_adctosector[694] = 9;
2205     sEPD_adctosector[695] = 9;
2206     sEPD_adctosector[696] = 9;
2207     sEPD_adctosector[697] = 9;
2208     sEPD_adctosector[698] = 9;
2209     sEPD_adctosector[699] = 9;
2210     sEPD_adctosector[700] = 9;
2211     sEPD_adctosector[701] = 9;
2212     sEPD_adctosector[702] = 9;
2213     sEPD_adctosector[703] = 9;
2214     sEPD_adctosector[704] = 5;
2215     sEPD_adctosector[705] = 5;
2216     sEPD_adctosector[706] = 5;
2217     sEPD_adctosector[707] = 5;
2218     sEPD_adctosector[708] = 5;
2219     sEPD_adctosector[709] = 5;
2220     sEPD_adctosector[710] = 5;
2221     sEPD_adctosector[711] = 5;
2222     sEPD_adctosector[712] = 5;
2223     sEPD_adctosector[713] = 5;
2224     sEPD_adctosector[714] = 5;
2225     sEPD_adctosector[715] = 5;
2226     sEPD_adctosector[716] = 5;
2227     sEPD_adctosector[717] = 5;
2228     sEPD_adctosector[718] = 5;
2229     sEPD_adctosector[719] = 5;
2230     sEPD_adctosector[720] = 5;
2231     sEPD_adctosector[721] = 5;
2232     sEPD_adctosector[722] = 5;
2233     sEPD_adctosector[723] = 5;
2234     sEPD_adctosector[724] = 5;
2235     sEPD_adctosector[725] = 5;
2236     sEPD_adctosector[726] = 5;
2237     sEPD_adctosector[727] = 5;
2238     sEPD_adctosector[728] = 5;
2239     sEPD_adctosector[729] = 5;
2240     sEPD_adctosector[730] = 5;
2241     sEPD_adctosector[731] = 5;
2242     sEPD_adctosector[732] = 5;
2243     sEPD_adctosector[733] = 5;
2244     sEPD_adctosector[734] = 5;
2245     sEPD_adctosector[735] = 5;
2246     sEPD_adctosector[736] = 10;
2247     sEPD_adctosector[737] = 10;
2248     sEPD_adctosector[738] = 10;
2249     sEPD_adctosector[739] = 10;
2250     sEPD_adctosector[740] = 10;
2251     sEPD_adctosector[741] = 10;
2252     sEPD_adctosector[742] = 10;
2253     sEPD_adctosector[743] = 10;
2254     sEPD_adctosector[744] = 10;
2255     sEPD_adctosector[745] = 10;
2256     sEPD_adctosector[746] = 10;
2257     sEPD_adctosector[747] = 10;
2258     sEPD_adctosector[748] = 10;
2259     sEPD_adctosector[749] = 10;
2260     sEPD_adctosector[750] = 10;
2261     sEPD_adctosector[751] = 10;
2262     sEPD_adctosector[752] = 10;
2263     sEPD_adctosector[753] = 10;
2264     sEPD_adctosector[754] = 10;
2265     sEPD_adctosector[755] = 10;
2266     sEPD_adctosector[756] = 10;
2267     sEPD_adctosector[757] = 10;
2268     sEPD_adctosector[758] = 10;
2269     sEPD_adctosector[759] = 10;
2270     sEPD_adctosector[760] = 10;
2271     sEPD_adctosector[761] = 10;
2272     sEPD_adctosector[762] = 10;
2273     sEPD_adctosector[763] = 10;
2274     sEPD_adctosector[764] = 10;
2275     sEPD_adctosector[765] = 10;
2276     sEPD_adctosector[766] = 10;
2277     sEPD_adctosector[767] = 10;
2278     return sEPD_adctosector[ch];
2279 }
2280 
2281 int SepdMonDraw::returnTile(int ch){
2282     int sEPD_adctotile[768];
2283     sEPD_adctotile[0] = 1;
2284     sEPD_adctotile[1] = 31;
2285     sEPD_adctotile[2] = 27;
2286     sEPD_adctotile[3] = 29;
2287     sEPD_adctotile[4] = 23;
2288     sEPD_adctotile[5] = 25;
2289     sEPD_adctotile[6] = 19;
2290     sEPD_adctotile[7] = 21;
2291     sEPD_adctotile[8] = 15;
2292     sEPD_adctotile[9] = 17;
2293     sEPD_adctotile[10] = 11;
2294     sEPD_adctotile[11] = 13;
2295     sEPD_adctotile[12] = 7;
2296     sEPD_adctotile[13] = 9;
2297     sEPD_adctotile[14] = 3;
2298     sEPD_adctotile[15] = 5;
2299     sEPD_adctotile[16] = 28;
2300     sEPD_adctotile[17] = 30;
2301     sEPD_adctotile[18] = 24;
2302     sEPD_adctotile[19] = 26;
2303     sEPD_adctotile[20] = 20;
2304     sEPD_adctotile[21] = 22;
2305     sEPD_adctotile[22] = 16;
2306     sEPD_adctotile[23] = 18;
2307     sEPD_adctotile[24] = 12;
2308     sEPD_adctotile[25] = 14;
2309     sEPD_adctotile[26] = 8;
2310     sEPD_adctotile[27] = 10;
2311     sEPD_adctotile[28] = 4;
2312     sEPD_adctotile[29] = 6;
2313     sEPD_adctotile[30] = 0;
2314     sEPD_adctotile[31] = 2;
2315     sEPD_adctotile[32] = 27;
2316     sEPD_adctotile[33] = 29;
2317     sEPD_adctotile[34] = 23;
2318     sEPD_adctotile[35] = 25;
2319     sEPD_adctotile[36] = 19;
2320     sEPD_adctotile[37] = 21;
2321     sEPD_adctotile[38] = 15;
2322     sEPD_adctotile[39] = 17;
2323     sEPD_adctotile[40] = 11;
2324     sEPD_adctotile[41] = 13;
2325     sEPD_adctotile[42] = 7;
2326     sEPD_adctotile[43] = 9;
2327     sEPD_adctotile[44] = 3;
2328     sEPD_adctotile[45] = 5;
2329     sEPD_adctotile[46] = 31;
2330     sEPD_adctotile[47] = 1;
2331     sEPD_adctotile[48] = 28;
2332     sEPD_adctotile[49] = 30;
2333     sEPD_adctotile[50] = 24;
2334     sEPD_adctotile[51] = 26;
2335     sEPD_adctotile[52] = 20;
2336     sEPD_adctotile[53] = 22;
2337     sEPD_adctotile[54] = 16;
2338     sEPD_adctotile[55] = 18;
2339     sEPD_adctotile[56] = 12;
2340     sEPD_adctotile[57] = 14;
2341     sEPD_adctotile[58] = 8;
2342     sEPD_adctotile[59] = 10;
2343     sEPD_adctotile[60] = 4;
2344     sEPD_adctotile[61] = 6;
2345     sEPD_adctotile[62] = 0;
2346     sEPD_adctotile[63] = 2;
2347     sEPD_adctotile[64] = 27;
2348     sEPD_adctotile[65] = 29;
2349     sEPD_adctotile[66] = 23;
2350     sEPD_adctotile[67] = 25;
2351     sEPD_adctotile[68] = 19;
2352     sEPD_adctotile[69] = 21;
2353     sEPD_adctotile[70] = 15;
2354     sEPD_adctotile[71] = 17;
2355     sEPD_adctotile[72] = 11;
2356     sEPD_adctotile[73] = 13;
2357     sEPD_adctotile[74] = 7;
2358     sEPD_adctotile[75] = 9;
2359     sEPD_adctotile[76] = 3;
2360     sEPD_adctotile[77] = 5;
2361     sEPD_adctotile[78] = 31;
2362     sEPD_adctotile[79] = 1;
2363     sEPD_adctotile[80] = 28;
2364     sEPD_adctotile[81] = 30;
2365     sEPD_adctotile[82] = 24;
2366     sEPD_adctotile[83] = 26;
2367     sEPD_adctotile[84] = 20;
2368     sEPD_adctotile[85] = 22;
2369     sEPD_adctotile[86] = 16;
2370     sEPD_adctotile[87] = 18;
2371     sEPD_adctotile[88] = 12;
2372     sEPD_adctotile[89] = 14;
2373     sEPD_adctotile[90] = 8;
2374     sEPD_adctotile[91] = 10;
2375     sEPD_adctotile[92] = 4;
2376     sEPD_adctotile[93] = 6;
2377     sEPD_adctotile[94] = 0;
2378     sEPD_adctotile[95] = 2;
2379     sEPD_adctotile[96] = 27;
2380     sEPD_adctotile[97] = 29;
2381     sEPD_adctotile[98] = 23;
2382     sEPD_adctotile[99] = 25;
2383     sEPD_adctotile[100] = 19;
2384     sEPD_adctotile[101] = 21;
2385     sEPD_adctotile[102] = 15;
2386     sEPD_adctotile[103] = 17;
2387     sEPD_adctotile[104] = 11;
2388     sEPD_adctotile[105] = 13;
2389     sEPD_adctotile[106] = 7;
2390     sEPD_adctotile[107] = 9;
2391     sEPD_adctotile[108] = 3;
2392     sEPD_adctotile[109] = 5;
2393     sEPD_adctotile[110] = 31;
2394     sEPD_adctotile[111] = 1;
2395     sEPD_adctotile[112] = 28;
2396     sEPD_adctotile[113] = 30;
2397     sEPD_adctotile[114] = 24;
2398     sEPD_adctotile[115] = 26;
2399     sEPD_adctotile[116] = 20;
2400     sEPD_adctotile[117] = 22;
2401     sEPD_adctotile[118] = 16;
2402     sEPD_adctotile[119] = 18;
2403     sEPD_adctotile[120] = 12;
2404     sEPD_adctotile[121] = 14;
2405     sEPD_adctotile[122] = 8;
2406     sEPD_adctotile[123] = 10;
2407     sEPD_adctotile[124] = 4;
2408     sEPD_adctotile[125] = 6;
2409     sEPD_adctotile[126] = 0;
2410     sEPD_adctotile[127] = 2;
2411     sEPD_adctotile[128] = 27;
2412     sEPD_adctotile[129] = 29;
2413     sEPD_adctotile[130] = 23;
2414     sEPD_adctotile[131] = 25;
2415     sEPD_adctotile[132] = 19;
2416     sEPD_adctotile[133] = 21;
2417     sEPD_adctotile[134] = 15;
2418     sEPD_adctotile[135] = 17;
2419     sEPD_adctotile[136] = 11;
2420     sEPD_adctotile[137] = 13;
2421     sEPD_adctotile[138] = 7;
2422     sEPD_adctotile[139] = 9;
2423     sEPD_adctotile[140] = 3;
2424     sEPD_adctotile[141] = 5;
2425     sEPD_adctotile[142] = 31;
2426     sEPD_adctotile[143] = 1;
2427     sEPD_adctotile[144] = 28;
2428     sEPD_adctotile[145] = 30;
2429     sEPD_adctotile[146] = 24;
2430     sEPD_adctotile[147] = 26;
2431     sEPD_adctotile[148] = 20;
2432     sEPD_adctotile[149] = 22;
2433     sEPD_adctotile[150] = 16;
2434     sEPD_adctotile[151] = 18;
2435     sEPD_adctotile[152] = 12;
2436     sEPD_adctotile[153] = 14;
2437     sEPD_adctotile[154] = 8;
2438     sEPD_adctotile[155] = 10;
2439     sEPD_adctotile[156] = 4;
2440     sEPD_adctotile[157] = 6;
2441     sEPD_adctotile[158] = 0;
2442     sEPD_adctotile[159] = 2;
2443     sEPD_adctotile[160] = 27;
2444     sEPD_adctotile[161] = 29;
2445     sEPD_adctotile[162] = 23;
2446     sEPD_adctotile[163] = 25;
2447     sEPD_adctotile[164] = 19;
2448     sEPD_adctotile[165] = 21;
2449     sEPD_adctotile[166] = 15;
2450     sEPD_adctotile[167] = 17;
2451     sEPD_adctotile[168] = 11;
2452     sEPD_adctotile[169] = 13;
2453     sEPD_adctotile[170] = 7;
2454     sEPD_adctotile[171] = 9;
2455     sEPD_adctotile[172] = 3;
2456     sEPD_adctotile[173] = 5;
2457     sEPD_adctotile[174] = 31;
2458     sEPD_adctotile[175] = 1;
2459     sEPD_adctotile[176] = 28;
2460     sEPD_adctotile[177] = 30;
2461     sEPD_adctotile[178] = 24;
2462     sEPD_adctotile[179] = 26;
2463     sEPD_adctotile[180] = 20;
2464     sEPD_adctotile[181] = 22;
2465     sEPD_adctotile[182] = 16;
2466     sEPD_adctotile[183] = 18;
2467     sEPD_adctotile[184] = 12;
2468     sEPD_adctotile[185] = 14;
2469     sEPD_adctotile[186] = 8;
2470     sEPD_adctotile[187] = 10;
2471     sEPD_adctotile[188] = 4;
2472     sEPD_adctotile[189] = 6;
2473     sEPD_adctotile[190] = 0;
2474     sEPD_adctotile[191] = 2;
2475     sEPD_adctotile[192] = 27;
2476     sEPD_adctotile[193] = 29;
2477     sEPD_adctotile[194] = 23;
2478     sEPD_adctotile[195] = 25;
2479     sEPD_adctotile[196] = 19;
2480     sEPD_adctotile[197] = 21;
2481     sEPD_adctotile[198] = 15;
2482     sEPD_adctotile[199] = 17;
2483     sEPD_adctotile[200] = 11;
2484     sEPD_adctotile[201] = 13;
2485     sEPD_adctotile[202] = 7;
2486     sEPD_adctotile[203] = 9;
2487     sEPD_adctotile[204] = 3;
2488     sEPD_adctotile[205] = 5;
2489     sEPD_adctotile[206] = 31;
2490     sEPD_adctotile[207] = 1;
2491     sEPD_adctotile[208] = 28;
2492     sEPD_adctotile[209] = 30;
2493     sEPD_adctotile[210] = 24;
2494     sEPD_adctotile[211] = 26;
2495     sEPD_adctotile[212] = 20;
2496     sEPD_adctotile[213] = 22;
2497     sEPD_adctotile[214] = 16;
2498     sEPD_adctotile[215] = 18;
2499     sEPD_adctotile[216] = 12;
2500     sEPD_adctotile[217] = 14;
2501     sEPD_adctotile[218] = 8;
2502     sEPD_adctotile[219] = 10;
2503     sEPD_adctotile[220] = 4;
2504     sEPD_adctotile[221] = 6;
2505     sEPD_adctotile[222] = 0;
2506     sEPD_adctotile[223] = 2;
2507     sEPD_adctotile[224] = 27;
2508     sEPD_adctotile[225] = 29;
2509     sEPD_adctotile[226] = 23;
2510     sEPD_adctotile[227] = 25;
2511     sEPD_adctotile[228] = 19;
2512     sEPD_adctotile[229] = 21;
2513     sEPD_adctotile[230] = 15;
2514     sEPD_adctotile[231] = 17;
2515     sEPD_adctotile[232] = 11;
2516     sEPD_adctotile[233] = 13;
2517     sEPD_adctotile[234] = 7;
2518     sEPD_adctotile[235] = 9;
2519     sEPD_adctotile[236] = 3;
2520     sEPD_adctotile[237] = 5;
2521     sEPD_adctotile[238] = 31;
2522     sEPD_adctotile[239] = 1;
2523     sEPD_adctotile[240] = 28;
2524     sEPD_adctotile[241] = 30;
2525     sEPD_adctotile[242] = 24;
2526     sEPD_adctotile[243] = 26;
2527     sEPD_adctotile[244] = 20;
2528     sEPD_adctotile[245] = 22;
2529     sEPD_adctotile[246] = 16;
2530     sEPD_adctotile[247] = 18;
2531     sEPD_adctotile[248] = 12;
2532     sEPD_adctotile[249] = 14;
2533     sEPD_adctotile[250] = 8;
2534     sEPD_adctotile[251] = 10;
2535     sEPD_adctotile[252] = 4;
2536     sEPD_adctotile[253] = 6;
2537     sEPD_adctotile[254] = 0;
2538     sEPD_adctotile[255] = 2;
2539     sEPD_adctotile[256] = 27;
2540     sEPD_adctotile[257] = 29;
2541     sEPD_adctotile[258] = 23;
2542     sEPD_adctotile[259] = 25;
2543     sEPD_adctotile[260] = 19;
2544     sEPD_adctotile[261] = 21;
2545     sEPD_adctotile[262] = 15;
2546     sEPD_adctotile[263] = 17;
2547     sEPD_adctotile[264] = 11;
2548     sEPD_adctotile[265] = 13;
2549     sEPD_adctotile[266] = 7;
2550     sEPD_adctotile[267] = 9;
2551     sEPD_adctotile[268] = 3;
2552     sEPD_adctotile[269] = 5;
2553     sEPD_adctotile[270] = 31;
2554     sEPD_adctotile[271] = 1;
2555     sEPD_adctotile[272] = 28;
2556     sEPD_adctotile[273] = 30;
2557     sEPD_adctotile[274] = 24;
2558     sEPD_adctotile[275] = 26;
2559     sEPD_adctotile[276] = 20;
2560     sEPD_adctotile[277] = 22;
2561     sEPD_adctotile[278] = 16;
2562     sEPD_adctotile[279] = 18;
2563     sEPD_adctotile[280] = 12;
2564     sEPD_adctotile[281] = 14;
2565     sEPD_adctotile[282] = 8;
2566     sEPD_adctotile[283] = 10;
2567     sEPD_adctotile[284] = 4;
2568     sEPD_adctotile[285] = 6;
2569     sEPD_adctotile[286] = 0;
2570     sEPD_adctotile[287] = 2;
2571     sEPD_adctotile[288] = 27;
2572     sEPD_adctotile[289] = 29;
2573     sEPD_adctotile[290] = 23;
2574     sEPD_adctotile[291] = 25;
2575     sEPD_adctotile[292] = 19;
2576     sEPD_adctotile[293] = 21;
2577     sEPD_adctotile[294] = 15;
2578     sEPD_adctotile[295] = 17;
2579     sEPD_adctotile[296] = 11;
2580     sEPD_adctotile[297] = 13;
2581     sEPD_adctotile[298] = 7;
2582     sEPD_adctotile[299] = 9;
2583     sEPD_adctotile[300] = 3;
2584     sEPD_adctotile[301] = 5;
2585     sEPD_adctotile[302] = 31;
2586     sEPD_adctotile[303] = 1;
2587     sEPD_adctotile[304] = 28;
2588     sEPD_adctotile[305] = 30;
2589     sEPD_adctotile[306] = 24;
2590     sEPD_adctotile[307] = 26;
2591     sEPD_adctotile[308] = 20;
2592     sEPD_adctotile[309] = 22;
2593     sEPD_adctotile[310] = 16;
2594     sEPD_adctotile[311] = 18;
2595     sEPD_adctotile[312] = 12;
2596     sEPD_adctotile[313] = 14;
2597     sEPD_adctotile[314] = 8;
2598     sEPD_adctotile[315] = 10;
2599     sEPD_adctotile[316] = 4;
2600     sEPD_adctotile[317] = 6;
2601     sEPD_adctotile[318] = 0;
2602     sEPD_adctotile[319] = 2;
2603     sEPD_adctotile[320] = 27;
2604     sEPD_adctotile[321] = 29;
2605     sEPD_adctotile[322] = 23;
2606     sEPD_adctotile[323] = 25;
2607     sEPD_adctotile[324] = 19;
2608     sEPD_adctotile[325] = 21;
2609     sEPD_adctotile[326] = 15;
2610     sEPD_adctotile[327] = 17;
2611     sEPD_adctotile[328] = 11;
2612     sEPD_adctotile[329] = 13;
2613     sEPD_adctotile[330] = 7;
2614     sEPD_adctotile[331] = 9;
2615     sEPD_adctotile[332] = 3;
2616     sEPD_adctotile[333] = 5;
2617     sEPD_adctotile[334] = 31;
2618     sEPD_adctotile[335] = 1;
2619     sEPD_adctotile[336] = 28;
2620     sEPD_adctotile[337] = 30;
2621     sEPD_adctotile[338] = 24;
2622     sEPD_adctotile[339] = 26;
2623     sEPD_adctotile[340] = 20;
2624     sEPD_adctotile[341] = 22;
2625     sEPD_adctotile[342] = 16;
2626     sEPD_adctotile[343] = 18;
2627     sEPD_adctotile[344] = 12;
2628     sEPD_adctotile[345] = 14;
2629     sEPD_adctotile[346] = 8;
2630     sEPD_adctotile[347] = 10;
2631     sEPD_adctotile[348] = 4;
2632     sEPD_adctotile[349] = 6;
2633     sEPD_adctotile[350] = 0;
2634     sEPD_adctotile[351] = 2;
2635     sEPD_adctotile[352] = 27;
2636     sEPD_adctotile[353] = 29;
2637     sEPD_adctotile[354] = 23;
2638     sEPD_adctotile[355] = 25;
2639     sEPD_adctotile[356] = 19;
2640     sEPD_adctotile[357] = 21;
2641     sEPD_adctotile[358] = 15;
2642     sEPD_adctotile[359] = 17;
2643     sEPD_adctotile[360] = 11;
2644     sEPD_adctotile[361] = 13;
2645     sEPD_adctotile[362] = 7;
2646     sEPD_adctotile[363] = 9;
2647     sEPD_adctotile[364] = 3;
2648     sEPD_adctotile[365] = 5;
2649     sEPD_adctotile[366] = 31;
2650     sEPD_adctotile[367] = 1;
2651     sEPD_adctotile[368] = 28;
2652     sEPD_adctotile[369] = 30;
2653     sEPD_adctotile[370] = 24;
2654     sEPD_adctotile[371] = 26;
2655     sEPD_adctotile[372] = 20;
2656     sEPD_adctotile[373] = 22;
2657     sEPD_adctotile[374] = 16;
2658     sEPD_adctotile[375] = 18;
2659     sEPD_adctotile[376] = 12;
2660     sEPD_adctotile[377] = 14;
2661     sEPD_adctotile[378] = 8;
2662     sEPD_adctotile[379] = 10;
2663     sEPD_adctotile[380] = 4;
2664     sEPD_adctotile[381] = 6;
2665     sEPD_adctotile[382] = 0;
2666     sEPD_adctotile[383] = 2;
2667     sEPD_adctotile[384] = 27;
2668     sEPD_adctotile[385] = 29;
2669     sEPD_adctotile[386] = 23;
2670     sEPD_adctotile[387] = 25;
2671     sEPD_adctotile[388] = 19;
2672     sEPD_adctotile[389] = 21;
2673     sEPD_adctotile[390] = 15;
2674     sEPD_adctotile[391] = 17;
2675     sEPD_adctotile[392] = 11;
2676     sEPD_adctotile[393] = 13;
2677     sEPD_adctotile[394] = 7;
2678     sEPD_adctotile[395] = 9;
2679     sEPD_adctotile[396] = 3;
2680     sEPD_adctotile[397] = 5;
2681     sEPD_adctotile[398] = 31;
2682     sEPD_adctotile[399] = 1;
2683     sEPD_adctotile[400] = 28;
2684     sEPD_adctotile[401] = 30;
2685     sEPD_adctotile[402] = 24;
2686     sEPD_adctotile[403] = 26;
2687     sEPD_adctotile[404] = 20;
2688     sEPD_adctotile[405] = 22;
2689     sEPD_adctotile[406] = 16;
2690     sEPD_adctotile[407] = 18;
2691     sEPD_adctotile[408] = 12;
2692     sEPD_adctotile[409] = 14;
2693     sEPD_adctotile[410] = 8;
2694     sEPD_adctotile[411] = 10;
2695     sEPD_adctotile[412] = 4;
2696     sEPD_adctotile[413] = 6;
2697     sEPD_adctotile[414] = 0;
2698     sEPD_adctotile[415] = 2;
2699     sEPD_adctotile[416] = 27;
2700     sEPD_adctotile[417] = 29;
2701     sEPD_adctotile[418] = 23;
2702     sEPD_adctotile[419] = 25;
2703     sEPD_adctotile[420] = 19;
2704     sEPD_adctotile[421] = 21;
2705     sEPD_adctotile[422] = 15;
2706     sEPD_adctotile[423] = 17;
2707     sEPD_adctotile[424] = 11;
2708     sEPD_adctotile[425] = 13;
2709     sEPD_adctotile[426] = 7;
2710     sEPD_adctotile[427] = 9;
2711     sEPD_adctotile[428] = 3;
2712     sEPD_adctotile[429] = 5;
2713     sEPD_adctotile[430] = 31;
2714     sEPD_adctotile[431] = 1;
2715     sEPD_adctotile[432] = 28;
2716     sEPD_adctotile[433] = 30;
2717     sEPD_adctotile[434] = 24;
2718     sEPD_adctotile[435] = 26;
2719     sEPD_adctotile[436] = 20;
2720     sEPD_adctotile[437] = 22;
2721     sEPD_adctotile[438] = 16;
2722     sEPD_adctotile[439] = 18;
2723     sEPD_adctotile[440] = 12;
2724     sEPD_adctotile[441] = 14;
2725     sEPD_adctotile[442] = 8;
2726     sEPD_adctotile[443] = 10;
2727     sEPD_adctotile[444] = 4;
2728     sEPD_adctotile[445] = 6;
2729     sEPD_adctotile[446] = 0;
2730     sEPD_adctotile[447] = 2;
2731     sEPD_adctotile[448] = 27;
2732     sEPD_adctotile[449] = 29;
2733     sEPD_adctotile[450] = 23;
2734     sEPD_adctotile[451] = 25;
2735     sEPD_adctotile[452] = 19;
2736     sEPD_adctotile[453] = 21;
2737     sEPD_adctotile[454] = 15;
2738     sEPD_adctotile[455] = 17;
2739     sEPD_adctotile[456] = 11;
2740     sEPD_adctotile[457] = 13;
2741     sEPD_adctotile[458] = 7;
2742     sEPD_adctotile[459] = 9;
2743     sEPD_adctotile[460] = 3;
2744     sEPD_adctotile[461] = 5;
2745     sEPD_adctotile[462] = 31;
2746     sEPD_adctotile[463] = 1;
2747     sEPD_adctotile[464] = 28;
2748     sEPD_adctotile[465] = 30;
2749     sEPD_adctotile[466] = 24;
2750     sEPD_adctotile[467] = 26;
2751     sEPD_adctotile[468] = 20;
2752     sEPD_adctotile[469] = 22;
2753     sEPD_adctotile[470] = 16;
2754     sEPD_adctotile[471] = 18;
2755     sEPD_adctotile[472] = 12;
2756     sEPD_adctotile[473] = 14;
2757     sEPD_adctotile[474] = 8;
2758     sEPD_adctotile[475] = 10;
2759     sEPD_adctotile[476] = 4;
2760     sEPD_adctotile[477] = 6;
2761     sEPD_adctotile[478] = 0;
2762     sEPD_adctotile[479] = 2;
2763     sEPD_adctotile[480] = 27;
2764     sEPD_adctotile[481] = 29;
2765     sEPD_adctotile[482] = 23;
2766     sEPD_adctotile[483] = 25;
2767     sEPD_adctotile[484] = 19;
2768     sEPD_adctotile[485] = 21;
2769     sEPD_adctotile[486] = 15;
2770     sEPD_adctotile[487] = 17;
2771     sEPD_adctotile[488] = 11;
2772     sEPD_adctotile[489] = 13;
2773     sEPD_adctotile[490] = 7;
2774     sEPD_adctotile[491] = 9;
2775     sEPD_adctotile[492] = 3;
2776     sEPD_adctotile[493] = 5;
2777     sEPD_adctotile[494] = 31;
2778     sEPD_adctotile[495] = 1;
2779     sEPD_adctotile[496] = 28;
2780     sEPD_adctotile[497] = 30;
2781     sEPD_adctotile[498] = 24;
2782     sEPD_adctotile[499] = 26;
2783     sEPD_adctotile[500] = 20;
2784     sEPD_adctotile[501] = 22;
2785     sEPD_adctotile[502] = 16;
2786     sEPD_adctotile[503] = 18;
2787     sEPD_adctotile[504] = 12;
2788     sEPD_adctotile[505] = 14;
2789     sEPD_adctotile[506] = 8;
2790     sEPD_adctotile[507] = 10;
2791     sEPD_adctotile[508] = 4;
2792     sEPD_adctotile[509] = 6;
2793     sEPD_adctotile[510] = 0;
2794     sEPD_adctotile[511] = 2;
2795     sEPD_adctotile[512] = 27;
2796     sEPD_adctotile[513] = 29;
2797     sEPD_adctotile[514] = 23;
2798     sEPD_adctotile[515] = 25;
2799     sEPD_adctotile[516] = 19;
2800     sEPD_adctotile[517] = 21;
2801     sEPD_adctotile[518] = 15;
2802     sEPD_adctotile[519] = 17;
2803     sEPD_adctotile[520] = 11;
2804     sEPD_adctotile[521] = 13;
2805     sEPD_adctotile[522] = 7;
2806     sEPD_adctotile[523] = 9;
2807     sEPD_adctotile[524] = 3;
2808     sEPD_adctotile[525] = 5;
2809     sEPD_adctotile[526] = 31;
2810     sEPD_adctotile[527] = 1;
2811     sEPD_adctotile[528] = 28;
2812     sEPD_adctotile[529] = 30;
2813     sEPD_adctotile[530] = 24;
2814     sEPD_adctotile[531] = 26;
2815     sEPD_adctotile[532] = 20;
2816     sEPD_adctotile[533] = 22;
2817     sEPD_adctotile[534] = 16;
2818     sEPD_adctotile[535] = 18;
2819     sEPD_adctotile[536] = 12;
2820     sEPD_adctotile[537] = 14;
2821     sEPD_adctotile[538] = 8;
2822     sEPD_adctotile[539] = 10;
2823     sEPD_adctotile[540] = 4;
2824     sEPD_adctotile[541] = 6;
2825     sEPD_adctotile[542] = 0;
2826     sEPD_adctotile[543] = 2;
2827     sEPD_adctotile[544] = 27;
2828     sEPD_adctotile[545] = 29;
2829     sEPD_adctotile[546] = 23;
2830     sEPD_adctotile[547] = 25;
2831     sEPD_adctotile[548] = 19;
2832     sEPD_adctotile[549] = 21;
2833     sEPD_adctotile[550] = 15;
2834     sEPD_adctotile[551] = 17;
2835     sEPD_adctotile[552] = 11;
2836     sEPD_adctotile[553] = 13;
2837     sEPD_adctotile[554] = 7;
2838     sEPD_adctotile[555] = 9;
2839     sEPD_adctotile[556] = 3;
2840     sEPD_adctotile[557] = 5;
2841     sEPD_adctotile[558] = 31;
2842     sEPD_adctotile[559] = 1;
2843     sEPD_adctotile[560] = 28;
2844     sEPD_adctotile[561] = 30;
2845     sEPD_adctotile[562] = 24;
2846     sEPD_adctotile[563] = 26;
2847     sEPD_adctotile[564] = 20;
2848     sEPD_adctotile[565] = 22;
2849     sEPD_adctotile[566] = 16;
2850     sEPD_adctotile[567] = 18;
2851     sEPD_adctotile[568] = 12;
2852     sEPD_adctotile[569] = 14;
2853     sEPD_adctotile[570] = 8;
2854     sEPD_adctotile[571] = 10;
2855     sEPD_adctotile[572] = 4;
2856     sEPD_adctotile[573] = 6;
2857     sEPD_adctotile[574] = 0;
2858     sEPD_adctotile[575] = 2;
2859     sEPD_adctotile[576] = 27;
2860     sEPD_adctotile[577] = 29;
2861     sEPD_adctotile[578] = 23;
2862     sEPD_adctotile[579] = 25;
2863     sEPD_adctotile[580] = 19;
2864     sEPD_adctotile[581] = 21;
2865     sEPD_adctotile[582] = 15;
2866     sEPD_adctotile[583] = 17;
2867     sEPD_adctotile[584] = 11;
2868     sEPD_adctotile[585] = 13;
2869     sEPD_adctotile[586] = 7;
2870     sEPD_adctotile[587] = 9;
2871     sEPD_adctotile[588] = 3;
2872     sEPD_adctotile[589] = 5;
2873     sEPD_adctotile[590] = 31;
2874     sEPD_adctotile[591] = 1;
2875     sEPD_adctotile[592] = 28;
2876     sEPD_adctotile[593] = 30;
2877     sEPD_adctotile[594] = 24;
2878     sEPD_adctotile[595] = 26;
2879     sEPD_adctotile[596] = 20;
2880     sEPD_adctotile[597] = 22;
2881     sEPD_adctotile[598] = 16;
2882     sEPD_adctotile[599] = 18;
2883     sEPD_adctotile[600] = 12;
2884     sEPD_adctotile[601] = 14;
2885     sEPD_adctotile[602] = 8;
2886     sEPD_adctotile[603] = 10;
2887     sEPD_adctotile[604] = 4;
2888     sEPD_adctotile[605] = 6;
2889     sEPD_adctotile[606] = 0;
2890     sEPD_adctotile[607] = 2;
2891     sEPD_adctotile[608] = 27;
2892     sEPD_adctotile[609] = 29;
2893     sEPD_adctotile[610] = 23;
2894     sEPD_adctotile[611] = 25;
2895     sEPD_adctotile[612] = 19;
2896     sEPD_adctotile[613] = 21;
2897     sEPD_adctotile[614] = 15;
2898     sEPD_adctotile[615] = 17;
2899     sEPD_adctotile[616] = 11;
2900     sEPD_adctotile[617] = 13;
2901     sEPD_adctotile[618] = 7;
2902     sEPD_adctotile[619] = 9;
2903     sEPD_adctotile[620] = 3;
2904     sEPD_adctotile[621] = 5;
2905     sEPD_adctotile[622] = 31;
2906     sEPD_adctotile[623] = 1;
2907     sEPD_adctotile[624] = 28;
2908     sEPD_adctotile[625] = 30;
2909     sEPD_adctotile[626] = 24;
2910     sEPD_adctotile[627] = 26;
2911     sEPD_adctotile[628] = 20;
2912     sEPD_adctotile[629] = 22;
2913     sEPD_adctotile[630] = 16;
2914     sEPD_adctotile[631] = 18;
2915     sEPD_adctotile[632] = 12;
2916     sEPD_adctotile[633] = 14;
2917     sEPD_adctotile[634] = 8;
2918     sEPD_adctotile[635] = 10;
2919     sEPD_adctotile[636] = 4;
2920     sEPD_adctotile[637] = 6;
2921     sEPD_adctotile[638] = 0;
2922     sEPD_adctotile[639] = 2;
2923     sEPD_adctotile[640] = 27;
2924     sEPD_adctotile[641] = 29;
2925     sEPD_adctotile[642] = 23;
2926     sEPD_adctotile[643] = 25;
2927     sEPD_adctotile[644] = 19;
2928     sEPD_adctotile[645] = 21;
2929     sEPD_adctotile[646] = 15;
2930     sEPD_adctotile[647] = 17;
2931     sEPD_adctotile[648] = 11;
2932     sEPD_adctotile[649] = 13;
2933     sEPD_adctotile[650] = 7;
2934     sEPD_adctotile[651] = 9;
2935     sEPD_adctotile[652] = 3;
2936     sEPD_adctotile[653] = 5;
2937     sEPD_adctotile[654] = 31;
2938     sEPD_adctotile[655] = 1;
2939     sEPD_adctotile[656] = 28;
2940     sEPD_adctotile[657] = 30;
2941     sEPD_adctotile[658] = 24;
2942     sEPD_adctotile[659] = 26;
2943     sEPD_adctotile[660] = 20;
2944     sEPD_adctotile[661] = 22;
2945     sEPD_adctotile[662] = 16;
2946     sEPD_adctotile[663] = 18;
2947     sEPD_adctotile[664] = 12;
2948     sEPD_adctotile[665] = 14;
2949     sEPD_adctotile[666] = 8;
2950     sEPD_adctotile[667] = 10;
2951     sEPD_adctotile[668] = 4;
2952     sEPD_adctotile[669] = 6;
2953     sEPD_adctotile[670] = 0;
2954     sEPD_adctotile[671] = 2;
2955     sEPD_adctotile[672] = 27;
2956     sEPD_adctotile[673] = 29;
2957     sEPD_adctotile[674] = 23;
2958     sEPD_adctotile[675] = 25;
2959     sEPD_adctotile[676] = 19;
2960     sEPD_adctotile[677] = 21;
2961     sEPD_adctotile[678] = 15;
2962     sEPD_adctotile[679] = 17;
2963     sEPD_adctotile[680] = 11;
2964     sEPD_adctotile[681] = 13;
2965     sEPD_adctotile[682] = 7;
2966     sEPD_adctotile[683] = 9;
2967     sEPD_adctotile[684] = 3;
2968     sEPD_adctotile[685] = 5;
2969     sEPD_adctotile[686] = 31;
2970     sEPD_adctotile[687] = 1;
2971     sEPD_adctotile[688] = 28;
2972     sEPD_adctotile[689] = 30;
2973     sEPD_adctotile[690] = 24;
2974     sEPD_adctotile[691] = 26;
2975     sEPD_adctotile[692] = 20;
2976     sEPD_adctotile[693] = 22;
2977     sEPD_adctotile[694] = 16;
2978     sEPD_adctotile[695] = 18;
2979     sEPD_adctotile[696] = 12;
2980     sEPD_adctotile[697] = 14;
2981     sEPD_adctotile[698] = 8;
2982     sEPD_adctotile[699] = 10;
2983     sEPD_adctotile[700] = 4;
2984     sEPD_adctotile[701] = 6;
2985     sEPD_adctotile[702] = 0;
2986     sEPD_adctotile[703] = 2;
2987     sEPD_adctotile[704] = 27;
2988     sEPD_adctotile[705] = 29;
2989     sEPD_adctotile[706] = 23;
2990     sEPD_adctotile[707] = 25;
2991     sEPD_adctotile[708] = 19;
2992     sEPD_adctotile[709] = 21;
2993     sEPD_adctotile[710] = 15;
2994     sEPD_adctotile[711] = 17;
2995     sEPD_adctotile[712] = 11;
2996     sEPD_adctotile[713] = 13;
2997     sEPD_adctotile[714] = 7;
2998     sEPD_adctotile[715] = 9;
2999     sEPD_adctotile[716] = 3;
3000     sEPD_adctotile[717] = 5;
3001     sEPD_adctotile[718] = 31;
3002     sEPD_adctotile[719] = 1;
3003     sEPD_adctotile[720] = 28;
3004     sEPD_adctotile[721] = 30;
3005     sEPD_adctotile[722] = 24;
3006     sEPD_adctotile[723] = 26;
3007     sEPD_adctotile[724] = 20;
3008     sEPD_adctotile[725] = 22;
3009     sEPD_adctotile[726] = 16;
3010     sEPD_adctotile[727] = 18;
3011     sEPD_adctotile[728] = 12;
3012     sEPD_adctotile[729] = 14;
3013     sEPD_adctotile[730] = 8;
3014     sEPD_adctotile[731] = 10;
3015     sEPD_adctotile[732] = 4;
3016     sEPD_adctotile[733] = 6;
3017     sEPD_adctotile[734] = 0;
3018     sEPD_adctotile[735] = 2;
3019     sEPD_adctotile[736] = 27;
3020     sEPD_adctotile[737] = 29;
3021     sEPD_adctotile[738] = 23;
3022     sEPD_adctotile[739] = 25;
3023     sEPD_adctotile[740] = 19;
3024     sEPD_adctotile[741] = 21;
3025     sEPD_adctotile[742] = 15;
3026     sEPD_adctotile[743] = 17;
3027     sEPD_adctotile[744] = 11;
3028     sEPD_adctotile[745] = 13;
3029     sEPD_adctotile[746] = 7;
3030     sEPD_adctotile[747] = 9;
3031     sEPD_adctotile[748] = 3;
3032     sEPD_adctotile[749] = 5;
3033     sEPD_adctotile[750] = 31;
3034     sEPD_adctotile[751] = 1;
3035     sEPD_adctotile[752] = 28;
3036     sEPD_adctotile[753] = 30;
3037     sEPD_adctotile[754] = 24;
3038     sEPD_adctotile[755] = 26;
3039     sEPD_adctotile[756] = 20;
3040     sEPD_adctotile[757] = 22;
3041     sEPD_adctotile[758] = 16;
3042     sEPD_adctotile[759] = 18;
3043     sEPD_adctotile[760] = 12;
3044     sEPD_adctotile[761] = 14;
3045     sEPD_adctotile[762] = 8;
3046     sEPD_adctotile[763] = 10;
3047     sEPD_adctotile[764] = 4;
3048     sEPD_adctotile[765] = 6;
3049     sEPD_adctotile[766] = 0;
3050     sEPD_adctotile[767] = 2;
3051     return sEPD_adctotile[ch];
3052 }
3053 
3054 int SepdMonDraw::DrawServerStats()
3055 {
3056   int canvasindex=7;
3057   OnlMonClient* cl = OnlMonClient::instance();
3058   if (!gROOT->FindObject("SepdServerStats"))
3059   {
3060     MakeCanvas("SepdServerStats");
3061   }
3062   TC[canvasindex]->Clear("D");
3063   TC[canvasindex]->SetEditable(true);
3064   transparent[canvasindex]->cd();
3065   TText PrintRun;
3066   PrintRun.SetTextFont(62);
3067   PrintRun.SetNDC();          // set to normalized coordinates
3068   PrintRun.SetTextAlign(23);  // center/top alignment
3069   PrintRun.SetTextSize(0.04);
3070   PrintRun.SetTextColor(1);
3071   PrintRun.DrawText(0.5, 0.99, "Server Statistics");
3072 
3073   PrintRun.SetTextSize(0.02);
3074   double vdist = 0.05;
3075   double vpos = 0.9;
3076   time_t clienttime = time(nullptr);
3077   for (const auto& server : m_ServerSet)
3078   {
3079     std::ostringstream txt;
3080     auto servermapiter = cl->GetServerMap(server);
3081     if (servermapiter == cl->GetServerMapEnd())
3082     {
3083       txt << "Server " << server
3084           << " is dead ";
3085       PrintRun.SetTextColor(kRed);
3086     }
3087     else
3088     {
3089       int gl1counts = std::get<4>(servermapiter->second);
3090       time_t currtime = std::get<3>(servermapiter->second);
3091       txt << "Server " << server
3092           << ", run number: " << std::get<1>(servermapiter->second)
3093           << ", event count: " << std::get<2>(servermapiter->second);
3094       if (gl1counts >= 0)
3095     {
3096           txt << ", gl1 count: " << gl1counts;
3097     }
3098         txt  << ", current Event time: " << ctime(&currtime);
3099     if (isHtml())
3100       {
3101         clienttime = currtime; // just prevent the font from getting red
3102       }
3103     else // print time diff only for live display
3104       {
3105         txt  << ", minutes since last evt: " << (clienttime - currtime)/60;
3106           }
3107     if (std::get<0>(servermapiter->second) && ((clienttime - currtime)/60) < 10)
3108       {
3109         PrintRun.SetTextColor(kGray + 2);
3110       }
3111       else
3112       {
3113         PrintRun.SetTextColor(kRed);
3114       }
3115     }
3116     PrintRun.DrawText(0.5, vpos, txt.str().c_str());
3117     vpos -= vdist;
3118   }
3119   TC[canvasindex]->Update();
3120   TC[canvasindex]->Show();
3121   TC[canvasindex]->SetEditable(false);
3122 
3123   return 0;
3124 }