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