From: gustavo Date: Thu, 18 Oct 2007 13:31:27 +0000 (+0000) Subject: Beam test: macro to get pedestals, mapping and constants necessary for pedestals X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=commitdiff_plain;h=83b4f74677d26240a638d34d39c9cb94d6e7befa;ds=sidebyside Beam test: macro to get pedestals, mapping and constants necessary for pedestals --- diff --git a/EMCAL/macros/CalibrationDB/constants.h b/EMCAL/macros/CalibrationDB/constants.h new file mode 100755 index 00000000000..231750f329a --- /dev/null +++ b/EMCAL/macros/CalibrationDB/constants.h @@ -0,0 +1,51 @@ +#ifndef CONSTANTS_H +#define CONSTANTS_H + +#ifndef __CINT__ + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#define WHERE __FILE__ << ":" << __LINE__ << ": " + +#endif + +// from MWPC +const int nMWPCHitMax = 10000; +const int NMWPCPLANES = 7; + +// for the mapping and geometry constants +const int ncards = 2; +const int rows = 8; +const int cols = 8; +const int gains = 2; +const int FEC[ncards] = {5, 6}; // cards in the crate +// we should have one charge-sensitive pre-amp per module +const int NCSP = rows*cols; + +// for the readout +const int NFEC = 2; // Max 2 FrontEndCard +const int NCHIP = 4; // 4 ALTROs per FEC +const int NCHAN = 16; // Channels per ALTRO +const int CHANNELS = NFEC*NCHIP*NCHAN; // Max uses ALTRO channels +const int TOTCHAN = CHANNELS; + +const int REQSAMPLES = 50; // This is what we ask for in the RCU +const int EXTRASAMPLES = 15; // We get a few bonus ones +const int REALSAMPLES = REQSAMPLES + EXTRASAMPLES; // This is the reported wordcount-2 +const int SAMPLES = REQSAMPLES + EXTRASAMPLES; // Number of readout ALTRO words per channel (last 4 words is trailer) + +// general flags +const int debug = 0; // Set 0/1/2/3 to print debug messages of different detail levels + +// put in nominal errors for pedestal for fits +// low, and high gains are separate +const double NOMINAL_PEDESTAL_RMS[NFEC][2] = { {0.3, 2.0}, // FEC 1 + {0.6, 4.0} }; // FEC 2 + +#endif diff --git a/EMCAL/macros/CalibrationDB/get_pedestalAll.C b/EMCAL/macros/CalibrationDB/get_pedestalAll.C new file mode 100755 index 00000000000..7d67b22a3a1 --- /dev/null +++ b/EMCAL/macros/CalibrationDB/get_pedestalAll.C @@ -0,0 +1,611 @@ +typedef struct +{ + int row; + int col; + int gain; + int csp; + int fee; + int chip; + int chan; +} mapData; + +#include "constants.h" + +void get_pedestalAll(int runNumber = 33, + const int save = 0, const int saveDb=0) +{ + //Extracts pedestals from the file RUN_0{runNumber}.root. + //If saveDb != 0, saves pedestals to the local OCDB, separately for low and high gains. + //Used constant.h file with the constants and map.txt file with mapping related + //to the Sept-Oct 2007 beam test at CERN. + + TString DBFolder ="local://"; + TString DBPathLow = "Calib/Data/LowGain"; + TString DBPathHigh = "Calib/Data/HighGain"; + + Int_t firstRun = runNumber; + Int_t lastRun = 999999999; + + // setup + gROOT->Time(); + gStyle->SetOptFit(1); + gStyle->SetOptTitle(1); + gStyle->SetOptStat(0); + + gStyle->SetFillColor(10); + gStyle->SetCanvasColor(10); + + gStyle->SetPadBorderSize(0); + gStyle->SetPadBorderMode(0); + gStyle->SetPadLeftMargin(0.15); + gStyle->SetPadBottomMargin(0.15); + + gStyle->SetTitleOffset(1.2,"X"); + gStyle->SetTitleOffset(0.9,"Y"); + gStyle->SetTitleSize(0.045,"X"); + gStyle->SetTitleSize(0.045,"Y"); + + char FECstr0[20]; + char FECstr1[20]; + sprintf(FECstr0, "FEC %d", FEC[0]); + sprintf(FECstr1, "FEC %d", FEC[1]); + + // get root file + char rootFile[80]; + sprintf(rootFile,"RUN_%04d.root",runNumber); + cout<<"\n root file: "< No root file.\n"<> dummy >> dummy >> dummy >> dummy >> dummy >> dummy >> dummy >> dummy >> dummy; + + int ichan = 0; + int idum = 0; + int nchan = 0; + while ( fin.good() ) { + fin >> idum >> ichan; + if (! (fin.good() && ichan> chmap[ichan].row >> chmap[ichan].col >> chmap[ichan].gain >> chmap[ichan].csp + >> chmap[ichan].fee >> chmap[ichan].chip >> chmap[ichan].chan; + nchan++; + } + + cout << " info for " << nchan << " channels read from map " << endl; + + // get hSig and hPed profile histograms; the indices are channel id's + TProfile *hPed = (TProfile *) gROOT->FindObject("hPed"); + TProfile *hMean = (TProfile *) gROOT->FindObject("hMean"); + TProfile *hSig = (TProfile *) gROOT->FindObject("hSig"); + TProfile *hAll = (TProfile *) gROOT->FindObject("hAll"); + hPed->Approximate(false); // prevent ROOT from smoothing. profiles. + hMean->Approximate(false); + hSig->Approximate(false); + hAll->Approximate(false); + + hPed->SetErrorOption("s"); // don't divide error with sqrt(entries) + hMean->SetErrorOption("s"); + hSig->SetErrorOption("s"); + hAll->SetErrorOption("s"); + + TH1F *hRMS = new TH1F("hRMS", "hRMS", CHANNELS, -0.5, CHANNELS - 0.5); + TH1F *hRMS1D = new TH1F("hRMS1D", "hRMS1D", 100, 0, 1); + + // define canvas : we'll have plots with info vs channel and info vs CSP (high and low) + bool extra = false; + if (extra) { + TCanvas *cSignal = new TCanvas("cSignal","Signal",500,0,500,620); + cSignal->Divide(1,3); + } + TCanvas *cPedestal = new TCanvas("cPedestal","Pedestal",400,50,500,620); + cPedestal->Divide(1,3); + TCanvas *cMean = new TCanvas("cMean","Mean",400,50,500,620); + cMean->Divide(1,3); + TCanvas *cRMS = new TCanvas("cRMS","Pedestal RMS",400,50,500,620); + cRMS->Divide(1,3); + + TCanvas *cRMS1D = new TCanvas("cRMS1D","Pedestal RMS - 1D",10,10,400,300); + + const int NGAIN = 2; + const char * GAINSTR[] = {"Low", "High"}; + + // plot results + TH1F* hRMSCSP[NGAIN]; + TH1F* hPedCSP[NGAIN]; + TH1F* hSigCSP[NGAIN]; + TH1F* hMeanCSP[NGAIN]; + + char info[80]; + char id[80]; + + for (int igain=0; igainSetXTitle("CSP channels"); + hRMSCSP[igain]->SetYTitle("RMS (ADC counts)"); + hRMSCSP[igain]->SetMarkerStyle(20); + hRMSCSP[igain]->SetMarkerColor(2); + hRMSCSP[igain]->SetMarkerSize(1); + hRMSCSP[igain]->GetYaxis()->SetNdivisions(505); + + hPedCSP[igain]->SetXTitle("CSP channels"); + hPedCSP[igain]->SetYTitle("Pedestal (ADC counts)"); + hPedCSP[igain]->SetMarkerStyle(20); + hPedCSP[igain]->SetMarkerColor(2); + hPedCSP[igain]->SetMarkerSize(1); + hPedCSP[igain]->GetYaxis()->SetNdivisions(505); + + hSigCSP[igain]->SetXTitle("CSP channels"); + hSigCSP[igain]->SetYTitle("Signal (ADC counts)"); + hSigCSP[igain]->SetMarkerStyle(20); + hSigCSP[igain]->SetMarkerColor(2); + hSigCSP[igain]->SetMarkerSize(1); + hSigCSP[igain]->GetYaxis()->SetNdivisions(505); + + hMeanCSP[igain]->SetXTitle("CSP channels"); + hMeanCSP[igain]->SetYTitle("Signal (ADC counts)"); + hMeanCSP[igain]->SetMarkerStyle(20); + hMeanCSP[igain]->SetMarkerColor(2); + hMeanCSP[igain]->SetMarkerSize(1); + hMeanCSP[igain]->GetYaxis()->SetNdivisions(505); + } + + //Creates calibration objects + AliEMCALCalibData* cdb[2]; + cdb[0] = new AliEMCALCalibData(); //for low gain + cdb[1] = new AliEMCALCalibData(); //for high gain + + // fill CSP histograms too + for (Int_t k=0; kGetBinContent(k+1) == 0 ) { + printf("Zero pedestal channel : %d, FEE %d Chip %d Chan %d : CSP %d gain %d\n", + k, chmap[k].fee, chmap[k].chip, chmap[k].chan, icsp, igain); + } + + hRMSCSP[igain]->SetBinContent(icsp+1, hPed->GetBinError(k+1)); + hRMS->SetBinContent(k+1, hPed->GetBinError(k+1)); + if (igain == 1) { + hRMS1D->Fill(hPed->GetBinError(k+1)); + } + + Int_t supermod=0; + cdb[igain]->SetADCpedestal(supermod,col,row,hPed->GetBinContent(k+1)); + printf("--- col%d row%d gain%d ped %.3f\n",col,row,igain, + cdb[igain]->GetADCpedestal(supermod,col,row)); + + hPedCSP[igain]->SetBinContent(icsp+1, hPed->GetBinContent(k+1)); + hPedCSP[igain]->SetBinError(icsp+1, hPed->GetBinError(k+1)); + + hSigCSP[igain]->SetBinContent(icsp+1, hSig->GetBinContent(k+1)); + hSigCSP[igain]->SetBinError(icsp+1, hSig->GetBinError(k+1)); + + hMeanCSP[igain]->SetBinContent(icsp+1, hMean->GetBinContent(k+1)); + hMeanCSP[igain]->SetBinError(icsp+1, hMean->GetBinError(k+1)); + } + + //------------------------------------------------------------------------------- + + //Save calibration objects to OCDB. + if(saveDb) { + + AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT"); + AliCDBManager::Instance()->SetSpecificStorage("EMCAL/*",DBFolder.Data()); + + AliCDBMetaData md; + md.SetComment("EMCAL beam test at CERN (Oct 2007)"); + + AliCDBStorage* storage = AliCDBManager::Instance()->GetSpecificStorage("EMCAL/*"); + if(storage) { + + AliCDBId idLow(DBPathLow.Data(),firstRun,lastRun); + storage->Put(cdb[0],idLow, &md); + + AliCDBId idHigh(DBPathHigh.Data(),firstRun,lastRun); + storage->Put(cdb[1],idHigh, &md); + + } + + } + + + // draw RMS + cRMS->cd(1); + hRMS->Draw("hist"); + cRMS->cd(2); + hRMSCSP[0]->Draw("P"); + cRMS->cd(3); + hRMSCSP[1]->Draw("P"); + + // lines + double min = hRMSCSP[1]->GetMinimum(); + double max = hRMSCSP[1]->GetMaximum(); + int ntcards = NCSP/8; // 8 CSPs per T-card + for (int tcard = 0; tcardSetLineColor(3); + line->SetLineWidth(1); + line->Draw("same"); + + //text + double xtex = tcard*8 + 1; + double ytex = max * 0.1; + char texstr[20]; + sprintf(texstr,"T-card %d", tcard%4); + TLatex *tex = new TLatex(xtex, ytex, texstr); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + } + + char Run[40]; + sprintf(Run,"Run: %d", runNumber); + TLatex *tex = new TLatex(8, max*1.1, Run); // 8 is just an arb. position + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + TLatex *tex = new TLatex(16, max*1.1, ", Gain: high"); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + cRMS->cd(1); + min = hRMS->GetMinimum(); + max = hRMS->GetMaximum(); + double fecpos = CHANNELS/2 - 0.5; + TLine *line = new TLine(fecpos, min, fecpos, max); + line->SetLineColor(4); + line->SetLineWidth(1); + line->Draw("same"); + + TLatex *tex = new TLatex(fecpos*0.5, max*1.1, FECstr0); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + TLatex *tex = new TLatex(fecpos*1.5, max*1.1, FECstr1); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + cRMS->cd(2); + min = hRMSCSP[0]->GetMinimum(); + max = hRMSCSP[0]->GetMaximum(); + fecpos = NCSP/2 - 0.5; + TLine *line = new TLine(fecpos, min, fecpos, max); + line->SetLineColor(4); + line->SetLineWidth(1); + line->Draw("same"); + + TLatex *tex = new TLatex(fecpos*0.5, max*1.1, FECstr0); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + TLatex *tex = new TLatex(fecpos*1.5, max*1.1, FECstr1); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + // make Pedestal plot + //------------------------------------------------------------------------------- + cPedestal->cd(1); + hPed->Draw("hist"); + cPedestal->cd(2); + hPedCSP[0]->Draw("P"); + cPedestal->cd(3); + hPedCSP[1]->Draw("P"); + + // lines + min = hPedCSP[1]->GetMinimum(); + max = hPedCSP[1]->GetMaximum(); + for (int tcard = 0; tcardSetLineColor(3); + line->SetLineWidth(1); + line->Draw("same"); + + //text + double xtex = tcard*8 + 1; + double ytex = max * 0.1; + char texstr[20]; + sprintf(texstr,"T-card %d", tcard%4); + TLatex *tex = new TLatex(xtex, ytex, texstr); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + } + + sprintf(Run,"Run: %d", runNumber); + TLatex *tex = new TLatex(8, max*1.1, Run); // 8 is just an arb. position + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + TLatex *tex = new TLatex(16, max*1.1, ", Gain: high"); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + cPedestal->cd(1); + min = hPed->GetMinimum(); + max = hPed->GetMaximum(); + fecpos = CHANNELS/2 - 0.5; + TLine *line = new TLine(fecpos, min, fecpos, max); + line->SetLineColor(4); + line->SetLineWidth(1); + line->Draw("same"); + + TLatex *tex = new TLatex(fecpos*0.5, max*1.1, FECstr0); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + TLatex *tex = new TLatex(fecpos*1.5, max*1.1, FECstr1); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + cPedestal->cd(2); + min = hPedCSP[0]->GetMinimum(); + max = hPedCSP[0]->GetMaximum(); + fecpos = NCSP/2 - 0.5; + TLine *line = new TLine(fecpos, min, fecpos, max); + line->SetLineColor(4); + line->SetLineWidth(1); + line->Draw("same"); + + TLatex *tex = new TLatex(fecpos*0.5, max*1.1, FECstr0); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + TLatex *tex = new TLatex(fecpos*1.5, max*1.1, FECstr1); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + // make Signal plot + //------------------------------------------------------------------------------- + if (extra) { + cSignal->cd(1); + hSig->Draw("hist"); + cSignal->cd(2); + hSigCSP[0]->Draw("P"); + cSignal->cd(3); + hSigCSP[1]->Draw("P"); + + // lines + min = hSigCSP[1]->GetMinimum(); + max = hSigCSP[1]->GetMaximum(); + for (int tcard = 0; tcardSetLineColor(3); + line->SetLineWidth(1); + line->Draw("same"); + + //text + double xtex = tcard*8 + 1; + double ytex = max * 0.1; + char texstr[20]; + sprintf(texstr,"T-card %d", tcard%4); + TLatex *tex = new TLatex(xtex, ytex, texstr); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + } + + sprintf(Run,"Run: %d", runNumber); + TLatex *tex = new TLatex(8, max*1.1, Run); // 8 is just an arb. position + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + TLatex *tex = new TLatex(16, max*1.1, ", Gain: high"); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + cSignal->cd(1); + min = hSig->GetMinimum(); + max = hSig->GetMaximum(); + fecpos = CHANNELS/2 - 0.5; + TLine *line = new TLine(fecpos, min, fecpos, max); + line->SetLineColor(4); + line->SetLineWidth(1); + line->Draw("same"); + + TLatex *tex = new TLatex(fecpos*0.5, max*1.1, FECstr0); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + TLatex *tex = new TLatex(fecpos*1.5, max*1.1, FECstr1); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + cSignal->cd(2); + min = hSigCSP[0]->GetMinimum(); + max = hSigCSP[0]->GetMaximum(); + fecpos = NCSP/2 - 0.5; + TLine *line = new TLine(fecpos, min, fecpos, max); + line->SetLineColor(4); + line->SetLineWidth(1); + line->Draw("same"); + + TLatex *tex = new TLatex(fecpos*0.5, max*1.1, FECstr0); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + TLatex *tex = new TLatex(fecpos*1.5, max*1.1, FECstr1); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + } + + // make Mean plot + //------------------------------------------------------------------------------- + cMean->cd(1); + hMean->Draw("hist"); + cMean->cd(2); + hMeanCSP[0]->Draw("P"); + cMean->cd(3); + hMeanCSP[1]->Draw("P"); + + // lines + min = hMeanCSP[1]->GetMinimum(); + max = hMeanCSP[1]->GetMaximum(); + for (int tcard = 0; tcardSetLineColor(3); + line->SetLineWidth(1); + line->Draw("same"); + + //text + double xtex = tcard*8 + 1; + double ytex = max * 0.1; + char texstr[20]; + sprintf(texstr,"T-card %d", tcard%4); + TLatex *tex = new TLatex(xtex, ytex, texstr); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + } + + sprintf(Run,"Run: %d", runNumber); + TLatex *tex = new TLatex(8, max*1.1, Run); // 8 is just an arb. position + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + TLatex *tex = new TLatex(16, max*1.1, ", Gain: high"); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + cMean->cd(1); + min = hMean->GetMinimum(); + max = hMean->GetMaximum(); + fecpos = CHANNELS/2 - 0.5; + TLine *line = new TLine(fecpos, min, fecpos, max); + line->SetLineColor(4); + line->SetLineWidth(1); + line->Draw("same"); + + TLatex *tex = new TLatex(fecpos*0.5, max*1.1, FECstr0); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + TLatex *tex = new TLatex(fecpos*1.5, max*1.1, FECstr1); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + cMean->cd(2); + min = hMeanCSP[0]->GetMinimum(); + max = hMeanCSP[0]->GetMaximum(); + fecpos = NCSP/2 - 0.5; + TLine *line = new TLine(fecpos, min, fecpos, max); + line->SetLineColor(4); + line->SetLineWidth(1); + line->Draw("same"); + + TLatex *tex = new TLatex(fecpos*0.5, max*1.1, FECstr0); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + TLatex *tex = new TLatex(fecpos*1.5, max*1.1, FECstr1); + tex->SetTextSize(0.05); + tex->SetTextColor(4); + tex->SetLineWidth(2); + tex->Draw(); + + // make unique files + if (save) { + char gifFile[80]; + if (extra) { + sprintf(gifFile,"gif/Run%d_Signal.gif",runNumber); + cSignal->SaveAs(gifFile); + } + sprintf(gifFile,"gif/Run%d_Pedestal.gif",runNumber); + cPedestal->SaveAs(gifFile); + sprintf(gifFile,"gif/Run%d_RMS.gif",runNumber); + cRMS->SaveAs(gifFile); + sprintf(gifFile,"gif/Run%d_Mean.gif",runNumber); + cMean->SaveAs(gifFile); + } + + cRMS1D->cd(); + hRMS1D->Fit("gaus"); + hRMS1D->Draw(); + +} + diff --git a/EMCAL/macros/CalibrationDB/map.txt b/EMCAL/macros/CalibrationDB/map.txt new file mode 100755 index 00000000000..3fc2395a37b --- /dev/null +++ b/EMCAL/macros/CalibrationDB/map.txt @@ -0,0 +1,129 @@ +i num row col gain csp fee chip chan +0 0 3 2 0 11 5 0 0 +1 1 3 2 1 11 5 0 1 +2 2 3 3 0 27 5 0 2 +3 3 3 3 1 27 5 0 3 +4 4 2 2 0 10 5 0 4 +5 5 2 2 1 10 5 0 5 +6 6 2 3 0 26 5 0 6 +7 7 2 3 1 26 5 0 7 +8 8 0 3 1 24 5 0 8 +9 9 0 3 0 24 5 0 9 +10 10 0 2 1 8 5 0 10 +11 11 0 2 0 8 5 0 11 +12 12 1 3 1 25 5 0 12 +13 13 1 3 0 25 5 0 13 +14 14 1 2 1 9 5 0 14 +15 15 1 2 0 9 5 0 15 +16 16 4 0 0 3 5 2 0 +17 17 4 0 1 3 5 2 1 +18 18 4 1 0 19 5 2 2 +19 19 4 1 1 19 5 2 3 +20 20 5 0 0 2 5 2 4 +21 21 5 0 1 2 5 2 5 +22 22 5 1 0 18 5 2 6 +23 23 5 1 1 18 5 2 7 +24 24 7 1 1 16 5 2 8 +25 25 7 1 0 16 5 2 9 +26 26 7 0 1 0 5 2 10 +27 27 7 0 0 0 5 2 11 +28 28 6 1 1 17 5 2 12 +29 29 6 1 0 17 5 2 13 +30 30 6 0 1 1 5 2 14 +31 31 6 0 0 1 5 2 15 +32 32 3 0 0 4 5 3 0 +33 33 3 0 1 4 5 3 1 +34 34 3 1 0 20 5 3 2 +35 35 3 1 1 20 5 3 3 +36 36 2 0 0 5 5 3 4 +37 37 2 0 1 5 5 3 5 +38 38 2 1 0 21 5 3 6 +39 39 2 1 1 21 5 3 7 +40 40 0 1 1 23 5 3 8 +41 41 0 1 0 23 5 3 9 +42 42 0 0 1 7 5 3 10 +43 43 0 0 0 7 5 3 11 +44 44 1 1 1 22 5 3 12 +45 45 1 1 0 22 5 3 13 +46 46 1 0 1 6 5 3 14 +47 47 1 0 0 6 5 3 15 +48 48 4 2 0 12 5 4 0 +49 49 4 2 1 12 5 4 1 +50 50 4 3 0 28 5 4 2 +51 51 4 3 1 28 5 4 3 +52 52 5 2 0 13 5 4 4 +53 53 5 2 1 13 5 4 5 +54 54 5 3 0 29 5 4 6 +55 55 5 3 1 29 5 4 7 +56 56 7 3 1 31 5 4 8 +57 57 7 3 0 31 5 4 9 +58 58 7 2 1 15 5 4 10 +59 59 7 2 0 15 5 4 11 +60 60 6 3 1 30 5 4 12 +61 61 6 3 0 30 5 4 13 +62 62 6 2 1 14 5 4 14 +63 63 6 2 0 14 5 4 15 +64 64 3 6 0 11 6 0 0 +65 65 3 6 1 11 6 0 1 +66 66 3 7 0 27 6 0 2 +67 67 3 7 1 27 6 0 3 +68 68 2 6 0 10 6 0 4 +69 69 2 6 1 10 6 0 5 +70 70 2 7 0 26 6 0 6 +71 71 2 7 1 26 6 0 7 +72 72 0 7 1 24 6 0 8 +73 73 0 7 0 24 6 0 9 +74 74 0 6 1 8 6 0 10 +75 75 0 6 0 8 6 0 11 +76 76 1 7 1 25 6 0 12 +77 77 1 7 0 25 6 0 13 +78 78 1 6 1 9 6 0 14 +79 79 1 6 0 9 6 0 15 +80 80 4 4 0 3 6 2 0 +81 81 4 4 1 3 6 2 1 +82 82 4 5 0 19 6 2 2 +83 83 4 5 1 19 6 2 3 +84 84 5 4 0 2 6 2 4 +85 85 5 4 1 2 6 2 5 +86 86 5 5 0 18 6 2 6 +87 87 5 5 1 18 6 2 7 +88 88 7 5 1 16 6 2 8 +89 89 7 5 0 16 6 2 9 +90 90 7 4 1 0 6 2 10 +91 91 7 4 0 0 6 2 11 +92 92 6 5 1 17 6 2 12 +93 93 6 5 0 17 6 2 13 +94 94 6 4 1 1 6 2 14 +95 95 6 4 0 1 6 2 15 +96 96 3 4 0 4 6 3 0 +97 97 3 4 1 4 6 3 1 +98 98 3 5 0 20 6 3 2 +99 99 3 5 1 20 6 3 3 +100 100 2 4 0 5 6 3 4 +101 101 2 4 1 5 6 3 5 +102 102 2 5 0 21 6 3 6 +103 103 2 5 1 21 6 3 7 +104 104 0 5 1 23 6 3 8 +105 105 0 5 0 23 6 3 9 +106 106 0 4 1 7 6 3 10 +107 107 0 4 0 7 6 3 11 +108 108 1 5 1 22 6 3 12 +109 109 1 5 0 22 6 3 13 +110 110 1 4 1 6 6 3 14 +111 111 1 4 0 6 6 3 15 +112 112 4 6 0 12 6 4 0 +113 113 4 6 1 12 6 4 1 +114 114 4 7 0 28 6 4 2 +115 115 4 7 1 28 6 4 3 +116 116 5 6 0 13 6 4 4 +117 117 5 6 1 13 6 4 5 +118 118 5 7 0 29 6 4 6 +119 119 5 7 1 29 6 4 7 +120 120 7 7 1 31 6 4 8 +121 121 7 7 0 31 6 4 9 +122 122 7 6 1 15 6 4 10 +123 123 7 6 0 15 6 4 11 +124 124 6 7 1 30 6 4 12 +125 125 6 7 0 30 6 4 13 +126 126 6 6 1 14 6 4 14 +127 127 6 6 0 14 6 4 15