Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:20:29

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