From: Maps Date: Fri, 29 Mar 2024 18:29:05 +0000 (+0100) Subject: cleaned up and commited for push/backup X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=1abf12926ef8d211b7ddb8b33f61039959949aa7;p=mimosis_chain.git cleaned up and commited for push/backup --- diff --git a/.gitignore b/.gitignore index 3f96d35..e42618c 100644 --- a/.gitignore +++ b/.gitignore @@ -6,8 +6,8 @@ *aux *out *log +*.csv scratch -git data/ img/ *.png @@ -16,13 +16,15 @@ scripts/dac_scan/*.csv *.d *.so *.pcm -hld +*.hld *.hotstart *.kate-swp *GTAGS +git/ +build/ *GRTAGS *GPATH *.chat.swp -*.csv *STATUS -analysis/mbs/dabc* +.venv +WORKDIR* diff --git a/analysis/mbs/CMakeLists.txt b/analysis/mbs/CMakeLists.txt new file mode 100644 index 0000000..8ce1275 --- /dev/null +++ b/analysis/mbs/CMakeLists.txt @@ -0,0 +1,42 @@ +cmake_minimum_required(VERSION 3.9 FATAL_ERROR) + +project(mimosis-scurves + LANGUAGES C CXX +) + +add_executable(mimosis-scurves main.cxx) + +if(TRBNETTOOLS_DIR) + message(${TRBNETTOOLS_DIR}) +else() + message("TRBNETTOOLS_DIR not provided. Using /d/jspc85/bgutsche/trbnettools") + set(TRBNETTOOLS_DIR "/d/jspc85/bgutsche/trbnettools") +endif() +set(TRBNET_LIB_DIR ${TRBNETTOOLS_DIR}/libtrbnet/) +set(TRBNET_INCLUDE_DIR ${TRBNETTOOLS_DIR}/libtrbnet/) + +if(DABC_DIR) + message(${DABC_DIR}) +else() + message("DABC_DIR not provided. Using /d/jspc37/soft/trb3/dabc") + set(DABC_DIR "/d/jspc37/soft/trb3/dabc") +endif() +set(DABC_LIB_DIR ${DABC_DIR}/lib/) +set(DABC_INCLUDE_DIR ${DABC_DIR}/include/) + +include_directories( + ${TRBNET_INCLUDE_DIR} + ${DABC_INCLUDE_DIR} +) + +link_directories( + ${TRBNET_LIB_DIR} + ${DABC_LIB_DIR} +) + +target_link_libraries(mimosis-scurves + PRIVATE trbnet + PRIVATE DabcBase + PRIVATE DabcHadaq + PRIVATE DabcMbs +) diff --git a/analysis/mbs/dabc/plugins/hadaq/hldprint.cxx b/analysis/mbs/dabc/plugins/hadaq/hldprint.cxx deleted file mode 100644 index ef6b4fd..0000000 --- a/analysis/mbs/dabc/plugins/hadaq/hldprint.cxx +++ /dev/null @@ -1,152 +0,0 @@ -#include -#include -#include -#include -#include -#include "hadaq/api.h" - - -void await_params() { - std::string pipeName = "/tmp/scurveipipe"; - FILE *iPipe = fopen(pipeName.c_str(), "r"); - - int buf; - std::string msg; - bool foundFrame = false; - - if(iPipe == nullptr) { - std::printf("ERROR: Couldn't open file.\n"); - std::exit(-1); - } - - buf = fgetc(iPipe); - while(!foundFrame && buf != EOF) { - char c = static_cast(buf); - msg += c; - auto startPos = msg.find("START"); - auto endPos = msg.find("END"); - if(startPos != std::string::npos && endPos != std::string::npos) { - foundFrame = true; - break; - } - buf = fgetc(iPipe); - } - std::cout << msg << '\n'; - fclose(iPipe); -} - - -int send_ack() { - std::string pipeName = "/tmp/scurveapipe"; - FILE *iPipe = fopen(pipeName.c_str(), "w"); - - if(iPipe == nullptr) { - std::printf("ERROR: Couldn't open file.\n"); - std::exit(-1); - } - - std::string msg("ACK"); - fputs(msg.c_str(),iPipe); - fclose(iPipe); - return 0; -} - - -void fit(uint16_t vcasn) -{ - auto exec = [=]() - { - // std::ofstream fs; - // fs.open("params.csv"); - - // decltype(+SCurveRegionA) histP; - // switch(pulseRegion) - // { - // case 0: histP = SCurveRegionA; - // case 1: histP = SCurveRegionB; - // case 2: histP = SCurveRegionC; - // case 3: histP = SCurveRegionD; - // } - - // for(int i = 1; i < 504; i++) - // { - // for(int j = pulseColRegionLow; jSetParLimits(0,0,55000); - // f1->SetParLimits(1,0,255); - // f1->SetParameters(50000,100,10); - // f1->SetParError(1, 0.1); - - // auto hist = static_cast(histP)->ProjectionX(" ",i*colsN+j,i*colsN+j); - // int status = static_cast(hist)->Fit("f1","NQS"); - // fs << j << "\t" << i << "\t" << status << "\t" << f1->GetParameter(1) << "\t" << f1->GetParameter(2) << "\n"; - // std::cout << j << "\t" << i << "\t" << status << "\t" << f1->GetParameter(1) << "\t" << f1->GetParameter(2) << "\n"; - // delete hist; - // delete f1; - // } - // } - // fs.close(); - }; -} - - -int main(int argc, char* argv[]) -{ - std::string src = argv[1]; - hadaq::ReadoutHandle ref = hadaq::ReadoutHandle::Connect(src.c_str()); - if (ref.null()) return 1; - hadaq::RawEvent *evnt = nullptr; - - SCAN: - await_params(); - send_ack(); - - while (true) { - evnt = ref.NextEvent(1.,-1); - if (!evnt) continue; - hadaq::RawSubevent* sub = nullptr; - - while ((sub = evnt->NextSubevent(sub)) != nullptr) { - unsigned headersNow = 0; - uint32_t pulseMsg = 0; - unsigned size = sub->GetNrOfDataWords(); - - for( unsigned i = 0; i(sub->Data(i)); - - if((data & 0xFF000000) == 0xFE000000) { - - headersNow++; - - if(headersNow == 3) { - pulseMsg = (data & 0xFF0000) >> 16; - pulseMsg += (data & 0xFF) << 8; - } else if(headersNow == 4) { - pulseMsg += data & 0xFF0000; - pulseMsg += (data & 0xFF) << 24; - - if( ( ( 0x00c00000 & pulseMsg ) == 0x00c00000 ) ) { - std::printf("Start region\n"); - } else if( ( 0x00c00000 & pulseMsg ) == 0x00400000 ) { - std::printf("Start fit\n"); - fit(static_cast(pulseMsg & 0xFF)); - goto SCAN; - } else if( ( 0x00c00000 & pulseMsg ) == 0x00800000 ) { - std::printf("Start next round\n"); - goto SCAN; - } else if ( ( 0x00300000 & pulseMsg ) == 0x00300000 ){ - return 0; - } - } - } else if((data & 0xFF000000) == 0xFF000000) { - headersNow = 0; - } else { - } - // std::printf("%u\t%x\n",size, sub->Data(i)); - } - } - } - ref.Disconnect(); - return 0; -} diff --git a/analysis/mbs/main.cxx b/analysis/mbs/main.cxx new file mode 100644 index 0000000..a5b0fa7 --- /dev/null +++ b/analysis/mbs/main.cxx @@ -0,0 +1,511 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "hadaq/api.h" + +#include "trbnet.h" + + +using namespace std::chrono; + + +enum params {STATE, YLOW, YHIG, XLOW, XHIG, REGION, VCASN, VPHFINE}; + +namespace Data +{ + std::array dataArray; + int dataFraCnt = 0; + int limitFra = 500; + + short vphfine; + + int yLow, yHig, xLow, xHig; + int yLowMax = 504, yHigMax = 0, xLowMax = 1024, xHigMax = 0; + int sLowMax = 255, sHigMax = 0; + + std::string dataDir; + + std::string state; + + std::vector vcasnVec; + + decltype(high_resolution_clock::now()) start; + + std::vector mimFraCntNewVec; + std::vector mimFraCntOldVec; +}; + + +std::string pidName = "/tmp/hldprint-pid"; + + +void write_pid(void) +{ + int pid = (int)getpid(); + + // std::cout << pid << '\n'; + + FILE *pidFile = fopen(pidName.c_str(), "w"); + + if(pidFile == nullptr) { + std::printf("ERROR: Couldn't open file.\n"); + std::exit(-1); + } + + fprintf(pidFile, "%d",pid); + + fclose(pidFile); +} + + + +std::vector await_params() +{ + std::string pipeName = "/tmp/scurveipipe"; + FILE *iPipe = fopen(pipeName.c_str(), "r"); + + if(iPipe == nullptr) { + std::printf("ERROR: Couldn't open file.\n"); + std::exit(-1); + } + + int buf; + bool foundFrame = false, foundSta = false, foundEnd = false; + std::string word; + std::vector values; + + buf = fgetc(iPipe); + + while(!foundFrame && buf != EOF) + { + char c = static_cast(buf); + + if(c == '-') { + values.push_back(word); + word = ""; + } else { + word += c; + } + + if(word == "START") { foundSta = true; } + if(word == "END") { foundEnd = true; } + + buf = fgetc(iPipe); + + if(foundSta && foundEnd) { + foundFrame = true; + break; + } + } + + values.erase(values.begin()); + + // for (const auto& i: values) + // std::cout << i << '\n'; + + fclose(iPipe); + + return values; +} + + + +int send_ack() +{ + std::string pipeName = "/tmp/scurveapipe"; + FILE *iPipe = fopen(pipeName.c_str(), "w"); + + if(iPipe == nullptr) { + std::printf("ERROR: Couldn't open file.\n"); + std::exit(-1); + } + + std::string msg("ACK"); + fputs(msg.c_str(),iPipe); + fclose(iPipe); + return 0; +} + + + +void make_fit(std::string reg, std::string vcasn) +{ + // auto start = high_resolution_clock::now(); + + std::string subDir = Data::dataDir + "/" + reg + "-" + vcasn; + + mkdir(subDir.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + + std::string fileName = subDir + "/" + reg + "-" + vcasn + ".csv"; + + + std::ofstream file(fileName); + char buffer[1000000]; + file.rdbuf()->pubsetbuf(buffer, sizeof(buffer)); + + for(int y = Data::yLowMax; y <= Data::yHigMax; y++) { + for(int x = Data::xLowMax; x <= Data::xHigMax; x++) { + for(int s = Data::sLowMax; s <= Data::sHigMax; s++) { + uint32_t v = Data::dataArray[(y*1024+x)*255+s]; + file << v << '\t'; + // if(v != 0) { printf("%d %d %d %d\n",y,x,s,v); } + Data::dataArray[(y*1024+x)*255+s] = 0; + } + file << '\n'; + } + } + file.close(); + + // auto stop = high_resolution_clock::now(); + // auto duration = duration_cast(stop - start); + // std::cout << duration.count() << std::endl; + + return; +} + + + +bool decode_pixel(const uint32_t& word, int& column, int& row, const int& region) +{ + const unsigned long pixelcode = (word >> 6) & 0x3ff; + + unsigned long + side = 0, + topdown = 0; + + if((pixelcode&3) == 0x1 || (pixelcode&3) == 0x2) side = 1; + if((pixelcode&3) == 0x3 || (pixelcode&3) == 0x2) topdown = 1; + + row = (pixelcode>>2)*2 + topdown; + column = (((word>>3)&0x7) + region*8)*2 + side; + + return true; +} + + + +void take_data(std::string src) +{ + hadaq::ReadoutHandle ref = hadaq::ReadoutHandle::Connect(src.c_str()); + if (ref.null()) return; + hadaq::RawEvent *evnt = nullptr; + + bool takeData = false; + int region = 0, column, row; + short vphfine; + + while (true) + { + evnt = ref.NextEvent(1.,-1); + if (!evnt) continue; + hadaq::RawSubevent* sub = nullptr; + + while ((sub = evnt->NextSubevent(sub)) != nullptr) + { + unsigned headersNow = 0; + uint32_t mimFraCntNew = 0; + uint32_t mimFraCntOld = 0; + bool fraFirst = true; + uint32_t pulseMsg = 0; + unsigned size = sub->GetNrOfDataWords(); + + for( unsigned i = 0; i(sub->Data(i)); + + if((data & 0xFF000000) == 0xFE000000) { + + headersNow++; + + if(headersNow == 1) { + + mimFraCntNew = (data & 0xFF0000) >> 16; + mimFraCntNew += (data & 0xFF) << 8; + + } else if(headersNow == 2) { + + mimFraCntNew += data & 0xFF0000; + mimFraCntNew += (data & 0xFF) << 24; + + if(mimFraCntNew-mimFraCntOld != 1 && !fraFirst) { + Data::mimFraCntNewVec.push_back(mimFraCntNew); + Data::mimFraCntOldVec.push_back(mimFraCntOld); + std::printf("Found skipped mimosis frame counter:\nOld:\t%u\nNew:\t%u\n",mimFraCntOld,mimFraCntNew); + } + mimFraCntOld = mimFraCntNew; + fraFirst = false; + + } else if(headersNow == 3) { + + pulseMsg = (data & 0xFF0000) >> 16; + pulseMsg += (data & 0xFF) << 8; + + // std::printf("%u\t%x\n",size, sub->Data(i)); + + } else if(headersNow == 4) { + + pulseMsg += data & 0xFF0000; + pulseMsg += (data & 0xFF) << 24; + vphfine = ( pulseMsg & 0xFF000000 ) >> 24; + + // std::printf("%u\t%x\n",size, sub->Data(i)); + // std::printf("%x\n", pulseMsg); + + if( ( ( 0x00c00000 & pulseMsg ) == 0x00c00000 ) && + (vphfine == Data::vphfine)) { + + takeData = true; + Data::dataFraCnt++; + + if(Data::dataFraCnt >= Data::limitFra) { + takeData = false; + Data::dataFraCnt = 0; + goto ENDFUNC; + } + + Data::sLowMax = vphfine < Data::sLowMax ? vphfine : Data::sLowMax; + Data::sHigMax = vphfine > Data::sHigMax ? vphfine : Data::sHigMax; + + } else if( ( 0x00c00000 & pulseMsg ) == 0x00400000 ) { + + takeData = false; + goto ENDFUNC; + + } else if( ( 0x00c00000 & pulseMsg ) == 0x00000000 ) { + takeData = false; + //Idle + } + } + + } else if((data & 0xFF000000) == 0xFF000000) { + + headersNow = 0; + + } else { + + headersNow = 0; + + if( takeData ) { + + if( (data & 0xFF000000) == 0xFD000000 ) { + const int tmp = (data>>16) & 0xFF; + if(tmp > 63) continue; + region = tmp; + + } else { + + decode_pixel(data>>16,column,row,region); + if(column >= Data::xLow && + column <= Data::xHig && + row >= Data::yLow && + row < Data::yHig ) { + Data::dataArray[(row*1024+column)*255+vphfine] += 1; + // printf("%d %d %d %d\n",row, column, vphfine, Data::dataArray[(row*1024+column)*255+vphfine]); + } + } + + if((data & 0x0000FF00) != 0x0000FC00) { + + decode_pixel(data&0xFFFF,column,row,region); + + if(column >= Data::xLow && + column <= Data::xHig && + row >= Data::yLow && + row < Data::yHig ) { + Data::dataArray[(row*1024+column)*255+vphfine] += 1; + } + } + } + } + } + } + } + ENDFUNC: + ref.Disconnect(); + return; +} + + + +void find_edge() +{ + using namespace Data; + yLowMax = yLow < yLowMax ? yLow : yLowMax; + yHigMax = yHig > yHigMax ? yHig : yHigMax; + xLowMax = xLow < xLowMax ? xLow : xLowMax; + xHigMax = xHig > xHigMax ? xHig : xHigMax; +} + + + +void write_meta() +{ + + std::string fileName = Data::dataDir + "/METADATA"; + std::ofstream file(fileName); + + file << "START:" << '\t' << Data::dataDir << '\n'; + + file << "VCASN:"; + for(const auto& i: Data::vcasnVec) { + file << '\t' << i; + } + file << '\n'; + + file << "YMIN:" << '\t' << Data::yLowMax << '\n'; + file << "YMAX:" << '\t' << Data::yHigMax << '\n'; + file << "XMIN:" << '\t' << Data::xLowMax << '\n'; + file << "XMAX:" << '\t' << Data::xHigMax << '\n'; + file << "SMIN:" << '\t' << Data::sLowMax << '\n'; + file << "SMAX:" << '\t' << Data::sHigMax << '\n'; + + file << "EXITSTATE:" << '\t' << Data::state << '\n'; + + auto stop = high_resolution_clock::now(); + auto duration = duration_cast(stop - Data::start); + file << "TIME(s):" << '\t' << duration.count() << '\n'; + + file << "COMMENT:\t\n"; + + file.close(); +} + + + +void signal_handler( int signum ) +{ + std::cout << "Interrupt signal (" << signum << ") received Cleaning up...\n"; + + if(Data::state == "TAKEDATA" || + Data::state == "WAITDAQ" || + Data::state == "FIT") { + + std::string lastReg = "INTERRUPTED"; + std::string lastVca = "INTERRUPTED"; + make_fit(lastReg, lastVca); + std::cout << "Remining data indicated by INTERRUPTED flags.\n"; + + } else { + } + + //remove pid file + remove(pidName.c_str()); + + write_meta(); + + std::exit(signum); +} + + + +int main(int argc, char* argv[]) +{ + //Read stream url + std::string src = argv[1]; + + + //Initialize trbnet for this run + int trbnetState = init_ports(); + + + //Start clock to report execution time METADATA + Data::start = high_resolution_clock::now(); + + + //Generate the PID file + write_pid(); + + + //Register signal SIGINT and signal handler + signal(SIGINT, signal_handler); + + + //Declare stateVec, that will hold the + //informations passed from control script + std::vector stateVec; + + + //Create main data dir by time stamp + std::time_t time = std::time(0); + std::tm* now = std::localtime(&time); + + Data::dataDir = std::to_string(now->tm_year + 1900) + '-' + + std::to_string(now->tm_mon + 1) + '-' + + std::to_string(now->tm_mday) + '-' + + std::to_string(now->tm_hour) + '-' + + std::to_string(now->tm_min); + + mkdir(Data::dataDir.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + + + //Initialize data array with 0's + for(int y = 0; y <= 505; y++) + for(int x = 0; x <= 1025; x++) + for(int s = 0; s <= 256; s++) + Data::dataArray[(y*1024+x)*255+s] = 0; + + + //Control loop. After init phase, + //wait for commands from control script + AWAIT: + stateVec = await_params(); + Data::state = stateVec[params::STATE]; + + if(Data::state == "TAKEDATA") { + + Data::yLow = std::stoi(stateVec[params::YLOW], nullptr, 10); + Data::yHig = Data::yLow + std::stoi(stateVec[params::YHIG], nullptr, 10); + Data::xLow = std::stoi(stateVec[params::XLOW], nullptr, 10); + Data::xHig = std::stoi(stateVec[params::XHIG], nullptr, 10); + + std::printf("Take data: "); + std::printf("%4d %4d %4d %4d\n", Data::yLow, Data::yHig, Data::xLow, Data::xHig); + find_edge(); + send_ack(); + take_data(src); + goto AWAIT; + + } else if(Data::state == "WAITDAQ") { + + // std::printf("At WAITDAQ.\n"); + send_ack(); + goto AWAIT; + + } else if(Data::state == "FIT") { + + std::string regStr = stateVec[params::REGION]; + std::string vcaStr = stateVec[params::VCASN]; + Data::vcasnVec.push_back(vcaStr); + std::printf("Write data: %s %s\n",regStr.c_str(),vcaStr.c_str()); + make_fit(regStr,vcaStr); + send_ack(); + goto AWAIT; + + } else if(Data::state == "DONE") { + + std::printf("Done.\n"); + send_ack(); + + remove(pidName.c_str()); + + write_meta(); + + return 0; + + } else { + + std::printf("Received garbage. Exiting.\n"); + + remove(pidName.c_str()); + + return 1; + } +} diff --git a/analysis/rawreader/mimosis.h b/analysis/rawreader/mimosis.h index 0d5da31..362c25b 100644 --- a/analysis/rawreader/mimosis.h +++ b/analysis/rawreader/mimosis.h @@ -135,8 +135,7 @@ bool hadaq::MimosisProcessor::FirstBufferScan(const base::Buffer& buf) noexcept Last4096->SetBinContent(frameNumber % 4096, hitcount); hitcount = 0; - if (frameCounter == 1000000) { - std::printf("Entries: %f\n", MatrixCurrent->GetEntries()); + if (frameCounter == 10000) { MatrixCurrent->Copy(*MatrixLast); MatrixLast->SetName("MatrixLast10000"); MatrixCurrent->Reset(); diff --git a/analysis/scurve/fpn.py b/analysis/scurve/fpn.py deleted file mode 100755 index 7c7d928..0000000 --- a/analysis/scurve/fpn.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env python -import csv -#from scipy import special -import matplotlib.pyplot as plt -import numpy as np -import pandas as pd - -#dataset = pd.read_csv('regA_1.csv', delimiter='\t',header=None) -dataset = pd.read_csv('params.csv', delimiter='\t',header=None) -values = list(dataset.columns.values) -meansig = np.array(dataset[values[0:5]], dtype='float32') - -x = np.linspace(0, 255, num=255) - -hist = np.zeros(255) - -for i in range(len(meansig)): - # if i > 3500: - # break - if meansig[i,2] != 0.0 or meansig[i,3] < 0.0 or meansig[i,3] > 255 or meansig[i,4] < 1.0 or meansig[i,4] > 10.0: - continue - hist[int(meansig[i,3])] += 1 - # plt.plot(x, 50000*(1 + special.erf((x-meansig[i,3])/(np.sqrt(2)*meansig[i,4])))) - -plt.bar(x,hist,width=1) -# plt.hist(hist) -plt.show() diff --git a/analysis/scurve/libtrbnet.a b/analysis/scurve/libtrbnet.a deleted file mode 100644 index f5bd46d..0000000 Binary files a/analysis/scurve/libtrbnet.a and /dev/null differ diff --git a/analysis/scurve/scurvemap.gp b/analysis/scurve/scurvemap.gp deleted file mode 100644 index ea39644..0000000 --- a/analysis/scurve/scurvemap.gp +++ /dev/null @@ -1,8 +0,0 @@ -set terminal wxt size 1200,400 font "Verdana,10" -#set pm3d -#set view map -#plot 'xy.txt' matrix using 1:2:3 with image - -set cbrange [-1:300] -plot 'params.csv' using 1:2:4 with image -pause mouse close; exit diff --git a/analysis/scurve/start.sh b/analysis/scurve/start.sh deleted file mode 100755 index 3a5e1b6..0000000 --- a/analysis/scurve/start.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -sleep 8 - -if [[ ! -v DAQOPSERVER ]]; then - echo "DAQOPSERVER not set." -elif [[ -z "$DAQOPSERVER" ]]; then - echo "DAQOPSERVER empty." -elif [[ "$DAQOPSERVER" == "jspc29:150" ]]; then - echo "start go4 for Lab317." - source /d/jspc37/soft/trb3/trb3login - go4analysis -http 9999 -stream localhost:36789 -disable-asf -elif [[ "$DAQOPSERVER" == "jspc29:31" ]]; then - echo "start go4 for Probestation." - source /d/jspc37/soft/trb3/trb3login - go4analysis -http 8031 -stream localhost:6788 -disable-asf -else - echo "DAQOPSERVER unknown value." -fi - -bash -i - diff --git a/analysis/scurve/xy.py b/analysis/scurve/xy.py deleted file mode 100644 index 7b95f23..0000000 --- a/analysis/scurve/xy.py +++ /dev/null @@ -1,12 +0,0 @@ -from scipy import special -import matplotlib.pyplot as plt -import numpy as np - -plt.imshow( - np.reshape( - np.genfromtxt('regA_1.csv', - delimiter='\t', - usecols=(4), - max_rows=44*126, - ),(126,44))) -plt.show() diff --git a/analysis/scurve/xy.txt b/analysis/scurve/xy.txt deleted file mode 100644 index b4ecc57..0000000 --- a/analysis/scurve/xy.txt +++ /dev/null @@ -1,1803 +0,0 @@ -1802 -0 1 204.887 2.62892 -5 1 169.074 5.57744 -6 1 151.855 4.76436 -9 1 136.736 4.56072 -13 1 119.568 4.70458 -16 1 145.219 4.5904 -17 1 147.155 5.60792 -18 1 126.086 5.06185 -19 1 117.259 4.71903 -25 1 117.563 4.54783 -27 1 111.458 4.53862 -28 1 140.287 4.6406 -30 1 100.931 4.64201 -34 1 85.5817 4.62994 -38 1 119.781 5.14132 -39 1 107.719 4.73257 -43 1 82.0298 4.57845 -44 1 86.9735 4.58208 -49 1 122.629 4.96525 -53 1 75.657 4.96523 -54 1 79.9623 4.81116 -61 1 103.655 4.93159 -65 1 125.542 0.0976515 -67 1 111.253 5.37412 -70 1 81.0507 5.05282 -72 1 106.846 5.00344 -75 1 85.2735 5.04771 -76 1 106.141 5.16744 -79 1 117.197 5.345 -80 1 78.4733 5.26289 -81 1 126.153 5.71021 -82 1 117.904 6.21355 -85 1 117.899 6.04442 -87 1 115.815 6.45496 -91 1 121.038 5.71265 -96 1 91.1735 5.44282 -97 1 107.354 5.66304 -99 1 104.366 5.30868 -100 1 65.8619 5.94169 -101 1 127.716 6.39837 -104 1 141.049 6.44826 -108 1 86.3755 5.34667 -109 1 132.906 6.61403 -111 1 86.9808 5.51858 -112 1 88.2108 5.30762 -113 1 131.616 6.65229 -114 1 91.5653 5.16366 -117 1 99.4147 5.79943 -119 1 126.482 6.62938 -120 1 118.106 6.02296 -125 1 112.747 6.06742 -1 2 182.714 5.44451 -2 2 198.452 5.31695 -9 2 205.748 5.62077 -10 2 147.624 4.66194 -11 2 143.529 4.66142 -12 2 129.058 5.09867 -14 2 161.312 5.47931 -17 2 130.324 4.97377 -19 2 141.088 4.83084 -20 2 119.808 4.71585 -21 2 187.333 5.52058 -27 2 133.682 5.19765 -28 2 140.215 5.3201 -30 2 132.51 5.08485 -34 2 104.291 4.5292 -35 2 133.306 5.1552 -39 2 119.813 4.77725 -40 2 91.6107 4.86636 -41 2 120.968 5.27308 -42 2 114.817 5.10319 -45 2 112.376 5.34893 -48 2 163.66 6.56524 -50 2 200.595 6.61568 -57 2 109.931 5.24946 -61 2 107.745 5.15074 -62 2 175.737 6.57445 -64 2 95.3495 5.2498 -66 2 101.83 5.13274 -68 2 81.8209 5.07924 -74 2 117.087 5.25244 -77 2 133.268 6.32361 -81 2 143.927 6.11177 -83 2 112.773 5.45176 -85 2 96.0253 5.23114 -91 2 108.46 5.65739 -93 2 91.7139 5.26353 -95 2 89.5811 5.26521 -96 2 112.402 6.97917 -99 2 123.163 5.3475 -100 2 104.808 5.45401 -102 2 83.5607 5.15823 -103 2 78.2909 5.52383 -106 2 132.32 6.60923 -110 2 176.144 7.55793 -111 2 122.955 5.94913 -114 2 94.1672 5.61287 -117 2 90.6716 5.81997 -118 2 184.532 7.53999 -119 2 123.006 6.02927 -121 2 163.275 7.29617 -123 2 158.073 7.118 -126 2 204.087 4.92489 -0 3 204.087 4.92489 -2 3 168.472 6.44934 -3 3 161.395 5.60083 -4 3 157.444 5.00123 -5 3 173.465 5.11214 -7 3 175.243 4.95392 -11 3 136.536 4.75411 -13 3 149.605 4.76952 -18 3 121.572 4.85951 -21 3 138.406 0.0813514 -22 3 114.36 4.91102 -29 3 109.135 4.66549 -33 3 142.987 5.16253 -39 3 147.505 5.25578 -40 3 106.754 4.77456 -43 3 159.924 5.99749 -45 3 116.77 4.97733 -49 3 136.705 5.66743 -53 3 94.6123 4.9935 -55 3 133.302 5.97386 -56 3 146.11 5.61037 -57 3 107.792 5.17766 -60 3 95.2504 5.29588 -61 3 75.693 5.05075 -62 3 89.3778 5.04078 -64 3 135.738 6.06294 -67 3 115.481 5.10406 -72 3 97.726 5.11364 -75 3 118.05 5.44534 -78 3 135.802 6.63253 -81 3 88.15 5.1598 -82 3 129.168 6.15513 -86 3 89.3757 5.3035 -87 3 141.564 5.8589 -92 3 112.375 5.78766 -93 3 109.891 5.38065 -99 3 103.611 5.5107 -101 3 140.196 5.83145 -103 3 133.194 6.11167 -106 3 118.432 5.86548 -107 3 180.937 7.08133 -111 3 153.781 6.49087 -112 3 76.9185 5.41835 -115 3 107.994 5.4899 -118 3 94.5527 5.79039 -119 3 171.517 7.18343 -120 3 146.119 5.83818 -122 3 143.402 6.8133 -123 3 100.682 6.15544 -125 3 115.043 5.73156 -4 4 176.317 5.39741 -5 4 182.236 5.38413 -7 4 170.575 5.23069 -9 4 148.12 5.09748 -12 4 140.566 4.65146 -17 4 174.496 0.00420972 -18 4 166.845 5.05593 -20 4 175.646 5.41274 -29 4 118.326 4.7125 -30 4 97.6031 4.48285 -31 4 132.603 5.19623 -32 4 149.514 5.70642 -33 4 118.607 4.47627 -42 4 119.362 4.71376 -46 4 139.641 5.36148 -49 4 91.7814 4.9488 -50 4 112.781 5.38695 -52 4 105.949 4.9824 -53 4 95.144 5.23774 -64 4 131.876 5.94145 -72 4 110.29 5.33067 -74 4 77.6776 6.01851 -76 4 101.218 5.35155 -83 4 156.239 6.66254 -87 4 130.544 5.97286 -88 4 78.1687 5.41461 -89 4 107.335 5.834 -90 4 125.52 5.95508 -93 4 162.444 7.53586 -97 4 137.965 6.19714 -101 4 140.184 5.84579 -102 4 125.37 5.79077 -103 4 100.475 5.70535 -104 4 72.6036 5.56088 -106 4 140.286 6.24502 -113 4 131.236 6.07378 -114 4 93.3766 5.70558 -117 4 128.518 0.0330302 -121 4 158.319 6.95281 -124 4 143.733 6.25103 -1 5 201.607 5.72991 -2 5 187.688 5.12217 -4 5 180.102 6.20849 -6 5 156.838 5.33092 -10 5 162.556 4.99191 -13 5 156.586 5.06084 -14 5 130.292 4.75498 -17 5 140.681 4.8639 -27 5 142.835 4.97575 -29 5 127.091 4.98568 -30 5 106.622 4.59925 -31 5 112.921 4.78639 -32 5 154.964 5.81185 -35 5 114.238 4.75209 -40 5 119.667 5.21128 -41 5 100.203 4.90258 -42 5 159.384 6.43799 -44 5 124.668 5.15869 -46 5 89.7913 4.86893 -52 5 172.1 6.1554 -55 5 115.327 5.01195 -57 5 97.6178 5.18596 -58 5 84.6852 5.01429 -59 5 135.797 6.16241 -60 5 96.8537 5.2605 -61 5 89.6727 5.1155 -65 5 161.235 5.8049 -67 5 87.6532 4.93223 -69 5 85.1622 5.13139 -72 5 143.393 6.02969 -74 5 74.2379 5.40395 -75 5 114.157 5.32712 -76 5 89.2719 5.18653 -79 5 126.246 5.601 -82 5 140.835 5.92219 -92 5 108.394 5.39492 -93 5 141.514 6.25766 -95 5 133.569 5.66311 -96 5 68.3429 5.57409 -99 5 84.5801 5.50932 -100 5 119.464 5.45749 -104 5 97.7202 5.68109 -107 5 91.684 5.70258 -109 5 133.727 6.27859 -110 5 118.754 5.72364 -115 5 115.836 5.50863 -116 5 87.3238 5.64722 -123 5 74.9198 5.94019 -124 5 88.1358 5.91108 -125 5 93.5583 5.75993 -126 5 175.326 5.91378 -0 6 175.326 5.91378 -1 6 167.197 5.28491 -2 6 169.02 5.62206 -3 6 163.848 5.04628 -5 6 147.963 5.31818 -7 6 164.502 4.80041 -9 6 152.628 5.17269 -13 6 128.968 4.9353 -15 6 115.128 4.61172 -17 6 166.335 5.1692 -19 6 199.983 6.58075 -22 6 123.696 4.69142 -25 6 126.445 4.84929 -26 6 120.491 4.58241 -28 6 165.744 5.35818 -30 6 108.458 4.75289 -32 6 109.781 4.73571 -39 6 105.99 4.74766 -41 6 116.017 6.11163 -42 6 178.742 5.78793 -43 6 108.11 4.79678 -44 6 101.457 4.79156 -45 6 111.601 4.89926 -49 6 99.5783 5.19444 -55 6 212.175 7.67683 -56 6 91.9355 6.23238 -57 6 98.8008 5.36238 -59 6 154.857 5.92826 -62 6 132.281 8.76994 -65 6 158.108 6.08759 -66 6 83.1567 5.1 -67 6 100.707 5.18618 -69 6 123.989 5.63131 -71 6 128.495 5.82913 -75 6 89.8433 5.09909 -78 6 148.354 6.33047 -79 6 132.108 6.52171 -80 6 131.841 5.95909 -85 6 125.153 5.86157 -86 6 127.418 6.59116 -91 6 227.982 5.73526 -92 6 110.95 5.60442 -93 6 128.606 5.91627 -96 6 99.0581 5.6031 -99 6 85.1973 5.37041 -101 6 83.7356 5.47711 -102 6 93.0195 5.65449 -109 6 92.7344 5.92618 -110 6 131.24 5.80776 -111 6 157.09 6.8676 -120 6 76.9208 5.83979 -121 6 105.402 6.07096 -126 6 198.287 5.5102 -0 7 198.287 5.5102 -1 7 171.042 5.50187 -4 7 164.718 5.00539 -6 7 137.803 4.69126 -8 7 163.351 4.9212 -9 7 159.086 4.80471 -10 7 142.097 4.7408 -11 7 144.442 4.92833 -15 7 134.296 4.78954 -18 7 136.404 4.76351 -21 7 115.672 4.58366 -23 7 144.6 5.17777 -24 7 143.469 4.89639 -27 7 126.459 5.12063 -30 7 147.402 5.46985 -37 7 121.049 4.34323 -41 7 91.5438 4.97194 -42 7 187.288 6.20531 -44 7 126.76 4.94265 -46 7 118.788 5.04672 -55 7 129.231 5.17907 -57 7 117.781 5.65123 -58 7 98.9405 5.0501 -59 7 99.6262 5.27662 -63 7 111.799 5.15412 -64 7 86.9903 5.17765 -65 7 196.603 7.46338 -66 7 118.677 5.03877 -69 7 148.058 6.21402 -75 7 143.961 6.35032 -80 7 137.065 5.80413 -82 7 112.962 5.63842 -84 7 105.02 5.27222 -85 7 156.803 6.53847 -88 7 129.006 5.8845 -89 7 163.483 6.68052 -90 7 118.716 5.48675 -92 7 162.465 0.160591 -94 7 130.331 6.02605 -98 7 121.863 5.71169 -99 7 107.892 5.71597 -100 7 82.105 5.38358 -101 7 122.698 5.59681 -102 7 106.778 5.84931 -107 7 85.9276 5.47367 -111 7 142.299 6.67907 -112 7 88.7663 5.56803 -113 7 144.936 6.34749 -115 7 153.541 11.2562 -118 7 135.977 6.77205 -120 7 62.3184 5.83616 -123 7 85.7305 5.99155 -1 8 177.236 5.25765 -5 8 145.903 4.806 -14 8 134.579 5.2141 -15 8 120.18 4.65849 -18 8 141.124 4.68897 -19 8 132.123 5.39997 -21 8 156.553 4.96854 -27 8 130.991 5.35905 -29 8 108.753 4.99 -31 8 112.755 4.89494 -33 8 135.302 5.40136 -34 8 110.039 4.8418 -36 8 104.705 5.0711 -41 8 129.433 5.47584 -44 8 117.924 5.3039 -48 8 155.175 5.65458 -49 8 118.739 5.17974 -55 8 87.744 5.05032 -56 8 124.23 5.70268 -58 8 84.4378 5.12509 -59 8 113.756 5.35351 -60 8 85.3472 5.07646 -61 8 113.415 5.36672 -62 8 85.891 5.03078 -67 8 91.0574 5.29826 -71 8 113.557 5.57316 -72 8 94.2647 5.47827 -78 8 93.4774 5.40925 -81 8 158.025 6.27498 -82 8 89.1719 5.37559 -95 8 90.2649 5.16971 -96 8 91.7786 5.88966 -100 8 97.3477 5.99893 -101 8 161.622 6.81614 -105 8 186.403 7.42563 -106 8 93.5585 6.60595 -107 8 81.1102 5.63057 -109 8 115.223 5.74117 -110 8 180.33 7.11959 -114 8 144.527 5.82562 -115 8 88.9571 5.89976 -116 8 95.9409 6.21209 -120 8 71.3141 6.22376 -121 8 109.29 6.31976 -123 8 63.4298 6.30629 -1 9 182.818 4.90633 -2 9 174.884 5.83008 -3 9 160.091 5.06546 -4 9 150.577 5.45948 -5 9 147.828 4.971 -6 9 162.451 5.45034 -7 9 144.16 4.66122 -9 9 155.886 4.61081 -12 9 148.245 5.08894 -20 9 125.529 5.16309 -21 9 166.798 5.76651 -22 9 127.387 5.24361 -23 9 125.125 4.92349 -27 9 135.801 5.18141 -28 9 134.804 5.23876 -29 9 125.776 5.10847 -30 9 106.309 5.07307 -32 9 109.068 4.84825 -35 9 140.893 4.66249 -40 9 102.478 5.2741 -42 9 96.5653 5.10824 -43 9 134.616 5.50763 -47 9 114.152 5.17913 -50 9 86.5669 4.93553 -55 9 98.3374 6.2469 -56 9 71.5774 5.48139 -59 9 90.0081 5.49151 -60 9 87.1128 5.19626 -61 9 79.6284 5.31176 -62 9 105.873 5.39735 -65 9 118.223 5.7942 -68 9 137.971 5.62755 -71 9 91.8339 5.44705 -78 9 95.1502 5.62312 -80 9 99.4219 5.68456 -88 9 88.4418 5.56751 -89 9 131.547 6.15574 -92 9 95.5478 5.66215 -93 9 168.331 7.32253 -100 9 106.944 6.04837 -101 9 73.2395 5.71437 -102 9 73.4979 5.68816 -106 9 74.4396 3.74259 -108 9 82.9599 5.57256 -109 9 109.447 6.75742 -112 9 91.9461 5.75097 -114 9 110.48 5.85196 -115 9 156.786 6.35045 -124 9 86.4974 5.62727 -2 10 178.652 4.8761 -6 10 174.853 5.45852 -7 10 158.298 4.68408 -8 10 154.915 4.85064 -9 10 149.685 5.15226 -11 10 133.899 5.5165 -12 10 169.447 5.74583 -13 10 152.514 4.98834 -15 10 129.504 5.14771 -16 10 175.433 6.25344 -20 10 131.705 5.31245 -24 10 116.469 3.99699 -26 10 150.491 0.00320338 -29 10 110.035 4.64214 -31 10 115.993 4.79313 -36 10 94.6092 5.10946 -39 10 118.548 5.80364 -40 10 148.265 6.03051 -41 10 155.592 5.48149 -43 10 115.798 4.05315 -44 10 131.721 5.47277 -45 10 88.9766 4.98495 -50 10 105.493 5.42695 -53 10 94.6904 5.13775 -54 10 85.1893 5.02019 -55 10 84.2405 5.12698 -56 10 91.9448 5.11057 -57 10 114.517 0.065024 -59 10 126.43 5.92617 -60 10 82.8108 5.07902 -62 10 95.5623 5.32874 -64 10 149.159 5.68536 -65 10 165.189 5.96089 -69 10 146.879 5.46148 -72 10 78.5563 5.15353 -83 10 132.077 6.00871 -86 10 86.0406 5.28321 -87 10 117.061 5.84547 -92 10 147.235 5.79924 -93 10 123.753 5.85454 -98 10 124.022 6.08151 -100 10 89.0596 5.60492 -101 10 105.326 5.50206 -103 10 141.303 6.36584 -106 10 113.633 6.40789 -112 10 77.87 5.62397 -114 10 76.1467 5.64535 -120 10 86.9706 5.8321 -121 10 119.266 6.36709 -2 11 150.199 5.29151 -3 11 163.967 5.24995 -4 11 170.321 5.48565 -8 11 137.246 5.48988 -9 11 158.967 4.91326 -11 11 135.105 5.54561 -12 11 151.181 4.90873 -13 11 136.905 5.24259 -14 11 135.252 5.49235 -15 11 124.841 4.68254 -17 11 141.464 4.68086 -18 11 122.776 4.72262 -23 11 121.815 4.67421 -26 11 103.175 5.12618 -29 11 126.098 4.8977 -31 11 113.197 4.88615 -32 11 124.481 5.10289 -33 11 109.102 4.93742 -35 11 109.804 5.05074 -36 11 115.15 4.95502 -37 11 118.472 4.85182 -38 11 134.472 5.51774 -39 11 105.772 5.22269 -42 11 94.0749 5.19786 -44 11 156.74 5.63002 -45 11 92.9424 5.15032 -47 11 106.512 5.23169 -51 11 97.1243 5.60653 -54 11 112.134 5.26744 -55 11 90.0338 5.05515 -58 11 106.572 5.38565 -61 11 114.205 5.26471 -63 11 160.084 5.71776 -64 11 110.866 6.41187 -70 11 83.7304 5.17729 -72 11 65.2861 5.63057 -74 11 113.291 6.30324 -76 11 84.6364 5.28854 -77 11 119.267 5.55479 -83 11 66.2287 5.80408 -84 11 130.843 7.03257 -85 11 117.568 5.76083 -90 11 84.7451 5.58872 -91 11 81.4159 5.44957 -93 11 86.589 5.56529 -97 11 161.668 6.35338 -98 11 106.385 5.71741 -101 11 108.452 6.00901 -104 11 101.789 6.05724 -105 11 65.1338 6.19393 -109 11 80.4416 6.24798 -112 11 66.3818 6.07491 -113 11 82.2492 5.5469 -114 11 65.952 0.00770582 -115 11 79.6977 5.656 -117 11 123.231 6.41474 -126 11 218.162 6.05702 -0 12 218.162 6.05702 -1 12 156.045 5.38767 -2 12 156.304 5.03033 -3 12 144.412 5.13625 -6 12 155.279 5.23542 -7 12 148.064 5.46257 -8 12 157.147 5.25817 -9 12 168.922 4.88971 -10 12 146.305 5.62361 -12 12 164.002 5.11376 -14 12 139.388 4.92077 -15 12 152.237 5.29927 -17 12 118.794 4.38196 -18 12 134.377 4.82242 -19 12 150.42 5.67079 -20 12 121.041 4.71233 -22 12 129.34 5.24261 -24 12 154.355 5.58759 -25 12 211.142 8.05821 -26 12 160.81 5.20794 -27 12 122.669 5.13457 -29 12 116.565 4.69615 -30 12 116.466 4.72735 -33 12 113.262 4.51563 -35 12 125.706 5.23028 -36 12 164.138 5.83711 -37 12 144.788 5.53706 -39 12 97.1895 4.98789 -41 12 123.418 5.12172 -48 12 96.2277 5.2209 -50 12 94.1189 5.17842 -52 12 89.9029 5.96297 -56 12 139.986 5.85232 -57 12 117.424 5.20793 -58 12 135.223 6.17585 -59 12 103.947 5.19066 -62 12 86.1829 3.85406 -66 12 128.189 5.59246 -69 12 102.434 5.27169 -71 12 134.316 5.89993 -72 12 134.436 5.80566 -76 12 87.5875 5.30194 -94 12 74.7826 5.48623 -95 12 84.313 5.24594 -97 12 92.2549 5.6262 -98 12 91.0492 5.67826 -100 12 118.027 5.00701 -101 12 116.556 0.0837677 -106 12 139.751 6.44571 -107 12 94.4234 5.67526 -111 12 82.2684 5.61628 -113 12 182.517 6.88535 -117 12 167.847 6.62857 -118 12 132.941 5.98963 -119 12 175.274 6.97498 -121 12 163.155 6.95012 -122 12 86.2583 5.62366 -1 13 156.862 5.01598 -6 13 155.073 5.14836 -8 13 161.322 4.75016 -9 13 171.867 5.32061 -12 13 130.052 4.97546 -14 13 132.878 4.83204 -15 13 195.027 3.64764 -16 13 131.695 4.86708 -17 13 210.551 5.70324 -18 13 155.053 5.46046 -20 13 142.758 5.15448 -21 13 120.103 4.74769 -26 13 132.997 5.18099 -29 13 125.651 4.85905 -31 13 140.27 0.0881261 -33 13 91.7734 4.82285 -37 13 93.0743 4.92768 -38 13 103.222 5.09488 -40 13 188.463 5.3785 -44 13 121.385 4.95901 -46 13 127.245 5.42714 -48 13 110.493 5.05703 -51 13 139.191 5.84562 -53 13 137.428 5.6199 -57 13 125.217 5.76995 -59 13 115.361 5.38447 -61 13 81.4632 5.03483 -66 13 153.412 6.43247 -72 13 93.4831 5.28472 -77 13 78.3725 5.29642 -79 13 112.169 5.35463 -80 13 105.607 5.27625 -82 13 173.913 6.42941 -87 13 124.597 5.63215 -90 13 100.449 5.86086 -92 13 94.9681 5.65884 -94 13 86.8992 5.32937 -95 13 126.995 6.07021 -97 13 124.657 5.9817 -98 13 171.172 7.00597 -100 13 133.487 0.0468793 -101 13 113.296 5.64721 -104 13 101.704 5.38983 -105 13 141.77 6.56596 -107 13 136.064 6.90921 -108 13 85.9385 5.57219 -110 13 123.753 6.25936 -114 13 96.7647 5.88406 -119 13 85.6437 5.61356 -120 13 159.692 6.53773 -122 13 90.3509 6.0933 -124 13 155.341 6.81222 -126 13 150.622 5.52635 -0 14 150.622 5.52635 -2 14 157.048 5.27255 -3 14 185.927 4.48333 -4 14 150.817 5.43728 -8 14 144.97 5.12216 -10 14 156.815 5.0888 -11 14 150.677 5.63986 -13 14 147.877 5.4736 -14 14 109.496 0.113644 -17 14 127.266 4.73262 -22 14 115.865 4.40922 -23 14 204.052 4.33094 -27 14 138.079 5.15829 -29 14 120.924 4.88683 -31 14 117.447 4.6163 -32 14 104.961 4.86162 -35 14 153.418 5.68778 -37 14 143.493 5.32351 -38 14 138.108 5.55992 -39 14 118.008 4.7018 -40 14 169.488 5.90541 -46 14 103.196 5.01175 -47 14 91.4226 5.17383 -49 14 149.744 6.46542 -52 14 94.8567 6.485 -53 14 99.9087 5.18039 -54 14 177.17 7.05597 -60 14 137.139 5.97694 -61 14 112.206 6.51355 -64 14 138.817 7.36664 -69 14 113.748 5.31963 -70 14 76.5868 5.36718 -73 14 109.426 5.66057 -76 14 133.109 6.25064 -84 14 90.2213 5.28326 -85 14 92.9412 5.49278 -90 14 135.337 6.10406 -92 14 160.952 6.47263 -93 14 97.0143 5.54913 -95 14 208.621 6.41129 -96 14 88.6414 5.40134 -97 14 84.0684 5.5622 -98 14 103.168 5.56412 -99 14 109.64 5.6998 -102 14 101.289 5.63415 -106 14 119.646 5.9076 -108 14 88.3528 5.55687 -109 14 121.378 6.16023 -111 14 84.3673 5.47516 -113 14 123.482 6.22004 -116 14 107.164 6.10844 -118 14 125.016 6.36396 -123 14 134.358 6.44225 -126 14 172.442 5.12927 -0 15 172.442 5.12927 -1 15 168.002 4.88885 -2 15 151.501 5.38817 -3 15 149.871 5.40671 -6 15 167.821 5.02442 -8 15 146.549 5.58105 -10 15 133.064 4.936 -13 15 150.876 5.40507 -20 15 128.734 4.82359 -22 15 166.454 5.60815 -23 15 104.976 4.86862 -25 15 124.256 5.15418 -27 15 125.51 0.11703 -29 15 111.042 4.48627 -31 15 123.454 0.0866978 -40 15 107.637 5.29333 -44 15 95.814 4.94127 -47 15 150.974 5.83143 -49 15 166.506 6.38817 -52 15 125.07 5.45577 -59 15 111.538 5.41371 -60 15 115.698 5.12044 -61 15 124.462 4.72447 -64 15 111.026 5.23486 -66 15 89.7421 5.17372 -70 15 193.205 4.57336 -71 15 81.8463 4.31931 -74 15 102.446 5.26552 -76 15 110.384 5.47981 -77 15 116.638 5.44213 -79 15 122.756 5.61931 -84 15 150.512 6.80409 -85 15 107.853 5.2971 -90 15 79.5436 5.59932 -91 15 88.4102 5.54352 -93 15 90.8221 5.42585 -99 15 84.3132 10.4631 -102 15 87.6206 5.49558 -105 15 117.598 5.87054 -106 15 93.3226 5.53409 -114 15 96.8241 5.79501 -117 15 116.829 5.74406 -118 15 112.765 5.79962 -120 15 136.53 6.6956 -123 15 89.5117 6.15744 -1 16 149.586 5.50101 -2 16 153.185 5.51934 -4 16 159.174 5.70326 -7 16 149.859 5.05259 -9 16 135.053 4.89109 -11 16 120.527 0.0459701 -12 16 130.357 4.735 -16 16 142.44 4.71917 -17 16 141.035 4.91557 -20 16 129.671 4.82744 -23 16 150.529 5.18672 -34 16 191.842 5.57484 -36 16 117.456 4.85176 -37 16 95.088 4.86125 -38 16 141.746 5.53175 -39 16 159.892 6.13352 -43 16 118.886 5.30941 -44 16 122.12 5.02148 -46 16 94.7099 4.97622 -49 16 137.15 5.36368 -50 16 87.2951 4.76601 -52 16 176.012 5.41025 -53 16 143.684 6.01798 -57 16 152.754 6.26205 -58 16 118.803 5.56603 -70 16 136.386 6.18235 -77 16 177.178 5.83276 -79 16 145.243 6.32271 -87 16 109.23 5.28563 -95 16 92.9765 5.29723 -97 16 146.341 6.54588 -103 16 67.0781 5.8407 -104 16 74.6689 5.56971 -105 16 154.567 7.22683 -106 16 111.894 5.95352 -110 16 130.142 5.9982 -112 16 93.0591 5.66731 -115 16 113.4 5.80273 -118 16 113.522 6.05605 -122 16 132.315 7.15229 -124 16 83.2528 5.65264 -126 16 164.339 5.65613 -0 17 164.339 5.65613 -3 17 158.339 5.7376 -4 17 147.932 4.92924 -6 17 177.626 4.95638 -9 17 133.976 4.99307 -13 17 133.352 4.93366 -15 17 158.821 5.38286 -16 17 119.167 4.61565 -18 17 127.115 4.52805 -24 17 127.835 5.20422 -25 17 123.844 4.75343 -26 17 139.112 5.2759 -32 17 113.53 4.81099 -33 17 111.125 4.90942 -37 17 150.736 5.46923 -38 17 87.6989 4.39602 -42 17 155.351 5.84156 -44 17 88.1776 4.62669 -50 17 100.732 5.02669 -57 17 120.18 5.0389 -60 17 96.5599 5.38573 -61 17 84.3191 5.04098 -76 17 165.139 6.30877 -77 17 102.836 5.44811 -78 17 189.077 6.62525 -79 17 128.061 5.72397 -80 17 75.2897 5.33695 -81 17 110.092 5.74463 -83 17 132.624 6.23839 -84 17 110.363 5.65253 -85 17 80.0509 5.29788 -87 17 120.935 6.1957 -89 17 96.7553 5.59466 -90 17 126.618 5.8079 -91 17 113.717 5.5733 -93 17 117.236 6.52629 -94 17 156.691 7.34582 -95 17 139.466 6.5127 -96 17 116.623 5.83757 -97 17 138.683 6.64632 -105 17 112.139 5.74254 -108 17 158.839 6.65621 -109 17 225.925 7.74187 -110 17 69.9301 5.89917 -114 17 79.0263 5.69294 -117 17 88.87 5.79746 -121 17 105.594 5.97562 -123 17 144.906 6.72345 -124 17 150.117 6.57394 -126 17 150.576 5.12928 -0 18 150.576 5.12928 -4 18 150.25 5.01379 -7 18 136.595 4.86163 -9 18 132.641 4.85517 -10 18 138.694 4.67577 -13 18 130.824 4.78101 -14 18 146.13 4.9096 -16 18 122.257 4.44587 -26 18 123.728 4.63215 -27 18 112.32 4.67527 -32 18 112.448 5.15625 -37 18 144.374 5.11107 -39 18 139.171 5.42015 -42 18 120.932 4.96265 -44 18 94.0136 4.95016 -45 18 117.685 4.87809 -49 18 98.7308 5.09524 -51 18 83.5507 4.82664 -54 18 155.615 6.21839 -58 18 142.603 6.25841 -60 18 111.411 5.27577 -61 18 128.192 5.60039 -64 18 121.972 5.755 -65 18 79.7435 5.08194 -66 18 108.534 5.89882 -69 18 94.2525 5.25549 -70 18 109.479 0.0910515 -73 18 169.216 6.60974 -74 18 107.995 5.40506 -78 18 120.036 5.70517 -79 18 160.569 6.64422 -81 18 84.3507 5.31234 -82 18 92.4203 5.74894 -84 18 95.8109 5.51481 -85 18 157.812 7.1395 -86 18 83.6691 5.18021 -87 18 127.681 5.54421 -88 18 102.468 5.63776 -89 18 110.094 5.66247 -93 18 126.846 5.95144 -94 18 150.01 6.51175 -95 18 133.839 6.45723 -101 18 143.288 6.41724 -102 18 108.737 5.59883 -107 18 166.286 6.84005 -109 18 114.323 6.00618 -112 18 118.201 5.03922 -113 18 136.957 0.0566004 -114 18 149.474 7.72143 -115 18 99.5167 5.83842 -116 18 128.296 6.64628 -120 18 120.786 5.87821 -123 18 103.866 5.7759 -124 18 187.522 6.91608 -126 18 151.258 5.05641 -0 19 151.258 5.05641 -3 19 181.586 4.92887 -4 19 156.26 5.87928 -9 19 127.815 4.58353 -17 19 142.698 5.45812 -19 19 154.804 5.59005 -22 19 120.478 0.0453386 -23 19 129.856 4.98356 -28 19 156.229 5.78716 -31 19 150.594 6.50517 -32 19 115.349 4.78726 -35 19 124.614 4.67815 -36 19 145.467 5.65779 -37 19 112.065 4.91849 -38 19 102.519 5.53834 -42 19 95.672 5.06168 -48 19 83.4336 4.75275 -49 19 116.936 5.02688 -50 19 98.5707 5.00618 -52 19 108.415 5.05071 -53 19 104.478 5.15581 -55 19 134.756 5.60587 -59 19 112.812 5.54628 -61 19 127.538 5.38065 -65 19 138.659 6.06629 -68 19 154.304 6.88672 -74 19 155.667 6.33027 -75 19 125.52 5.87476 -82 19 87.297 5.31999 -87 19 115.111 5.48084 -89 19 90.2948 0.0889318 -90 19 156.49 6.68039 -97 19 181.259 6.05259 -98 19 153.97 7.01874 -100 19 82.9229 5.57676 -101 19 107.328 5.8761 -102 19 237.07 7.7941 -106 19 185.608 6.44534 -109 19 139.05 6.50669 -110 19 77.6546 5.69732 -112 19 128.501 6.27137 -114 19 152.379 6.98661 -117 19 116.117 4.06441 -118 19 192.567 6.92933 -120 19 152.932 7.16903 -123 19 90.2054 6.03619 -2 20 133.721 5.09639 -3 20 144.986 5.01151 -6 20 137.211 4.82549 -9 20 127.391 4.58905 -10 20 170.773 5.12187 -11 20 223.934 6.43887 -12 20 144.42 4.86266 -16 20 139.725 4.78211 -17 20 161.376 5.03185 -18 20 122.87 4.1961 -19 20 166.117 5.2826 -20 20 165.579 5.79476 -21 20 157.624 5.31467 -24 20 127.462 0.0387928 -26 20 184.785 5.89519 -27 20 132.17 4.55631 -28 20 116.923 4.40032 -29 20 108.674 4.52099 -31 20 124.03 4.66632 -32 20 114.863 4.57943 -35 20 93.6392 5.04408 -37 20 101.322 4.50821 -38 20 105.42 4.42452 -39 20 210.7 7.81543 -41 20 158.643 6.18235 -44 20 134.098 6.37673 -55 20 107.879 5.98539 -59 20 112.633 6.19205 -64 20 97.5968 5.24272 -65 20 100.92 4.98137 -66 20 117.21 5.28906 -68 20 86.3578 5.18126 -71 20 87.649 5.67097 -73 20 139.015 6.47872 -75 20 133.329 6.76608 -76 20 110.815 5.07719 -77 20 134.912 6.85945 -78 20 93.4582 5.43462 -83 20 137.897 5.97452 -85 20 88.124 5.38211 -86 20 75.5225 5.45084 -90 20 116.37 5.52396 -92 20 133.81 6.63816 -93 20 143.122 6.38041 -94 20 213.277 6.58582 -95 20 108.691 5.2243 -97 20 175.277 7.01487 -100 20 124.179 5.9065 -102 20 109.66 5.43708 -107 20 111.719 5.49521 -109 20 161.557 6.69612 -112 20 112.78 5.4832 -113 20 152.511 7.05377 -114 20 125.824 5.88424 -115 20 65.9672 5.73239 -117 20 160.143 7.15568 -123 20 142.63 6.68048 -125 20 130.275 6.40877 -2 21 142.02 5.09378 -3 21 134.572 4.67663 -6 21 151.087 5.05463 -7 21 143.974 5.00968 -8 21 167.699 5.11734 -10 21 145.519 0.0853995 -15 21 147.173 5.07169 -25 21 144.356 5.07191 -26 21 152.864 5.61456 -31 21 110.721 4.3798 -32 21 108.48 0.0214691 -35 21 124.148 4.89902 -43 21 209.588 7.84451 -45 21 143.793 5.75157 -51 21 83.0615 5.43844 -56 21 109.763 4.95239 -58 21 93.6529 5.31533 -60 21 92.2915 5.45073 -61 21 114.032 5.19005 -65 21 150.892 6.22387 -66 21 154.141 6.01599 -69 21 87.5071 5.58583 -70 21 143.729 6.32976 -72 21 88.1549 5.65033 -73 21 120.414 5.77207 -78 21 79.7008 5.58871 -80 21 88.3769 5.79956 -81 21 70.8898 4.71293 -85 21 81.5083 5.53794 -87 21 90.8136 5.89448 -88 21 126.112 5.62444 -89 21 132.83 6.03504 -91 21 134.391 6.43873 -92 21 135.331 6.06488 -94 21 110.689 5.2698 -95 21 145.265 6.60975 -97 21 127.251 5.79843 -98 21 112.323 5.25889 -99 21 138.423 6.33747 -101 21 168.7 6.95913 -103 21 162.494 6.59642 -106 21 205.247 8.30559 -111 21 189.154 8.49446 -112 21 77.2978 5.81802 -116 21 132.478 6.37253 -117 21 69.9642 6.04163 -121 21 89.5937 6.42544 -122 21 124.006 5.84415 -123 21 137.237 6.34176 -124 21 99.176 5.95573 -125 21 124.104 6.35092 -126 21 151.445 5.38801 -0 22 151.445 5.38801 -2 22 185.848 5.2372 -4 22 142.538 5.10067 -6 22 173.88 5.21991 -7 22 180.13 5.04209 -8 22 126.356 4.40203 -9 22 145.365 4.93547 -12 22 117.476 4.35959 -13 22 134.488 5.0166 -14 22 240.672 6.37012 -15 22 140.136 5.08601 -17 22 128.361 4.96136 -27 22 146.62 5.20146 -28 22 125.42 4.67108 -31 22 121.734 4.6798 -36 22 99.4848 4.62048 -38 22 127.74 4.90072 -40 22 108.976 4.5894 -45 22 173.119 6.08287 -46 22 203.2 7.26049 -47 22 198.106 7.39251 -52 22 123.579 5.54738 -53 22 160.109 6.02569 -54 22 88.8071 5.66951 -55 22 106.511 4.78352 -57 22 134.182 5.53683 -65 22 132.467 5.48117 -66 22 93.1924 5.44759 -67 22 113.532 5.17562 -71 22 101.408 5.0243 -74 22 148.087 6.60449 -77 22 90.8924 5.74623 -82 22 120.486 5.21003 -83 22 136.692 6.44546 -84 22 116.211 5.31461 -92 22 163.148 7.08076 -95 22 68.5004 0.0829071 -97 22 140.875 6.24313 -99 22 105.742 5.11685 -106 22 107.142 5.60369 -109 22 172.3 6.207 -111 22 121.367 5.32956 -113 22 127.494 0.0244966 -124 22 180.217 6.96974 -126 22 162.222 4.97536 -0 23 162.222 4.97536 -1 23 153.103 5.12144 -2 23 214.097 5.72531 -3 23 142.021 5.09166 -8 23 164.706 4.86014 -9 23 134.981 4.84675 -10 23 234.519 6.98367 -12 23 117.867 4.33344 -13 23 178.405 5.3554 -15 23 124.451 4.26916 -16 23 162.675 4.92262 -19 23 120.7 4.68515 -21 23 137.164 3.42522 -22 23 116.613 4.568 -23 23 118.31 4.76905 -24 23 118.144 4.47288 -25 23 143.539 5.48838 -27 23 139.662 5.11594 -28 23 120.729 4.38247 -37 23 118.162 4.67961 -44 23 167.432 6.32321 -48 23 144.9 5.96417 -52 23 220.108 7.49082 -53 23 83.0796 5.52421 -59 23 107.909 5.86026 -60 23 132.489 5.61291 -63 23 95.7257 5.19644 -66 23 122.551 5.3959 -67 23 134.83 5.72192 -68 23 159.367 6.19266 -71 23 87.4977 5.69601 -72 23 161.001 6.62079 -74 23 122.268 5.4702 -78 23 110.047 5.15306 -79 23 132.104 5.85368 -85 23 117.314 5.07601 -90 23 92.465 6.03202 -91 23 87.906 5.92307 -92 23 67.2075 5.58173 -93 23 112.164 5.89652 -94 23 96.9787 5.75625 -95 23 130.066 5.90486 -97 23 109.904 5.80399 -100 23 83.0757 5.81375 -101 23 93.6679 6.03703 -104 23 168.024 6.55364 -106 23 147.873 6.75784 -111 23 162.029 6.63512 -113 23 182.193 7.6098 -115 23 117.984 5.60395 -116 23 125.548 6.28425 -119 23 157.576 6.68001 -122 23 119.023 6.02148 -123 23 117.761 5.16571 -125 23 96.3429 6.19452 -126 23 175.468 4.80526 -0 24 175.468 4.80526 -3 24 141.285 4.5621 -5 24 186.494 5.64246 -8 24 147.465 0.0450767 -11 24 178.178 5.46797 -12 24 144.874 4.85877 -15 24 172.54 5.39778 -17 24 137.829 4.88724 -19 24 180.687 6.29415 -20 24 122.055 4.97847 -22 24 119.324 4.78068 -24 24 136.146 5.16417 -25 24 131.427 5.47917 -26 24 99.7818 5.01602 -28 24 108.322 4.80944 -30 24 111.078 4.61762 -31 24 126.252 5.40819 -35 24 85.9632 5.10634 -36 24 128.293 5.94601 -38 24 104.648 5.1226 -40 24 97.6988 5.27987 -41 24 102.626 4.32637 -43 24 125.151 5.89369 -49 24 136.134 5.45494 -55 24 83.3688 5.11295 -57 24 116.84 5.37012 -60 24 139.165 6.00564 -62 24 86.9141 5.43147 -65 24 116.487 5.47957 -66 24 119.712 5.4295 -68 24 106.948 5.40945 -69 24 121.012 5.83931 -70 24 113.146 5.26177 -72 24 81.8917 5.22643 -74 24 149.63 6.18405 -75 24 107.515 5.65206 -79 24 215.153 7.23825 -86 24 90.1198 5.66201 -87 24 87.4116 6.87882 -88 24 103.431 7.14939 -91 24 171.48 0.00871558 -94 24 188.984 7.41603 -99 24 112.302 5.79085 -100 24 110.517 6.04601 -104 24 78.8696 5.61275 -106 24 115.112 5.81028 -110 24 93.9938 5.99294 -111 24 131.799 6.31415 -115 24 96.2808 6.23951 -117 24 72.7253 5.65305 -119 24 134.634 6.4451 -120 24 96.1542 5.93209 -123 24 132.755 6.59564 -125 24 84.7137 5.88107 -126 24 143.868 4.64116 -0 25 143.868 4.64116 -3 25 139.911 4.30668 -6 25 144.552 4.69096 -7 25 182.23 5.5893 -9 25 120.509 4.85191 -12 25 151.957 5.6806 -16 25 114.092 4.3806 -17 25 125.248 5.17332 -28 25 119.868 4.93827 -29 25 129.323 5.66982 -32 25 163.782 5.61672 -36 25 123.445 5.25992 -37 25 101.564 5.06863 -39 25 139.025 5.33338 -40 25 130.431 6.33018 -42 25 87.5394 5.04466 -44 25 116.24 4.97507 -45 25 146.626 6.02137 -50 25 164.499 6.6814 -53 25 108.178 5.41636 -54 25 166.024 6.53044 -55 25 120.481 5.72966 -56 25 151.237 6.21502 -58 25 97.8462 5.27907 -60 25 117.086 5.47636 -63 25 125.087 6.4809 -64 25 106.383 5.36982 -66 25 82.8955 5.13399 -69 25 88.9587 5.36723 -71 25 133.081 6.18701 -77 25 150.381 6.37451 -82 25 160.971 6.52607 -84 25 82.6087 5.18773 -85 25 111.277 6.12039 -86 25 144.229 5.7589 -87 25 164.504 0.0199831 -88 25 83.6238 5.58198 -89 25 68.8364 5.75417 -90 25 148.052 6.65938 -91 25 98.2378 6.18852 -93 25 122.465 6.00181 -96 25 88.574 5.75743 -100 25 130.949 6.74498 -101 25 104.454 5.6286 -102 25 121.513 6.13046 -103 25 95.4702 6.14346 -107 25 115.599 6.06724 -108 25 88.6496 5.82064 -110 25 125.452 6.48433 -111 25 140.881 6.14622 -113 25 143.532 6.28227 -114 25 138.581 5.40953 -115 25 139.823 5.66487 -116 25 64.3359 6.03504 -117 25 157.009 8.01794 -118 25 82.5236 5.56321 -119 25 151.287 6.64594 -120 25 147.931 6.76325 -122 25 84.5546 6.29164 -125 25 105.345 6.19713 -1 26 171.036 5.57521 -2 26 141.63 4.12834 -3 26 158.641 4.95355 -4 26 136.491 5.91518 -6 26 208.697 5.99162 -7 26 152.215 5.27273 -8 26 245.249 9.69631 -12 26 117.802 4.61351 -16 26 129.867 5.42832 -20 26 131.273 5.58842 -21 26 121.209 4.96915 -23 26 150.124 6.26256 -24 26 114.314 4.53257 -27 26 141.098 4.95669 -28 26 130.932 5.87865 -34 26 103.065 4.89955 -37 26 123.622 5.42459 -40 26 95.3384 5.30854 -44 26 106.06 5.35507 -49 26 136.857 5.95156 -50 26 143.08 5.74565 -51 26 112.225 5.10173 -52 26 108.058 5.12134 -54 26 90.8282 5.40798 -57 26 128.156 6.22697 -58 26 82.3597 5.07333 -62 26 92.2982 5.57223 -64 26 136.742 5.91864 -65 26 105.963 3.68138 -67 26 150.347 6.35884 -69 26 73.335 5.30352 -71 26 129.392 6.40176 -72 26 111.493 5.62515 -73 26 93.6628 5.63596 -81 26 122.349 5.62666 -83 26 74.4196 5.37234 -90 26 116.996 5.90405 -91 26 136.549 6.29577 -92 26 143.959 6.56 -98 26 148.351 6.10196 -102 26 102.699 5.67979 -104 26 115.571 5.9969 -106 26 87.6351 5.71391 -107 26 142.943 5.93308 -110 26 164.972 7.22587 -111 26 127.776 6.57669 -113 26 116.517 6.06405 -116 26 106.245 6.11927 -117 26 91.4931 6.09182 -123 26 133.931 6.93258 -125 26 121.966 6.37322 -1 27 170.867 5.34432 -3 27 183.676 5.0861 -4 27 147.743 4.92707 -5 27 151.274 5.08251 -6 27 151.108 4.92138 -7 27 133.292 5.43907 -9 27 128.688 5.43099 -10 27 121.042 4.93728 -18 27 139.234 4.8064 -19 27 148.882 5.31413 -22 27 138.514 4.89299 -24 27 151.423 5.64256 -27 27 102.209 5.07635 -29 27 171.366 6.38765 -30 27 116.467 5.27807 -31 27 147.254 5.47997 -32 27 183.734 6.20519 -40 27 132.755 5.117 -41 27 97.9873 5.4754 -44 27 95.8698 5.46837 -45 27 146.481 5.25004 -50 27 120.486 5.41164 -53 27 89.1897 5.39511 -54 27 96.5128 5.303 -61 27 155.034 5.83551 -62 27 135.051 5.89411 -64 27 102.416 5.54187 -65 27 218.547 9.56871 -66 27 162.83 6.53931 -68 27 106.15 5.68289 -70 27 153.992 6.22714 -71 27 112.608 5.46352 -74 27 147.884 6.45569 -78 27 100.311 5.41329 -79 27 132.85 6.58522 -81 27 107.702 5.654 -85 27 139.056 5.86011 -89 27 230.261 8.34979 -90 27 67.5965 5.94215 -95 27 164.289 6.71229 -97 27 75.2391 5.67052 -99 27 107.048 5.78905 -100 27 90.6126 5.86946 -102 27 88.4655 5.72931 -104 27 248.965 6.24505 -105 27 83.9252 5.8551 -108 27 123.004 5.3571 -109 27 179.98 7.75457 -113 27 175.87 6.6884 -115 27 93.7641 6.00269 -118 27 123.451 6.47725 -121 27 99.3903 5.928 -126 27 156.451 4.69896 -0 28 156.451 4.69896 -1 28 150.037 4.87705 -2 28 138.485 4.29407 -5 28 136.182 4.63294 -7 28 131.042 4.83701 -11 28 124.691 4.59421 -13 28 136.514 4.59207 -15 28 115.998 4.66609 -17 28 154.445 0.106313 -19 28 133.535 4.80535 -21 28 115.366 4.85508 -22 28 109.942 5.15984 -23 28 119.407 5.07389 -25 28 124.109 5.13192 -31 28 90.146 5.03821 -32 28 120.366 5.23457 -33 28 160.088 5.98108 -36 28 132.416 5.40828 -39 28 156.474 0.0160699 -42 28 99.7361 5.35301 -44 28 136.678 5.21963 -45 28 110.478 5.41793 -46 28 216.243 0.322749 -48 28 123.82 5.46508 -49 28 175.662 6.30837 -52 28 84.7319 5.285 -54 28 91.6706 5.47182 -55 28 85.7569 4.96775 -60 28 94.1037 5.34655 -62 28 136.103 5.44649 -63 28 112.057 5.96824 -74 28 210.708 8.17822 -75 28 75.6258 5.44531 -76 28 140.556 6.09497 -78 28 83.3846 5.506 -79 28 137.317 5.43986 -84 28 89.8044 5.77351 -93 28 83.1307 5.7397 -97 28 90.466 5.72083 -99 28 84.0206 5.45415 -101 28 116.561 5.86782 -103 28 79.7994 5.49112 -105 28 152.505 7.15727 -108 28 75.8564 5.55912 -109 28 100.449 0.0507707 -110 28 90.5746 6.1351 -117 28 98.1332 6.18417 -122 28 167.867 5.94859 -123 28 112.146 6.3071 -124 28 116.489 6.3319 -126 28 137.886 4.41245 -0 29 137.886 4.41245 -1 29 172.971 5.18816 -2 29 132.52 4.42589 -3 29 152.089 4.87424 -5 29 169.975 5.23088 -8 29 123.102 4.91996 -13 29 117.088 4.83668 -14 29 112.395 4.83853 -17 29 145.77 4.95834 -19 29 134.739 4.67501 -21 29 144.981 5.16095 -23 29 130.799 4.88447 -28 29 110.918 4.93336 -29 29 171.154 6.46963 -31 29 130.521 5.219 -32 29 93.6487 5.1519 -36 29 97.6882 5.18481 -40 29 93.4354 5.61175 -43 29 96.5984 6.14831 -44 29 87.0751 5.101 -50 29 125.027 5.36201 -52 29 114.512 5.54342 -58 29 130.739 6.50208 -61 29 95.0252 5.55279 -65 29 112.577 5.37083 -66 29 215.117 8.01154 -67 29 115.624 5.99204 -68 29 111.522 5.5168 -70 29 129.681 5.64084 -72 29 111.367 5.53906 -73 29 102.713 5.61086 -76 29 157.3 5.43918 -77 29 143.08 5.72786 -82 29 97.4923 5.65204 -86 29 88.4645 5.64941 -87 29 168.399 6.68936 -94 29 125.181 5.91641 -103 29 145.341 6.116 -105 29 128.26 6.71143 -106 29 141.867 6.31855 -108 29 116.751 6.20278 -110 29 162.246 7.80871 -111 29 107.718 6.00985 -113 29 114.29 5.75782 -114 29 82.1781 5.77444 -115 29 93.8073 5.97122 -116 29 120.313 6.13088 -118 29 152.59 6.80861 -120 29 139.034 6.35232 -121 29 119.7 6.39432 -123 29 114.615 6.15872 -124 29 81.9485 6.03447 -125 29 142.797 6.38572 -126 29 157.669 4.57161 -0 30 157.669 4.57161 -1 30 134.083 4.65122 -3 30 143.454 4.79853 -4 30 143.361 0.131078 -8 30 126.875 4.569 -11 30 116.914 4.951 -15 30 147.535 5.96863 -16 30 170.968 5.82811 -17 30 131.253 4.71045 -18 30 124.073 5.07983 -23 30 150.281 5.46987 -24 30 191.417 7.26922 -27 30 143.63 5.28346 -28 30 103.397 5.0602 -33 30 108.456 4.99256 -38 30 126.202 5.35744 -39 30 130.81 5.28774 -46 30 143.434 6.0833 -47 30 163.408 6.1013 -50 30 118.451 5.76908 -51 30 94.6404 5.63862 -54 30 131.891 5.45323 -56 30 84.5751 5.15234 -58 30 112.407 5.46015 -60 30 102.955 5.33616 -67 30 258.541 11.8249 -69 30 127.859 5.83632 -71 30 216.888 8.02661 -72 30 131.14 6.88636 -75 30 123.937 6.11748 -78 30 92.2556 5.81109 -80 30 135.401 5.97055 -81 30 194.489 7.66073 -82 30 88.0831 8.12252 -84 30 70.157 5.35287 -85 30 93.9193 5.62342 -89 30 149.355 6.66372 -90 30 77.3676 6.05011 -92 30 152.304 6.74235 -95 30 140.063 6.11613 -96 30 61.407 5.88915 -100 30 106.052 5.91734 -101 30 132.904 5.63034 -105 30 96.5971 6.04729 -106 30 94.1713 5.96059 -109 30 150.016 6.82495 -110 30 109.915 6.02404 -111 30 121.757 6.17702 -113 30 128.008 9.67752 -117 30 130.973 6.06039 -123 30 129.194 6.43591 -124 30 137.006 6.01379 -1 31 147.933 4.87809 -2 31 155.271 4.67257 -4 31 144.868 4.73066 -5 31 146.167 5.02899 -7 31 141.775 4.73265 -8 31 120.122 4.81328 -10 31 153.212 5.03383 -13 31 115.925 4.92929 -14 31 135.447 4.59198 -19 31 122.743 5.15414 -23 31 163.631 5.80553 -24 31 115.574 5.12501 -25 31 125.395 5.46936 -28 31 117.307 5.04682 -30 31 103.506 5.36292 -32 31 121.54 5.05422 -38 31 113.263 5.22796 -41 31 90.4751 5.45679 -42 31 125.682 5.58078 -44 31 110.065 5.18761 -45 31 131.782 5.18845 -46 31 98.3861 5.2076 -52 31 88.1043 5.1562 -53 31 115.169 5.36165 -54 31 86.4747 0.0394927 -55 31 135.81 5.80253 -56 31 130.637 5.79369 -57 31 142.252 5.86293 -60 31 160.944 6.1136 -61 31 71.4598 5.27948 -63 31 120.507 5.47736 -65 31 119.045 5.58287 -68 31 110.959 5.51682 -69 31 123.745 5.80769 -73 31 105.957 5.75284 -74 31 138.425 4.70865 -75 31 74.4157 5.65617 -79 31 90.5673 5.67035 -84 31 132.843 5.30935 -85 31 108.955 5.56743 -89 31 133.611 6.15626 -91 31 82.4953 0.0285886 -93 31 149.874 6.76065 -94 31 127.326 6.31678 -97 31 127.082 6.23921 -98 31 114.147 5.90786 -100 31 71.8323 5.66899 -102 31 112.824 5.73769 -103 31 106.488 0.0206728 -104 31 120.779 6.11341 -105 31 89.6896 6.58345 -109 31 135.689 6.18291 -110 31 143.553 6.34086 -112 31 148.307 6.80965 -119 31 155.352 8.64755 -121 31 129.533 6.28527 -122 31 203.052 8.20826 -123 31 87.6451 6.83985 -1 32 140.636 4.54504 -2 32 159.987 5.1928 -5 32 139.963 4.76394 -8 32 127.479 4.96903 -14 32 116.712 3.84167 -20 32 109.539 4.81822 -21 32 118.724 4.28057 -24 32 120.522 0.0261262 -25 32 132.955 5.42581 -26 32 124.083 5.1393 -28 32 84.5939 5.02253 -29 32 114.306 4.39845 -30 32 128.949 5.87005 -31 32 109.839 4.89874 -32 32 106.506 5.10447 -33 32 130.531 5.39035 -36 32 103.472 5.17606 -37 32 126.748 5.373 -38 32 118.436 4.53958 -40 32 147.666 6.01852 -43 32 114.707 4.73091 -44 32 89.5379 5.2575 -49 32 85.9601 5.29448 -50 32 110.048 5.10794 -51 32 89.4383 5.82173 -52 32 87.0331 5.26892 -59 32 158.88 6.33499 -61 32 140.751 5.66941 -63 32 177.203 6.30774 -65 32 78.5946 5.33485 -66 32 89.4617 5.45247 -69 32 78.5796 5.14905 -71 32 83.2118 5.50508 -72 32 142.664 6.75162 -78 32 91.2503 5.6047 -79 32 116.047 5.02277 -81 32 86.6995 5.65651 -83 32 108.795 5.65212 -85 32 124.39 5.45873 -90 32 142.884 6.15534 -91 32 148.824 6.63559 -92 32 86.4748 5.51143 -96 32 100.757 5.66315 -102 32 107.181 5.84595 -103 32 92.7976 5.92824 -104 32 138.378 6.48003 -109 32 109.755 5.90302 -110 32 70.2835 5.74153 -112 32 116.815 5.02341 -115 32 118.167 5.51179 -116 32 100.127 7.2698 -117 32 104.576 6.09195 -118 32 81.8317 6.31085 -123 32 96.5412 6.19554 -124 32 121.694 5.81981 -125 32 165.612 7.10429 -2 33 145.457 0.053851 -3 33 145.255 4.7231 -4 33 121.635 4.42433 -12 33 151.292 5.14176 -16 33 114.47 4.01834 -17 33 118.799 4.40066 -18 33 105.676 5.18431 -20 33 112.845 4.85412 -25 33 122.054 4.51022 -26 33 119.282 4.66606 -28 33 130.895 5.65025 -29 33 142.537 5.05583 -31 33 206.555 7.64247 -34 33 141.393 4.4707 -39 33 130.227 5.63432 -40 33 116.639 4.78172 -41 33 142.443 5.56564 -42 33 137.34 5.51043 -50 33 124.102 6.0761 -51 33 111.279 4.94731 -53 33 147.281 6.13274 -57 33 142.217 6.71429 -59 33 92.714 5.42325 -61 33 114.683 4.48258 -65 33 113.357 4.89666 -69 33 99.9641 5.58204 -70 33 102.258 5.53413 -71 33 94.7015 5.89837 -75 33 121.188 5.34625 -78 33 79.5597 5.4768 -80 33 129.407 6.31494 -82 33 124.454 5.60221 -84 33 109.382 5.57869 -88 33 140.373 6.71406 -92 33 138.863 6.41834 -99 33 116.586 5.31964 -102 33 87.6955 5.77733 -107 33 70.2698 5.76613 -109 33 123.86 5.8937 -110 33 115.685 6.31652 -111 33 110.177 5.92501 -112 33 110.827 5.62965 -115 33 147.062 6.57861 -117 33 144.727 6.59036 -120 33 142.089 6.52892 -123 33 98.794 5.9974 -124 33 158.578 7.21932 -2 34 133.366 5.21982 -3 34 137.104 4.96968 -6 34 135.404 5.20719 -8 34 147.774 4.96305 -9 34 117.553 4.07053 -10 34 150.515 4.92054 -16 34 92.6938 5.00762 -17 34 186.19 5.74058 -18 34 109.313 4.19136 -20 34 147.71 5.07623 -21 34 138.715 4.63922 -22 34 121.643 4.51399 -25 34 113.065 4.44184 -29 34 119.297 4.73987 -30 34 118.256 4.3183 -33 34 104.951 5.15901 -36 34 140.469 5.461 -37 34 88.829 5.17206 -40 34 91.3284 5.25252 -42 34 95.8971 5.52607 -45 34 113.202 5.07036 -50 34 98.6718 6.54462 -53 34 111.018 5.18849 -54 34 106.523 5.41723 -56 34 76.2317 5.00472 -58 34 94.1397 5.83095 -60 34 128.827 6.06601 -62 34 88.642 3.99104 -64 34 112.374 5.07848 -67 34 125.149 5.75932 -69 34 71.5033 5.14849 -70 34 136.515 5.78343 -75 34 138.373 5.57791 -77 34 83.7507 5.6685 -85 34 120.83 5.41788 -87 34 139.036 6.15402 -88 34 119.875 5.58957 -89 34 148.228 6.56474 -90 34 118.295 5.11749 -93 34 92.769 3.50785 -96 34 170.597 6.83201 -97 34 133.28 6.55013 -98 34 167.014 7.08856 -101 34 83.6767 5.87292 -104 34 92.412 5.51776 -105 34 88.515 6.03894 -107 34 94.4555 5.99784 -109 34 116.558 5.60545 -112 34 175.543 7.31124 -113 34 129.336 6.62921 -116 34 137.705 6.11059 -119 34 105.668 6.04751 -120 34 59.0625 6.51839 -1 35 135.849 5.03956 -2 35 144.485 4.67443 -4 35 127.673 5.20076 -8 35 126.76 5.00747 -9 35 116.093 3.94568 -13 35 147.527 0.0506317 -17 35 103.649 5.08178 -22 35 116.682 4.04988 -23 35 186.604 6.73423 -29 35 122.356 4.60928 -32 35 159.483 0.00254279 -37 35 158.029 5.76387 -38 35 111.928 4.44467 -39 35 85.1859 5.0433 -41 35 89.5225 5.55417 -43 35 152.951 5.95576 -45 35 172.058 6.48836 -48 35 86.2137 5.3178 -50 35 129.141 6.02219 -52 35 163.727 7.57636 -55 35 143.762 5.77108 -57 35 126.097 5.75676 -59 35 147.122 5.58852 -61 35 132.77 5.85168 -65 35 149.345 5.92855 -68 35 101.689 5.62663 -69 35 111.221 4.83411 -72 35 112.054 2.52427 -73 35 172.042 7.23042 -75 35 86.0156 5.51889 -79 35 137.745 6.09797 -82 35 88.6149 5.73109 -86 35 125.988 6.01374 -88 35 79.2929 5.63238 -90 35 103.757 5.62592 -92 35 95.301 5.93959 -93 35 166.267 7.26977 -94 35 150.137 6.40534 -95 35 96.4402 5.68433 -98 35 70.7737 5.48491 -109 35 134.361 4.46818 -110 35 86.8804 5.7169 -112 35 89.2885 5.82215 -115 35 181.982 7.65881 -116 35 134.783 6.58781 -121 35 151.26 6.87471 -122 35 171.408 7.85642 -124 35 93.2318 5.96423 -126 35 68.8638 5.88717 -0 36 68.8638 5.88717 diff --git a/dabc/EventBuilder.xml b/dabc/EventBuilder.xml index f4a89ea..5b48c88 100644 --- a/dabc/EventBuilder.xml +++ b/dabc/EventBuilder.xml @@ -69,6 +69,7 @@ When starting analysis from the go4 gui, one should specify stream server with p + diff --git a/scripts/Mimosis.pm b/scripts/Mimosis.pm index cfb3720..1c5f2ca 100755 --- a/scripts/Mimosis.pm +++ b/scripts/Mimosis.pm @@ -523,11 +523,11 @@ set multiplot layout 2,2; set key Left left top box; set xlabel \\"set.\\"; set ylabel \\"[mV]\\"; -array names0[7] = [\\"VCASP\\", \\"VCASNA\\", \\"VCASNB\\", \\"VCASNC\\", \\"VCASND\\", \\"VCASN2\\", \\"VCLIP\\"]; +array names0[7] = [\\"VCASND\\", \\"VCASN2\\", \\"VCASP\\", \\"VCLIP\\", \\"VCASNA\\", \\"VCASNB\\", \\"VCASNC\\"]; plot for [i=0:6] \\"$vmon_file_n\\" using 2:3 index i with l title names0[i+1]; -array names1[3] = [\\"IBIAS\\", \\"ITHR\\", \\"IDB\\"]; +array names1[3] = [\\"IBIAS\\", \\"IDB\\", \\"ITHR\\"]; plot for [i=0:2] \\"$imon_file_n\\" using 2:3 index i with l title names1[i+1]; -array names2[3] = [\\"VRESET\\", \\"VPH\\", \\"VPL\\"]; +array names2[3] = [\\"VPH\\", \\"VPL\\", \\"VRESET\\"]; plot for [i=0:2] \\"$other_file_n\\" using 2:3 index i with l title names2[i+1];" END_MESSAGE system $message_png; @@ -698,8 +698,9 @@ sub mimosis_dacscan_sf sub send_params_scurve { - my ($yi, $rowTrain) = @_; - my $frameWr = "START-" . $yi . "-" . $rowTrain . "-END"; + my ($state, $yi, $rowTrain, $xLow, $xHig, $region, $vcasn, $vphfine) = @_; + $vphfine = defined $vphfine ? $vphfine : 0; + my $frameWr = "START-" . $state . "-" . $yi . "-" . $rowTrain . "-" . $xLow . "-" . $xHig . "-" . $region . "-" . $vcasn . "-" . $vphfine . "-END"; my $pipeNameWr = "/tmp/scurveipipe"; my $fdPipeWr = POSIX::open($pipeNameWr, &POSIX::O_WRONLY); POSIX::write($fdPipeWr,$frameWr,length($frameWr)); @@ -708,6 +709,22 @@ sub send_params_scurve +sub kill_proc_by_pid_file +{ + my ($pidName) = @_; + + my $pidFile = POSIX::open($pidName, &POSIX::O_RDONLY) or die "hldprint already killed probably\n"; + my $buf; + my $bytes = POSIX::read($pidFile,$buf,10); + POSIX::close($pidFile); + + kill 15, $buf; + + unlink($pidName) or die "Can't delete $pidName: $!\n"; +} + + + sub await_ack { my $pipeNameRd = "/tmp/scurveapipe"; @@ -723,7 +740,6 @@ sub await_ack } } POSIX::close($fdPipeRd); - print "ACK received\n"; } @@ -755,7 +771,7 @@ sub mimosis_scan_region defined $fpga or die "Mimosis::mimosis_scan_region: Must provide $fpga."; defined $region or die "Mimosis::mimosis_scan_region: Must provide $region."; - my %collim = ( + my %colLim = ( 'A' => [ 0, 127 ], 'B' => [ 128, 511 ], 'C' => [ 512, 895 ], @@ -805,6 +821,7 @@ sub mimosis_scan_region $yOff+=$yTra ) { my $y = $yOff; + for ( ; $y < $yOff+$yTra && $y <= $yEnd; $y+=1 ) { @@ -821,33 +838,150 @@ sub mimosis_scan_region Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR unselect all pixels } - send_params_scurve($yOff, $yTra); + unless($pulseonly) + { + my $yTraSend = $yEnd-$yOff<$yTra ? $yEnd-$yOff : $yTra; + send_params_scurve("TAKEDATA", $yOff, $yTraSend, $colLim{$region}[0], $colLim{$region}[1], $region, 0); + await_ack(); + + my $setCnt = 0; + for my $set (reverse ($setSta .. $setEnd) ) + { + $setCnt = $setCnt + 1; + if( ($setCnt-1)%$setDiv != 0) { next; } + + send_params_scurve("NEXTVPH", 0, 0, 0, 0, 0, 0, $set); + await_ack(); + + my $pulseMsg = ($set << 24) + 0x00c00000; + trb_register_write_mem( $fpga, 0xa209, 0, [ $pulseMsg ], 1 ); usleep($slow); + # Mimosis::mimosis_register_write( $fpga, 0x0046, $set, $a ); usleep($setTime); + Mimosis::mimosis_register_write( $fpga, 0x0046, $set, $a ); + + if( $printset || $printall ) { printf("set: $set\n"); } + } + + Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow); + Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR set mask pulse + Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR set mask pulse + + trb_register_write_mem( $fpga, 0xa209, 0, [ 0x00400000 ], 1 ); usleep($slow); + send_params_scurve("WAITDAQ", 0, 0, 0, 0, 0, 0); + await_ack(); + trb_register_write_mem( $fpga, 0xa209, 0, [ 0x00000000 ], 1 ); usleep($slow); + } + } +} + + + +sub mimosis_scan_pixel +{ + my %params = @_; + my $fpga = $params{'fpga'}; + my $x = $params{'x'}; + my $y = $params{'y'}; + my $add = $params{'add'}; + my $pulseonly = $params{'pulseonly'}; + my $setSta = $params{'firstset'}; + my $setEnd = $params{'lastset'}; + my $setDiv = $params{'setdiv'}; + my $setTime = $params{'settime'}; + my $slow = $params{'slow'}; + my $a = $params{'a'}; + my $printset = $params{'printset'}; + my $printall = $params{'printall'}; + my $analogAlimA = $params{'analogAlimA'}; + my $analogAlimB = $params{'analogAlimB'}; + my $analogDlimA = $params{'analogDlimA'}; + my $analogDlimB = $params{'analogDlimB'}; + my $modpulse = $params{'modpulse'}; + + defined $fpga or die "Mimosis::mimosis_scan_region: Must provide --fpga."; + defined $x or die "Mimosis::mimosis_scan_region: Must provide --x."; + defined $y or die "Mimosis::mimosis_scan_region: Must provide --y."; + + $setSta = defined $setSta ? $setSta : 0x0; + $setEnd = defined $setEnd ? $setEnd : 0xff; + $setDiv = defined $setDiv ? $setDiv : 1; + $setTime = defined $setTime ? $setTime : 1000; + $slow = defined $slow ? $slow : 10000; + $a = defined $a ? $a : 0; + $printset = defined $printset ? 1 : 0; + $printall = defined $printall ? 1 : 0; + $pixpulseA_A = defined $pixpulseA_A ? $pixpulseA_A : 25; + $pixpulseA_B = defined $pixpulseA_B ? $pixpulseA_B : 75; + $pixpulseD_A = defined $pixpulseD_A ? $pixpulseD_A : 0; + $pixpulseD_B = defined $pixpulseD_B ? $pixpulseD_B : 0; + $modpulse = defined $modpulse ? $modpulse : 3; + + Mimosis::mimosis_register_write( $fpga, 0x0020, 0x40, $a ); usleep($slow); #EN_PIXELMASK to 0 for pulse + + unless(defined $add) + { + Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow); #INSTR select all pixels + Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR reset mask + Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR unselect all pixels + } + + Mimosis::mimosis_register_write( $fpga, 0x0066, $pixpulseA_A & 0x00ff , $a ); usleep($slow); #analog pulsing pulse A, limit A + Mimosis::mimosis_register_write( $fpga, 0x0166, ( $pixpulseA_A & 0xff00 ) >> 8, $a ); usleep($slow); + Mimosis::mimosis_register_write( $fpga, 0x0076, $pixpulseA_B & 0x00ff , $a ); usleep($slow); # analog pulsing pulse A, limit B + Mimosis::mimosis_register_write( $fpga, 0x0176, ( $pixpulseA_B & 0xff00 ) >> 8, $a ); usleep($slow); + Mimosis::mimosis_register_write( $fpga, 0x0067, $pixpulseD_A & 0x00ff , $a ); usleep($slow); # analog pulsing pulse D, limit A + Mimosis::mimosis_register_write( $fpga, 0x0167, ( $pixpulseD_A & 0xff00 ) >> 8, $a ); usleep($slow); + Mimosis::mimosis_register_write( $fpga, 0x0077, $pixpulseD_B & 0x00ff , $a ); usleep($slow); # analog pulsing pulse D, limit B + Mimosis::mimosis_register_write( $fpga, 0x0177, ( $pixpulseD_B & 0xff00 ) >> 8, $a ); usleep($slow); + Mimosis::mimosis_register_write( $fpga, 0x007d, $modpulse, $a ); usleep($slow); #set modpulse. possible values: 1f/1, 1f/2, 1f/4, 1f/8, 1f/16, 1f/32, 1f/64, 1f/128 + + { + my $regAdd = $x/16; #region address + my $regBit = ($x/2)%8; #double column in region + my $regWord = $regAdd << 8; + if (($x%2 == 1)) { $regWord += 0x82; } + elsif (($x%2 == 0)) { $regWord += 0x81; } + Mimosis::mimosis_register_write( $fpga, $regWord, ( 0x1 << $regBit ), $a ); usleep($slow); + } + + { + my $regAdd = $y/8; + my $regBit = $y%8; + my $regWord = ( $regAdd << 8 ) + 0x84; + Mimosis::mimosis_register_write( $fpga, $regWord, ( 0x1 << $regBit ), $a ); usleep($slow); + } + + Mimosis::mimosis_instr_write( $fpga, 0x05 ); usleep($slow); #INSTR set mask pulse + Mimosis::mimosis_register_write( $fpga, 0x4087, 0x0, $a ); usleep($slow); #unselect all pixels (register wise) + + unless($pulseonly) + { + send_params_scurve("TAKEDATA", $y, 1, $x, $x+1, 0, 0); await_ack(); - # unless($pulseonly) - # { - # # my $setCnt = 0; - # for my $set (reverse ($setSta .. $setEnd) ) - # { - # # $setCnt = $setCnt + 1; - # # if( ($setCnt-1)%$setDiv != 0) { next; } - - # my $pulseMsg = ($set << 24) + 0x00c00000; - # trb_register_write_mem( $fpga, 0xa209, 0, [ $pulseMsg ], 1 ); usleep($slow); - # Mimosis::mimosis_register_write( $fpga, 0x0046, $set, $a ); usleep($setTime); - - # if( $printset || $printall ) { printf("set: $set\n"); } - # } - - # Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow); - # Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR set mask pulse - # Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR set mask pulse - # } - # indicate end of current rows - if($y == $yEnd) { - trb_register_write_mem( $fpga, 0xa209, 0, [ 0x00800000 ], 1 ); usleep($slow); - print "check\n"; + my $setCnt = 0; + for my $set (reverse ($setSta .. $setEnd) ) + { + $setCnt = $setCnt + 1; + if( ($setCnt-1)%$setDiv != 0) { next; } + + my $pulseMsg = ($set << 24) + 0x00c00000; + trb_register_write_mem( $fpga, 0xa209, 0, [ $pulseMsg ], 1 ); usleep($slow); + Mimosis::mimosis_register_write( $fpga, 0x0046, $set, $a ); usleep($setTime); + + if( $printset || $printall ) { printf("set: $set\n"); } } + + unless(defined $add) + { + Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow); #INSTR select all pixels + Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR reset mask + Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR unselect all pixels + } + + trb_register_write_mem( $fpga, 0xa209, 0, [ 0x00400000 ], 1 ); usleep($slow); + send_params_scurve("WAITDAQ", 0, 0, 0, 0, 0, 0); + await_ack(); + trb_register_write_mem( $fpga, 0xa209, 0, [ 0x00000000 ], 1 ); usleep($slow); } } @@ -870,7 +1004,6 @@ sub mimosis_mask my $square = $params{'square'}; my $printall = $params{'printall'}; - defined $fpga or die "Mimosis::mimosis_mask: Must provide $fpga."; $slow = defined $slow ? $slow : 10000; @@ -1131,6 +1264,9 @@ sub help_scurves { usage: mimosis [GLOBAL OPTIONS] scurves [COMMAND OPTIONS] +The data will be priveded in a folder in the current directory with the time started as name. +The data is sorted by the VCASN, if --vcasn is not provided, or by + GLOBAL OPTIONS are: -f, --fpga=HEX -> Hex address of the FPGA. Defaults to 0xa000. -s, --slow=NUM -> Execute I2C commands with a pause of NUM microseconds in between. @@ -1138,33 +1274,35 @@ GLOBAL OPTIONS are: -h, --help -> Print this or specific help. COMMAND OPTIONS are: - --colpix X -> x value of a single pixel to pulse. - --rowpix Y -> y value of a single pixel to pulse. - --pulseonly -> if set, mark specified pixels only for pulsing and dont do a scan. - -r, --region A|B|C|D -> Region to pulse. + -r, --region A|B|C|D -> Region to pulse. Most be provided. + --firstrow Y -> First row to scan. --lastrow Y -> Last row to scan. --rowdiv ROWDIV -> Just pulse every ROWDIV row. - --firstcol X -> First column to scan. - --lastcol X -> Last column to scan. - --coldiv COLDIV -> Just pulse every COLDIV column. + --nrows N -> How many rows to pulse at once. Default depends on region. For A,D: N = 4, for B,D: N = 2. + --firstset S -> Start s-curve scan at VPH_FINE=S --lastset S -> Stop s-curve scan at VPH_FINE=S --setdiv SETDIV -> Just use every SETDIV value of VPH_FINE. --settime T -> Take data for each VPH_FINE for T milliseconds. - --vcasn A|B|C|D -> VACSN to vary. Default is the same as specified with --region. + --firstvcasn V -> Start s-curve taking with VCASN=V. --lastvcasn V -> Stop s-curve taking at VCASN=V. --vcasndiv V -> Take s-curve every V steps. - --nrows N -> How many rows to pulse at once. Default depends on region. For A,D: N = 4, for B,D: N = 2. + + --pulseonly -> If set, mark specified pixels only for pulsing and dont do a scan. + --modpulse MOD -> Exponent of the power of two, which gives the divider of the frames to pulse. + + --printdac -> Print the current setting of the DAC. --printset -> Print the current VPH_FINE setting. --printrow -> Print current row to set. -p, --printall -> Print all informations available. + --analogAlimA -> Not implemented yet. --analogAlimB -> Not implemented yet. --analogDlimA -> Not implemented yet. --analogDlimB -> Not implemented yet. - --modpulse MOD -> Exponent of the power of two, which gives the divider of the frames to pulse. + -h, --help -> Print this help. END_MESSAGE diff --git a/scripts/cli/mimosis b/scripts/cli/mimosis index 2645c2f..c7ef7f5 100755 --- a/scripts/cli/mimosis +++ b/scripts/cli/mimosis @@ -9,7 +9,10 @@ use Data::Dump qw(dump); use File::Copy; -$SIG{INT} = sub { die "\nAbort.\n" }; +$SIG{INT} = sub { + Mimosis::kill_proc_by_pid_file("/tmp/hldprint-pid"); + die "\nAbort.\n" +}; #global @@ -22,10 +25,10 @@ my ( $printall_load, $printwrong_load ); my ( $ikf, $name, $imagefileonly, $cleanup_dacscan, $printall_dacscan ); #scurves -my ( $colpix_scurves, $rowpix_scurves, $pulseOnlySc, $regionSc, +my ( $pulseOnlySc, $regionSc, $xSc, $ySc, $addSc, $resetSc, $yStaSc, $yEndSc, $yStepSc, $setStaSc, $setEndSc, - $setStepSc, $vcasnSc, $vcasnStaSc, $vcasnEndSc, + $setStepSc, $vcasnSc, $vcasnStaSc, $vcasnEndSc, $vcasnStepSc, $setTimeSc, $yTraSc, $printSetSc, $printDacSc, $printRowSc, $printAllSc, $analogAlimASc, $analogAlimBSc, $analogDlimASc, $analogDlimBSc, $modpulseSc ); @@ -71,10 +74,12 @@ my $res = GetOptions ( }, scurves => { options => { - "colpix=s" => \$colpix_scurves, - "rowpix=s" => \$rowpix_scurves, "pulseonly" => \$pulseOnlySc, "region|r=s" => \$regionSc, + "x=s" => \$xSc, + "y=s" => \$ySc, + "add" => \$addSc, + "reset" => \$resetSc, "firstrow=s" => \$yStaSc, "lastrow=s" => \$yEndSc, "rowdiv=s" => \$yStepSc, @@ -257,14 +262,16 @@ elsif( $res->{subcommand}[0] eq 'scurves' ) if( defined $regionSc ) { - $vcasnSc = defined $vcasnSc ? $vcasnSc : $regionSc; - my $vcasnStr = $regCharToStr{$vcasnSc}; + my $vcasnStr = $regCharToStr{$regionSc}; my $vcasnVal = Mimosis::mimosis_register_read( $fpga, $dacs{$vcasnStr}, $a ); $vcasnStaSc = defined $vcasnStaSc ? $vcasnStaSc : $vcasnVal; $vcasnEndSc = defined $vcasnEndSc ? $vcasnEndSc : $vcasnStaSc; $vcasnStepSc = defined $vcasnStepSc ? $vcasnStepSc : 1; - # system("/d/jspc37/mimosis/analysis/mbs/dabc/build/bin/hldprint mbss://localhost:36789 &"); + unless($pulseOnlySc) + { + system("/d/jspc37/mimosis/analysis/mbs/dabc/build/bin/hldprint mbss://localhost:36789 &"); + } for ( my $vcasnSet = $vcasnStaSc; $vcasnSet <= $vcasnEndSc; @@ -279,6 +286,7 @@ elsif( $res->{subcommand}[0] eq 'scurves' ) slow => $slow, a => $a, pulseonly => $pulseOnlySc, + add => $addSc, region => $regionSc, firstrow => $yStaSc, lastrow => $yEndSc, @@ -297,11 +305,82 @@ elsif( $res->{subcommand}[0] eq 'scurves' ) analogDlimB => $analogDlimBSc, modpulse => $modpulseSc, ); - trb_register_write_mem( $fpga, 0xa209, 0, [ 0x00400000 + ($vcasnSet & 0xFF) ], 1 ); usleep($slow); + + unless($pulseOnlySc) + { + Mimosis::send_params_scurve("FIT", 0,0,0,0,$regCharToStr{$regionSc},$vcasnSet); + Mimosis::await_ack(); + } } - trb_register_write_mem( $fpga, 0xa209, 0, [ 0x00300000 ], 1 ); usleep($s); + unless($pulseOnlySc) + { + Mimosis::send_params_scurve("DONE", 0,0,0,0,0,0); + Mimosis::await_ack(); + Mimosis::kill_proc_by_pid_file("/tmp/hldprint-pid"); + } exit 0; + + } elsif (defined $xSc && defined $ySc && defined $vcasnSc) { + + my $vcasnVal = Mimosis::mimosis_register_read( $fpga, $dacs{$vcasnSc}, $a ); + $vcasnStaSc = defined $vcasnStaSc ? $vcasnStaSc : $vcasnVal; + $vcasnEndSc = defined $vcasnEndSc ? $vcasnEndSc : $vcasnStaSc; + $vcasnStepSc = defined $vcasnStepSc ? $vcasnStepSc : 1; + + unless($pulseOnlySc) + { + system("/d/jspc37/mimosis/analysis/mbs/dabc/build/bin/hldprint mbss://localhost:36789 &"); + } + + for ( my $vcasnSet = $vcasnStaSc; + $vcasnSet <= $vcasnEndSc; + $vcasnSet += $vcasnStepSc ) { + #set vcasn + Mimosis::mimosis_register_write( $fpga, $dacs{$vcasnSc}, $vcasnSet, $a ); usleep($slow); + + if( $printDacSc || $printAllSc ) { printf("dac: $vcasnSet\n"); } + + Mimosis::mimosis_scan_pixel( + fpga => $fpga, + slow => $slow, + a => $a, + x => $xSc, + y => $ySc, + pulseonly => $pulseOnlySc, + firstset => $setStaSc, + lastset => $setEndSc, + setdiv => $setStepSc, + settime => $setTimeSc, + printset => $printSetSc, + printrow => $printRowSc, + printall => $printAllSc, + analogAlimA => $analogAlimASc, + analogAlimB => $analogAlimBSc, + analogDlimA => $analogDlimASc, + analogDlimB => $analogDlimBSc, + modpulse => $modpulseSc, + ); + + unless($pulseOnlySc) + { + Mimosis::send_params_scurve("FIT", 0,0,0,0,$vcasnSc,$vcasnSet); + Mimosis::await_ack(); + } + } + + unless($pulseOnlySc) + { + Mimosis::send_params_scurve("DONE", 0,0,0,0,0,0); + Mimosis::await_ack(); + Mimosis::kill_proc_by_pid_file("/tmp/hldprint-pid"); + } + exit 0; + + } else { + + print "Mimosis::mimosis_scan_region: Must provide --region A|B|C|D or --x X and --y Y.\n"; + exit 1; } } diff --git a/scripts/pulse/curves b/scripts/legacy/curves.py similarity index 100% rename from scripts/pulse/curves rename to scripts/legacy/curves.py diff --git a/scripts/pulse/fpn b/scripts/legacy/fpn.py similarity index 100% rename from scripts/pulse/fpn rename to scripts/legacy/fpn.py diff --git a/scripts/pulse/fit-raw.py b/scripts/pulse/fit-raw.py new file mode 100644 index 0000000..535e4ab --- /dev/null +++ b/scripts/pulse/fit-raw.py @@ -0,0 +1,74 @@ +import numpy as np +import matplotlib.pyplot as plt +import pandas as pd +from scipy.optimize import curve_fit +from scipy import special +import sys + + + +def error_func(x, mean, sig, ampl): + return ampl*(1 + special.erf((x-mean)/(np.sqrt(2*sig)))) + + + +def gauss_func(x, mean, sig, ampl): + return ampl*np.exp(-1*(((x-mean)**2)/(2*sig**2))) + + + +f = sys.argv[1] +df = pd.read_csv(f, delimiter='\t',header=None) + +x = np.linspace(0, 255, num=255) + +fpn = np.zeros(255) + +for i in range(len(df.loc[:])): + + xS = [] + for j in range(255): + if df.loc[i][j] != 0: + xS.append(j) + + print(xS) + + if sum(df.loc[i][0:255]) != 0: + + hist = df.loc[i][0:255] + + guess = [130, 25, 400] + params = [] + try: + params, tmp = curve_fit(error_func, x, hist) + print(params) + except RuntimeError: + continue + + mean = int(round(params[0])) + if mean < 255 and mean >= 0: + fpn[mean] += 1 + + plt.bar(x,hist,width=1) + plt.plot(x,error_func(x,params[0],params[1],params[2]),color="red") + + plt.savefig("raw-fit-" + str(i) + ".png") + plt.clf() + plt.cla() + plt.close() + + +# plot fpn +params = [] +#guess = [75, 25, 10] +guess = [10, 10, 10] +params, tmp = curve_fit(gauss_func, x, fpn,guess) +print("\n\nFPN: " + str(params[1]) + "\n\n") +print(params) +print() +print() + +plt.bar(x,fpn,width=1) +plt.plot(x,gauss_func(x,params[0],params[1],params[2]),color="red") +plt.savefig("fpn.png") + diff --git a/scripts/pulse/plot-raw.py b/scripts/pulse/plot-raw.py new file mode 100755 index 0000000..82fc7e5 --- /dev/null +++ b/scripts/pulse/plot-raw.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 + +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import sys + +f = sys.argv[1] +df = pd.read_csv(f, delimiter='\t',header=None) + +x = np.linspace(0, 255, num=255) + +for i in range(len(df.loc[:])): + if sum(df.loc[i][0:255]) != 0: + hist = df.loc[i][0:255] + plt.bar(x,hist,width=1) + plt.savefig("fpn-" + str(i) + ".png") + plt.clf() + plt.cla() + plt.close() diff --git a/scripts/pulse/plot-root.py b/scripts/pulse/plot-root.py new file mode 100755 index 0000000..70b658d --- /dev/null +++ b/scripts/pulse/plot-root.py @@ -0,0 +1,83 @@ +import matplotlib.pylab as plt +import numpy as np +import os +import re +import uproot +import sys + + +allData = np.zeros(1024*504*256) + +xLow = 512 +xHig = 890 +yLow = 100 +yHig = 400 + + + +def dir_to_scurves(dataDir): + + p = re.compile('VPH_fine_(.*)_VTH') + vphArr = [] + + for f in os.listdir(dataDir): + + print(f) + vph = int(p.findall(f)[0]) + if vph not in vphArr: + vphArr.append(vph) + + if f.endswith(".root"): + + fullName = os.path.join(dataDir, f) + infile = uproot.open(fullName) + matrix = infile['h2_integrated_frame_matrix;1'].values() + + for x in range(len(matrix)): + if x > xLow and x < xHig: + for y in range(len(matrix[x])): + if y > yLow and y < yHig: + allData[(y*1024+x)*256+vph] = matrix[x][y] + + # plt.imshow(matrix, interpolation='none') + # plt.savefig(os.path.basename(fullName) + ".png") + + vphArr.sort() + return vphArr + + + +#dataDir = sys.argv[1] + +#dataDir = '/d/pepper/maps/ben/BackupMIMOSIS1SCurves/MIMOSIS1_DataConverter_unix/outputData/run_9412004/' +dataDir = '/d/pepper/maps/ben/BackupMIMOSIS1SCurves/MIMOSIS1_DataConverter_unix/outputData/run_413137/' + +vphfine = dir_to_scurves(dataDir) + + +for x in range(1024): + if x > xLow and x < xHig: + for y in range(504): + if y > yLow and y < yHig: + + arr = [] + s = 0 + for i in vphfine: + val = allData[(y*1024+x)*256+i] + arr.append(val) + s += val + + if s < 50: + continue + + plt.bar(vphfine,arr,width=1) + plt.savefig("raw-" + str(x) + "-" + str(y) + ".png") + plt.clf() + plt.cla() + plt.close() + + + +# fileName = '/d/pepper/maps/ben/BackupMIMOSIS1SCurves/MIMOSIS1_DataConverter_unix/outputData/run_9412004/mimosis1_run9412004_VBB_3000_VPH_fine_65_VTH_106_noPLL.root' +# print(infile.classnames()) +# events = infile['h2_integrated_frame_matrix;1'].all_members diff --git a/scripts/pulse/requirements.txt b/scripts/pulse/requirements.txt new file mode 100644 index 0000000..b56483f --- /dev/null +++ b/scripts/pulse/requirements.txt @@ -0,0 +1,22 @@ +awkward==2.6.2 +awkward-cpp==30 +contourpy==1.2.0 +cramjam==2.8.3 +cycler==0.12.1 +fonttools==4.50.0 +fsspec==2024.3.1 +importlib_metadata==7.1.0 +kiwisolver==1.4.5 +matplotlib==3.8.3 +numpy==1.26.4 +packaging==24.0 +pandas==2.2.1 +pillow==10.2.0 +pyparsing==3.1.2 +python-dateutil==2.9.0.post0 +pytz==2024.1 +scipy==1.12.0 +six==1.16.0 +tzdata==2024.1 +uproot==5.3.2 +zipp==3.18.1 diff --git a/scripts/DACscan.py b/scripts/qa/DACscan.py similarity index 100% rename from scripts/DACscan.py rename to scripts/qa/DACscan.py diff --git a/scripts/test-mask.sh b/scripts/test-mask.sh deleted file mode 100755 index 4e0042f..0000000 --- a/scripts/test-mask.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -fpga=0xa100 - -mimosis -f "${fpga}" -a reg 0x0020 0x42 -mimosis -f "${fpga}" -a instr 0x3f -mimosis -f "${fpga}" -a instr 0x04 -mimosis -f "${fpga}" -a instr 0x3e -mimosis -f "${fpga}" -a reg 0x0066 0x19 #analog pulsing pulse A, limit A -mimosis -f "${fpga}" -a reg 0x0166 0x00 -mimosis -f "${fpga}" -a reg 0x0076 0x4b # analog pulsing pulse A, limit B -mimosis -f "${fpga}" -a reg 0x0176 0x00 -mimosis -f "${fpga}" -a reg 0x0067 0x00 # analog pulsing pulse D, limit A -mimosis -f "${fpga}" -a reg 0x0167 0x00 -mimosis -f "${fpga}" -a reg 0x0077 0x00 # analog pulsing pulse D, limit B -mimosis -f "${fpga}" -a reg 0x0177 0x00 -mimosis -f "${fpga}" -a reg 0x007d 0x03 #set modpulse. possible values: 1f/1, 1f/2, 1f/4, 1f/8, 1f/16, 1f/32, 1f/64, 1f/128 -mimosis -f "${fpga}" -a instr 0x27 #select all columns -mimosis -f "${fpga}" -a reg 0x0584 0xff #select some rows -mimosis -f "${fpga}" -a instr 0x05 #INSTR set mask pulse -mimosis -f "${fpga}" -a instr 0x3e #INSTR unselect all pixels -mimosis -f "${fpga}" -a reg 0x4087 0x0 #unselect all pixels (register wise) - -# mimosis -f "${fpga}" -a instr 0x3e #INSTR unselect all pixels -# mimosis -f "${fpga}" -a reg 0x4087 0x0 #unselect all pixels (register wise) -# mimosis -f "${fpga}" -a instr 0x27 #select all columns -# mimosis -f "${fpga}" -a reg 0x0584 0xff #select some rows -# mimosis -f "${fpga}" -a instr 0x05 #INSTR set mask pulse -# mimosis -f "${fpga}" -a instr 0x3e #INSTR unselect all pixels -# mimosis -f "${fpga}" -a reg 0x4087 0x0 #unselect all pixels (register wise) diff --git a/trbnet/start.sh b/trbnet/start.sh index f628a46..efad7cd 100755 --- a/trbnet/start.sh +++ b/trbnet/start.sh @@ -29,5 +29,3 @@ trbcmd w 0xfe82 0xde05 0x100 #Mimosis reset echo "done" trbcmd i 0xffff - -bash -i